如果需要验证电子邮件是否真实、有效或可以安全使用,Laravel 的内置验证规则可能还不够。
今天,我们将逐步向你展示如何进行 Laravel 电子邮件验证,从使用验证方法到创建自定义验证规则。不过,如果你正在寻找一种更简单的方法–一种不只检查格式的方法–你还会发现一种更好的替代方法,可以将无效、虚假或有风险的电子邮件拒之于列表之外。
如何进行 Laravel 电子邮件验证?

Laravel 提供内置的电子邮件验证规则,还可以创建自定义验证规则以满足特定需求。我们将指导你设置 Laravel 电子邮件验证、处理验证错误、实现 DNS 和 RFC 验证。
#1 在 Laravel 中使用 validate 方法验证电子邮件
Laravel 的 validate 方法在 Illuminate\Http\Request 类中可用,可以轻松验证传入的 HTTP 请求。下面的例子演示了控制器方法中的基本电子邮件验证规则。

这些规则的作用:
- required– 字段不能为空。
- email:rfc,dns – 检查电子邮件是否遵循 RFC 标准,并使用 DNS 记录验证域名。
如果验证失败,Laravel 会自动重定向用户,并在会话中闪烁错误信息。
#2 使用表单请求验证,使代码更简洁
表单请求类有助于将验证逻辑与控制器分开。运行此命令:

然后,更新 app/Http/Requests/ 中的新类:

现在,更新控制器以使用它:

这种方法使代码更简洁,可重复使用。
#3 自定义验证错误信息
Laravel 有默认的错误信息,但可以在 resources/lang/en/validation.php 中自定义:

或者在表单请求类中:

#4 创建自定义电子邮件验证规则
如果需要更高级的功能,请创建自定义验证规则:

更新 app/Rules/ValidEmail.php:

将其应用于控制器内部:

这允许自定义错误处理和高级验证。
#5 处理验证错误
如果验证失败,Laravel 会自动返回错误信息。在 Blade 中显示信息:

对于 API 请求,Laravel 会发送 422 错误响应:

#6 高级电子邮件验证:DNS 和 MX 记录
要验证电子邮件的域名,请使用 DNS 验证:

- rfc– 确保电子邮件遵循RFC 5322。
- dns– 检查域名是否有MX 记录(即可以接收电子邮件)。
要进行自定义 DNS 验证,请创建一条规则:

更新 app/Rules/DnsValidator.php:

将其应用于控制器内部:

#7 在 JSON API 请求中验证电子邮件
对于 API 请求,返回 JSON 响应而不是重定向:

Laravel 会自动返回:

手动处理验证:

为什么使用 Laravel 验证电子邮件不理想?
Laravel 电子邮件验证有其局限性。它只能检查电子邮件格式是否正确,而无法验证电子邮件是否真实、有效或可安全使用。下面是为什么仅仅依赖 Laravel 的内置验证规则可能不是最佳选择的原因。
它只检查地址格式
Laravel 提供的验证方法可确保电子邮件看起来正确无误,但无法确认地址是否存在。验证规则关注的是结构,而不是可送达性。这意味着无效邮件、错别字甚至假地址仍然可以通过。
它不包括一网打尽的地址或垃圾邮件陷阱
Laravel 的验证方法无法检测 “一网打尽 “的电子邮件地址,这些地址会接收所有传入的邮件,无论是否有效。它也无法过滤垃圾邮件陷阱,而垃圾邮件陷阱是电子邮件提供商用来捕捉使用过期或购买的电子邮件列表的发件人。如果没有这些检查,您的电子邮件列表中就会充满有风险的地址。
它需要编码知识来实施
设置 Laravel 电子邮件验证需要使用 PHP 文件、PHP 命名空间应用程序结构和编写自定义验证规则。如果你不熟悉 Laravel 的语法,应用验证规则可能会很困难。此外,还需要使用验证方法手动配置自定义错误信息。
无法实现自动化
除了表单提交之外,Laravel 并不提供电子邮件验证的内置自动化功能。你需要集成外部 API 或编写自定义验证规则来动态验证电子邮件。即使有自定义的错误消息系统,手动处理验证失败也会减慢开发速度。
使用 Laravel 验证电子邮件的更好选择
虽然 Laravel 的电子邮件验证规则有助于进行基本的格式检查,但还不足以维护干净可靠的电子邮件列表。要验证电子邮件是否有效,可以考虑使用一种工具,确保您的电子邮件能送达真实用户,而不会有退信或垃圾邮件陷阱的风险。
Bouncer 就是一个很好的解决方案。

