我需要以编程方式检查电子邮件。我使用此代码:
resolver = dns.resolver.Resolver()
resolver.timeout = 3
resolver.lifetime = 3
mx_records = resolver.query(domain, 'MX')
for mxRecord in mx_records:
mxRecord = str(mxRecord.exchange)
host = socket.gethostname()
server = smtplib.SMTP(timeout=30)
server.set_debuglevel(0)
addressToVerify = var0
server.connect(mxRecord)
server.helo(host)
server.mail('me@domain.com')
code, message = server.rcpt(str(addressToVerify))
server.quit()
res_email = 'Not Found'
if code == 250:
result = 'Success'
else:
print "doesn't exist"
我运行此代码时收到错误:
Connection unexpectedly closed
Connection unexpectedly closed: [Errno 10054]
[Errno 10061]
我试图更改超时值,但它没有帮助。然后,我尝试在smtplib.SMTP()
中指定端口,但指定587
并且也没有解决问题。
我该如何解决这个问题?
答案 0 :(得分:0)
您可以复制代码以从Python帮助文件中查询POP3服务器。在这里,它的形式从未如此微小。
import poplib, getpass
pop = poplib.POP3('***********', port=110)
pop.user('**********')
pop.pass_('*********')
print (pop.stat())
print (pop.list()[1])
您只需从邮件客户端复制各种常量,例如端口号。
此脚本产生的输出可能会让您感到惊讶,具体取决于邮件客户端中的设置。这就是我刚才所得到的。
(43,1104784) [b' 1 15848',b' 2 7889',b' 3 7938',b' 4 3705',b' 5 28933' ,b' 6 35479',b' 7 12793',b' 8 7094',b' 9 10045',b' 10 12793' ,b' 11 17194',b' 12 312802',b' 13 12688',b' 14 18431',b' 15 24454' ,b' 16 17769',b' 17 16223',b' 18 14975',b' 19 11951',b' 20 13373' ,b' 21 34949',b' 22 23647',b' 23 14958',b' 24 22449',b' 25 5068' ,b' 26 14920',b' 27 8611',b' 28 10982',b' 29 14311',b' 30 7477' ,b' 31 3852',b' 32 8497',b' 33 4086',b' 34 7240',b' 35 69458' ,b' 36 19430',b' 37 110263',b' 38 2434',b' 39 12043',b' 40 5306' ,b' 41 10288',b' 42 17164',b' 43 74974']
但我知道服务器上没有留下我在邮件客户端收到的邮件。这个小难题的答案是我的电子邮件客户端在服务器上留下了两个星期的消息,或者直到我删除它们,默认情况下,大概是为了防止在出现某种计算机故障时丢失。
这意味着仅仅使用上述输出作为新消息的检查是不够的。有必要记录收到消息的标题中的日期长达两周,以便与服务器上的日期进行比较。