#-*- coding: UTF-8 -*-
#目的:发送普通文本和超文本邮件,并且把携带的附件显示在超文本文件中
#环境:同在163的服务器下发送和接收邮件
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import smtplib
#初始化程序变量
servername = 'smtp.163.com'
username = 'username@163.com'
password = '***********'
fromaddr = 'fromaddr@163.com'
toaddr = 'toaddr@163.com'
#制作一个Multipart类型的容器,根据Multipart邮件格式添加不同段
msg = MIMEMultipart('mixed')
msg['Subject'] = 'test message'
msg['From'] = fromaddr
msg['To'] = toaddr
msg.preamble = 'This is a multi-part message in MIME format.'
#由于下面需要包含超文本和图片作为内嵌资源,所以这里需要related作参数生成一个message
msgRoot = MIMEMultipart('related')
msg.attach(msgRoot)
#同时包含文本和超文本,这里就需要alternative作为参数
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
msgText = MIMEText('Some HTML text and an image.<br><img src="cid:image1"><br>Nifty!', 'html')
msgAlternative.attach(msgText)
#为内嵌在超文本中的图片资源设置一个Content-ID
fp = open('Menu_001.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)
#把图片作为附件放在邮件中
msg.attach(msgImage)
smtp = smtplib.SMTP()
smtp.connect(servername, 25)
#要做ehlo验证,要不然服务器会认为是不安全邮件
smtp.ehlo_or_helo_if_needed()
smtp.login(username, password)
smtp.sendmail(fromaddr, toaddr, msg.as_string())
smtp.quit()