2016-06-24 1 views
0

ich dieses Tutorial gefolgt (es ist in französisch, aber Sie können den Code überprüfen): https://openclassrooms.com/courses/e-mail-envoyer-un-e-mail-en-phpHTML/PHP Mail mit Anhang als Text angezeigt und HTML nicht

Im ersten Teil (eine grundlegende Mail-Versand) hatte ich Kein Problem: Ich habe eine E-Mail in beiden Formaten erhalten (Klartext und HTML).

Aber als ich im zweiten Teil ging (fügen Sie eine angehängte Datei an die Mail gesendet), hatte ich Probleme. Ich habe das beigefügte PDF erhalten, die Mail wird nur im Text gelesen, nicht im HTML. Was ist ein Problem für mich. Und ich finde es beunruhigend.

Ich schaute auf das Internet, sah, es gibt andere Möglichkeiten zu tun (Bibliotheken und solche Dinge zu verwenden), aber ich möchte irgendwie "nicht wollen". Versteht mich nicht falsch, ich bin normalerweise bestrebt, einfachere Wege zu benutzen, die funktionieren, und ich mag es nicht wirklich, das Rad neu zu erfinden, aber hier sind meine Gründe: - Ich möchte meinen CTO nicht kontaktieren, um Bibliotheken zu implementieren oder neue Funktionen auf unserem Server - Ich weiß nicht, ob bereits Bibliotheken oder Erweiterungen installiert sind (Ich bin seit 4 Monaten hier, aber ich habe andere Aufgaben als das Codieren). - jetzt ist es personnal ist, ich möchte wissen, warum es nicht funktioniert (auch wenn es wahrscheinlich ein dummer Fehler von mir)

Der Code in Frage:

if (!preg_match("#^[a-z0-9._-][email protected](hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui rencontrent des bogues. 
{ 
    $passage_ligne = "\r\n"; 
} 
else 
{ 
    $passage_ligne = "\n"; 
} 

//=====Déclaration des messages au format texte et au format HTML. 
$message_txt = "my text, nothing to see here"; 

$message_html = "my text in html, nothing to see here"; 
//========== 

//=====Création de la boundary 
$boundary = "-----=".md5(rand()); 
$boundary_alt = "-----=".md5(rand()); 


//========== 

//=====Définition du sujet. 
$sujet = utf8_decode("My subject"); 
//========= 

//=====Création du header de l'e-mail. 
$header = "From: \"Mail adress\"<[email protected]>".$passage_ligne; 
$header.= "Reply-to: \"Mail adress\" <[email protected]>".$passage_ligne; 
$header.= "MIME-Version: 1.0".$passage_ligne; 
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne; 
//========== 

//=====Création du message. 
$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; 

//=====Ajout du message au format texte. 
$message.= "Content-Type: text/plain; charset=\"UTF8\"".$passage_ligne; 
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne; 
$message.= $passage_ligne.$message_txt.$passage_ligne; 
//========== 

$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne; 

//=====Ajout du message au format HTML 
$message.= "Content-Type: text/html; charset=\"UTF8\"".$passage_ligne; 
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne; 
$message.= $passage_ligne.$message_html.$passage_ligne; 
//========== 

//=====On ferme la boundary alternative. 

$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne; 

//========== 


// AJOUT DE L'EBOOK AU FORMAT PDF 
$file_name = "myfile.pdf"; 
$file_type = filetype($file_name); 
$file_size = filesize($file_name); 

$fichier = fopen($file_name, "r"); //on ouvre le fichier en lecture seule. 
$attachement = fread($fichier, $file_size); //on lit l'ensemble du fichier avec la fonction fread. 
$attachement = chunk_split(base64_encode($attachement)); 
fclose($fichier); //on ferme le fichier. 

$message.= $passage_ligne."--".$boundary.$passage_ligne; 

$message.= "Content-Type: ".$file_type."; name=".$file_name.$passage_ligne; 
$message.= "Content-Transfer-Encoding: base64".$passage_ligne; 
$message.= "Content-Disposition: attachment; filename=".$file_name.$passage_ligne.$passage_ligne; 

$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne; 

$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 


//=====Envoi de l'e-mail. 
if(mail($mail,$sujet,$message,$header)) echo "Mail correctement envoyé à l'adresse ".$mail."."; 
    else echo "Le mail n'a pas pu être envoyé à l'adresse ".$mail."."; 
//========== 

Also hier ist der Code. Ich habe auf anderen Webseiten nachgesehen, mein Code sollte funktionieren, aber trotzdem nicht. Nach ein paar Stunden, in denen ich daran arbeite und kleine Kopfschmerzen entstehen, lege ich mein Schicksal auf deine Hände. Vielen Dank im Voraus und einen schönen Tag.

PS: Wie Sie sich denken können, ist Englisch nicht meine Muttersprache, daher verstehe ich vielleicht nicht alles in Ihren Antworten!

+0

Anstelle von "text/plain", fügen Sie $ headers. = 'Content-Typ: text/html; charset = iso-8859-1 '. "\ r \ n"; –

+0

Verwenden Sie phpmailer Klasse https://github.com/PHPMailer/PHPMailer –

+0

gibt es keinen Grund, Text/plain zu entfernen. Auch für das Ändern der Codierung in iso-8859-1, die sogar einige Symbole in seiner Sprache nicht unterstützt. – Arnial

Antwort

0

Sie haben einen Fehler in Zeile 47 (in Beispiel Zeile vor dem Senden von Text/HTML).

Aktuelle Version

$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne; 

Sollte

$message.= $passage_ligne."--".$boundary_alt.$passage_ligne; 

Grund --$boundary_alt--multipart/alternative Teil der E-Mail wird geschlossen. Ihr HTML-Teil wird ignoriert. In Zeile 47 müssen Sie nur Ende angeben text/plain Teil, nicht ganz multipart/alternative

+0

Ich bin ein Idiot. Vielen Dank. Ich war mir ziemlich sicher, dass es etwas mit den Grenzen sein musste, da es der einzige Teil dieses Tutorials war, den ich nicht vollständig verstand. –

Verwandte Themen