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:
<?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
$search = array( '{$organisation_name}' ); $replace = array( $email->name );
$msg = str_replace( $search, $replace, $newsletter->body ); $msgPlain = appHelper::prepareTextEmail($msg);
$mime->setTXTBody( $msgPlain );
$mime->setHTMLBody( $msg );
$body = $mime->get();
$hdrs = $mime->headers( $headers );
$mail =& Mail::factory( 'mail' ); // wysyłam metodą mail
// send email
$resource = $mail->send( $email->email, $hdrs, $body );
echo '<p>proba wyslania do: '.$email->email.'</p>'; // tutaj wypisuje mi poprawnie adresy 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;
}
echo $resource->getMessage(); // tutaj zwraca mi błąd który umieszczam poniżej }
// 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
echo (PEAR
::isError($resource) === TRUE) ?
'TRUE' : 'FALSE'; 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.
Ten post edytował grzesiek_g 25.10.2008, 11:39:38