OVH Community, votre nouvel espace communautaire.

mail() multipart/alternative


sailor
27/10/2009, 10h38
merci pour vos réponses...
mais j'ai trouvé la solution.
Pour ceux que cela intéresse :
En fait, au passage, j'ai effectivement noté que les \r\n fonctionnent moins bien queles \n
donc j'ai changé.
Pour le boundary, c'est une erreur de recopie.
Il est correctement formaté et je ne le ferme qu'à la fin.

j'ai remarqué que le format d'encodage y joue pour beaucoup.
Entre le 8bits, le 7bits et le quoted-printable, c'est du 7bits pour le texte seul et du quoted-printable pour le html

Enfin, on m'a suggéré d'utiliser htmlMailMime (http://www.phpguru.org/static/mime.mail.html) qui fonctionne plutôt bien...
sauf qu'il faut, auparavant, vérifier que l'on est bien sous php5 (ce qui n'était pas le cas, donc un p'tit tour par le htaccess pour rétablir la chose)

reste maintenant à gérer les npai et le tracking

Daniel60
23/10/2009, 14h47
Et aussi voir à remplacer les \r\n par des \n.

Eric2A
23/10/2009, 14h26
Salut,

Remplace

Code:
//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------
$message = 'This is a multi-part message in MIME format.'."\r\n";
$message .= '--'.$boundary.'--'."\r\n";
Code:
//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= '--'.$boundary.'--'."\r\n";
par
Code:
$message .= '--'.$boundary."\r\n";
pour voir...

sailor
23/10/2009, 14h02
Bonjour à tous,

J'utilise un script pour expédier sur une mailing-list une newsletter au format html + texte
Je me sers donc de la fontion mail() avec un content-type multipart/alternative (je suis sur un hébergement mutu - 720plan)
Après quelques tests je ne vois rien venir.
Dans mon manager, à la rubrique de gestion des e-mail automatisés, je trouve quelques messages bloqués.
ezmlm (le bot) me dit
fatal: Sorry, after removing unacceptable MIME parts from your message I was left with nothing (#5.7.0)
J'en déduis que y a qq chose qui coince...

Et pourtant, à relire mon code je ne vois pas (faut dire aussi que c'est vendredi et que là je sature un peu)
Je me permet donc de solliciter votre assistance et vous soumet le code
$message_html = "";
$message_texte = "";

//-----------------------------------------------
//CREATION MESSAGE FORMAT HTML
//-----------------------------------------------
$file = fopen("http://mondomaine.com/unepage.html",r);
while (!feof($file)) {
$message_html .= fread($file, 4096);
}
echo $message_html; // jusque là tout est ok

//-----------------------------------------------
//CREATION MESSAGE FORMAT TEXTE
//-----------------------------------------------
$message_texte .= "Un blabla"."\r\n";
$message_texte .= "au format texte"."\r\n";
$message_texte .= "parce que ça sert à ça"."\r\n";
$message_texte .= "le multipart";

echo "===
".$message_texte; // jusque là tout est toujours ok

//-----------------------------------------------
//DECLARATION DES VARIABLES
//-----------------------------------------------
$destinataire = 'une-adresse@mondomaine.com'; // c'est l'adresse d'une mailing liste sous le même domaine qui héberge cette page
$expediteur = 'une-autre-adresse@mondomaine.com'; // c'est une adresse inscrite dans la mailing-list et donc autorisée à poster
$sujet = "ceci est un test";

//-----------------------------------------------
//BOUNDARY
//-----------------------------------------------
$boundary = '-----0123456789'; // je sais, on peut compliquer la chose, mais là je veux faire simple

//-----------------------------------------------
//HEADERS
//-----------------------------------------------
$headers = 'From: '.$expediteur. "\r\n" .
$headers .= "X-Mailer: PHP ".phpversion()."\r\n";
$headers .= 'MIME-Version: 1.0'."\r\n";
$headers .= 'Content-Type: multipart/alternative; boundary="'.$boundary."';

//-----------------------------------------------
//MESSAGE TEXTE
//-----------------------------------------------
$message = 'This is a multi-part message in MIME format.'."\r\n";
$message .= '--'.$boundary.'--'."\r\n";
$message .= 'Content-Type: text/plain; charset="iso-8859-1"'."\r\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\r\n";
$message .= $message_texte."\r\n";

//-----------------------------------------------
//MESSAGE HTML
//-----------------------------------------------
$message .= '--'.$boundary.'--'."\r\n";
$message .= 'Content-Type: text/html; charset="iso-8859-1"'."\r\n";
$message .= 'Content-Transfer-Encoding: 8bit'."\r\n";
$message .= $message_html."\r\n";

$message .= '--'.$boundary.'--'."\r\n";

//-----------------------------------------------
//ENVOI DU MESSAGE
//-----------------------------------------------

if(mail($destinataire,$sujet,$message,$headers))
{
echo "Le mail a été envoyé"; // c'est le message que j'obtiens
}
else
{
echo "Le mail n\'a pu être envoyé";
}
Merci d'avance pour votre coup de main, car là je commence à saturer et mes yeux sont à l'agonie

Bien à vous

JC