You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:09:55