Saya menghadapi masalah mendapatkan imej sebaris menggunakan PHPMailer. Tanpa baris berikut (iaitu jika saya mengulasnya)
$success = $mail->AddEmbeddedImage($ImagePath, $ImageCID, $ImageName, $ImageEncoding, $ImageType, $ImageDisposition);
Ia berfungsi dengan baik. Jika saya menambahnya kembali, saya mendapat e-mel kosong (mencuba Outlook dan Gmail). Saya menambah "$success=" untuk memastikan ia berfungsi dan ia berfungsi.
<?php $BaseURL = "../other/"; require_once($BaseURL . 'PHPMailer-master/src/PHPMailerAutoload.php'); require_once($BaseURL . 'PHPMailer-master/src/PHPMailer.php'); require_once($BaseURL . 'PHPMailer-master/src/SMTP.php'); require_once($BaseURL . 'PHPMailer-master/src/Exception.php'); use PHPMailer\PHPMailer\PHPMailer; error_reporting(E_ALL); ini_set('display_errors', 1); // Test data begin $encoding =""; // Also tried "base64" $type=""; // Also tried "application/octet-stream" and "image/jpeg" $disposition = "inline"; $ImageArray = array("../images/Logo.jpg|Logo|Logo.jpg|" . $encoding . "|" . $type . "|" . $disposition, "../images/XX1.jpg|XX1|XX1.jpg|" . $encoding . "|" . $type . "|" . $disposition); $Body = '<html><body style="font-family:Verdana, Verdana, Geneva, sans-serif; font-size:12px; color:#666666;">'; $Body .= 'This is a test from SendEmail and contains default text in the message body.'; $Body .= 'And an image... <img src="cid:Logo">'; $Body .= '<br><br></body></html>'; $SendParams = array("SendTo"=>array("xx@gmail.com, XX", "xx@example.com, XX/example"), "Body"=>$Body, "Subject"=>"This is the default Subject", "Images"=>$ImageArray ); SendEmail($SendParams); // End Test data and calls function SendEmail($params) { $mail = new PHPMailer; $mail->IsHTML(true); $mail->isSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Host = "smtp.gmail.com"; $mail->Mailer = "smtp"; $mail->Port = 587; //use port 465 when using SMPTSecure = 'ssl' $mail->Username = "exampele@gmail.com"; $mail->Password = "xxxxxxxxxxxxxxxxxxx"; // $mail->SMTPDebug = SMTP::DEBUG_SERVER; if (!isset($params)) { die("Kaput!"); } $SendTo = isset($params["SendTo"]) ? $params["SendTo"] : array("xx@example.com, XX/example"); $Body = isset($params["Body"]) ? $params["Body"] : "No Message Body - may be a Test!"; $Subject = isset($params["Subject"]) ? $params["Subject"] : "No Message Subject - may be a Test!"; foreach($SendTo as $recipient) { $recipient_array = explode(",", $recipient); $SendEmail = $recipient_array[0]; $SendName = $recipient_array[1]; $mail->AddAddress($SendEmail, $SendName); } if (isset($params["Images"])) { foreach($params["Images"] as $ImageData) { $ImageData_array = explode("|", $ImageData); $ImagePath = $ImageData_array[0]; $ImageCID = $ImageData_array[1]; $ImageName = $ImageData_array[2]; $ImageEncoding = $ImageData_array[3]; $ImageType = $ImageData_array[4]; $ImageDisposition = $ImageData_array[5]; // Below is the line causing the problem $success = $mail->AddEmbeddedImage($ImagePath, $ImageCID, $ImageName, $ImageEncoding, $ImageType, $ImageDisposition); // The below prints expected values for the variables ("Failed!" does not print) if ($success) echo "<br><br>Image: " . $ImagePath . ", " . $ImageCID . ", " . $ImageName . ", " . $ImageEncoding . ", " . $ImageType . ", " . $ImageDisposition; else echo "Failed!"; } } $mail->Body = $Body; $mail->Subject = $Subject; $mail->SetFrom('admin@example.com', 'example Admin'); $mail->addReplyTo('admin@example.com'); if (!$mail->send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; } } ?>
Ini adalah output skrin:
Gambar: ../images/Logo.jpg,Logo,Logo.jpg,,,sebaris
Gambar: ../podbanks/images/XX.jpg, XX, XX.jpg,,, sebaris
Mel: Objek(PHPMailerPHPMailerPHPMailer)#1 (71) { ["Keutamaan"]=> NULL ["CharSet"]=> rentetan(10) "iso-8859-1" ["ContentType"]=> "text/html" ["Pengekodan"]=> rentetan(4) "8bit" ["ErrorInfo"]=> "" ["Pengirim"]=> Rentetan(18) "admin@example.com" ["Nama Pengirim"]=> "Contoh Pentadbir"["Penghantar"]=> rentetan(18)"admin@example.com" ["Subjek"]=> rentetan(27) "Ini ialah tema lalai" ["Badan"]=> string(215) "Ini adalah ujian daripada SendEmail yang mengandungi teks lalai dalam badan mesej.Terdapat juga imej..." ["AltBody"]=> rentetan(0) "" ["Ical"]=> rentetan(0) "" ["MIMEBody":protected]=> ["MIMEHeader":protected]=> rentetan(0) "" ["mailHeader":protected]=> rentetan(0) "" ["WordWrap"]=> ["Sendmail"]=> string(18) "/usr/sbin/sendmail" ["UseSendmailOptions"]=> bool(true) ["ConfirmReadingTo"]=> "" ["Nama hos"]=> rentetan(0) "" ["ID Mesej"]=> ["MessageDate"]=> String(0) "" ["Host"]=> ["Port"]=>(587) ["Helo"]=> "tls" ["SMTPautoTLS"]=> bool(true) ["SMTPAuth"]=> ["SMTPOptions"]=> tatasusunan(0) { } ["Nama Pengguna"]=> "examplemail@gmail.com" ["kata laluan"]=> ["AuthType"]=> String(0) "" ["oauth":protected]=> int(300) ["SMTPDebug"]=> ["SMTPKeepAlive"]=> bool(false) ["SingleTo"]=> ["SingleToArray":protected]=> tatasusunan(0) { } ["do_verp"]=> ["AllowEmpty"]=> bool(false) ["DKIM_selector"]=> ["DKIM_identity"]=> rentetan(0) "" ["DKIM_passphrase"]=> ["DKIM_domain"]=> rentetan(0) "" ["DKIM_private"]=> ["DKIM_private_string"]=> string(0) "" ["action_function"]=> "" ["XMailer"]=> String(0) "" ["smtp":protected]=> ["to":protected]=> tatasusunan(2) { [0]=> "aa@gmail.com" 1=> rentetan(10) "AA" } 1=> Rentetan(15) "aa@contoh.com" 1=> Rentetan(13) "A/contoh" } } ["cc":protected]=> tatasusunan(0) { } ["bcc":protected]=> ["ReplyTo":protected]=> tatasusunan(1) { ["admin@example.com"]=> [0]=> Rentetan(18) "admin@example.com" 1=> ["all_recipients":protected]=> tatasusunan(2) { ["aa@gmail.com"]=> bool(true) ["ag@example.com"]=> ["RecipientsQueue":protected]=> ["ReplyToQueue":protected]=> tatasusunan(0) { } ["attachment":protected]=> Tatasusunan(2) { [0]=> "../images/clients/Logo.jpg" 1=> rentetan(13) "Logo.jpg" 2=> Rentetan(13) "Logo.jpg" [3]=> Rentetan(0) "" [4]=> [5]=> bool(false) [6]=>1=> tatasusunan(8) { [0]=> "XX.jpg" 2=> rentetan(16) "XX.jpg" [3]=> "imej/jpeg" [5]=> bool(false) [6]=> rentetan(3) "XX" } } ["CustomHeader":protected]=> ["lastMessageID":protected]=> ["message_type":protected]=> rentetan(0) "" ["boundary":protected]=> tatasusunan(0) { } ["Bahasa": dilindungi]=> ["error_count":protected]=> int(0) ["sign_cert_file":protected]=> String(0) "" ["sign_key_file":protected]=> ["sign_extracerts_file": dilindungi] => ["tanda_kunci_laluan": dilindungi] = > rentetan(0) "" ["pengecualian": dilindungi] = > bool(false) ["uniqueid":protected]=> string(0) "" } Mesej telah dihantar!
Saya juga tidak dapat mencari sebarang dokumentasi yang komprehensif - malah pada GitHub: 3731. Yang paling dekat saya dapat adalah ini. Tetapi saya masih tidak faham apa sebenarnya yang dilakukan oleh parameter ketiga. Adakah saya mahu mengatasi nama itu? kenapa? Pengekodan apakah yang perlu saya gunakan (saya cuba Base64 dan biarkan kedua-duanya kosong)? Apakah pilihan yang wujud selain pelupusan "sebaris"? Tunggu...
Pertama sekali, nampaknya anda menggunakan versi lama PHPMailer kerana anda merujuk fail (pemuat auto) yang tidak menjadi sebahagian daripada perpustakaan selama bertahun-tahun, jadi sila kemas kini.
Kod anda kelihatan seperti ia berdasarkan contoh yang sangat lama. Anda tidak sepatutnya menyediakannya sendiri
Mailer
–isSMTP()
akan melakukannya untuk anda.Jika fail pada cakera mempunyai nama lain yang anda tidak mahu dedahkan kepada penerima, anda mungkin perlu mengatasi nama itu, contohnya anda mungkin memilikinya secara setempat
logo-123456.png
,并希望将其附加为logo.png
.Pengekodan hampir selalu perlu
base64
kerana imej cenderung kepada binari dan oleh itu tidak selamat e-mel, jadi biarkan ia sebagai lalai.Jenis MIME harus sepadan dengan sambungan fail, jadi anda sepatutnya boleh mengabaikan ini juga (PHPMailer akan menetapkannya untuk anda) melainkan anda mempunyai sebab yang sangat khusus untuk menetapkan jenis MIME yang tidak sepadan dengan kandungan anda.
Pengepala nofollow noreferrer">RFC2183
$disposition
设置来自