Bouncer 如何验证电子邮件:
您可以上传您的电子邮件地址列表,剩下的就交给 Bouncer吧:
- 语法和格式检查– 确保电子邮件遵循正确的结构(如 name@example.com)。
- 域和 MX 记录检查– 验证域是否存在,以及是否已配置邮件服务器以接收电子邮件。
- SMTP 验证– Bouncer连接到收件人的邮件服务器(不发送电子邮件),检查收件箱是否存在以及是否可以接收邮件。
- 全盘接收和垃圾邮件陷阱检测– 识别接受所有电子邮件(甚至是无效电子邮件)的风险域或垃圾邮件发送者陷阱。
- 毒性检查– 标记潜在的有害电子邮件,如一次性、临时或已知的欺诈性地址。
Bouncer:Laravel 的电子邮件验证未涵盖的内容
Bouncer 提供了 Laravel 内置验证规则所不具备的功能 – 真正的验证,而不仅仅是检查格式。
Bouncer 确认电子邮件是否有效
Laravel 应用程序依赖于基于语法的验证。Laravel 提供的验证方法只检查电子邮件的结构是否正确。它并不检查收件箱是否存在,也不检查电子邮件是否可以到达。而 Bouncer 则通过连接邮件服务器来验证有效的邮件地址,确保每个地址都是真实有效的。
它能捕捉无效、恶意和有毒电子邮件
Laravel 版本更新改进了电子邮件验证功能,但仍无法检测到垃圾邮件陷阱、欺诈地址或一网打尽的域名。Bouncer 的Bouncer Shield功能可即时拦截无效和恶意邮件,保护您的列表免受可能损害发件人声誉的危险联系人的影响。
无需编码的自动验证
在 PHP 文件中编写自定义验证规则意味着要手动配置逻辑、处理验证失败并定义自定义错误信息。Bouncer 通过易于使用的平台和应用程序接口消除了这些额外工作,使批量电子邮件验证变得简单 – 无需手动编码。
检查格式之外的交付能力洞察
虽然 Laravel 验证规则可以标记出丢失的”@”符号,但它们并不能深入了解电子邮件的可送达性。Bouncer 提供的可送达性工具包可测试收件箱位置、检查电子邮件验证和监控黑名单,以确保您的邮件能送达真实用户。
批量和实时验证,提高准确性
Laravel 应用程序使用控制器中的验证方法一次处理一封邮件。而 Bouncer 则支持批量验证,让你能在一次请求中清理数千个电子邮件地址。它的实时应用程序接口(API)可确保即时验证新邮件,防止无效注册并降低退订率。
查看如何逐步验证电子邮件地址,无需编码。
为什么选择 Bouncer 而不是 Laravel 的验证?
- Laravel 的验证方法确保电子邮件看起来有效。Bouncer 确认它是否真的有效。
- Laravel 需要自定义验证规则来进行高级检查。Bouncer 会自动完成。
- Laravel 不会拦截垃圾邮件陷阱、陷阱邮件或有毒邮件。但 Bouncer 会。
- Laravel 需要编码知识来实现验证。Bouncer 不需要编码。
- Laravel 无法验证可送达性。Bouncer 通过真正的洞察力提高收件箱的投递率。
对于依赖干净、有效电子邮件地址的企业来说,Bouncer 可能是更好的选择。它能确保您的电子邮件到达正确的收件箱–技术上有效且可送达。
结论
在决定使用 Laravel 电子邮件验证之前,你应该知道这一点 – 它并不能确认电子邮件地址是否有效。它不会捕获虚假邮件、垃圾邮件陷阱或可能损害发件人声誉的危险地址。此外,设置自定义验证规则需要编码知识,即使如此,Laravel 也不会验证基本格式以外的有效电子邮件地址。
Bouncer 可能是更好的选择。它能验证真实邮件、拦截垃圾邮件陷阱并自动完成整个过程,无需编码。无论您需要批量验证还是实时邮件检查,Bouncer 都能确保您的邮件到达实际收件箱,而不是死胡同。
不要只检查电子邮件的外观是否正确,还要确保它能正常工作。今天就使用免费点数试用 Bouncer。

