envoyer mail de PHP avec Content-Type: multipart/alternative
J'essaie d'envoyer un multipart mail qui contient à la fois html et texte brut. C'est également l'un des moyens de passer à travers les filtres anti-spam et permettre à plus de gens à lire le mail en cas de ne pas supporter l'HTML. Après avoir passé de longues heures de recherche sur google, j'ai trouvé quelques exemples. J'ai fait mon code, qui envoie le mail, mais il affiche le texte avec les balises html, code, string etc.
<?php
$boundary=md5(uniqid(rand()));
$header .= "From:My Name<[email protected]>\n";
$header .= "Reply-To: [email protected] \n";
$header .= 'MIME-Version: 1.0'."\r\n";
$header .= 'Content-type: multipart/alternative;boundary=$boundary '."\n";
$adres = "[email protected]";
$subject = "subject";
$message = "This is multipart message using MIME\n";
$message .= "--" . $boundary . "\n";
$message .= "Content-type: text/plain;charset=iso-8859-1\n";
$message .= "Content-Transfer-Encoding: 7bit". "\n\n";
$message .= "Plain text version\n\n";
$message .="--" . $boundary . "\n";
$message .="Content-type: text/html;charset=iso-8859-1\n";
$message .= "Content-Transfer-Encoding: 7bit". "\n\n";
$message .="<html>
<body>
<center>
<b>HTML text version</b>
</center>
</body>
</html>\n\n";
$message .= "--" . $boundary . "--";
if(mail($adres, $subject, $message, $header))
{
print'message sent';
}
else
{
print'message was not sent';
}
?>
C'est le résultat:
This is multipart message using MIME
--c071adfa945491cac7759a760ff8baeb
Content-type: text/plain;charset=iso-8859-1
Content-Transfer-Encoding: 7bit
Plain text version
--c071adfa945491cac7759a760ff8baeb
Content-type: text/html;charset=iso-8859-1
Content-Transfer-Encoding: 7bit
<html>
<body>
<center>
<b>HTML text version</b>
</center>
</body>
</html>
--c071adfa945491cac7759a760ff8baeb--
Comme vous pouvez le voir, il affiche le codage à la place du message seul. J'ai essayé beaucoup de solutions affiché comme:
- ajout/suppression de \r\n;
- changer \r\n \n;
- changement de type de contenu alternatif mixte;
Je suis en train d'apprendre le PHP et tout ce que je sais est tout ce que j'ai lu et fait jusqu'à présent. J'ai encore beaucoup à apprendre, alors s'il vous plaît si vous pouviez me dire où est le problème. Je serais très reconnaissante.En ce qui concerne meilleur.
\n
et \r\n
. Outre les corps de message où vous pouvez utiliser le w/e vous voulez, vous devez TOUJOURS utiliser \r\n
dans le message et le contenu de l'en-tête des sections. 2. Suffit d'utiliser PHPMailer.3. Je pense que vous avez besoin d'un autre saut de ligne après:
$message = "This is multipart message using MIME\n";
OriginalL'auteur Kamil Grzelak | 2013-08-29
Vous devez vous connecter pour publier un commentaire.
La ligne:
A le tort de citations, de sorte
$boundary
ne sera pas élargi. Changement:Et comme je l'ai dit dans les commentaires, dans les en-têtes de message et le contenu des en-têtes de section, vous devriez être en utilisant
\r\n
que le saut de ligne puisque c'est ce qui est défini dans la RFC. La plupart des Mta permettra simplement\n
, mais certains vont jusqu'à s'étouffer le message, et certains filtres anti-spam va compter tous les RFC violation d'un point à l'égard de votre score de spam.En utilisant quelque chose comme PHPMailer est une bien meilleure option, car il met tout à la perfection par défaut, et respecte juste au sujet de chaque obscure, ennuyeux RFC.
J'ai changé la ligne de démarcation ainsi que le \r\n, mais il donne toujours le même résultat qu'auparavant.
OriginalL'auteur Sammitch
Je pense que vous avez besoin des guillemets autour de la frontière de la chaîne.
essayez ceci:
OriginalL'auteur chillichief
Essayez cet exemple https://github.com/breakermind/PhpMimeParser/blob/master/PhpMimeClient_class.php
OriginalL'auteur Arbuzero