Witam

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:
  1. <?php
  2. // wcześniej jest nieistotne pobranie zadania newslettera i przypisanych adresów email
  3. require 'Mail.php';
  4. require 'Mail/mime.php';
  5. $headers = array(
  6.     'Subject'   => $newsletter->subject,
  7.     'From'      => Kohana::config( 'cms.from' ),
  8. );
  9. $crlf = "\n";
  10. $i = 0;
  11. foreach ($emails as $email) {
  12.            $mime = new Mail_mime( $crlf );
  13.  
  14.            //build the message
  15.            $search = array( '{$organisation_name}' );
  16.            $replace = array( $email->name );
  17.  
  18.            $msg = str_replace( $search, $replace, $newsletter->body );
  19.            $msgPlain = appHelper::prepareTextEmail($msg);
  20.  
  21.            $mime->setTXTBody( $msgPlain );
  22.            $mime->setHTMLBody( $msg );
  23.  
  24.            $body = $mime->get();
  25.            $hdrs = $mime->headers( $headers );
  26.  
  27.            $mail =& Mail::factory( 'mail' ); // wysyłam metodą mail
  28.  
  29.            // send email
  30.            $resource = $mail->send( $email->email, $hdrs, $body );
  31.  
  32.            echo '<p>proba wyslania do: '.$email->email.'</p>'; // tutaj wypisuje mi poprawnie adresy
  33.            if (PEAR::isError($resource)) { // sprawdzam czy wystąpił błąd w mail->send
  34.                // error
  35.                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
  36.                    $this->mEmails->updateNewsletterLog( $newsletter->id_newsletter, $email->id_organisation, 2 );
  37.                else
  38.                    $this->mEmails->updateNewsletterLog( $newsletter->id_newsletter, $email->id_organisation, 3 );
  39.            } else {
  40.                // success
  41.                $this->mEmails->updateNewsletterLog( $newsletter->id_newsletter, $email->id_organisation, 1 );
  42.                $time_end = time();
  43.                ++$i;
  44.            }
  45.            echo $resource->getMessage(); // tutaj zwraca mi błąd który umieszczam poniżej
  46. }
  47. // Fatal error: Call to a member function getMessage() on a non-object in
  48. ?>


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:
  1. <?php
  2. echo (PEAR::isError($resource) === TRUE) ? 'TRUE' : 'FALSE';
  3. if ( PEAR::isError($resource) === TRUE ) {
  4.    // kod jeśli błąd
  5. } else {
  6.    //kod jeśli nie ma błędu
  7. }
  8. ?>

Echo wyświetla mi FALSE, ale mimo to wykonuje się kod dla TRUE.