Bonjour,
J'utilise actuellement la librairie PHPMailer, intégrée au Framework Symfony.
Jusqu'à maintenant, tout marchait très bien, j'intègre dans mes mails du code HTML, quelques images accompagnant le texte et aussi des pièces jointes (souvent des documents PDF).
Je sais que tous les webmails n'interprètent pas les messages de la même manière mais j'ai un gros souci avec celui d'ORANGE :
Il n'accepte pas les pièces jointes lorsqu'il y a des images intégrée dans le code HTML du message.
Le message en lui même est très bien affiché, le code HTML ainsi les attributs 'src="cid:identifiant"' des balises <img> sont bien traduits. Si on enlève les balises <img> les documents joints sont disponibles. Les images reliées a leur identifiants cid sont incluent dans le code HTML, si j'utilise une adresse http pour chercher une image ça marche (ex : src="http://www.monsite/img.gif"), mais je ne souhaite pas utiliser cette méthode qui dépend de l'accessibilité au site web de l'image.
J'ai ensuite essayé avec la fonction mail(). Meme probleme.
Aucune erreur ou exception n'est retournée.
Voici le code pour l'utilisation de librairie sfMail de Symfony (utilisant directement PHPMailer) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 $objDoc = new Pdf(); $objDoc->genererPdf($id); $cheminComplet = $objDoc->sauvegarderPdf(); try { $objMail = new sfMail(); $objMail->setFrom(EMAIL_FROM, 'test'); $objMail->addAddress(ADRESSE); $objMail->setSubject('- test -'); $objMail->setMailer('mail'); $objMail->setHostname(HOST); $objMail->setCharset('utf-8'); $objMail->setContentType('text/html'); $objMail->setBody('<img src="cid:L007"/>'); $objMail->addEmbeddedImage('/mail/images/logo.gif', 'L007', 'logo.gif','base64','image/gif'); $objMail->prepare(); $objMail->addAttachment($cheminComplet,'doc.pdf','base64','application/pdf'); $objMail->send(); } catch(sfException $e) { throw $e; }
Et ci-dessous le code pour l'utilisation de la fonction mail() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 $objDoc = new Pdf(); $objDoc->genererPdf($id); $cheminComplet = $objDoc->sauvegarderPdf(); //---------------------------------- // Construction de l'entête //---------------------------------- $delimiteur = "-----=".md5(uniqid(rand())); $entete = "MIME-Version: 1.0\r\n"; $entete .= "Content-Type: multipart/related; boundary=\"$delimiteur\"\r\n"; $entete .= "\r\n"; //-------------------------------------------------- // Construction du message proprement dit //-------------------------------------------------- $msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n"; //--------------------------------- // 1ère partie du message // Le code HTML //--------------------------------- $msg .= "--$delimiteur\r\n"; $msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n"; $msg .= "Content-Transfer-Encoding:8bit\r\n"; $msg .= "\r\n"; $msg .= "<html><body><h1>Email HTML avec 2 images</h1>"; $msg .= "Image 1:<img src=\"cid:image1\"><br />"; $msg .= "Image 2:<img src=\"cid:image2\"><br /></body></html>\r\n"; $msg .= "\r\n"; //--------------------------------- // 2nde partie du message // Le 1er fichier (inline) //--------------------------------- $fichier = "mail/images/logo.gif"; $fp = fopen($fichier, "rb"); $fichierattache = fread($fp, filesize($fichier)); fclose($fp); $fichierattache = chunk_split(base64_encode($fichierattache)); $msg .= "--$delimiteur\r\n"; $msg .= "Content-Type: application/octet-stream; name=\"$fichier\"\r\n"; $msg .= "Content-Transfer-Encoding: base64\r\n"; $msg .= "Content-ID: <image1>\r\n"; $msg .= "\r\n"; $msg .= $fichierattache . "\r\n"; $msg .= "\r\n\r\n"; //--------------------------------- // 3ème partie du message // Le 2ème fichier (attachment) //--------------------------------- $fichier = "mail/images/logo2.gif"; $fp = fopen($fichier, "rb"); $fichierattache = fread($fp, filesize($fichier)); fclose($fp); $fichierattache = chunk_split(base64_encode($fichierattache)); $msg .= "--$delimiteur\r\n"; $msg .= "Content-Type: application/octet-stream; name=\"$fichier\"\r\n"; $msg .= "Content-Transfer-Encoding: base64\r\n"; $msg .= "Content-ID: <image2>\r\n"; $msg .= "\r\n"; $msg .= $fichierattache . "\r\n"; $msg .= "\r\n\r\n"; //--------------------------------- // Piece jointe //--------------------------------- $fichier = file_get_contents($cheminComplet); $fichier = chunk_split(base64_encode($fichier)); $msg .= "--$delimiteur\r\n"; $msg .= "Content-Type: application/pdf; name=\"doc.pdf\"\r\n"; $msg .= "Content-Transfer-Encoding: base64\r\n"; $msg .= "Content-Disposition: attachment; filename=\"doc.pdf\"\r\n\n $fichier"; $destinataire = ADRESSE; $expediteur = EMAIL_FROM; $reponse = $expediteur; echo "Ce script envoie un mail au format HTML avec 2 images à $destinataire"; mail($destinataire, "- test -", $msg, "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$entete);
Si quelqu'un a une idée, ou a deja rencontré ce problème n'hésitez pas a répondre, merci d'avance.








Répondre avec citation


Partager