2013-04-23 41 views
1
import smtplib 
from email.MIMEMultipart import MIMEMultipart 
from email.MIMEText import MIMEText 
from email.MIMEImage import MIMEImage 

msg = MIMEMultipart('multipart/related') 

fromaddr = '[email protected]' 
toaddrs = '[email protected]' 


#provide gmail user name and password 
username = '[email protected]' 
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子类型无法发送附件从python的电子邮件?

回答

8

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

f = file(filename, 'rb') 
+0

那问题就迎刃而解了。现在错误在这一行 server.sendmail(fromaddr,toaddrs,msg.as_string()) – 2013-04-23 16:45:28

+0

问题编辑。现在错误在最后一行 – 2013-04-23 16:47:13

+0

我认为(再次不测试,因为我要去),你需要通过toaddrs列表 – Brad 2013-04-23 16:48:36

5

尝试

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

在我的情况下,'... _subtype =“svg + xml”...' – cloudrave 2013-12-11 14:02:04

+1

只要服务器不必猜测它是什么,它并不重要。 – robotik 2015-08-23 21:29:53

2

看起来像你对我创建了一个 “文件” 的对象,但你永远不打开它。

如果您有:

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

我想你,而不是需要:

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

方法“文件”打开文件。 – rafaelvalle 2015-08-27 19:48:03