3

我正在根据表单数据向用户发送电子邮件。在查看了Mail的文档后,我想出了如何发送电子邮件。但是,假设用户在输入中输入错误,我如何向用户显示他们的电子邮件被退回?

这是我的代码不起作用

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!";
}

“不工作”意味着我可以写一封随机的电子邮件,比如dfgkndgrigpergerg@fioerjoif.com它会说"No errors, all sent successfully!"

4

3 回答 3

1

简单的答案是您无法在 Laravel 中验证这一点。

你在 laravel 配置中提供了一个发件人地址,如果你从这个地址发送一封电子邮件到一个不存在的地址,它仍然会被发送到你的 smtp-service 和保存地址域名的接收服务器。在某些情况下,您会从该服务器返回一个非收件人的答案,而在某些情况下您不会。这与您从 Laravel 还是从其他邮件客户端应用程序发送电子邮件无关。

如果你想阻止用户做 type-o's,你应该考虑添加一个验证字段并让用户重新输入电子邮件地址并使用 Laravel 中的 _confirmation 验证规则来验证它们。(https://laravel.com/docs/5.2/validation#rule-confirmed

于 2016-06-07T13:07:46.030 回答
1

我认为这是不可能的,但经过搜索,我发现了这个:

https://github.com/hbattat/verifyEmail

是一个 PHP 函数,可轻松用于验证电子邮件地址并确保其有效且确实存在于邮件服务器上。

该函数连接到邮件服务器并检查邮箱是否存在。

只需调用函数:

verifyEmail('some.email.address@example.com', 'my.email.address@my-domain.com');

第一个电子邮件地址“some.email.address@example.com”是要检查的,第二个“my.email.address@my-domain.com”是要提供给服务器的电子邮件地址(只需用于测试,但如果它是有效的电子邮件会更好)

如果电子邮件 some.email.address@example.com 有效,这将重新输入字符串“valid”,如果电子邮件无效,则返回“invalid”

希望能帮助到你!

于 2016-06-07T14:07:03.877 回答
0

只是想补充一点,您永远不应该信任 Mail::failures(),因为它只会在非常特殊的情况下返回错误,而这几乎永远不会。例如,SMTP 可能会立即返回失败,但 sendmail 几乎从不返回。Mail:failures() 可能适用于处理意外的发件人错误(身份验证失败或类似情况),但不适用于验证。

所以,是的,大多数情况下,您只能在向其发送电子邮件后才能确定地址是否正确。

于 2016-06-07T13:17:34.757 回答