PHPMailer Ignorieren \r\n
Ich bin derzeit mit einem Problem mit E-Mails empfangen, die gesendet wurden von PHPMailer mit plain/text-E-Mails. Ich bin derzeit auf der Rückkehr die E-Mail-Nachricht aus einer Datenbank abrufen der Zeile und speichern in eine variable $Nachricht. Die Nachricht, während in der Datenbank formatiert ist wie folgt:
This is some email information. \r\n This is some more email information.
Die E-Mail empfangen, zeigt die Nachricht mit dem \r\n anstelle der Rückgabe eine neue Zeile.
Meinem PHPMailer-Code, die der folgenden ähnelt:
$subject = $row['subject'];
$message = $row['message'];
//PHP Mailer
$mail = new PHPMailer();
$mail->From = "[email protected]";
$mail->FromName = "MyWebsite.org";
$mail->AddAddress('[email protected]');
$mail->ContentType = 'text/plain';
$mail->IsHTML(false);
$mail->Subject = $subject;
$mail->Body = $message;
$mail->AltBody = $message;
if(!$email->Send()){
echo "Mailer Error: " . $mail->ErrorInfo;
}
Meine Frage: Wie bekomme ich \r\n für format richtig mit PHPMailer? Ist das eine PHPMailer-Einstellung oder mache ich etwas falsch in meinem code?
auch hast du wahrscheinlich schreiben
\r\n
als Zeichenfolge in dem Wert enthalten in Ihrem Bereich, während die, die Sie verwenden sollten Zeichen 10 (entspricht \n
) & 13 (äquivalent zu `\r) statt. Also, müssen Sie den richtigen Weg, den Sie einfügen thi in Ihrer DB und für die vorhandenen Datensätze entweder Sie aktualisieren Sie Sie so, entweder passen Sie Ihre Ausgabe-code zu ersetzen-Escape-Zeichenfolgen mit der chracater Sie sich beziehen.
InformationsquelleAutor Ryan | 2014-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es sieht aus wie Sie Sie gespeichert haben
\r\n
in Ihrer Datenbank als text - PHP wird nicht geparst. Sie müssen tatsächlich sparen eine neue Zeile in die 'Nachricht' in der DatenbankDas entfernt die \r\n von der Anzeige in der E-Mail. Aber es sind keine Zeilenumbrüche vorhanden, wo die \r\n stattgefunden hatte.
Tut mir Leid, $message = str_replace(array('\r', '\n'), array(chr(10), chr(13)), $row['Nachricht']); dies sollte für Sie arbeiten.
Versuchen, Sie zu entfernen AltBody wie es ist nur in html-E-Mails
Entfernen der AltBody scheint gewirkt zu haben. Ich bin wirklich dankbar für die Mühe und die Hilfe.
InformationsquelleAutor Emily Shepherd
Kann dies nur ein einfacher Fall der Verwendung von einfachen Anführungszeichen statt der doppelten Anführungszeichen, wenn ursprünglich der Vorbereitung der Nachricht.
Wenn Sie einfache Anführungszeichen verwenden, wird das Ergebnis in \r\n wird in der Datenbank gespeichert werden als Teil der Zeichenkette, und PHPMailer wird dann Ausgabe \r\n in der E-Mail anstelle einer tatsächlichen Zeilenumbruch.
Verwendung von doppelten Anführungszeichen wird das problem zu beheben.
Beispielsweise
$message = 'Line 1\r\nLine 2';
(single quotes)wird die Ausgabe als
während
$message = "Line 1\r\nLine 2";
(doppelte Anführungszeichen)wird die Ausgabe als
Dies funktioniert für mich, auch wenn AltBody zu senden, die HTML und nur-Text-Versionen eine E-Mail.
InformationsquelleAutor wicketyjarjar
Ryan erwähnt in den Kommentaren für die anderen Antworten, aber ich kämpfte mit diesem, und meinte, das verdient es ist eigene Antwort.
Entfernen der AltBody gearbeitet hat. Es sieht so aus.
Scheint dies der Fall zu sein, ob $mail- > isHTML() auf true oder false gesetzt. Ich bin mir nicht sicher, warum dies der Fall zu sein scheint. Vielleicht ist der client mir und Ryan waren, zu senden, zu akzeptieren, nur plain-text-E-Mails, und AltBody sendet nicht nur plain text, aber eigentlich Zeilenumbrüche entfernen. Wenn Sie benötigen, senden Sie eine HTML-Nachricht, die nicht anzeigen, wenn der client kann nicht akzeptieren-tags, dann vermute ich, wirst du entweder damit Leben müssen oder das Graben in der PHPMailer-code
InformationsquelleAutor Goose
Dies funktioniert für mich!
InformationsquelleAutor Alexandar Lazovic
Einfach nl2br() auf dem string ... aber aus der phpmailer... und als schreib-string in den Körper" "; und keine Notwendigkeit für die Verwendung von preg_replace oder so ähnlich.
Werde ich Schritt für Schritt erklären,
$string = nl2br($_POST["Nachricht"]);
danach in die Körper der php-mailer schreiben, genau wie diese
$mail- > Body = "$string";
Ist und dass es .. so einfach...OK
Ernsthaft? Das ist mein problem gelöst! Ich muss nur konvertieren Sie den Nachrichtentext mit nl2br. Danke!!!!
Ja aber das ist dann nicht mehr eine nur-text-E-Mail. Das ist HTML.
InformationsquelleAutor Miljan Marković
Dies ist eine alte Frage, aber die Lösungen haben bei mir nicht funktioniert. Aber Folgendes hat funktioniert, also dachte ich, es könnte sich lohnen zu teilen.
$body = nl2br($body);
InformationsquelleAutor Dan