0

尝试创建电子邮件验证而不使用此链接中的 stmplib 发送电子邮件

http://www.webdigi.co.uk/blog/2009/how-to-check-if-an-email-address-exists-without-sending-an-email/

由于我还没有编写任何代码并试图了解发生了什么。

看来您必须使用其中一种付费代理服务器,例如 mailgun。(如我错了请纠正我)

还有其他方法可以验证电子邮件地址吗?

4

2 回答 2

2

GAE 尚不支持此方法。所描述的方法要求您连接到 SMTP 服务器并询问服务器电子邮件地址是否存在。这需要 GAE 上的出站套接字支持,目前尚不可用(除非您通过他们的受信任的测试程序接受)。您需要出站套接字支持才能在域上执行 DNS 查找查询以连接到 SMTP 服务器,以及实际连接到 SMTP 服务器。

您还应该意识到此方法不适用于所有 SMTP 服务器实现。某些服务器可能不会响应这些类型的请求。

我认为现在您必须推出自己的实现以通过 HTTP 工作,或者为可以为您执行此操作的服务付费。

更新:

从 1.7.7 SDK 开始,Sockets API已经发布为实验状态。尽管他们明确禁止连接到传出套接字上的端口 25 (smtp)。这将极大地禁止您可以连接到多少个 SMTP 服务器(通过端口 587)来验证给定的电子邮件地址。

于 2013-04-08T15:02:23.877 回答
2

使用的方法可以使用此 python 代码实现,您需要安装 dnspython 并调用 verify_mail(mail)

import re
import smtplib
import dns.resolver # from http://www.dnspython.org/

def get_mx(domain):
    for x in dns.resolver.query(domain, 'MX'):
        return x.to_text().split()[1].strip('.')

def verify_mail(mail):
    domain=re.findall('@(.*)', mail)[0]
    mx=get_mx(domain)
    smtp=smtplib.SMTP(mx)
    i,m=smtp.connect(mx)
    i,m=smtp.helo()
    i,m=smtp.verify(target)
    if i==250: return True
    else:
        i,m=smtp.mail('myemail@gmail.com')
        i,m=smtp.rcpt(target)
        if i==250: return True
        else: return False

if __name__=='__main__':
    print verify_mail('banana@yahoo.com')
于 2013-04-08T14:10:09.680 回答