Python自动发邮件添加图片附件失败,仅发送路径问题求助
解决Python邮件添加图片附件显示为路径文本的问题
你的代码问题出在add_attachment的调用方式上——你直接传入了图片路径字符串,而不是图片的二进制数据,所以邮件把路径文本当成了附件内容。
要正确添加图片附件,需要先读取图片文件的二进制内容,再传给add_attachment的data参数,同时指定正确的媒体类型(maintype为image)。修改后的代码如下:
import os from email.message import EmailMessage import ssl import smtplib email_sender = 'Example@gmail.com' Password = 'app password' email_receiver = 'Example@gmail.com' subject = 'Message subject' body = 'message body' em = EmailMessage() em['From'] = email_sender em['To'] = email_receiver em['Subject'] = subject em.set_content(body) # 正确添加图片附件的代码 image_path = 'path to desired .jpg file' image_filename = '.jpg file name' with open(image_path, 'rb') as img_file: img_data = img_file.read() em.add_attachment( img_data, maintype='image', subtype='jpg', filename=image_filename ) context = ssl.create_default_context() with smtplib.SMTP_SSL('smtp.gmail.com', 465, context=context) as smtp: smtp.login(email_sender, Password) smtp.sendmail(email_sender, email_receiver, em.as_string())
关键说明:
- 用
open(image_path, 'rb')以二进制只读模式打开图片文件,读取的img_data才是图片的实际内容 maintype必须设为image,subtype对应图片格式(比如png图片就改成'png')filename会显示在邮件的附件名称里,建议设置成有意义的名字
另外,关于你提到的每日定时发送需求,可以用schedule库或者APScheduler来实现定时任务,比如每天固定时间执行发送邮件的函数。
内容的提问来源于stack exchange,提问作者RonaldHucklebee
相关产品推荐
相关产品推荐

