Rumah  >  Soal Jawab  >  teks badan

AddEmbeddedImage PHPMailer memberi saya e-mel kosong

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...

P粉702946921P粉702946921179 hari yang lalu264

membalas semua(1)saya akan balas

  • P粉164942791

    P粉1649427912024-03-29 10:12:27

    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 MailerisSMTP() 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 设置来自

    0
  • Batalbalas