2017-01-31 17 views
1

電子メールをプログラムでチェックする必要があります。私はこのコードを実行すると、私はエラーを受信して​​いPython:smtplibでメールをチェックし、エラーを処理します

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('[email protected]') 
     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

@BillBellメールをチェックするだけです –

+0

SMTPは送信プロトコルです。あなたの電子メールがPOP3かIMAPの何らかの亜種かに応じて、Pythonでpoplibまたはimaplibのいずれかが必要です。 @Bill Bell; –

答えて

0

コードをコピーして、PythonヘルプファイルからPOP3サーバーに問い合わせることができます。ここではそれは少しだけ修正された形になっています。

import poplib, getpass 

pop = poplib.POP3('***********', port=110) 
pop.user('**********') 
pop.pass_('*********') 
print (pop.stat()) 
print (pop.list()[1]) 

メールクライアントからのポート番号などのさまざまな定数をコピーするだけです。

メールクライアントの設定によっては、このスクリプトが出力として生成するものがあなたを驚かせるかもしれません。ここに私がちょうど持っているものがあります。 [15848' B'1

(43、1104784) 、B'2 7889' 28933' b'5、B'3 7938' 、b'4 3705' 、、b'6 35479' 、b'7 b'10 12348 '、b'14 18431'、b'15 24454 '、b'12 12408'、b'14 18431 ' 、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 b'36 19430 '、b'37 110263'、b'38 2434 '、b'39 12043'、b'40 5306 '、b' 、b'41 10288' 、b'42 17164' 、b'43の74974' ]

しかし、私は何のメッセージは、私は私のメールクライアントで受け取っていないサーバー上に残っていないことを知っています。このマイナーパズルへの答えは、私の電子メールクライアントが2週間にわたってサーバーにメッセージを残すことです。あるいは、コンピュータの障害の場合に備えて、デフォルトでは、それらを削除するまで、おそらく損失に対する保護手段としてです。

単に新しいメッセージのためのチェックとして上記の出力を使用するには不十分であろうことを意味しています。受信したメッセージのヘッダーの日付をサーバー上のヘッダーと比較するために2週間まで記録する必要があります。

関連する問題