20 Stimmen

Wie kann man überprüfen, ob eine Mail gesendet wurde, wenn man Zend_Mail verwendet?

Ich verwende das Zend-Framework zum Senden von E-Mails. Sobald die Konfiguration fertig ist und der Code geschrieben ist, läuft alles auf einen Aufruf hinaus:

$Mail->send($Transport)

Wie kann ich überprüfen, ob diese E-Mail korrekt gesendet wurde? Ich habe irgendwo gelesen, dass Zend Mail eine Ausnahme wirft, aber andere Leute haben gesagt, dass dies manchmal nicht der Fall ist.

Was ist der sicherste programmatische Weg, um sicherzustellen, dass Mails bei der Verwendung von Zend_Mail richtig gesendet wurden?

EDIT: Mit "gesendet" meine ich "an den SMTP-Server gesendet".

35voto

Stefan Gehrig Punkte 80686

Im Allgemeinen Zend_Mail wird eine Ausnahme auslösen, wenn im Sendeprozess etwas schief läuft - dies hängt jedoch stark von der Zend_Mail_Transport_* verwendet werden.

Sie haben hier zwei Möglichkeiten:

  • Zend_Mail_Transport_Sendmail (der Standardtransport) stützt sich auf mail() . Wenn mail() gibt zurück. false , Zend_Mail_Transport_Sendmail wirft eine Zend_Mail_Transport_Exception ( Mail kann nicht gesendet werden ). Der Rückgabewert selbst ist nicht sehr zuverlässig. Dies ist, was das Handbuch über den Rückgabewert sagt:

    Gibt TRUE zurück, wenn die Mail erfolgreich zur Zustellung angenommen wurde, andernfalls FALSE.

    Es ist wichtig zu beachten, dass die Annahme der Post zur Zustellung NICHT bedeutet, dass die Post auch tatsächlich den vorgesehenen Bestimmungsort erreicht.

  • Zend_Mail_Transport_Smtp sendet die E-Mail über das SMTP-Protokoll, das in Zend_Mail_Protocol_Smtp . In diesem Fall erhalten Sie eine Zend_Mail_Protocol_Exception wenn entweder eine Verletzung des SMTP-Protokolls vorliegt (z. B. das Versenden von E-Mails ohne Angabe einer Absenderadresse) oder der STMP-Server einen Fehler meldet oder die Verbindung abbricht.

    Wenn also beim Gespräch mit dem STMP-Server keine Ausnahme ausgelöst wird, können Sie sicher sein, dass der entfernte Server Ihre E-Mail zumindest akzeptiert hat.

1voto

Tomáš Fejfar Punkte 10870

Ich denke, das ist es nicht. Wenn das "Senden" fehlgeschlagen ist, erhalten Sie eine Ausnahme. Aber das ist nur eine Überprüfung, ob die Funktion send() richtig funktioniert hat. Es bedeutet nicht, dass die Mail versendet wurde.

Ich denke, die einzige Möglichkeit, um sicherzustellen, dass die E-Mail zugestellt wurde, besteht darin, einen Bestätigungscode-Link in die E-Mail einzufügen und den Benutzer auf diesen klicken zu lassen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X