PHPMailer pb avec images dans le corps du mail

Résolu
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -  
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Avec PHPMailer_5.2.1 je veux envoyer un mail avec 2 images inclues dans le corps du mail (inline) et 2 pièces jointes.
Je suis chez ovh en mutualisé.
Le mail est bien envoyé, pas d'erreurs affichées, mais les images n'apparaissent pas dans le mail(juste un rectangle à la place).
En regardant le code source du mail, il n'y a pas le codage des images, il y a bien <img src="cid:xxxxxxxxxx" mais pas les blocs de content-transfert-encoding: base64

Par contre c'est tout bon pour les deux pieces jointes.

Merci pour votre aide.

Nota: si je laisse $mail->IsSMTP(); ça ne marche pas du tout

<?php
require("PHPMailer-5.2.1/class.phpmailer.php");
//tableau des applis correspondant à image ou au fichier joint
$tabl_applis=array("doc"=>"application/msword","pdf"=>"application/pdf","xls"=>"application/vnd.ms-excel",
				"ppt"=>"application/vnd.ms-powerpoint","pps"=>"application/vnd.ms-powerpoint","zip"=>"application/zip",
				"wav"=>"audio/x-wav","gif"=>"image/gif","jpeg"=>"image/jpeg","jpg"=>"image/jpeg","png"=>"image/png",
				"html"=>"text/html","txt"=>"text/plain","avi"=>"video/msvideo","pdf"=>"application/pdf");
 
$adresse="mon adresse mail";;
$mailsujet="essai ".date('Y-m-d H:i:s');
$array_liste_fich_joint=array("fichier_1.doc","fichier_2.pdf");
$dossier_fichiers_joints='fichiers_a_joindre';

$contenu_fichier_message='<html><body><p>Message avec 2 images et 2 PJ</p>
<p>
	<img alt="" src="/_include/images/photo_site_auberge_ii.jpg" style="width: 50px; height: 50px; float: left; margin: 10px;" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus</p>
<p>
	&nbsp;</p>
<p>
	<img alt="" src="/_include/images/ESPADON.jpg" style="width: 60px; height: 57px; margin: 20px;" />Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur</p>

</body></html>';
echo $contenu_fichier_message; //ça c'est pour voir si on atteint bien les images depuis le scrip php, elles s'affichent bien !

//traitement des images pour remplacement src par CID
$list_images=array();
//capture des src des <img
if(preg_match_all(''<img .*? src="(.*?)"'',$contenu_fichier_message, $out)){
	/*echo '<pre>';
	print_r($out[1]);
	echo '</pre>';*/
	if(isset($out[1]) && sizeof($out[1])>0){
		for($i=0;$i<sizeof($out[1]);$i++){			
			$pattern[$i]='#'.$out[1][$i].'#';////transfo en pattern
			$cid=uniqid(mt_rand()); //generation du CID
			$replacement[$i]='cid:'.$cid; //replacement
			//memo dans un array 
			$list_images[$i]['chemin_image']=$out[1][$i];	
			$list_images[$i]['CID']=$cid;
		}
		/*
		echo 'Array liste images <br /><pre>';
		print_r($list_images);
		echo '</pre>';
		*/
		$contenu_fichier_message=preg_replace($pattern,$replacement,$contenu_fichier_message);
	}
}

$corps_message=$contenu_fichier_message;

$mail = new PHPMailer();//$mail = new PHPMailer();
//$mail->IsSMTP();
$mail->IsMail();
//$mail->Host = "smtp1.example.com;smtp2.example.com";
//$mail->SMTPAuth = false;
$mail->SetLanguage('fr');
$mail->From="adresse@mon_domaine";
$mail->FromName="my name";
$mail->Sender="adresse@mon_domaine";
$mail->AddReplyTo("adresse@mon_domaine", "Repondre");
//AR
//$mail->ConfirmReadingTo = 'adresse@mon_domaine';
$mail->AddAddress($adresse);
$mail->Subject =$mailsujet;

$mail->IsHTML(true);

//images
if(sizeof($list_images)>0){
	
	
	foreach($list_images as $clef=>$value){
		$path_parts = pathinfo($value['chemin_image']);		
		//echo '<br />Chemin: '.$value['chemin_image'].' CID= '.$value['CID'].' image: '.$path_parts['basename'].' type: '.$tabl_applis[strtolower($path_parts['extension'])];
			//$mail->AddEmbeddedImage($value['chemin_image'], $value['CID'],$path_parts['basename'],'base64',$tabl_applis[strtolower($path_parts['extension'])]); // attach file logo.jpg, and later link to it using identfier logoimg
			$mail->AddEmbeddedImage($value['chemin_image'], $value['CID'],$path_parts['basename'],'base64','application/octet-stream'); // attach file logo.jpg, and later link to it using identfier logoimg
		
	}
}
//fichiers joints
if(sizeof($array_liste_fich_joint)>0){
	foreach($array_liste_fich_joint as $cle => $fichier){	
		$mail->AddAttachment($dossier_fichiers_joints.'/'.$fichier, $fichier); 
	}
	
}
$mail->Body = $corps_message;
//$mail->AltBody="This is text only alternative body.";

if(!$mail->Send())
{
   echo "Error sending: " . $mail->ErrorInfo;;
}
else
{
   echo "Letter is sent";
}
	$mail->ClearAddresses();
    $mail->ClearAttachments();
    $mail->IsHTML(false);
?>




A voir également:

2 réponses

bg62 Messages postés 23732 Date d'inscription   Statut Modérateur Dernière intervention   2 409
 
je ne connais pas trop ce script ... il y a peut être un "spécialiste" dans le forum ?
?
ou voir ici :
https://code.google.com/archive/a/apache-extras.org/p/phpmailer/issues
et éventuellement y poser question ... ;)
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
Résolu.

A force de chercher:
Le chemin vers les images n'était pas bon ???

au lieu de /_include/etc..

j'ai mis ../../_include/etc...

et ça fonctionne !

merci quand même
0