在电子邮件中嵌入图片

Pau*_*aul 8 python email python-3.x

我目前有一个程序,它会从列表中随机选择引号并通过电子邮件发送给它们.我现在正试图在电子邮件中嵌入图像.我遇到了一个问题,我可以附上电子邮件,但我的报价不再有效.我在网上研究过,解决方案对我不起作用.请注意,我使用的是Python 3.2.2.

任何指导将不胜感激.

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage

attachment = 'bob.jpg' 

msg = MIMEMultipart()
msg["To"] = to_addr
msg["From"] = from_addr
msg["Subject"] = subject_header

#msgText = MIMEText(<b>%s</b><br><img src="cid:bob.jpg"><br>, 'html') % body

fp = open(attachment, 'rb')
img = MIMEImage(fp.read())
fp.close()

msg.attach(img)

#email_message = '%s\n%s\n%s' % (subject_header, body, img)
email_message = '%s\n%s' % (subject_header, body)

emailRezi = smtplib.SMTP(mail_server, mail_server_port)
emailRezi.set_debuglevel(1)
emailRezi.login(mail_username, mail_password)
emailRezi.sendmail(from_addr, to_addr, email_message)
#emailRezi.sendmail(from_addr, to_addr, msg.as_string())
emailRezi.quit()
Run Code Online (Sandbox Code Playgroud)

从上面的代码可以看出,我尝试了不同的方法(参考#)

tri*_*eee 28

您正在经历皇家的痛苦,以构建一个有效的MIME消息msg,然后放弃它并发送一个简单的字符串email_message.

您应该首先了解正确的MIME结构是什么样的.多部分消息本身根本没有内容,如果需要文本部分,则必须添加文本部分.

以下是对脚本的编辑,其中添加了缺失的部分.我没有尝试发送结果消息.

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText  # Added
from email.mime.image import MIMEImage

attachment = 'bob.jpg'

msg = MIMEMultipart()
msg["To"] = to
msg["From"] = from
msg["Subject"] = subject

msgText = MIMEText('<b>%s</b><br><img src="cid:%s"><br>' % (body, attachment), 'html')  
msg.attach(msgText)   # Added, and edited the previous line

fp = open(attachment, 'rb')                                                    
img = MIMEImage(fp.read())
fp.close()
img.add_header('Content-ID', '<{}>'.format(attachment))
msg.attach(img)

print msg.as_string()
exit(0)
Run Code Online (Sandbox Code Playgroud)

  • 如果您真的想要附加图像,那么正确的修复方法是将正确的文件名添加到附件的元数据中.http://stackoverflow.com/questions/920910/python-sending-multipart-html-emails-which-contain-embedded-images有一个更完整的例子. (4认同)

Sac*_*hin 9

我已编辑将图像附加到邮件正文和 HTML 模板上。

import smtplib
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.image import MIMEImage

strFrom = 'zzzzzz@gmail.com'
strTo = 'xxxxx@gmail.com'

# Create the root message 

msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = 'test message'
msgRoot['From'] = strFrom
msgRoot['To'] = strTo
msgRoot['Cc'] =cc
msgRoot.preamble = 'Multi-part message in MIME format.'

msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)

msgText = MIMEText('Alternative plain text message.')
msgAlternative.attach(msgText)

msgText = MIMEText('<b>Some <i>HTML</i> text</b> and an image.<br><img src="cid:image1"><br>KPI-DATA!', 'html')
msgAlternative.attach(msgText)

#Attach Image 
fp = open('test.png', 'rb') #Read image 
msgImage = MIMEImage(fp.read())
fp.close()

# Define the image's ID as referenced above
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

import smtplib
smtp = smtplib.SMTP()
smtp.connect('smtp.gmail.com') #SMTp Server Details
smtp.login('exampleuser', 'examplepass') #Username and Password of Account
smtp.sendmail(strFrom, strTo, msgRoot.as_string())
smtp.quit()
Run Code Online (Sandbox Code Playgroud)