使用Python发送HTML格式邮件可以让收件人看到格式丰富的内容,包括字体样式、颜色、图片链接等,而不仅仅是纯文本。
Python发送HTML格式的邮件与发送纯文本消息的邮件不同之处就是将MIMEText中_subtype
设置为html。具体代码如下:
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from cfg import email_cfg
sender = email_cfg['user']
password=email_cfg['passwd']
receivers = [email_cfg['user']]
msgRoot = MIMEMultipart('related')
msgRoot['From'] = Header("Me", 'utf-8')
msgRoot['To'] = Header("我", 'utf-8')
subject = 'Python SMTP 邮件测试'
msgRoot['Subject'] = Header(subject, 'utf-8')
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
mail_msg = """
<p>Python 邮件发送测试...</p>
<h1>H1</h1>
<button>hi~</button>
<p><img src="cid:image1"></p>"""
msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))
指定图片为当前目录。
fp = open('4.2.png', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()
定义图片 ID,在 HTML 文本中引用。
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)
try:
smtpObj = smtplib.SMTP_SSL('smtp.163.com',port=465)
smtpObj.login(sender,password)
smtpObj.sendmail(sender, receivers, msgRoot.as_string())
print ("邮件发送成功")
smtpObj.quit()
except smtplib.SMTPException:
print (smtplib.SMTPException)
邮件发送成功