aiosmtpd - python smtp 服务器
aiosmtpd - python smtp server
我正在尝试使用 python 和 aiosmtpd
库在我的计算机上 运行 我自己的 stmp 服务器。
我 运行 这个例子,一切看起来都很好,但我从未收到另一端的电子邮件。
不知道有没有日志可以看
我使用的是 visual studio 2015、python 3.5 和 windows 8.1
我看到了类似的 post 但没有帮助。
重要说明:
在客户端代码中,我也尝试过不带日期 header
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()
更新
我将 s.set_debuglevel(True) 设置为 Client.py 并收到此输出:
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 . . .
在您的代码中,Controller(Sink(), hostname='::0', port=8025)
启动一个 SMTP 服务器,该服务器在端口 8025 上接收消息并将它们丢弃(Sink()
部分)。这就是邮件不会显示在您的收件箱中的原因 - 当您向 localhost:8025
发送电子邮件时,它实际上从未发送到您的收件箱。
aiosmtpd 是一个 SMTP 服务器,这意味着它将接收通过 SMTP 发送的消息并以某种方式处理它们。在您的代码中,Sink()
处理程序不会以任何方式处理传入的电子邮件——它只是将传入的消息丢弃。
如果您想通过 Internet 向 bob@hate.com
发送电子邮件,那么您应该联系负责 hate.com
域的 SMTP 服务器,而不是您 运行 的 SMTP 服务器宁使用 aiosmtpd。对于此任务,您不需要 运行 一个 SMTP 服务器,因为据推测互联网上已经有一个 SMTP 服务器 运行ning 用于 hate.com
;相反,您需要一个 SMTP 客户端 组件,它在 Python 标准库的 smtplib 模块中提供。使用 SMTP 发送电子邮件与 aiosmtpd 无关,您应该了解如何使用 smtplib。
进一步阅读:Email § Operation 维基百科。
我正在尝试使用 python 和 aiosmtpd
库在我的计算机上 运行 我自己的 stmp 服务器。
我 运行 这个例子,一切看起来都很好,但我从未收到另一端的电子邮件。
不知道有没有日志可以看
我使用的是 visual studio 2015、python 3.5 和 windows 8.1
我看到了类似的 post 但没有帮助。
重要说明:
在客户端代码中,我也尝试过不带日期 header
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()
更新
我将 s.set_debuglevel(True) 设置为 Client.py 并收到此输出:
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 . . .
在您的代码中,Controller(Sink(), hostname='::0', port=8025)
启动一个 SMTP 服务器,该服务器在端口 8025 上接收消息并将它们丢弃(Sink()
部分)。这就是邮件不会显示在您的收件箱中的原因 - 当您向 localhost:8025
发送电子邮件时,它实际上从未发送到您的收件箱。
aiosmtpd 是一个 SMTP 服务器,这意味着它将接收通过 SMTP 发送的消息并以某种方式处理它们。在您的代码中,Sink()
处理程序不会以任何方式处理传入的电子邮件——它只是将传入的消息丢弃。
如果您想通过 Internet 向 bob@hate.com
发送电子邮件,那么您应该联系负责 hate.com
域的 SMTP 服务器,而不是您 运行 的 SMTP 服务器宁使用 aiosmtpd。对于此任务,您不需要 运行 一个 SMTP 服务器,因为据推测互联网上已经有一个 SMTP 服务器 运行ning 用于 hate.com
;相反,您需要一个 SMTP 客户端 组件,它在 Python 标准库的 smtplib 模块中提供。使用 SMTP 发送电子邮件与 aiosmtpd 无关,您应该了解如何使用 smtplib。
进一步阅读:Email § Operation 维基百科。