2012-04-03 17 views
8

ich ein sehr einfaches PHP-Skript haben, so etwas wie:PHP-Mail-Funktion fügt dem Zufallsprinzip ein Raum Nachrichtentext

while ($condition){ 
    echo "<a href="thanks.php?id=".$id."> THANKS </a>"; 
} 

Natürlich, ich habe ein bisschen mehr Code, aber es spielt keine Rolle. Sobald ich diesen Code erstellt habe, sendet das Skript eine E-Mail an den Benutzer.

DIE INBOX

Die Links in jeder einzelnen Zeile in Ordnung sind, mit Ausnahme der LETZTE zeigt den Link auf diese Weise:

tha nks.php?id..... 

Es fügt ein Leerzeichen zwischen dem Code.

Dies geschieht nur mit Hotmail. Gmail, Yahoo und alles andere funktioniert gut.

+3

Klingt wie Hotmail "schützt" den Benutzer durch (Halb-) Verschleierung von Links. Wenn es nur eine Situation ist, bezweifle ich, dass es etwas ist, was du tust. - EDIT: Auch, FYIW, Ihre Syntax ist auf den obigen Code (Quote-Mismatch) deaktiviert, aber da der Link in 90% der anderen Situationen funktioniert, bin ich _assuming_ es ist ein Tippfehler, wenn Sie gingen, dies zu posten. Sonst würde ich nach innen schauen, um sicherzustellen, dass ihr beide das "" innerhalb des Ankers verpasst und sicherstellt, dass ihr ein abschließendes '" 'hinter der' $ id' habt. –

+0

ja das ist, was ich dachte, über den Tippfehler, Ich habe dies als Beispiel geschrieben, das ist nicht der wirkliche Code. Auf der anderen Seite .. wenn es ein Hotmail-Problem ist, warum es nicht den gleichen "Schutz" für alle Links gibt! es ist nur mit dem letzten passiert! Hotmail lässt mich Pillen nehmen, um mich verrückt zu machen! – Andy

+0

Eine weitere gute Diskussion zum Thema: http://www.jeremytunnell.com/posts/really-hairy-problem-with-seemingly-random-crlf-and-spaces-insersed-in-emails – toto21

Antwort

0

Ich habe gesehen, sendmail Zeichen einfügen, wenn Zeilen zu lang sind. Das ist hier nicht der Fall (da andere Clients es gut handhaben), aber ich frage mich, ob Hotmail eine Zeilenlänge hat, die Sie treffen.

Macht es einen Unterschied machen, wenn Sie eine neue Zeile in Ihrem echo einzufügen, dh

while ($condition){ 

    echo "<a href=\"thanks.php?id=".$id."\"> THANKS </a>\n"; 

} 
+0

nein, kein Unterschied bei alle, außerdem sind sie nur 10 thumbnails mit Verbindungen zu thank.php. die ersten 9 thumbnails sind PERFEKT (sogar in hotmail) das Problem ist das letzte .. und die URL hat genau die gleiche Länge für jedes von Sie. = ( – Andy

11

Ich weiß, das Ende ist, aber es ist eine alternative Lösung, die für mich gearbeitet:

Mit dieser Linie kodieren Ihre gesamte Nachricht mit base64:

$message = chunk_split(base64_encode($message)); 

Dann fügen Sie diese Ihre Header:

$headers .= "Content-Transfer-Encoding: base64\r\n\r\n"; 

Das teilt dem Mail-Client mit, dass Ihre Nachricht base64-codiert ist.

+1

Das funktionierte auch für mich. –

+1

Danke @karancan, deine Antwort ist großartig :) Hatte ein Problem mit rundum Leerzeichen in Links in HTML-E-Mails - sie sind weg. Gut gemacht!! –

+0

Arbeitete für mich, danke Mann. Prost. – user3636476

10

Karankans Lösung funktioniert wahrscheinlich, aber die Hauptursache ist, was Hobo sagte. Die mail Funktion fügt einen Zeilenumbruch alle 900 Zeichen ein (glaube ich). Also, wenn Sie Ihre $ Nachricht mit einer Reihe von $message .= "more text"; aufbauen, werden Sie diesen Fehler auftreten, sobald diese Zeile mehr als 900 Zeichen lang ist. Es ist jedoch verwirrend, weil die Leerzeichen nur sporadisch zu sein scheinen, insbesondere wenn Sie eine HTML-Nachricht erstellen, da die Zeilenumbrüche manchmal an vollkommen benignem Ort erscheinen.

Die einfache Lösung ist eine \r\n\ am Ende der Zeilen hinzufügen.

Interessanterweise diese Formen arbeiten:

$message .= "<tr><td>1</td><td>2</td>\r\n"; 
$message .= '<tr><td>1</td><td>2</td>'."\r\n"; 

Aber dies nicht:

$message .= '<tr><td>1</td><td>2</td>\r\n'; 

Die \r\n müssen in doppelte Anführungszeichen gesetzt werden, da sonst die Zeichen erhalten zu dem Text nur hinzugefügt statt Erstellen eines Wagenrücklaufs/Zeilenumbrüche.

+1

Sind Sie sicher, dass dies die PHP Mail-Funktion und nicht der SMTP-Server ist? Wenn es PHP ist -> Gibt es einen PHP-Fehler dafür gemeldet? Ich habe keine gefunden, aber dieses Verhalten sollte geändert werden (d. H. Dieses Verhalten oder zumindest einen Hinweis auslassen, wenn RFC kurze Zeilen erwartet). –

+0

Es ist zwei Jahre her, seit ich das gefunden habe, aber es scheint vernünftig/wahrscheinlich, dass es der SMTP-Server und nicht die Mail-Funktion sein könnte. – Mordred

6

War vor dem gleichen Problem und versuchte die meisten dieser Lösungen, aber es hat nicht funktioniert für mich. Es scheint, wenn die Linie zu lang ist, um eine Mail-Funktion hinzuzufügen, fügt sie Platz um 900 Zeichen hinzu. Die folgende Lösung zum Hinzufügen von Wordwrap hat also für mich funktioniert.

Mail ($ zu, $ Betreff, wordwrap ($ Nachricht), $ Header);

+0

Ziemlich einfache Lösung, obwohl dies Ihren eigentlichen Inhalt Text mit unnötigen '
' s werfen könnte. Wenn Ihnen das egal ist, oder Sie nicht garantieren können, dass die \ '\ r \ n 's aufgrund von variablem Text eingefügt werden müssen, dann ist dies eine akzeptable Lösung. – Mordred