我从Python3脚本发送电子邮件(使用smtplib
)。到现在为止,我一直在接收Gmail账户上的信息。但问题是我不能显示CSS样式,尽管是内联的。此外,即使是这个简单的消息也无法发送:
title = 'My title'
msg_content = '<h2>{title}: <font color="green">OK</font></h2>\n'.format(title=title)
但是,如果我删除{title}后面的两点,它就会工作。如果我在结束时移除它,它将不再工作。为什么?在Python3我怎么能发这样一条线?
title = 'My title'
msg_content = '<h2>{title}: <span style="color: green">OK</span></h2>'.format(title=title)
编辑
import smtplib
msg_header = 'From: Sender Name <sender@server>\n' \
'To: Receiver Name <receiver@server>\n' \
'Cc: Receiver2 Name <receiver2@server>\n' \
'MIME-Version: 1.0\n' \
'Content-type: text/html\n' \
'Subject: Any subject\n'
title = 'My title'
msg_content = '<h2>{title} > <font color="green">OK</font></h2>\n'.format(
title=title)
msg_full = (''.join([msg_header, msg_content])).encode()
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login('sender@server.com', 'senderpassword')
server.sendmail('sender@server.com',
['receiver@server.com', 'receiver@server.com'],
msg_full)
server.quit()
澄清后编辑
示例的msg_full结果如下所示:
您的电子邮件格式不符合RFC 2822:
''.join([msg_header, msg_body])
,则不会插入此行。因此,要作为正文文本传输的内容将被视为标题。相同电子邮件的正确版本如下:
我强烈建议您使用Python的内置库来构建符合RFC的有效负载。
此外,还可以添加邮件的文本/纯文本版本,这样任何接收者都可以在任何地方阅读它(我禁用了HTML邮件,在我的客户端上看不到这些邮件)。您可以使用email.mime.text轻松完成此操作:
上一个答案
您的问题缺少用于发送邮件的代码。我强烈怀疑您直接将msg_内容作为消息传递给SMTP.sendmail。
但是,SMTP.sendmail会按原样传输此字符串,即根据RFC 5321作为邮件的负载。此有效负载数据由电子邮件标题和内容组成,标题位于邮件的顶部(请参见RFC 2822)。
你的信息“我的标题:我的标题:”并没有显示在接收端。如果删除
{title}:
之后的冒号,那么接收者显然不会将结果视为标题等对于HTML样式的邮件,请看https://docs.python.org/2/library/email-examples.html中的示例-基本上,您必须创建一个适当的text/HTML MIME编码的邮件才能发送您的邮件。
相关问题 更多 >
编程相关推荐