Ich habe dieses Tutorial befolgt (es ist auf Französisch, aber Sie können den Code überprüfen): https://openclassrooms.com/courses/e-mail-envoyer-un-e-mail-en-php
Im ersten Teil (Senden einer einfachen E-Mail) hatte ich keine Probleme: Ich erhielt eine E-Mail in beiden Formaten (Klartext und HTML).
Aber als ich zum zweiten Teil überging (der gesendeten Mail eine angehängte Datei hinzufügen), hatte ich Probleme. Ich habe das angehängte PDF erhalten, aber die Mail wird nur in Text gelesen, nicht in HTML. Welches ist ein Problem für mich. Und ich finde es störend.
Ich habe im Internet nachgesehen und festgestellt, dass es andere Möglichkeiten gibt (Bibliotheken und ähnliches zu verwenden), aber ich möchte es irgendwie nicht. Versteh mich nicht falsch, ich bin normalerweise bestrebt, einfachere Methoden zu verwenden, die funktionieren, und ich mag es nicht, 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 für unseren Server - Ich weiß nicht, ob bereits Bibliotheken oder Erweiterungen installiert sind (ich bin seit 4 Monaten hier, habe aber andere Aufgaben als das Codieren ausgeführt). - Jetzt ist es persönlich, ich möchte wissen, warum es nicht funktioniert (auch wenn es wahrscheinlich ein dummer Fehler von mir ist)
Der fragliche Code:
if (!preg_match("#^[a-z0-9._-]+@(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 Websites nachgesehen, mein Code sollte funktionieren, aber immer noch nicht. Nach ein paar Stunden Arbeit und der Geburt kleiner Kopfschmerzen lege ich mein Schicksal auf deine Hände. Vielen Dank im Voraus und einen schönen Tag.
PS: Wie Sie vermutet haben, ist Englisch nicht meine Muttersprache, daher verstehe ich möglicherweise nicht alles in Ihren Antworten!
In Zeile 47 ist ein Fehler aufgetreten (z. B. Zeile vor dem Senden von Text / HTML).
Aktuelle Version
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
Sollte sein
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
Grund --$boundary_alt--
wird einen multipart/alternative
Teil der E-Mail schließen. Ihr HTML-Teil wird ignoriert. In Zeile 47 müssen Sie nur das Ende als text/plain
Teil und nicht das Ganze angebenmultipart/alternative
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen