在电子邮件 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.server
是 smtplib.SMTP_SSL()
对象。
感谢任何帮助,谢谢!
问题是未使用 .read()
方法读取缓冲区值。使用 .getvalue()
方法对我有用。
注意:使用.read()
时不会抛出错误。
我正在尝试将附件添加到下面创建并存储为电子邮件的对象。这一切都在 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.server
是 smtplib.SMTP_SSL()
对象。
感谢任何帮助,谢谢!
问题是未使用 .read()
方法读取缓冲区值。使用 .getvalue()
方法对我有用。
注意:使用.read()
时不会抛出错误。