如何添加文件扩展名的图片通过电子邮件发送

时间:2019-01-30 22:00:53

标签: python python-2.7 raspberry-pi

完整的脚本每分钟用树莓派相机拍摄一张照片,然后通过电子邮件将其发送给我的地址。图片是电子邮件中的附件,但没有文件扩展名。 1.我需要补充的是,该文件具有保存在树莓上的原始文件扩展名。

或者,如果可能的话: 2.如何将图片嵌入电子邮件中。这样会容易得多,所以我不必先在我的电脑上保护它们。

我希望大家都知道我的意思,我的英语水平不是最好的:)

def sendMail(data):
    global texte
    mail = MIMEMultipart()
    mail['Subject'] = "Pictures from home"
    mail['From'] = fromaddr
    mail['To'] = toaddr
    mail.attach(MIMEText(body, 'plain'))

    dat='%s.jpg'%data
    attachment = open(dat, 'rb')
    image=MIMEImage(attachment.read())
    attachment.close()
    mail.attach(image)
    server = smtplib.SMTP('smtp.web.de', 587)
    server.starttls()
    server.login(fromaddr, "PASSWORD")
    text = mail.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()


    movepic(data)

1 个答案:

答案 0 :(得分:1)

要将文件名添加到附件,您需要将"Content-Disposition"标头添加到该MIME部分,即,将其添加到代码中:

attachment = open(dat, 'rb')
image=MIMEImage(attachment.read())
attachment.close()
image.add_header('Content-Disposition', 'attachment; filename=filename.extension')
mail.attach(image)

要发送图像而不将其保存到文件,您必须具有图像内容并将其传递给MIMEImage构造函数。您当前正在从attachment.read()中的文件中读取它们。

因此,如果您可以将图像二进制文件(而不是文件名)传递给函数,如下所示:

def sendMail(image_binary_data):

然后像这样通过它:

image=MIMEImage(image_binary_data)
image.add_header('Content-Disposition', 'attachment; filename=filename.extension')
mail.attach(image)

顺便说一句,如果您正在从文件中读取图像,则以这种方式打开和读取文件更安全,以确保其始终正确关闭:

with open(dat, 'rb') as image_file:
    image=MIMEImage(image_file.read())
# no need to close explicitly