gpt4 book ai didi

Python smtplib仅发送消息正文

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

我使用 Python 编写了一个简单的计时器,当计时器达到 0 时,它会发送电子邮件。但发送的消息的唯一部分是正文。发件人地址、收件人地址和主题未发送。这是代码:

#Coffee timer
import smtplib

#Set timer for 00:03:00
from time import sleep
for i in range(0,180):
print(180 - i),
sleep(1)
print("Coffee is ready")

print("Sending E-mail")

SUBJECT = 'Coffee timer'
msg = '\nCoffee is ready'
TO = 'email-B@email.com'
FROM = 'email-A@email.com'

server = smtplib.SMTP('192.168.1.8')
server.sendmail(FROM, TO, msg, SUBJECT)
server.quit()

print("Done")

任何人都可以解释为什么会发生这种情况/我可以采取什么措施来解决它?

最佳答案

在将消息传递给 .sendmail() 之前,您必须将消息格式化为“RFC822”消息。 (它以 Internet email message format 标准的原始版本(现已废弃)命名。该标准的当前版本是 RFC5322。)

创建 RFC822 消息的一种简单方法是使用 Python 的 email.message类型层次结构。在您的情况下,子类 email.mime.text.MIMEText会做得很好。

试试这个:

#Coffee timer
import smtplib
from email.mime.text import MIMEText

print("Coffee is ready")

print("Sending E-mail")

SUBJECT = 'Coffee timer'
msg = 'Coffee is ready'
TO = 'email-B@email.com'
FROM = 'email-A@email.com'

msg = MIMEText(msg)
msg['Subject'] = SUBJECT
msg['To'] = TO
msg['From'] = FROM

server = smtplib.SMTP('192.168.1.8')
server.sendmail(FROM, TO, msg.as_string())
server.quit()

print("Done")

作为 .sendmail() 的便捷替代方案,您可以使用 .send_message() ,像这样:

# Exactly the same code as above, until we get to smtplib:
server = smtplib.SMTP('192.168.1.8')
server.send_message(msg)
server.quit()

关于Python smtplib仅发送消息正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686282/

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