首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >aiosmtpd - python smtp服务器

aiosmtpd - python smtp服务器
EN

Stack Overflow用户
提问于 2017-05-17 23:04:35
回答 1查看 2.4K关注 0票数 3

我正在尝试用python和aiosmtpd库在我的计算机上运行我自己的stmp服务器。

我运行了这个示例,一切看起来都很好,但我从未收到另一端的电子邮件。

我不知道有没有我能看到的日志。

我使用的是visual studio 2015、python 3.5和windows 8.1。

我看到了一个类似的帖子,但它没有帮助。

重要提示:

在客户端代码中,我也尝试了不使用Date标头

server.py:

代码语言:javascript
复制
 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:

代码语言:javascript
复制
 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),并收到以下输出:

代码语言:javascript
复制
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 . . .
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-19 01:53:47

在您的代码中,Controller(Sink(), hostname='::0', port=8025)启动一个SMTP服务器,该服务器在端口8025上接收消息并丢弃它们( Sink()部分)。这就是为什么邮件不会出现在你的收件箱中--当你向localhost:8025发送一封电子邮件时,它实际上从来没有发送到你的收件箱。

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

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

进一步阅读:维基百科上的Email § Operation

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44028565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档