Gibt es einen Fehler in der PHP mail () Funktion?

9

Ich hoffe, dass jemand mir helfen kann, da ich nicht weiß, was das Problem verursacht. Unsere Website hat eine Kontaktformular, mit Feldern für Name, E-Mail, Kind Name, Kind ID, & amp; Nachricht.

Wenn das Formular übermittelt wird, validiert der serverseitige PHP-Code die Formularfelder, & amp; Wenn alles in Ordnung ist, benutzt sie die eingebaute php mail () Funktion, um 2 E-Mails zu senden.

E-Mail 1 wird in einen Posteingang auf einem Exchange-Hostserver verschoben, der die Werte in den Formularfeldern enthält.

E-Mail 2 geht an die Person, die das Formular abschickt, dankend - wir melden uns in Kürze bei Ihnen.

Bei E-Mail 1 sind die Absender-, Antwort- und & amp; Return-Path-Header werden auf die E-Mail gesetzt, die im Formular eingegeben wurde, & amp; In der Funktion mail () ist die E-Mail-Adresse des Posteingangs des gehosteten Exchange-Servers der Parameter param.

Bei E-Mail 2 sind die Absender-, Antwort- und & amp; Return-Path-Header werden auf die E-Mail-Adresse des Posteingangs auf dem gehosteten Exchange-Server gesetzt, & amp; In der Funktion mail () ist die E-Mail-Adresse, die in das Formular eingegeben wird, param.

Der Host der Website hat die MX, PTR, SPF, & amp; TXT records sind so eingerichtet, dass E-Mails an & amp; von der E-Mail-Adresse des Posteingangs des gehosteten Exchange-Servers. Der Host der Website verwendet QMail als SMTP-Dienst, der die E-Mails tatsächlich sendet. In allen Tests ist QMail erfolgreich, wenn sowohl E-Mail 1 & amp; 2. Es gibt keinen Fehler durch die Funktion mail ().

Lokale Tests wurden mit IE8, Chrome und & amp; FF3.6.17. Der Code wurde zwischen den Tests, die dieses Problem zeigen, nicht geändert.

In allen Testfällen wird die E-Mail 2 (zurück an die Person, die das Formular abschickt) gut gesendet. E-Mail 1 hingegen arbeitet nur zeitweise. Das allgemeine Muster ist, dass das erste Mal, wenn das Kontaktformular mit jeder einzelnen E-Mail-Adresse im Formular verwendet wird, die E-Mail gesendet wird, und & amp; die Header & amp; um richtig zu sein.

Beim zweiten Mal, wenn das Kontaktformular mit einer zuvor verwendeten E-Mail-Adresse im Formular verwendet wird, wird der To-Parameter auf die E-Mail-Adresse im Formular gesetzt, die Kopfzeilen sind leer, & amp; trotz der falschen E-Mail-Adresse, die E-Mail

wird nicht empfangen. Die Supportmitarbeiter der Website haben möglicherweise ein anderes mögliches Symptom gefunden, nämlich dass nach dem Löschen der Cookies alle E-Mails mit der E-Mail-Adresse durchgehen. Die Seite verwendet jedoch keine Cookies in Bezug auf das Formular. Zuletzt probierte ich noch eine Weile (30 Min.?) Nachdem email 2's nicht durchgekommen waren, dann funktionierte ein weiterer Versuch, wonach die Email 2's wie oben beschrieben wieder vermasselt wurden.

Gibt es einen bekannten Fehler mit der mail () - Funktion von PHP in diesen Zeilen? Gibt es eine maximale Häufigkeit, mit der Mail () verwendet werden kann? Ich weiß nicht, warum der Code manchmal funktioniert, & amp; manchmal nicht. Die Mitarbeiter der Website sind ebenfalls ratlos. Der Versuch, dieses Thema zu googeln, scheint Foren zu füllen, in denen Leute verschiedene Module verwenden (Swift Mailer, PHPMailer, Pear Mail, etc.), aber da die Website live ist, bin ich vorsichtig, dass der automatisierte E-Mail-Code wiederhergestellt wird. p>

führt Fehler ein, die über die oben beschriebenen hinausgehen.

... bearbeitet 6jun11 ...

Entschuldigung, ich wusste nicht, dass ich meinen Beitrag bearbeiten könnte ...

Hier ist der relevanteste Code:

%Vor%

Die UserToSiteEmail () -Funktion verwendet die Daten aus dem Kontaktformular, wobei der Parameter $ fromEmail die E-Mail ist, die im Formular eingegeben wurde. Was Rackspace in den QMail-Protokollen finden konnte war, dass, wenn die zweite Verwendung derselben E-Mail im Kontaktformular gesendet wird, die E-Mail im Formular im Feld An endet, nicht in den Kopfzeilen und & amp; Die Adresse des E-Mail-Posteingangs wurde nirgends angezeigt (nicht einmal die Header - d. h., es wurde nicht getauscht). Das ist, obwohl derselbe Code die E-mail des Formulars korrekt in der Kopfzeile und & amp; die Adresse des E-Mail-Posteingangs im Feld An bei der ersten Übermittlung des Formulars (pro Browser).

Ich kann die HTML-Seite des Formulars bei Bedarf hinzufügen, aber in Bezug auf den Prozess, nachdem das Formular nach der Validierung von & amp; emailing, der php leitet auf eine thank-seite um. Ich bin mir nicht sicher, wie GET & amp; POST-Variablen bleiben nach der Dankeseite erhalten, da der einzige Weg zurück zur Seite darin besteht, den Link für das Kontaktformular erneut anzuklicken. Um den aktuellen Prozess zu sehen (ohne das Problem - wie es nur erscheint, wenn die Domäne des E-Mail-Posteingangs verwendet wird), hier ist ein Link zu einer Seite mit dem Link Kontakt uns in der Fußzeile: Ссылка .

Ich sehe das QMail-Protokoll, das anzeigt, dass der Fehler auch helfen könnte ...

%Vor%
  • O8
Orion 03.06.2011, 12:14
quelle

2 Antworten

4

Aufgrund Ihrer Beschreibung vermute ich, dass das Problem mit der Zeilenendung Ihrer Kopfzeilen zusammenhängen könnte.

Aus dem Handbuch:

  

zusätzliche_Kopfzeilen (optional)

     

... Mehrfach   Zusätzliche Header sollten mit getrennt werden   eine CRLF (\ r \ n).

     

...    Hinweis: Wenn keine Nachrichten empfangen werden,   Verwenden Sie nur ein LF (\ n). Einige Arme   Qualität Unix Mail Transfer Agents   Ersetzen Sie LF automatisch durch CRLF   (was dazu führt, dass CR verdoppelt wird, wenn CRLF ist   benutzt). Dies sollte ein letzter Ausweg sein,   weil es nicht mit »RFC 2822 übereinstimmt.

Ich bin mir nicht sicher, was Sie als PHP_EOL definiert haben, aber Sie könnten CRLF oder LF alleine versuchen.

    
Sylverdrag 09.06.2011 16:35
quelle
0

Klingt so, als würden Sie einige der Einträge $_GET oder $_POST nicht zwischen Einsendungen löschen.

Können Sie den fehlerhaften Code kopieren / einfügen?

    
warren 03.06.2011 12:23
quelle

Tags und Links