Добрый день, ребята,
Отправляю сообщение, подобное этому: Laravel 5: Отправка электронной почты. Вот как я это делаю:
$mail_status = Mail::send( 'emails.followup', $data, function( $message ) use ($data) {
$message->to( $data['email'] )
->from( $data['email_from'], $data['email_name'] )
->subject( $data['subject'] );
});
if($mail_status) {
$ret_status = 'sent';
}
else
$ret_status = 'sent_failed';
Теперь, если $ret_status
"sent_failed", я хочу знать, что произошло. Как мне это сделать? Как я могу увидеть сообщение с почтового сервера?
Вот мой файл .env
:
MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=465
MAIL_USERNAME=noreply@mydomain.com
MAIL_PASSWORD=thepassword
MAIL_ENCRYPTION=ssl
UPDATE:
Похоже, что подход выше Laravel 4. Если вы знаете, как получить код ошибки с помощью Laravel 5+, я могу считать его правильным ответом.
Ответ 1
Вы можете использовать try catch для этого, также вы ошибаетесь, что используете $email, $email_from, $email_name, $subject
, не переходя в область функций.
try{
$mail_status = Mail::send( 'emails.followup', $data, function( $message ) use ($data, $email, $email_from, $email_name, $subject) {
$message->to( $email )
->from( $email_from, $email_name )
->subject( $subject );
});
//If error from Mail::send
if($mail_status->failures() > 0){
//Fail for which email address...
foreach(Mail::failures as $address) {
print $address . ', ';
}
exit;
}
}
catch(\Exception $e){
// Get error here
print $e->getMessage();
exit;
}
Добавлена печать с ошибками для адреса электронной почты, чтобы проверить, не поступил ли адрес электронной почты.
Ответ 2
Проверка Mail::failures()
сразу после Mail::send()
приведет к возврату массива неудачных адресов электронной почты, на которые вы пытались отправить электронное письмо.
Однако, насколько я знаю, вы не можете получить точную ошибку при сбое, используя фасад Mail. Для этого вам нужно установить отладку true на .env
и проверить журнал Laravel.
Ответ 3
- Чтобы получить dev-версию ошибок (на экране), установите в ваш .env файл
APP_DEBUG=true
- Чтобы получить точное сообщение, сделайте попытку catch, но поймите
Swift_TransportException
fooobar.com/info/505445/...
- Вы также можете, при необходимости, получить экземпляр почтовой программы через
app('mailer')
и провести там некоторые исследования.
вот рабочий пример:
try{
$mail_status = Mail::send( 'emails.followup', $data, function( $message ) use ($data) {
$message->to( $data['email'] )
->from( $data['email_from'], $data['email_name'] )
->subject( $data['subject'] );
});
}catch(\Swift_TransportException $e){
dd($e, app('mailer'));
}
и результат dd()
:
Swift_TransportException {#237 ▼
#message: """
Expected response code 250 but got code "530", with message "530 5.7.1 Authentication required\r\n
"
"""
#code: 530
#file: ...