Bonjour,

Je dois envoyer une "newsletter" au format HTML, dans laquelle les images sont intégrées (il ne faut pas qu'elles pointent vers le serveur).

Le code suivant fonctionne pour presque tous les domaines de mail et logiciels de messagerie, mais AOL.com et laposte.net font de la résistance, et mettent les images en PJ mais pas dans le corps du 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
$mail = $users['mail'];
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) {
	$passage_ligne = "\r\n";
} else {
	$passage_ligne = "\n";
}
 
$message_txt = "Désolé, votre messagerie ne peut pas lire ce document. Veuillez nous le signaler.";
ob_start();
include 'newsletter.inc.php';
$message_html = ob_get_clean();
ob_end_flush();
 
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
 
$sujet = "Lettre d'information";
 
$header = "From: \"Expéditeur\"<accueil@expediteur.fr>".$passage_ligne;
$header .= "Reply-to: \"Expéditeur\" <accueil@expediteur.fr>".$passage_ligne;
$header .= "MIME-Version: 1.0".$passage_ligne;
$header .= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
 
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message .= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
 
$message .= $passage_ligne."--".$boundary_alt.$passage_ligne;
$message .= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message .= $passage_ligne.$message_txt.$passage_ligne;
 
$message .= $passage_ligne."--".$boundary_alt.$passage_ligne;
$message .= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message .= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message .= $passage_ligne.$message_html.$passage_ligne;
$message .= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
$message .= $passage_ligne."--".$boundary.$passage_ligne;
 
$fichier = "img/image1.jpg";
$fp      = fopen($fichier, "rb");
$image = fread($fp, filesize($fichier));
$image = chunk_split(base64_encode($image));
fclose($fp);
$message .= "Content-Type: image/gif; name=\"$fichier\"".$passage_ligne;
$message .= "Content-Transfer-Encoding: base64".$passage_ligne;
$message .= "Content-ID: <image1>".$passage_ligne;
$message .= $passage_ligne.$image.$passage_ligne;
$message .= $passage_ligne."--".$boundary.$passage_ligne;
 
...
 
$fichier = "img/image6.jpg";
$fp      = fopen($fichier, "rb");
$image = fread($fp, filesize($fichier));
$image = chunk_split(base64_encode($image));
fclose($fp);
$message .= "Content-Type: image/gif; name=\"$fichier\"".$passage_ligne;
$message .= "Content-Transfer-Encoding: base64".$passage_ligne;
$message .= "Content-ID: <image6>".$passage_ligne;
$message .= $passage_ligne.$image.$passage_ligne;
$message .= $passage_ligne."--".$boundary.$passage_ligne;
Savez-vous s'il existe une solution ? Merci d'avance.

EDIT : et il m'est impossible d'envoyer en SMTP car l'hébergeur OVH ne permet pas l'envoi de nombreux mails via ce mode (d'après ce que j'ai lu) et il me faut envoyer 500 mails en une seule fois...