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

这似乎不起作用,但如果我添加更多内容并赋予它包含 fromtosubject 的多部分,它会起作用很好。

【问题讨论】:

这似乎只是一个错字。您写了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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SMTP 配置在生产中不起作用

php电子邮件和smtp [重复]

laravel - 发送邮件不起作用

Grails 发送邮件不起作用

PHP使用谷歌应用smtp发送电子邮件[重复]

使用 .NET core 2.2 中的 MailKit SMTP 客户端通过 Gmail SMTP 发送邮件对我不起作用