如何检查收到的电子邮件是否合法?

时间:2013-04-25 11:38:12

标签: php email pipe

我正在开发一个系统,该系统从PIPE获取电子邮件,验证电子邮件中发送的电子邮件地址是否在客户端数据库中,并将其写入数据库。

问题在于我不想遇到安全问题,如果有人向系统发送带有PHP的电子邮件,它也会记录它。那么,我该如何检查电子邮件是否由正确的邮件服务器发送?我正在考虑获取域的邮件服务器的IP,并在电子邮件头中验证是否从这些服务器发送。因此,如果我收到来自test@hotmail.com的电子邮件,它会ping mail.hotmail.com并检查该电子邮件是否来自这些IP地址。

无论如何,如果某人有一个像yourdomain.com这样的自定义域,在共享的cPanel服务器上运行,这些服务器中的其他人可以发送带有PHP的电子邮件并通过IP验证。所以,我正在考虑检查电子邮件是用PHP还是从邮件服务器发送的,但我不知道该怎么做。

你的建议是什么?

4 个答案:

答案 0 :(得分:1)

我找到了http://verify-email.org/给你。他们有一个API,因此您可以查看该服务的电子邮件地址。

修改

当您在网站上查看电子邮件地址时,您会看到以下结果:

MX record about gmail.com exists.
Connection succeeded to alt3.gmail-smtp-in.l.google.com SMTP.
220 mx.google.com ESMTP tz3si2159695bkb.62 - gsmtp

> HELO verify-email.org 
250 mx.google.com at your service

> MAIL FROM: <check@verify-email.org>
=250 2.1.0 OK tz3si2159695bkb.62 - gsmtp

> RCPT TO: <test@gmail.com>
=550-5.1.1 The email account that you tried to reach does not exist. Please try

550-5.1.1 double-checking the recipient's email address for typos or

550-5.1.1 unnecessary spaces. Learn more at

550 5.1.1 http://support.google.com/mail/bin/answer.py?answer=6596 tz3si2159695bkb.62 - gsmtp

您可以登录smtp服务器并发送上面显示的命令来构建自己的支票:

> HELO verify-email.org
> MAIL FROM: <check@verify-email.org>
> RCPT TO: <test@gmail.com>

您可以在输出中检查错误或成功消息。我认为构建php并不困难。

答案 1 :(得分:1)

  

我在考虑检查电子邮件是用PHP还是从邮件服务器发送的

您无法正常发现这两者之间的差异。使用PHP发送的电子邮件看起来与来自邮件服务器的电子邮件完全相同,而且使用PHP 发送的电子邮件也可能来自邮件服务器的电子邮件。

您可以根据自己的监控情况尝试自行编写检测(自己的过滤器)并查找错误的邮件(如果由于法律规定无法深入监控电子邮件,则可能会向您的用户报告错误邮件)。

答案 2 :(得分:1)

呃,这是我第一次回答任何事情,如果我误解,那就很抱歉。无论如何,如果您正在检查PHP中的电子邮件,我可以提供一些帮助;

If($_POST['email']){
    $Email = $_POST['email'];
    $Allowed = array('gmail.com', 'yahoo.com', 'ymail.com', etc..);
    If(filter_var($Email, FILTER_VALIDATE_EMAIL)){
        $Domain = array_pop(explode('@', $Email));
        If(!In_Array($Domain, $Allowed)){
            Echo 'Your response here...'; 
}}}

或查看电子邮件的字符,您可以调用函数或自行检查;

Function checkEmail($Email){
    return preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $Email);
}

所以它就像是;

checkEmail('email@domain.com');

检查输入,如果没有电子邮件字符,您可以选择做什么。

希望这有帮助!

答案 3 :(得分:1)

是的,有很多电子邮件验证工具。我个人喜欢www.verifyemailaddress.org

但是有很多这样的工具可以找到。