2017-12-29 38 views
0
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()를 두 번 이상 호출하면 첫 번째 이미지 만 결과 이메일에 표시됩니까?파이썬을 사용하여 전자 메일에 여러 개의 포함 이미지를 추가하는 방법

문제를 찾을 수 있습니까?

답변

0

이 솔루션은 밝혀 :

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 = '[email protected]' 
    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()는 단지의 MimeMultipart에 MIMEImage를 연결하고 HTML 문자열에 문자열을 추가하고 때 때 여러 호출 후 전송() AddImage()의 경우 HTML 문자열에서 생성 된 MIMEText를 MIMEMultipart에 첨부합니다.