Maison  >  Questions et réponses  >  le corps du texte

AddEmbeddedImage de PHPMailer me donne un e-mail vide

J'ai du mal à obtenir des images en ligne avec PHPMailer. Sans la ligne suivante (c'est-à-dire si je la commente)

$success = $mail->AddEmbeddedImage($ImagePath, $ImageCID, $ImageName, $ImageEncoding, $ImageType, $ImageDisposition);

Ça fonctionne très bien. Si je le rajoute, je reçois un e-mail vide (j'ai essayé Outlook et Gmail). J'ai ajouté "$success=" pour m'assurer que cela fonctionnait et c'est ce qui s'est produit.

<?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!";
    }
}
?>

Voici la sortie d'écran :

Photos : ../images/Logo.jpg,Logo,Logo.jpg,,,inline

Photos : ../podbanks/images/XX.jpg, XX, XX.jpg,,, inline


Mail : Objet(PHPMailerPHPMailerPHPMailer)#1 (71) { ["Priorité"]=> NULL ["CharSet"]=> chaîne(10) "iso-8859-1" ["ContentType"]=> "text/html" ["Encodage"]=> chaîne(4) "8bit" ["ErrorInfo"]=> "" ["Expéditeur"]=> Chaîne(18) "admin@example.com" ["Nom de l'expéditeur"]=> "Exemple d'administrateur"["Expéditeur"]=> string(18)"admin@example.com" ["Sujet"]=> string(27) "Ceci est le thème par défaut" ["Corps"]=> string(215) "Ceci est un test de SendEmail contenant le texte par défaut dans le corps du message.Il y a aussi une image..." ["AltBody"]=> string(0) "" ["Ical"]=> chaîne(0) "" ["MIMEBody":protégé]=> ["MIMEHeader":protected]=> string(0) "" ["mailHeader":protected]=> string(0) "" ["WordWrap"]=> int(0) ["Mailer"]=> ["Sendmail"]=> chaîne(18) "/usr/sbin/sendmail" ["UseSendmailOptions"]=> bool(true) ["ConfirmReadingTo"]=> "" ["Nom d'hôte"]=> chaîne(0) "" ["ID message"]=> ["MessageDate"]=> Chaîne(0) "" ["Hôte"]=> Chaîne(14) "smtp.gmail.com" ["Port"]=> int(587) ["Helo"]=> chaîne(0) "" ["SMTPSecure"]=> "tls" ["SMTPAutoTLS"]=> bool(vrai) ["SMTPAuth"]=> ["Options SMTP"]=> tableau(0) { } ["Nom d'utilisateur"]=> "exemplemail@gmail.com" ["mot de passe"]=> chaîne (16) "shotlzacfvdubehm" ["AuthType"]=> String(0) "" ["oauth":protected]=> int(300) ["SMTPDebug"]=> int(0) ["Debugoutput"]=> ["SMTPKeepAlive"]=> bool(faux) ["SingleTo"]=> ["SingleToArray":protected]=> array(0) { } ["do_verp"]=> ["AllowEmpty"]=> bool(false) ["DKIM_selector"]=> ["DKIM_identity"]=> chaîne(0) "" ["DKIM_passphrase"]=> ["DKIM_domain"]=> chaîne(0) "" ["DKIM_private"]=> ["DKIM_private_string"]=> chaîne(0) "" ["action_function"]=> "" ["XMailer"]=> Chaîne(0) "" ["smtp": protégé]=> ["à": protégé]=> tableau(2) { [0]=> tableau(2) { [0]=> "aa@gmail.com" 1=> chaîne(10) "AA" } 1=> tableau(2) { [0]=> Chaîne(15) "aa@exemple.com" 1=> Chaîne(13) "A/exemple" } } ["cc": protégé]=> tableau(0) { } ["bcc": protégé]=> ["ReplyTo":protected]=> array(1) { ["admin@example.com"]=> [0]=> Chaîne(18) "admin@exemple.com" 1=> Chaîne(0) "" } } ["all_recipients":protected]=> array(2) { ["aa@gmail.com"]=> bool(true) ["ag@example.com"]=> bool(true) } ["RecipientsQueue":protected]=> array(0) { } ["ReplyToQueue":protected]=> array(0) { } ["attachment":protected]=> Tableau(2) { [0]=> Tableau(8) { [0]=> "../images/clients/Logo.jpg" 1=> string(13) "Logo.jpg" 2=> Chaîne(13) "Logo.jpg" [3]=> Chaîne(0) "" [4]=> [5]=> bool(false) [6]=> string(6) "en ligne" [7]=>1=> tableau(8) { [0]=> chaîne(35) "../images/XX.jpg" 1=> "XX.jpg" 2=> chaîne(16) "XX.jpg" [3]=> chaîne(0) "" [4]=> "image/jpeg" [5]=> bool(false) [6]=> string(3) "XX" } } ["CustomHeader":protected]=> ["lastMessageID": protégé]=> chaîne (0) "" ["message_type":protected]=> string(0) "" ["boundary":protected]=> array(0) { } ["Langue": protégé]=> array(0) { } ["error_count":protected]=> int(0) ["sign_cert_file":protected]=> String(0) "" ["sign_key_file":protected]=> ["sign_extracerts_file": protégé] => string(0) "" ["sign_key_pass": protégé] = > string(0) "" ["exception" : protégé] = > bool(false) ["uniqueid":protected]=> string(0) "" } Le message a été envoyé !

Je ne trouve pas non plus de documentation complète - pas même sur GitHub : 3731. Le plus proche que j'ai obtenu était celui-ci. Mais je ne comprends toujours pas ce que fait exactement le troisième paramètre. Est-ce que je veux remplacer le nom ? Pourquoi? Quel encodage dois-je utiliser (j'ai essayé Base64 et j'ai laissé les deux vides) ? Quelles options existent en dehors de l'élimination « en ligne » ? Attends...

P粉702946921P粉702946921179 Il y a quelques jours265

répondre à tous(1)je répondrai

  • P粉164942791

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

    Tout d'abord, il semble que vous utilisez une ancienne version de PHPMailer car vous référencez un fichier (l'autoloader) qui ne fait pas partie de la bibliothèque depuis des années, veuillez donc mettre à jour.

    Votre code semble être basé sur un exemple très ancien. Vous ne devriez pas le configurer vous-même MailerisSMTP() je le ferai pour vous.

    Si le fichier sur le disque porte un nom différent que vous ne souhaitez pas exposer aux destinataires, vous devrez peut-être remplacer ce nom, par exemple vous pouvez l'avoir localement logo-123456.png,并希望将其附加为 logo.png.

    L'encodage devra presque toujours être base64 car les images ont tendance à être binaires et donc non sécurisées par courrier électronique, alors laissez-le par défaut.

    Le type MIME doit correspondre à l'extension du fichier, vous devriez donc pouvoir l'ignorer également (PHPMailer le définira pour vous) à moins que vous n'ayez une raison très spécifique de définir un type MIME qui ne correspond pas à votre contenu.

    Header nofollow noreferrer">RFC2183$disposition 设置来自

    0
  • Annulerrépondre