2017-09-08 1 views
0

Ich versuche, die integrierte PHP-Mail-Funktion zu verwenden, um mehrteilige Nachrichten zu senden, die eine HTML- und eine reine Textversion meiner Nachricht enthalten. Ich habe mit verschiedenen Kodierungstypen herumgespielt, aber ich laufe immer wieder in Probleme. Ursprünglich habe ich Content-Transfer-Encoding auf Binary gesetzt, aber das führte dazu, dass Ausrufezeichen alle 78 Zeichen gesetzt wurden. Ich versuchte auch base64, aber ich glaube, dass Base64 für das, was ich tue, übertrieben ist.wie man mehrteilige/alternative E-Mail mit PHP korrekt sendet

Alles, was ich tue, ist das Senden von einfachem HTML, keine codierten Bilder, Dateien oder Anhänge. Ich würde eine Codierungsmethode bevorzugen, die es dem Quellcode immer noch ermöglicht, für Menschen lesbar zu sein.

Ich habe gehört, dass Quoted-Printable ist, was ich suche, aber, als ich versuchte, Nachrichten mit dieser Codierung Typ senden das Ergebnis am Ende sieht wirklich komisch aus. Ich bemerkte eine Reihe von " Symbolen, die im gesamten Nachrichtenquellcode verstreut waren.

Hier ist der Code, ich verwende:

$to = "[email protected]"; 
    $subject = "test subject"; 
    $boundary = uniqid('np');    
    $headers = "MIME-Version: 1.0\r\n"; 
    $headers .= "From: [email protected]\r\n"; 
    $headers .= "Reply-To: [email protected]\r\n"; 
    $headers .= "Return-Path: [email protected]\r\n"; 
    $headers .= "Content-Type: multipart/alternative;boundary=" . $boundary . "\r\n"; 
    $message = "This is a MIME encoded message."; 

    $message .= "\r\n\r\n--" . $boundary . "\r\n"; 
    $message .= "Content-Type: text/plain; charset=UTF-8\r\n"; 
    $message .= "Content-Transfer-Encoding: Quoted-Printable\r\n"; 
    $message .= $plainTextMessage; 

    $message .= "\r\n\r\n--" . $boundary . "\r\n"; 
    $message .= "Content-Type: text/html; charset=UTF-8\r\n"; 
    $message .= "Content-Transfer-Encoding: Quoted-Printable\r\n"; 
    $message .= $HTMLmessage; 

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

    $ok = mail($to,$subject,$message,$headers); 

Was zum Teufel mache ich hier falsch?

+0

helfen würde ich empfehlen, eine Bibliothek anstatt zu versuchen, dieses selbst eine Beurteilung zu rollen. E-Mails werden schnell sehr komplex. Versuchen Sie etwas wie https://github.com/PHPMailer/PHPMailer. Vertrau mir, es wird dir das Leben viel leichter machen. –

+0

@matt Ich habe PHPMailer versucht, aber egal was ich mache, ich kann es nicht auf meinem Server arbeiten. Es ist mit GoDaddy gehostet. Sogar GoDaddy sagte, dass er einfach die eingebaute Mail-Funktion benutzen soll. – Austin

+1

Versuchen Sie, mit https://www.mailgun.com/ zu integrieren. Sie machen einen API-Aufruf und sie erstellen und senden die E-Mail für Sie. –

Antwort

-1

Hallo den folgenden Code versuchen,

$to = "[email protected]"; 
    $subject = "test subject"; 
    $plainTextMessage = "Hi all"; 
    $HTMLmessage = "<b>Hi all</b>"; 
    //$boundary = uniqid('np');    
    $boundary = md5(uniqid(time())); 
    $headers .= "From: [email protected]\r\n"; 
    $headers .= "Reply-To: [email protected]\r\n"; 
    $headers .= "Return-Path: [email protected]\r\n"; 
    $headers .= "Content-Type: multipart/alternative;boundary=" . $boundary . "\r\n"; 
    $message = "This is a MIME encoded message."; 

    $message .= "\r\n\r\n--" . $boundary . "\r\n"; 
    $message .= "Content-Type: text/plain; charset=UTF-8\r\n"; 
    $message .= "Content-Transfer-Encoding: Quoted-Printable\r\n"; 
    $message .= $plainTextMessage; 

    $message .= "\r\n\r\n--" . $boundary . "\r\n"; 
    $message .= "Content-Type: text/html; charset=UTF-8\r\n"; 
    $message .= "Content-Transfer-Encoding: Quoted-Printable\r\n"; 
    $message .= $HTMLmessage; 

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

    $ok = mail($to,$subject,$message,$headers); 

Kann es

+0

Ich habe festgestellt, dass es sich nicht um ein Grenzproblem handelt. Dies ist der einzige Vorschlag, den Sie hier angegeben haben. – Austin

+0

ja. Heute habe ich nur daran gearbeitet. Dieser Code funktioniert gut für mich. Irgendwelche Fehler bekommen Sie? – KMS