我正在开发一个系统,该系统从PIPE获取电子邮件,验证电子邮件中发送的电子邮件地址是否在客户端数据库中,并将其写入数据库。
问题在于我不想遇到安全问题,如果有人向系统发送带有PHP的电子邮件,它也会记录它。那么,我该如何检查电子邮件是否由正确的邮件服务器发送?我正在考虑获取域的邮件服务器的IP,并在电子邮件头中验证是否从这些服务器发送。因此,如果我收到来自test@hotmail.com的电子邮件,它会ping mail.hotmail.com并检查该电子邮件是否来自这些IP地址。
无论如何,如果某人有一个像yourdomain.com这样的自定义域,在共享的cPanel服务器上运行,这些服务器中的其他人可以发送带有PHP的电子邮件并通过IP验证。所以,我正在考虑检查电子邮件是用PHP还是从邮件服务器发送的,但我不知道该怎么做。
你的建议是什么?
答案 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)
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
但是有很多这样的工具可以找到。