如何检测邮件:使用Laravel 5.2失败

如何检测邮件:使用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有效,如果电子邮件无效,则为“无效”

希望它有帮助!

+0

你对此有任何更新吗? – Sangar82

+0

我已经重写了这段代码,现在它是一个类,可以通过作曲家安装。看看最新版本。谢谢 –