完整的脚本每分钟用树莓派相机拍摄一张照片,然后通过电子邮件将其发送给我的地址。图片是电子邮件中的附件,但没有文件扩展名。 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)
答案 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