2009-10-15 14 views
20

Korzystam z Zend Framework do wysyłania poczty. Po config jest zrobione i kod napisany to wszystko sprowadza się do jednego połączenia:Jak sprawdzić, czy wiadomość została wysłana podczas korzystania z Zend_Mail?

$Mail->send($Transport) 

Jak mogę sprawdzić, że ta wiadomość została wysłana poprawnie? Czytałem gdzieś, że Zend Mail rzuca wyjątek, ale inni ludzie mówią, że czasami tak nie jest.

Jaki jest kuloodporny, programowy sposób zapewnienia, że ​​poczta została poprawnie wysłana podczas korzystania z Zend_Mail?

EDYCJA: Kiedy mam na myśli wysłane, mam na myśli wysłanie do serwera SMTP.

+0

Wysłać na serwer SMTP? lub wysłane do MTA? – Mez

Odpowiedz

34

Generalnie Zend_Mail wyrzuci wyjątek, jeśli dzieje się coś złego w procesie wysyłania - ale zależy to w znacznym stopniu od używanego Zend_Mail_Transport_*.

Masz dwie możliwości:

  • Zend_Mail_Transport_Sendmail (transportu domyślne) opiera się na mail(). Jeśli mail() zwraca false, Zend_Mail_Transport_Sendmail wyrzuca Zend_Mail_Transport_Exception (Nie można wysłać poczty). Wartość zwracana sama w sobie nie jest bardzo niezawodna. W tym podręczniku jest mowa o wartości zwracanej:

    Zwraca TRUE, jeśli wiadomość została pomyślnie przyjęta do dostawy, w przeciwnym razie FALSE.

    Należy pamiętać, że tylko dlatego, że wiadomość została przyjęta do dostawy, NIE oznacza to, że poczta faktycznie dotrze do miejsca przeznaczenia.

  • Zend_Mail_Transport_Smtp wysyła wiadomość e-mail przy użyciu protokołu SMTP, który jest zamknięty w Zend_Mail_Protocol_Smtp. W takim przypadku dostaniesz Zend_Mail_Protocol_Exception, gdy coś albo narusza protokół SMTP (wysyłając pocztę bez podawania adresu nadawcy, np.), Albo serwer STMP zgłasza błąd lub czas połączenia.

    Więc jeśli nie ma wyjątku podczas rozmowy z serwerem STMP, możesz być pewien, że serwer zdalny przynajmniej zaakceptował twoją pocztę.

+0

Przepraszam, że przeczytałem twój punkt o wysłaniu maila przez serwer STMP - możesz pominąć punkt 1 w mojej odpowiedzi. –

+0

Bardzo dobry +1,;) –

+0

Otrzymuję błąd przekroczenia limitu czasu połączenia, gdy używam Zend_Mail_Transport_Smtp .. Co może być przyczyną ??? –

0

Chyba nie. Jeśli "wysyłanie" nie powiodło się, otrzymasz wyjątek. Ale to tylko sprawdzenie, czy funkcja send() działała poprawnie. To nie znaczy, że wiadomość została wysłana.

Domyślam się, że jedynym sposobem na dostarczenie poczty było dostarczenie linku z kodem potwierdzającym do wiadomości e-mail i sprawienie, aby użytkownik kliknął ją.

+0

Mam na myśli wysłanie do serwera SMTP, nie sprawdzanie, czy zostało dostarczone. –

+0

Niż myślę, że to wystarczy, że Zend_Transport_SendMail() nie rzuca wyjątku;) –

Powiązane problemy