SMTP仅发送正文不起作用Python [重复]
Posted
技术标签:
【中文标题】SMTP仅发送正文不起作用Python [重复]【英文标题】:SMTP only sending body not working Python [duplicate] 【发布时间】:2021-10-04 15:00:32 【问题描述】:所以我正在向我的号码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
这似乎不起作用,但如果我添加更多内容并赋予它包含 from、to 和 subject 的多部分,它会起作用很好。
【问题讨论】:
这似乎只是一个错字。您写了server.sendemail(email, phone_num, body)
,但功能只是server.sendmail
(邮件不是电子邮件)。你说它不会抛出错误。这应该是由于属性错误,所以可能发生了其他事情。
@Zev 你是对的,这绝对是一个错字。我仔细检查了我的脚本,他们都说sendmail
。每次我输入时,肌肉记忆都会接管并直接转到sendemail
,因此是错误的。
【参考方案1】:
您需要做的就是添加一个换行符:
body = "\nThis working?"
server.sendmail
是一个非常低级的函数,需要您完成正确格式化邮件的工作(并且按照您的 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()
上面的代码提供了如下所述的标题:https://docs.python.org/3/library/smtplib.html#smtp-example(我刚刚将他们的示例转换为 f 字符串)
我认为您正在寻求使用更高级别的功能,您不必担心自己做标题。
您可能想研究一下使用smpt.send_message()
https://docs.python.org/3/library/smtplib.html#smtplib.SMTP.send_message 帮助您构建正确的标题。
我看到您希望避免按照您正在查看的示例添加“from”和“to”。它将仅适用于该相关问题中详述的新行:How to send SMTP email for office365 with python using tls/ssl
【讨论】:
我正在这样做,但想摆脱标题和主题行。在我提出的问题的链接中,您似乎可以只添加我的问题源自的正文。那曾经是一个功能,但现在不再是这种情况了吗?答案似乎有一些赞成票,所以我认为这是一个可行的选择。谢谢send_message()
,我认为基本上 T-Mobile 会以某种方式格式化消息,我无法绕过它。
我认为标头(以及 from 和 to)是 smtp 协议的一部分,所以我认为您无法避免这种情况。
我确实知道您从哪里开始尝试遵循该示例。当我尝试您最初的操作时,我只收到一条空消息(在 verizon 上),因此该示例也不适用于我。
我猜另一个区别可能是gmail和office365对smtp消息的处理。
其实这样可以更好地回答你的问题:***.com/a/50086719/1830793以上是关于SMTP仅发送正文不起作用Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 .NET core 2.2 中的 MailKit SMTP 客户端通过 Gmail SMTP 发送邮件对我不起作用