SMTP 仅发送正文不工作 Python

SMTP only sending body not working Python

所以我在 mynumber@tmomail.net 向我的号码发送了一条自动文本,我试图只发送一个与电子邮件并列的正文,但它不起作用,但也不会引发错误。我的代码在下面,它在我添加所有内容时有效,但仅在仅添加正文时无效 (got from here)。

import smtplib
email = "myemail@outlook.com"
pwd = "my_password"
phone_num = "my_number@tmomail.net"
server = smtplib.SMTP('smtp.office365.com',587)

server.starttls()
server.login(email, pwd)

body = "This working?"
server.sendmail(email, phone_num, body)
server.quit

这似乎不起作用,但如果我向它添加更多内容并给它包含 fromtosubject 效果很好。

您需要做的就是添加一个换行符:

body = "\nThis working?"

server.sendmail 是一个漂亮的 low-level 函数,它要求您正确设置邮件的格式(并且按照您的 SMTP 服务器的预期)。起初,我尝试按如下方式修改您的代码并成功收到消息:

body = (f"From: {email}\r\nTo: {phone_num}\r\n\r\n")
body += "This working?"

server.sendmail(email, phone_num, msg=body)
server.quit()

上面的代码提供了 headers,如下所述:https://docs.python.org/3/library/smtplib.html#smtp-example(我刚刚将他们的示例转换为 f-strings)

我认为您希望使用更高级别的功能,这样您就不必担心自己要执行 headers。

您可能需要考虑使用 smpt.send_message() https://docs.python.org/3/library/smtplib.html#smtplib.SMTP.send_message 帮助您构建正确的 headers.

我看到您希望根据您正在查看的示例避免添加“从”和“到”。它只适用于这个相关问题中详述的新行:How to send SMTP email for office365 with python using tls/ssl