aiosmtpd-python smtp服务器

aiosmtpd-python smtp服务器,python,smtp,smtplib,aiosmtpd,Python,Smtp,Smtplib,Aiosmtpd,我正试图用python和aiosmtpd库在我的计算机上运行我自己的stmp服务器。 我运行这个示例,一切看起来都很好,但我从未在另一边收到电子邮件。 我不知道我是否能看到日志。 我正在使用visual studio 2015、python 3.5和windows 8.1 我看到了一个类似的帖子,但没用 重要提示: 在客户端代码中,我也尝试不使用日期头 server.py: import asyncio import logging from aiosmtpd.controller imp

我正试图用python和
aiosmtpd
库在我的计算机上运行我自己的stmp服务器。
我运行这个示例,一切看起来都很好,但我从未在另一边收到电子邮件。
我不知道我是否能看到日志。
我正在使用visual studio 2015、python 3.5和windows 8.1

我看到了一个类似的帖子,但没用

重要提示:
在客户端代码中,我也尝试不使用日期头

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('andy@love.com', ['bob@hate.com'], """\
     Date:17/05/2017,2:18
     From: andy@love.com
     To: bob@hate.com
     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:<andy@love.com> size=122\r\n'
reply: b'250 OK\r\n'
reply: retcode (250); Msg: b'OK'
send: 'rcpt TO:<myreal@email.com>\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: andy@love.com\r\n     To: 
myreal@email.com\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 . . .
send:'ehlo[192.168.56.1]\r\n
答复:b'250-mycomputername\r\n'
答复:b'250-SIZE 33554432\r\n'
答复:b'250-8BITMIME\r\n'
答复:b'250-SMTPUTF8\r\n'
答复:b'250帮助\r\n'
答复:retcode(250);Msg:mycomputername\n大小
33554432\n8BITMIME\nSMTPUTF8\nHELP'
发送:“邮件发件人:大小=122\r\n”
答复:b'250正常\r\n'
答复:retcode(250);味精:好的
发送:'rcpt至:\r\n'
答复:b'250正常\r\n'
答复:retcode(250);味精:好的
发送:“数据\r\n”
答复:b'354使用结束数据。\r\n'
答复:retcode(354);;Msg:b‘用结束数据’
数据:(354,b'结束数据')
发送日期:2017年5月17日,2:18\r\n发件人:andy@love.com\r\n到:
myreal@email.com\r\n主题:测试\r\n测试\r\n\r\n。\r\n
答复:b'250正常\r\n'
答复:retcode(250);味精:好的
数据:(250,b‘OK’)
发送:“退出\r\n”
答复:b'221再见\r\n'
答复:retcode(221);;味精:再见
按任意键继续。

在您的代码中,
控制器(Sink(),hostname='::0',port=8025)
启动SMTP服务器,该服务器在端口8025上接收邮件并将其丢弃(Sink()部分)。这就是为什么邮件不会显示在您的收件箱中——当您向
localhost:8025
发送电子邮件时,它实际上从未发送到您的收件箱

aiosmtpd是一个SMTP服务器,这意味着它将接收通过SMTP发送的邮件并以某种方式进行处理。在您的代码中,
Sink()
处理程序不会以任何方式处理传入的电子邮件,它只是将传入的消息扔掉

如果您想通过Internet将电子邮件发送到
bob@hate.com
,则应联系负责
hate.com
域的SMTP服务器,而不是使用aiosmtpd运行的SMTP服务器。对于此任务,您不需要运行SMTP服务器,因为据推测internet上已经有一台SMTP服务器在运行
hate.com
;相反,您将需要一个SMTP客户端组件,该组件在Python标准库的smtplib模块中提供。使用SMTP发送电子邮件与aiosmtpd无关,您应该了解如何使用smtplib


进一步阅读:在维基百科上。

您是否控制bob@hate.com地址?也许在那里添加你自己的地址,看看你是否收到了电子邮件。我建议您在更改脚本后也查看您的垃圾邮件文件夹您的意思是什么?”bob@hate.com地址“?这是我的真实地址,我把它换成了邮寄地址。运行client.py时是否有任何回溯?没有异常raised@Colwin我更新了日志,也许会有帮助,谢谢你的启发性回答。2.为了确保我理解,我一直都在尝试向本地主机发送邮件,尽管“收件人:”字段指向不同的邮件?3.仅使用smtplib,我就可以将邮件发送到bob@hate.com即使Form:字段不是来自hate.com域,而是我自己的自定义地址?我的目标是用我的域名为我的业务发送邮件,而不使用第三方帐户,如gmail,Yahoo。听起来你已经正确理解了我的答案。从您自己的域发送电子邮件,原则上您可以使用smtplib(以及DNS解析程序来确定要联系哪个服务器才能到达收件人),但如果您不小心,您将因发送垃圾邮件而被主要电子邮件提供商(Gmail、Microsoft等)阻止。您应该在internet上搜索“出站电子邮件服务”,并查找如何为您的域设置DKIM——不幸的是,这超出了StackOverflow的范围。我将查找。再次感谢!