如何检测邮件:使用Laravel 5.2失败
我正在向用户发送基于表单数据的电子邮件。在查看Mail的文档后,我想出了如何发送电子邮件。但是,假设用户在输入中输入了错字,我如何向用户显示他们的电子邮件被退回?如何检测邮件:使用Laravel 5.2失败
这里是我的代码不能正常工作
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!";
}
“不工作”意味着我可以在随机电子邮件写如[email protected]
,它会说"No errors, all sent successfully!"
答案很简单,你可以在Laravel不验证这一点。
你在你的laravel配置中提供一个from地址,如果你从这个地址发送一个邮件到一个不存在的地址,它仍然会被发送到你的smtp服务和接收服务器,地址域名。在某些情况下,您将从该服务器返回一个非收件人答复,并且在某些情况下您不会。这不取决于您从Laravel或其他邮件客户端应用程序发送的电子邮件。
如果您想阻止用户执行type-o操作,您应该考虑添加验证字段,并让用户重新输入电子邮件地址并使用Laravel中的_confirmation验证规则验证它们。 (https://laravel.com/docs/5.2/validation#rule-confirmed)
只是想补充一点,你永远不要相信Mail :: failures(),因为它只会在非常特殊的情况下返回错误,这几乎从不会。例如,SMTP可能立即返回失败,但sendmail几乎不会。邮件:失败()可能适合处理意外的发件人错误(验证失败或类似错误),但不适用于验证。
所以是的,大多数情况下,您只能在发送邮件后发现地址是否正确。
我认为是不可能的,但搜索后,我发现这一点:
https://github.com/hbattat/verifyEmail
是可以很容易地用于验证电子邮件地址,并确保它是有效的PHP函数并且存在于邮件服务器上。
此函数连接到邮件服务器并检查邮箱是否存在。
只需调用该函数:
verifyEmail('[email protected]', '[email protected]');
第一个电子邮件地址 '[email protected]' 是要检查的一个,第二个“my.email。 [email protected]'是提供给服务器的电子邮件地址(仅用于测试,但如果它是有效的电子邮件会更好)
如果电子邮件有一些.email.address @ example.com有效,如果电子邮件无效,则为“无效”
希望它有帮助!
你对此有任何更新吗? – Sangar82
我已经重写了这段代码,现在它是一个类,可以通过作曲家安装。看看最新版本。谢谢 –