#! C:\Python36\python.exe
'''
about what
'''
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
mail_msg = """
<p>Python 邮件发送测试...</p>
<p><a href="http://www.baidu.com">百度一下你就知道</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
<p><img src="cid:image2"></p>
"""
class SmtpUtil:
def send(self, sender, password, receiverList, title, message, isHtml=False, annexDictList=None, imgDictList=None):
# 构建根对象MIMEMultipart
msgRoot = MIMEMultipart()
msgRoot['Subject'] = title
msgRoot['From'] = sender
msgRoot['To'] = ";".join(receiverList)
# 添加正文
msgRoot.attach(MIMEText(mail_msg, 'plain' if not isHtml else 'html', 'utf-8'))
# 添加附件
if annexDictList:
for annexDict in annexDictList:
if annexDict["isImage"]:
# 构建【图片对象】MIMEImage
annex = MIMEImage(open(annexDict["path"], 'rb').read())
else:
annex = MIMEText(open(annexDict["path"], 'rb').read(), 'base64', 'utf-8')
annex["Content-Type"] = 'application/octet-stream'
annex["Content-Disposition"] = 'attachment; filename="' + annexDict["name"] + '"'
msgRoot.attach(annex)
# 添加配图
if imgDictList:
for imgDict in imgDictList:
msgImage = MIMEImage(open(imgDict["path"], 'rb').read())
msgImage.add_header('Content-ID', '<'+imgDict["name"]+'>') # 定义图片 ID,在 HTML 文本中引用
msgRoot.attach(msgImage)
try:
# 登录邮件服务器
if sender.endswith("qq.com"):
smtpObj = smtplib.SMTP_SSL()
smtpObj.connect('smtp.qq.com', 465)
else:
smtpObj = smtplib.SMTP('smtp.163.com', 25)
smtpObj.login(sender, password)
# 发送并退出
smtpObj.sendmail(sender, receiverList, msgRoot.as_string())
smtpObj.quit()
print("邮件发送成功")
# 处理异常
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
if __name__ == "__main__":
SmtpUtil().send(
# 发件人信息
"[email protected]","uaimpajcklvecahc",
# 收件人信息
["[email protected]", "[email protected]", "[email protected]"],
# 标题及正文
"你妈逼你结婚了吗",mail_msg,
# 正文格式
isHtml=True,
# 附件
annexDictList= [
{"path": "./res/1.txt", "name": "fuck.txt","isImage":False},
{"path": "./res/meinvb.jpg", "name": "dameinv.jpg","isImage":True}
],
# html格式的正文的附图
imgDictList=[
{"path":"./res/meinvb.jpg","name":"image1"},
{"path":"./res/monster.jpg","name":"image2"}
]
)
print("main over")