2008-12-08 8 views
0

Le code ci-dessous correspond au code que j'utilise. Cela fonctionne très bien dans Thunderbird, mais pas dans le client de messagerie Mac (et je suppose que tout ce qui est fait par Microsoft. Je n'ai actuellement pas accès à cela pour le tester). Autant que je suis au courant des idiosyncrasies des différents clients de courrier, je suis déconcerté par ceci! C'est assez explicite, mais j'essaie d'envoyer des courriels texte et HTML pour augmenter le lectorat. Toute aide serait très appréciée.Le courrier électronique en texte clair/HTML ne fonctionne pas avec le client de messagerie électronique

EDIT

je aurais dû préciser que le contenu sont envoyés, mais indépendamment dans thunderbird il affiche correctement le message, mais dans le client de messagerie Mac, vous obtenez la chose entière de la première PHP-alt au dernier PHP

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//define the subject of the email 
$subject = 'Test HTML email'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash 
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n 
$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
//add boundary string and mime type specification 
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\""; 
//define the body of the message. 
ob_start(); //Turn on output buffering 
?> 
--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

<h2>Hello World!</h2> 
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>-- 
<? 
//copy current buffer contents into $message variable and delete current output buffer 
$message = ob_get_clean(); 
//send the email 
$mail_sent = @mail($to, $subject, $message, $headers); 
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed"; 
?> 

Répondre

3

Plutôt que d'essayer de lancer votre propre expéditeur, essayez par exemple. PHPMailer. Il a un très bon support pour multipart/alternative. C'est beaucoup plus facile à intégrer que de lancer votre propre solution. J'ai été là - après avoir travaillé sans fin autour de problèmes MIME étranges, j'ai laissé tomber mon mailer fait à la main, je suis passé à autre chose, et je me suis concentré sur d'autres choses dans le temps que j'ai épargné. En d'autres termes, ne pas réinventer la roue. Bien que le faire vous-même peut être un bon défi et vous apprendrez beaucoup au cours du processus, si vous voulez juste que cela fonctionne, ces gars-là ont géré la complexité pour vous.

+0

Bravo fella, fonctionne comme un charme! – Drew

0

vous n'utilisez pas correctement mise en mémoire tampon de sortie - voir page man pour ob_end_clean voir qu'il ne retourne pas la sortie capturé, vous avez besoin ob_get_contents pour que:

$message =ob_get_contents(); 
ob_end_clean(); 
+0

Bravo pour ça mais hélas, je viens de lui donner un coup de feu et ça ne marche toujours pas. – Drew

+0

Est-ce que quelque chose est livré? Si c'est le cas, affichez la source entière de l'e-mail –

Questions connexes