【问题标题】:cannot send email with attachment from python?无法从 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 子类型

【问题讨论】:

    标签: python python-2.7 smtp


    【解决方案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”打开文件。
    猜你喜欢
    • 2014-11-09
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2017-06-11
    • 2015-09-09
    相关资源
    最近更新 更多