2009-10-15 11 views
20

Ich verwende das Zend-Framework, um Mail zu senden. Sobald die Konfiguration durchgeführt wird und der Code geschrieben es läuft alles auf einen Anruf nach unten:Wie kann ich überprüfen, ob eine Mail mit Zend_Mail versendet wurde?

$Mail->send($Transport) 

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

Was ist der kugelsichere programmatische Weg, um sicherzustellen, dass E-Mails bei Verwendung von Zend_Mail korrekt gesendet wurden?

EDIT: Wenn ich meine gesendet, meine ich an den SMTP-Server gesendet.

+0

An den SMTP-Server gesendet? oder an eine MTA geschickt? – Mez

Antwort

34

Im Allgemeinen wird Zend_Mail eine Ausnahme auslösen, wenn beim Sendevorgang etwas nicht in Ordnung ist - dies hängt jedoch stark von der verwendeten Zend_Mail_Transport_* ab.

Sie haben zwei Möglichkeiten:

  • Zend_Mail_Transport_Sendmail (der Transport Standard) stützt sich auf mail(). Wenn mail() kehrt false, wirft Zend_Mail_Transport_Sendmail ein Zend_Mail_Transport_Exception (keine E-Mails senden). 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 für die Lieferung akzeptiert wurde, andernfalls FALSE.

    Es ist wichtig zu beachten, dass, nur weil die E-Mail für die Lieferung angenommen wurde, bedeutet es nicht, dass die E-Mail tatsächlich das beabsichtigte Ziel erreichen wird.

  • Zend_Mail_Transport_Smtp sendet die E-Mail das SMTP-Protokoll verwenden, das in Zend_Mail_Protocol_Smtp eingekapselt ist. In diesem Fall erhalten Sie eine Zend_Mail_Protocol_Exception immer dann, wenn etwas gegen das SMTP-Protokoll verstößt (z. B. das Senden von E-Mails ohne Angabe der Absenderadresse) oder der STMP-Server einen Fehler meldet oder die Verbindung abbricht.

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

+0

Entschuldigung, ich habe deinen Punkt über das Versenden der E-Mail über einen STMP-Server gelesen - du kannst Punkt 1 in meiner Antwort überspringen. –

+0

Sehr gut +1,;) –

+0

Ich bekomme Verbindung Zeitüberschreitung Fehler, wenn ich Zend_Mail_Transport_Smtp..What kann die Ursachen ??? –

0

Ich denke, es ist nicht. Wenn das Senden fehlschlägt, erhalten Sie eine Ausnahme. Aber das ist nur ein Haken, dass die Funktion send() korrekt funktioniert hat. Es bedeutet nicht, dass die Post gesendet wurde.

Ich denke, der einzige Weg, um die Post geliefert wurde, ist ein Bestätigungscode Link in die Mail einfügen und Benutzer klicken Sie darauf.

+0

Ich meine, an den SMTP-Server gesendet nicht überprüfen, dass es geliefert wurde. –

+0

Dann reicht es, dass die Zend_Transport_SendMail() keine Exception wirft;) –

Verwandte Themen