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...
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
Mailer
–isSMTP()
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
设置来自