Skip to main content
 首页 » 编程设计

python之将内存中的图像(或对象)附加到python中的电子邮件

2024年10月25日32emanlee

我在内存中有一张我创建的图像(使用 numpy 和 PIL),我想以编程方式将它附加到创建的电子邮件中。我知道我可以将它保存到文件系统,然后重新加载/附加它,但它似乎效率不高:有没有办法将它通过管道传输到 mime 附件而不保存?

保存/重新加载版本:

from PIL import Image 
from email.mime.image import MIMEImage 
from email.mime.multipart import MIMEMultipart 
 
...some img creation steps... 
 
msg = MIMEMultipart() 
img_fname = '/tmp/temp_image.jpg' 
img.save( img_fname) 
with open( img_fname, 'rb') as fp: 
    img_file = MIMEImage( fp.read() ) 
    img_file.add_header('Content-Disposition', 'attachment', filename=img_fname ) 
    msg.attach( img_file) 
 
...add other attachments and main body of email text... 

请您参考如下方法:

MIMEImage says第一个参数只是“包含原始图像数据的字符串”,因此您不必 open() 然后从文件中 .read() 它。

如果你在 PIL 中制作它并且没有办法直接序列化它(可能没有,我不记得了),你可以使用 io.StringIO (或 BytesIO...以 MIMEImage 真正需要的为准)类文件缓冲区来保存文件,然后将其作为字符串读出。 Related question.现代化改编摘录:

import io 
from email.mime.image import MIMEImage 
 
# ... make some image 
 
outbuf = io.StringIO() 
image.save(outbuf, format="PNG") 
my_mime_image = MIMEImage(outbuf.getvalue()) 
outbuf.close()