使用Python从Gmail发送邮件
我正在自学编程,想通过编写一些对我有用的程序或脚本来提升自己。我正在尝试修改一个在网上找到的脚本,目的是用Python通过Gmail发送邮件(来源)。
这个例子中有一段代码是用来附加文件的,但我并不需要这个功能。我已经调整了代码,让它不再附加任何文件,但这样一来,我就丢失了邮件的正文部分。有没有什么建议或技巧,可以帮我修改代码,确保邮件的正文部分不被删除呢?
非常感谢你的帮助。
2 个回答
1
我看到你对自己做错的事情有了一些了解。
在这里,attach()
这个方法是用来往邮件里添加东西的。这有点让人困惑,因为我们通常想到邮件的附件时,都是在说添加额外的文件,而不是邮件的正文。
根据一些其他的例子,这个attach方法似乎可以用来往邮件的正文里添加文本,或者往邮件里添加文件。
所以,简单来说,attach方法确实是你想的那样,它不仅可以添加文件,还可以往邮件的正文里添加文本。
顺便说一句,欢迎来到SO。选择Python作为学习脚本的语言真是个聪明的选择。
5
你使用的示例代码创建了一个多部分的MIME消息。也就是说,所有内容都是附件,包括消息的主体。如果你只是想发送一条简单的纯文本或HTML消息,其实不需要这些MIME的东西,这样会让事情变得复杂。在你示例中的sendmail()调用里,有一段是msg.as_string(),这只是把你创建的MIME对象转换成文本而已。如果你一开始就是处理文本,其实自己指定文本就简单多了。
下面这个函数和我在写脚本时用来发送日志文件的代码类似。它接受一个纯文本的主体,并把它转换成预格式化的HTML(这样在Outlook里显示效果更好)。如果你想保持纯文本,只需去掉那一行添加HTML标签的代码,并把Content-Type头改成"text/plain"。
import smtplib
def sendmail(sender, recipient, subject, body, server="localhost"):
"Sends an e-mail to the specified recipient."
body = ("<html><head></head><body><pre>%s</pre></body></html>" %
body.replace("&", "&").replace("<", "<"))
headers = ["From: " + sender,
"Subject: " + subject,
"To: " + recipient,
"MIME-Version: 1.0",
"Content-Type: text/html"]
headers = "\r\n".join(headers)
session = smtplib.SMTP(server)
session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()