【问题标题】:PHPMailer do not send if email is invalid如果电子邮件无效,PHPMailer 不发送
【发布时间】:2016-09-02 00:44:19
【问题描述】:

我正在使用 PHPMailer 通过联系表格发送电子邮件。 当我在输入字段中输入无效的电子邮件地址时,仍会发送电子邮件。我想同时执行客户端和服务器端验证。

PHPMailer 是否有内置的验证系统来检查无效的电子邮件地址?如果输入的电子邮件无效,我想返回错误而不发送电子邮件。

【问题讨论】:

  • “无效”是什么意思? PHPMailer 确实有验证码,应该在允许发送电子邮件之前检查电子邮件地址。
  • 但在我的情况下,我可以输入类似“sdjfygsdfisdf”的电子邮件,但我仍然会在收件箱中收到它。无效是指不是实际的电子邮件地址。
  • but in my case I could enter something like 'sdjfygsdfisdf' as an email and I still receive it in my inbox 所以你的收件箱会在sdjfygsdfisdf 上收听??
  • 我要提醒大家,有效的收件人地址不必包含@... 部分。 @dognose 肯定 - 这几乎就是邮件系统的工作方式。如果未提供域,则假定为本地域(除非 MTA 另有配置)。

标签: php validation email phpmailer


【解决方案1】:

验证电子邮件地址的最简单、最正确的方法是使用filter_var。您可以编写一个函数来验证它们,然后再将它们发送到 PHPMailer,而不是依赖于修补的 PHPMailer。

function validateEmailAddr($addr) {
    // note: do not attempt to write any regex to validate email addresses;
    // it will invariably be wrong
    return filter_var($addr, FILTER_VALIDATE_EMAIL);
}

【讨论】:

  • 但以防万一,我还有一个内置验证phpmailer.github.io/PHPMailer/classes/…
  • 那么如何使用 phpmailer 验证而不是我自己的验证呢?我认为 PHPMailer 开发人员比我更了解他们在做什么。
  • if (!PHPMailer::validateAddress($email)){ ... not valid, don't send email... } else { ... is valid, send email ... }
  • 当您添加地址时,PHP 无论如何都会进行验证。您不必为自己再做一次;你只需要处理它产生的错误。
  • 在上面添加代码后,类似“skdfuhsdfsd”的内容是无效的电子邮件,因此不会发送。那么您链接到 (stackoverflow.com/questions/2386544/…) 的代码会捕获无效的电子邮件错误吗?
【解决方案2】:

您说您可以输入“sdjfygsdfisdf”之类的内容,但仍会收到发送给您的电子邮件。

这很奇怪。因为在 PHPMailer 中添加任何电子邮件地址('to'、'cc'、'bcc'、'replyto')都将通过 addOrEnqueueAnAddress() 函数,该函数确实包括验证检查。添加“发件人”地址使用不同的代码,但也会进行验证检查。

这里最明显的一点是,您实际上并没有进行任何错误检查来捕获这些错误。

根据您是否让 PHPMailer 使用异常,当您给它一个错误的地址时,您可能只是从像 setFrom() 这样的函数返回一个 false 值。如果您忽略该值并继续,那么是的,电子邮件仍然会发送。

所以你需要添加一些错误处理。检查返回false的函数调用。

但是我更喜欢的建议是切换到对错误处理程序使用异常——PHPMailer 只需设置一个标志就可以做到这一点。这将使错误处理更容易,因为您不需要在每个函数调用上检查 false;只需将整个内容包装在 try catch 块中,然后在最后一次性完成错误处理。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
  • 2023-03-20
  • 1970-01-01
  • 2020-09-01
相关资源
最近更新 更多