首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用python在电子邮件中添加多个嵌入图像

如何使用python在电子邮件中添加多个嵌入图像
EN

Stack Overflow用户
提问于 2017-12-29 17:27:10
回答 3查看 3.9K关注 0票数 1
代码语言:javascript
复制
from email.MIMEMultipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
from email.MIMEText import MIMEText
from email.MIMEImage import MIMEImage
from datetime import datetime
import socket
import email
import smtplib
import uuid

class EmailSender:
def __init__(self):
    self.msgRoot = MIMEMultipart('related')
    self.msgAlternative = MIMEMultipart('alternative')
    self.msgRoot.attach(self.msgAlternative)

def AddImage(self, fileName, title):
    internalFileName = '%s-%s-%s' %(fileName, datetime.now().strftime('%Y%m%d%H%M%S'), uuid.uuid4())
    mimetext ='<p style="background-color:lightgrey;font-size:20px;font-weight:bold;font-family:Comic Sans MS">%s</p><br><img src="cid:%s"><br>' %(title, internalFileName)
    msgText = MIMEText(mimetext, 'html')
    self.msgAlternative.attach(msgText)
    fp = open(fileName, 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()
    msgImage.add_header('Content-ID', '<%s>' %(internalFileName))
    self.msgRoot.attach(msgImage)

def AddFile(self, fileName):
    fg = open(fileName, 'rb')
    fA = MIMEApplication(fg.read(), Name=fileName)
    fA['Content-Disposition'] = 'attachment; filename="%s"' %fileName
    self.msgRoot.attach(fA)

这是我将图像添加到结果电子邮件AddImage()的代码。但是当我多次调用AddImage()时,结果电子邮件中只显示第一个图像吗?

你能帮忙找出问题所在吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-17 15:31:45

解决方案是:

代码语言:javascript
复制
def AddImage(self, fileName, title):
    internalFileName = '%s-%s-%s' %(fileName, datetime.now().strftime('%Y%m%d%H%M%S'), uuid.uuid4())
    self.imgHtml +='<p style="font-size:15px;font-weight:bold;font-family:Comic Sans MS">%s</p><br><img src="cid:%s"><br>' %(title, internalFileName)
    fp = open(fileName, 'rb')
    msgImage = MIMEImage(fp.read())
    fp.close()
    msgImage.add_header('Content-ID', '<%s>' %(internalFileName))
    self.msgRoot.attach(msgImage)
def Send(self, toList):
    msgText = MIMEText(self.imgHtml, 'html')
    self.msgAlternative.attach(msgText)
    self.msgRoot['Subject'] = 'Audience Ingestion Integrated Test Report @%s [%s]' %(datetime.now().strftime('%Y-%m-%d'), socket.gethostname())
    strFrom = 'notifier@freewheel.tv'
    self.msgRoot['From'] = strFrom
    strTo = email.Utils.COMMASPACE.join(toList)
    self.msgRoot['To'] = strTo
    smtp = smtplib.SMTP('smtp1.dev.fwmrm.net', 25)
    smtp.sendmail(strFrom, strTo, self.msgRoot.as_string())
    smtp.quit()

这意味着在AddImage()时,只需将MIMEImage附加到MIMEMultipart并将字符串添加到html字符串,而在多次调用AddImage()之后使用Send()时,将由html字符串生成的MIMEText附加到MIMEMultipart。

票数 2
EN

Stack Overflow用户

发布于 2019-11-05 23:28:48

这段代码可以工作,但我也尝试在每个图像中添加文本,但我不知道如何做到这一点:

代码语言:javascript
复制
home = str(Path.home())
path = home + "\\Pictures"
list_of_images = glob( os.path.join(path, "*.png") )

mail = MIMEMultipart("related")
#Jinja2 for html template

main = Template('''
    <html><body> 
    <h2>This is a Test email for python script</h2>
    <br />
    {% for image in pictures %}<p> $(name) </p><br /><img src="cid:{{image}}"><br />{% endfor %}
    </body></html>''')



for filename in list_of_images:
    fp = open(filename, 'rb')
    msg_img = MIMEImage(fp.read())
    fp.close()
    msg_img.add_header('Content-ID', '<{}>'.format(filename))
    msg_img.add_header('Content-Disposition', 'inline', filename=filename)
    mail.attach(msg_img)

mail['Subject'] = "Python Script Test | You will receive this email every 30 minutes"
mail['From'] = me
mail['To'] = you
票数 2
EN

Stack Overflow用户

发布于 2018-07-13 07:49:48

这对我很有帮助。

在我包含(遍历)了所有使用msgAlternative.as_string()<img src="cid:%s">并修复了这个问题之后,我发现了一些有帮助的东西。问题是它现在只包含第一张图片,不管我包含了多少张图片。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48020293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档