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()时,结果电子邮件中只显示第一个图像吗?
你能帮忙找出问题所在吗?
发布于 2018-01-17 15:31:45
解决方案是:
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。
发布于 2019-11-05 23:28:48
这段代码可以工作,但我也尝试在每个图像中添加文本,但我不知道如何做到这一点:
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
发布于 2018-07-13 07:49:48
这对我很有帮助。
在我包含(遍历)了所有使用msgAlternative.as_string()
的<img src="cid:%s">
并修复了这个问题之后,我发现了一些有帮助的东西。问题是它现在只包含第一张图片,不管我包含了多少张图片。
https://stackoverflow.com/questions/48020293
复制相似问题