无法从 python 发送带有附件的电子邮件?

Posted

技术标签:

【中文标题】无法从 python 发送带有附件的电子邮件?【英文标题】:cannot send email with attachment from python? 【发布时间】:2013-04-16 23:19:48 【问题描述】:
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage

msg = MIMEMultipart('multipart/related')

fromaddr = 'from@gmail.com'
toaddrs = 'to@gmail.com'


#provide gmail user name and password
username = 'to@gmail.com'
password = 'messifan'

filename = "1.jpg"
f = file(filename)
attachment = MIMEImage(f.read()) # error here
attachment.add_header('Content-Disposition', 'attachment', filename=filename)
.
.
server.sendmail(fromaddr, toaddrs, msg.as_string())   

我正在使用此代码发送电子邮件。我可以使用此脚本附加文本文件。(将 MIMEImage 转换为 MIMEtext)。但无法附加图像。 错误是无法猜测图像 mime 子类型

【问题讨论】:

【参考方案1】:

试试

attachment = MIMEImage(f.read(), _subtype="jpeg") # error here

【讨论】:

就我而言,... _subtype="svg+xml" ... 只要服务器不用猜它是什么就没有关系。【参考方案2】:

这里有点猜测,但也许可以尝试以二进制模式打开文件?

f = file(filename, 'rb')

【讨论】:

问题解决了。现在这一行 server.sendmail(fromaddr, toaddrs, msg.as_string()) 中的错误 我认为(再次不测试)您需要将 toaddrs 作为列表传递 喜欢这个 toaddrs = ['to@gmail.com'] ?请帮助我【参考方案3】:

在我看来您创建了一个“文件”对象,但您从未打开它。

你在哪里:

f = file(filename)
attachment = MIMEImage(f.read()) # error here

我认为你需要:

fp = open(filename, 'rb')
attachment = MIMEImage(fp.read())
fp.close()

【讨论】:

方法“file”打开文件。

以上是关于无法从 python 发送带有附件的电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

从带有附件的 Databricks Notebook 发送电子邮件

Python - 发送带有多个图像附件的电子邮件

从任何电子邮件程序发送带有附件的电子邮件

使用Python在HTML电子邮件中发送附件

在 Python 中发送带有 HTML+plain_text 电子邮件的 PDF 附件

在 Python 中发送带有多个附件的电子邮件