2017-05-17 15 views
0

私のコンピュータ上で自分のstmpサーバをpythonとaiosmtpdライブラリで実行しようとしています。
私はこの例を実行して、すべてがうまく見えますが、相手側の電子メールは受信しません。
見ることができるログがあるかどうかわかりません。
私はビジュアルスタジオ2015、python 3.5、およびWindows 8.1を使用していますaiosmtpd - python smtp server

私は同様の投稿を見ましたが、それは助けになりませんでした。

重要な注意:クライアントコードで
は、私はまた、Dateヘッダなしで試してみました

server.py:

import asyncio import logging 

from aiosmtpd.controller import Controller from aiosmtpd.handlers 
import Sink from smtplib import SMTP 

async def amain(loop): 
    cont = Controller(Sink(), hostname='::0', port=8025) 
    cont.start() 


if __name__ == '__main__': 
    logging.basicConfig(level=logging.DEBUG) 
    loop = asyncio.get_event_loop() 
    loop.create_task(amain(loop=loop)) 
    try: 
     loop.run_forever() 
    except KeyboardInterrupt: 
     pass 

Client.py:

from smtplib import SMTP import smtplib 

s = SMTP('localhost', 8025) try: 
    s.set_debuglevel(True) 
    s.sendmail('[email protected]', ['[email protected]'], """\ 
    Date:17/05/2017,2:18 
    From: [email protected] 
    To: [email protected] 
    Subject: A test 
    testing 
    """) 
    s.quit() except smtplib.SMTPException: 
    print("Error: unable to send email") 
    import traceback 
    traceback.print_exc() 

更新
Client.pyでs.set_debuglevel(True)を設定し、

あなたのコードで
send: 'ehlo [192.168.56.1]\r\n' 
reply: b'250-mycomputername\r\n' 
reply: b'250-SIZE 33554432\r\n' 
reply: b'250-8BITMIME\r\n' 
reply: b'250-SMTPUTF8\r\n' 
reply: b'250 HELP\r\n' 
reply: retcode (250); Msg: mycomputername\nSIZE 
33554432\n8BITMIME\nSMTPUTF8\nHELP' 
send: 'mail FROM:<[email protected]> size=122\r\n' 
reply: b'250 OK\r\n' 
reply: retcode (250); Msg: b'OK' 
send: 'rcpt TO:<[email protected]>\r\n' 
reply: b'250 OK\r\n' 
reply: retcode (250); Msg: b'OK' 
send: 'data\r\n' 
reply: b'354 End data with <CR><LF>.<CR><LF>\r\n' 
reply: retcode (354); Msg: b'End data with <CR><LF>.<CR><LF>' 
data: (354, b'End data with <CR><LF>.<CR><LF>') 
send: b'  Date:17/05/2017,2:18\r\n  From: [email protected]\r\n  To: 
[email protected]\r\n  Subject: A test\r\n  testing\r\n  \r\n.\r\n' 
reply: b'250 OK\r\n' 
reply: retcode (250); Msg: b'OK' 
data: (250, b'OK') 
send: 'quit\r\n' 
reply: b'221 Bye\r\n' 
reply: retcode (221); Msg: b'Bye' 
Press any key to continue . . . 
+0

あなたは[email protected]のアドレスを管理していますか?自分のアドレスを追加して、メールを受け取ったかどうかを確認してください。また、スクリプトを変更した後、あなたの迷惑メールフォルダを調べることをお勧めします。 – Colwin

+0

"[email protected] address"とはどういう意味ですか?それは私の本当のアドレスだったし、私はポストのためにそれを置き換えた。 – Rafi

+0

client.pyを実行すると、トレースバックはありますか? – Colwin

答えて

0

Controller(Sink(), hostname='::0', port=8025)は、ポート8025上のメッセージを受け取り、それらを離れてスロー(Sink()部分)SMTPサーバーを開始します。この出力を受けました。そのため、メッセージは受信トレイに表示されません。メールをlocalhost:8025に送信すると、実際に受信トレイに送信されることはありません。

aiosmtpdはSMTPサーバーです。つまり、SMTP経由で送信されたメッセージを受信し、何とか処理します。あなたのコードでは、Sink()ハンドラは着信電子メールを処理しません。着信メッセージは単に送信されます。

[email protected]に電子メールを送信する場合は、aiosmtpdを使用して実行しているSMTPサーバーではなく、hate.comドメインのSMTPサーバーに連絡する必要があります。この作業では、SMTPサーバーを実行する必要はありません。インターネット上にあるSMTPサーバーが既にhate.comで実行されているためです。代わりにSMTPクライアントコンポーネントが必要です。これは、smtplibモジュールのPython標準ライブラリで提供されています。 SMTPを使った電子メールの送信は、aiosmtpdが何らかの形で関与しているものではなく、代わりにsmtplibを使用する方法を検討する必要があります。

さらに読む:WikipediaのEmail § Operation

+0

enlighting答えてくれてありがとう。 2.私が理解していることを確認するために、この時点で私は実際には私のローカルホストにメールを送信しようとしましたが、To:フィールドは別のメールになっていましたか? 3. smtplibだけで、私はbob @ hateにメールを送ることができます。com: フォーム:フィールドはhate.comドメインからではなく、私自身のカスタネットアドレスでもありますか?私の目標は、gmail、yahooなどの第三者のアカウントを使わずに自分のドメインで私の仕事のためにメールを送ることです。 – Rafi

+0

私の答えを正しく理解しているようです。自分のドメインから電子メールを送信するには、原則としてsmtplib(DNSリゾルバと一緒に受信者に連絡するためにどのサーバに連絡するかを把握する)を使用することができますが、慎重でなければ主要なメールプロバイダ、Microsoft、...)。インターネットで「発信電子メールサービス」を検索し、ドメインのDKIMを設定する方法を調べる必要があります。これは残念ながらStackOverflowの範囲を超えています。 –

+0

私は見上げるでしょう。 もう一度おねがいします! – Rafi

関連する問題