PHPMailer pb avec images dans le corps du mail

Résolu/Fermé
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 1 déc. 2012 à 17:45
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 2 déc. 2012 à 19:01
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 23655 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 16 novembre 2024 2 387
2 déc. 2012 à 18:51
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
2 déc. 2012 à 19:01
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