4

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

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

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

你的建议是什么?

4

4 回答 4

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构建并不难。

于 2013-04-25T11:45:56.130 回答
1

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

您通常无法找出这两者之间的区别。使用 PHP 发送的电子邮件看起来与来自邮件服务器的电子邮件完全相同,并且使用 PHP 发送的电子邮件很可能也是来自邮件服务器的电子邮件。

您可以尝试根据您所做的监控自己编写检测(您自己的过滤器)并找出错误邮件(或者如果您因法律法规而无法深入监控电子邮件,则从您的用户那里报告的邮件)。

于 2013-04-25T11:58:03.067 回答
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');

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

希望这有帮助!

于 2013-05-20T04:14:13.590 回答
1

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

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

于 2021-08-06T12:45:43.473 回答