在 Laravel 5 上检查邮件是不是发送成功
Posted
技术标签:
【中文标题】在 Laravel 5 上检查邮件是不是发送成功【英文标题】:Check mail is sent successfully or not on Laravel 5在 Laravel 5 上检查邮件是否发送成功 【发布时间】:2015-12-29 04:47:09 【问题描述】:我有一个可以使用这个在 Laravel5 上发送邮件的功能
/**
* Send Mail from Parts Specification Form
*/
public function sendMail(Request $request)
$data = $request->all();
$messageBody = $this->getMessageBody($data);
Mail::raw($messageBody, function ($message)
$message->from('yourEmail@domain.com', 'Learning Laravel');
$message->to('goper.zosa@gmail.com');
$message->subject('Learning Laravel test email');
);
return redirect()->back();
/**
* Return message body from Parts Specification Form
* @param object $data
* @return string
*/
private function getMessageBody($data)
$messageBody = 'dummy dummy dummy dummy';
并且发送成功。但是如何检查它是否已发送?喜欢
if (Mail::sent == 'error')
echo 'Mail not sent';
else
echo 'Mail sent successfully.';
我只是在猜测那个代码。
【问题讨论】:
你试过Mail::failures()
@haakym 如何更改我的代码以查看该代码是否有效?要解雇那种方法?谢谢
这有帮助吗? ***.com/questions/24772531/…
是的,我用那个,谢谢。但是如何知道这是否有效?
如果failures()
没有返回任何东西,那么它已经发送成功了。
【参考方案1】:
希望对你有帮助
Mail::failures()
将返回一组失败的电子邮件。
Mail::send(...)
if( count(Mail::failures()) > 0 )
echo "There was one or more failures. They were: <br />";
foreach(Mail::failures() as $email_address)
echo " - $email_address <br />";
else
echo "No errors, all sent successfully!";
来源:http://laravel.io/forum/08-08-2014-how-to-know-if-e-mail-was-sent
【讨论】:
至少找到答案 ;) laravel.io/forum/08-08-2014-how-to-know-if-e-mail-was-sent 从通知发送邮件时如何使用?【参考方案2】:我不完全确定这会奏效,但你可以试一试
/**
* Send Mail from Parts Specification Form
*/
public function sendMail(Request $request)
$data = $request->all();
$messageBody = $this->getMessageBody($data);
Mail::raw($messageBody, function ($message)
$message->from('yourEmail@domain.com', 'Learning Laravel');
$message->to('goper.zosa@gmail.com');
$message->subject('Learning Laravel test email');
);
// check for failures
if (Mail::failures())
// return response showing failed emails
// otherwise everything is okay ...
return redirect()->back();
【讨论】:
我不认为有成功次数的等效方法吗?Mail::successes()
与 Call to undefined method
一起引发错误。
laravel.com/api/5.2/Illuminate/Mail/Mailer.html 不。只需将收件人数减去失败数,即可获得成功数。
我收到“显示失败电子邮件的回复”我现在该怎么办?
@YoussefBoudaya 您想调试失败的电子邮件吗?你检查过你的错误日志吗?您可能还想深入了解 laravel 和 swiftmailer 代码库,看看是什么决定了一封电子邮件是否失败。
很好的解释,但我有另一种好奇心。例如,假设一个电子邮件地址是有效的,但由于 Internet 断开连接或其他原因可能是因为电子邮件地址无效而无法正确发送。 laravel 可以给出警告吗?【参考方案3】:
您还可以使用“Swift_TransportException”来识别任何错误。
try
//code to send the mail
catch(\Swift_TransportException $transportExp)
//$transportExp->getMessage();
【讨论】:
【参考方案4】:您可以为此使用 Mail::failures() 函数。 如果存在,它将包含一组失败的邮件,因此您可以使用下面的代码来检查它。
public function sendMail(Request $request)
$data = $request->all();
$messageBody = $this->getMessageBody($data);
Mail::raw($messageBody, function ($message) use ($messageBody)
$message->from('yourEmail@domain.com', 'Learning Laravel');
$message->to('goper.zosa@gmail.com');
$message->subject($messageBody);
);
// check for failed ones
if (Mail::failures())
// return failed mails
return new Error(Mail::failures());
// else do redirect back to normal
return redirect()->back();
【讨论】:
以上是关于在 Laravel 5 上检查邮件是不是发送成功的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:检查是不是有新项目添加到 db 表并安排一个工作给用户发送电子邮件
使用 gmail 发送 Laravel 5.5 邮件 [重复]