Мне просто интересно, как вы можете проверить, было ли отправлено электронное письмо или оно не удалось при использовании EmailComponent в CakePHP?

Например, сейчас я использую это так:

$this->Email->from='<xyz@yahoo.com>';  
$this->Email->to='<abc@gmail.com>';
$this->Email->sendAs='both';
$this->Email->delivery = 'debug';
$this->Email->send();
3
Petar Vasilev 27 Мар 2013 в 04:02
2
Чтобы получать правильные ответы, вам всегда необходимо предоставлять версию cakephp, с которой вы работаете!
 – 
mark
27 Мар 2013 в 14:51

1 ответ

Лучший ответ

$this->Email->send() должен вернуть истину, если оно было отправлено успешно. Вы можете попробовать что-то вроде:

if ( $this->Email->send() ) {
    // Success
} else {
    // Failure
}

Справка:

http://api.cakephp.org/2.3/class-EmailComponent.html

Примечание. Если вы используете CakePHP 2.x, вы можете попробовать вместо этого использовать класс CakeEmail; EmailComponent устарел ( Справочник). Если вы используете 1.x, продолжайте. :п

Изменить:

Как отмечено в комментариях, если вы используете 2.x, вы должны иметь в виду, что CakeEmail (который используется EmailComponent) может вызвать исключение. Вы можете справиться с этим с помощью самого CakePHP или добавив try / catch :

try {
    if ( $this->Email->send() ) {
        // Success
    } else {
        // Failure, without any exceptions
    }
} catch ( Exception $e ) {
    // Failure, with exception
}
10
BigBagel 27 Мар 2013 в 19:20
1
Разве для этого не нужен блок try catch? Поскольку он может генерировать исключения ... В документации говорится: «Мы рекомендуем вам использовать try / catch, чтобы гарантировать правильную доставку ваших сообщений».
 – 
mark
27 Мар 2013 в 13:48
Не могли бы вы указать на документацию по этому поводу? У вас может быть верная точка зрения, но я не смог ее найти. Сам EmailComponent, кажется, не генерирует исключения сам по себе, если я загляну внутрь источника.
 – 
thaJeztah
27 Мар 2013 в 14:39
Компонент электронной почты просто обертывает send () CakeEmail, что и делает. Следовательно, он также генерирует исключения и может создать некоторые проблемы, если его не уловить должным образом. Его также можно найти здесь: book.cakephp.org/2.0/en /core-libraries/components/email.html
 – 
mark
27 Мар 2013 в 14:50
Да, CakeEmail может вызвать исключение SocketException, если вы не установите какие-либо из необходимых свойств. Однако, если OP использует 1.x, EmailComponent, очевидно, не будет использовать CakeEmail. Для 2.x я обычно просто позволяю Cake обрабатывать любые исключения за меня с помощью специального обработчика исключений, но использование try / catch, безусловно, является хорошей идеей. Я обновлю свой ответ, чтобы указать на это. Спасибо, Марк.
 – 
BigBagel
27 Мар 2013 в 19:19
Думаю, я пробовал это и не сработал, но попробую еще раз. Я уверен, что еще что-то испортил. Спасибо
 – 
Petar Vasilev
27 Мар 2013 в 20:27