我通过php向用户发送激活链接,我只有一个正则表达式来检查电子邮件是否包含*@*.*
,这很好,但我想检查电子邮件是否实际发送。< / p>
我尝试用
做到这一点if (mail(....)) {
// success
} else {
// error
}
但是当我输入a@a.a
的电子邮件时,它仍然会进入成功步骤。
如何在php中检查它是否是正确的电子邮件,谢谢。
答案 0 :(得分:3)
使用
预先验证电子邮件地址 if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
echo "VALID";
}
电子邮件服务器将在接受不知道的电子邮件时返回true,如果它将以唯一的方式到达用户,并且我确定您已经看到它,是为了让收件人点击电子邮件中的链接,将其发送回您的网站,然后您就知道其有效\已使用的地址。
答案 1 :(得分:2)
来自PHP文档
bool 邮件(字符串$ to,字符串$ subject,字符串$ message [,字符串$ additional_headers [,字符串$ additional_parameters]])
如果邮件成功接受传递,则返回TRUE,FALSE 否则。
重要的是要注意,因为邮件被接受了 交付,并不意味着邮件实际上会达到预期的目的 目的地。
仅仅因为电子邮件地址格式正确并不意味着该位置存在实际邮箱。 PHP无法“检查”电子邮件地址是否存在/处于活动状态。这是激活链接的全部目的,用于验证是否有人正在检查该电子邮件地址。
答案 2 :(得分:0)
+1。使用它而不是简单的正则表达式。即使是最复杂的正则表达式也无法通过一种可能的方式来组合RFC 5322兼容的地址。你尝试提出某些东西几乎可以保证失败。
但是您没有询问地址格式验证,您询问是否检查邮件是否已发送。激活链接的全部目的是验证电子邮件地址。如果您定期清理未经验证的帐户,则电子邮件地址的结构是否正确无关紧要。通过发送链接,您正在进行全电路测试,绕过filter_var()可能具有的任何可能的格式错误解释。