gpt4 book ai didi

python smtplib 没有看到服务器发布的 starttls?

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:02 26 4
gpt4 key购买 nike

所以我有一个简单的(仍然需要工作!)python/twisted 邮件服务器,它支持纯文本/TLS 邮件。我还刚刚使用 smtplib 编写了一个简单的客户端程序。

如果我使用 telnet 连接到我的服务器,将公布 ESMTP,然后在我发出 EHLO 后,将公布 STARTTLS,如下所示:

# telnet localhost 5000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost.localdomain NO UCE NO UBE NO RELAY PROBES ESMTP
ehlo me
250-localhost.localdomain Hello 127.0.0.1, nice to meet you
250 STARTTLS

到目前为止一切都很好。但是,我在网上阅读了与 smtplib 的 smtp_ssl 类相关的错误(请参阅:http://bugs.python.org/issue4066Failing to send email with the Python example),因此人们建议我现在尝试过的解决方案,如下所示:

server = smtplib.SMTP('localhost', 5000) # my server is running on port 5000. Don't ask ;)
server.ehlo()
server.starttls('/opt/tesa/etc/certs/client/client.key', '/opt/tesa/etc/certs/client/client.crt')
server.set_debuglevel(1)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()

这成功地发送了我的消息 - 但从它的外观来看,是通过纯文本发送的。客户端的输出看起来只看到服务器 EHLO 250 响应的第一行(“很高兴认识你”)——而没有看到 STARTTLS。因此,我假设它没有发布它自己的 STARTTLS(因为它只会在服务器发布广告时这样做?)- 因此保持为纯文本邮件?

# python smtplib_client.py
From: me@home.com
To: you@work.com
Enter message, end with ^D (Unix) or ^Z (Windows):
fsdfds
Message length is 45
**send: 'ehlo localhost.localdomain\r\n'
reply: '250 localhost.localdomain Hello 127.0.0.1, nice to meet you\r\n'
reply: retcode (250); Msg: localhost.localdomain Hello 127.0.0.1, nice to meet you
send: 'mail FROM:<me@home.com>\r\n'**
reply: '250 Sender address accepted\r\n'
reply: retcode (250); Msg: Sender address accepted
send: 'rcpt TO:<you@work.com>\r\n'
reply: '250 Recipient address accepted\r\n'
reply: retcode (250); Msg: Recipient address accepted
send: 'data\r\n'
reply: '354 Continue\r\n'
reply: retcode (354); Msg: Continue
data: (354, 'Continue')
send: 'From: me@home.com\r\nTo: you@work.com\r\n\r\nfsdfds\r\n.\r\n'
reply: '250 Delivery in progress\r\n'
reply: retcode (250); Msg: Delivery in progress
data: (250, 'Delivery in progress')
send: 'quit\r\n'
reply: '221 See you later\r\n'
reply: retcode (221); Msg: See you later

谁能帮我开灯?我好像蒙在鼓里了!

(使用 Python 2.6.6)

一如既往的感谢...

最佳答案

您声称要发送的回复:

250-localhost.localdomain Hello 127.0.0.1, nice to meet you
250 STARTTLS

和客户收到的那个

reply: '250 localhost.localdomain Hello 127.0.0.1, nice to meet you\r\n'

看起来不同:响应代码250和主机名之间没有“-”,这意味着响应只有这一行。我已经在 python 2.7 和 3.3 中检查了 smtplib.py 的代码,它只打印调试它读取的行,没有做任何修改,比如用 ' ' 替换 '-'。

这就是为什么我假设您的服务器在 telnet 示例和 smtplib 示例中的版本不同,并且在后一个示例中服务器实际上只发送调试中显示的行而不是 STARTTLS。

除此之外,如果您添加对“我已经在线阅读 smtplib 的 smtp_ssl 类中的一个错误”的引用,这将很有帮助,这样人们就可以检查这与您的问题有何关系。并请添加您正在使用的 python 版本。

关于python smtplib 没有看到服务器发布的 starttls?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26507981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com