#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr
from email.utils import formataddr
from email.header import Header
def __format_addr__(addr):
# 解析郵件地址,以保證郵有別名可以顯示
alias_name, addr = parseaddr(addr)
# 防止中文問題,進行轉碼處理,並格式化為str返回
return formataddr((Header(alias_name,charset="utf-8").encode(),
addr.encode("uft-8") if isinstance(addr, unicode) else addr))
def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
SERVER = 'smtp.***.com'
USER = '******'
PASSWD = '***'
strFrom = __format_addr(fromAdd)
strTo = list()
# 原來是一個純郵箱的list,現在如果是一個["jayzhen<jayzhen@jz.com>"]的list給他格式化
try:
for a in toAdd:
strTo.append(__format_addr(a))
except Exception as e:
# 沒有對a和toadd進行type判斷,出錯就直接還原
strTo = toAdd
msgRoot = MIMEMultipart('related')
msgRoot.preamble = 'This is a multi-part message in MIME format.'
msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)
# 郵件對象
msgText = MIMEText(html_text, 'html', 'utf-8')
msgRoot['Subject'] = Header(subject) # 這是郵件的主題,通過Header來標准化
msgRoot['From'] = strFrom # 發件人也是被格式化過的
msgRoot['to'] = ','.join(strTo) # 這個一定要是一個str,不然會報錯“AttributeError: 'list' object has no attribute 'lstrip'”
msgAlternative.attach(msgText)
smtp = smtplib.SMTP(SERVER, 25)
smtp.set_debuglevel(0)
# smtp.connect(SERVER)
smtp.login(USER, PASSWD)
# 這里要注意了,這里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的區別
smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
smtp.quit()
if __name__ == "__main__":
fromAdd = 'yann126@126.com'
toAdd = ['yann126@126.com', 'yann_1@aliyun.com']
subject = "hi"
html_text = "<h1>hi</h1>"
send_mail_to(fromAdd, toAdd, subject, html_text)
原文:https://blog.csdn.net/u013948858/article/details/82903977