出于一个让我无法理解的原因,每当我试图通过调用函数发送此电子邮件时,该电子邮件缺少主题,缺少“收件人:”并且电子邮件正文被四个空格抵消。然而,当完全相同的代码直接在脚本体中运行时,所有的东西都是完美的格式。在
import smtplib
def send_email():
sender = 'email@address.com'
receivers = ['email@address.com']
message_header = """From: Me <email@address.com>
To: Me <email@address.com>
Subject: This is the messages's subject
"""
message_body = 'This is the message\'s body'
message = message_header + message_body
try:
smtpObj = smtplib.SMTP('server_name', 25)
smtpObj.sendmail(sender, receivers, message)
print("Successfully sent email")
except OSError:
print("Error: unable to send email")
send_email()
(这将向您展示如何修复当前代码;my other answer向您展示了实现该代码的正确方法。)
message_header
中的每一行,但第一行前面有4个空格,包括连接两个字符串后的正文:(我在UNIX环境中进行了测试,因此这里显示了
\n
。我假设您使用的是一个以DOS行结尾的文件,它已经使用了SMTP期望的\r\n
。)要么你自己消灭他们:
^{pr2}$哪个很难看,或者使用
textwrap.dedent
:这将从其参数的每一行中删除相同数量的空白:
更好的方法是使用
'\r\n'.join
为您构造字符串。在对比:
^{pr2}$请注意,函数中有空格,因为它们是缩进的。我给你加了下划线。在
可以使用以下方法修复此问题:
我的另一个答案是,您应该使用
email
包来生成消息,而不是尝试手动构造它。在相关问题 更多 >
编程相关推荐