在电子邮件 BytesIO 中发送带附件的消息不起作用 - 未显示错误 - Python/Smtp/Email

Sending message with attachment in email BytesIO doesn't work - No errors shown - Python/Smtp/Email

我正在尝试将附件添加到下面创建并存储为电子邮件的对象。这一切都在 class 中完成,这就是 class 的初始化方式:

class <name>:
    def __init__(self, **kwargs):
        self.msg = kwargs.get("msg", MIMEMultipart())
        self.subject = kwargs.get("subject", None)
        self.body = kwargs.get("body", None)
        self.attachment = kwargs.get("attachment", None)

附件未发送

只要附件是 str 类型,附件就可以正常工作。添加添加正文、主题等的其他功能,效果很好。 当我传递一个 BytesIO() 类型的对象时,邮件被发送而没有任何错误或警告,但附件没有被发送。

for i ,attachment in enumerate(self.attachment,start=1):
            p = MIMEBase('application', 'octet-stream')
            if isinstance(attachment, str):
                p.set_payload(open(attachment,"rb").read())
            else:
                p.set_payload((attachment).read())
            encoders.encode_base64(p)
            p.add_header('Content-Disposition', "attachment", filename= f'attachment{i}.jpg')
            self.msg.attach(p)

为什么我首先使用 BytesIO()

好吧,我正在尝试发送 QR 图片,它是使用

保存的
qr_img.save(BytesIO(),format="png")

我正在尝试发送从 qrcode 模块生成的图像而不在本地保存它。

消息是这样发送的:

self.server.send_message(msg)

其中 self.serversmtplib.SMTP_SSL() 对象。

感谢任何帮助,谢谢!

问题是未使用 .read() 方法读取缓冲区值。使用 .getvalue() 方法对我有用。

注意:使用.read()时不会抛出错误。