Używam do wysyłania wiadomości email PEAR z bibliotekami Mail i Mail_mime. Maile się wysyłają, lecz gdy sprawdzam czy wystąpił błąd mimo, że mail został poprawnie wysłany zwraca mi TRUE. Kawałek kodu:
<?php // wcześniej jest nieistotne pobranie zadania newslettera i przypisanych adresów email require 'Mail.php'; require 'Mail/mime.php'; 'Subject' => $newsletter->subject, 'From' => Kohana::config( 'cms.from' ), ); $crlf = "\n"; $i = 0; foreach ($emails as $email) { $mime = new Mail_mime( $crlf ); //build the message $msgPlain = appHelper::prepareTextEmail($msg); $mime->setTXTBody( $msgPlain ); $mime->setHTMLBody( $msg ); $body = $mime->get(); $hdrs = $mime->headers( $headers ); // send email $resource = $mail->send( $email->email, $hdrs, $body ); if (PEAR::isError($resource)) { // sprawdzam czy wystąpił błąd w mail->send // error if ( $email->status == 0 ) // sprawdzam tutaj status zapisany w bazie, 0 - nie wysyłany, 1 - sukces, 2- błąd-do ponowienia, 3-wystapiły dwa błędy, nie będzie już wysyłane $this->mEmails->updateNewsletterLog( $newsletter->id_newsletter, $email->id_organisation, 2 ); else $this->mEmails->updateNewsletterLog( $newsletter->id_newsletter, $email->id_organisation, 3 ); } else { // success $this->mEmails->updateNewsletterLog( $newsletter->id_newsletter, $email->id_organisation, 1 ); ++$i; } } // Fatal error: Call to a member function getMessage() on a non-object in ?>
Co oznacza ten błąd to wiem, ale dlaczego się on pojawia to nie mam pojęcia. Dodatkowo gdy nie umieszczę tego kodu powodującego błąd, mimo, że maile wysyłają się prawidłowo to do bazy zapisywane są wartości 3 zamiast 1 (już prędzej powinny się zapisywać wartości 2).
Dodam tylko, że to działa na frameworku KohanaPHP, ilość maili w kolejce nie jest wielka (30), więc nie martwię się o wydajność (cron będzie ustawiony na późne godziny nocne).
// edit
Może ja tego nie widzę bo za dużo czasu już patrzę w ten kod, ale:
<?php if ( PEAR::isError($resource) === TRUE ) { // kod jeśli błąd } else { //kod jeśli nie ma błędu } ?>
Echo wyświetla mi FALSE, ale mimo to wykonuje się kod dla TRUE.