# coding=utf-8
import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.mime.text import MIMEText
from email.header import Header
def sendMail(file):
Suffix = '邮件测试'
# 创建一个支持多媒体的邮件对象
msg = MIMEMultipart()
to_receiver = ['aa@xx.com','bb@xx.com']
cc_receiver = ['cc@xx.com']
# 邮件里面的发件人
msg['From'] = Header('dd@xx.com')
# 邮件里面的收件人
msg['To'] = ','.join(to_receiver)
# 邮件里面的抄送
msg['Cc'] = ','.join(cc_receiver)
# 邮件里面的主题
msg['Subject'] = Header(subject, 'utf-8')
# 邮件正文,我是HTML的格式的正文
with open('/root/email.html', 'r') as f:
table_html = f.read()
# 邮件正文
text = 'hello world!<br/>' + table_html
msg.attach(MIMEText(text.strip(), 'html', 'utf-8'))
# 因为我的HTML代码里面有 image 标签,附带了图片
# 如果邮箱客户端有开启图片自动下载的话,是不影响图片展示的
# 但大部分人是不开的,比如一些新手根本不知道这个功能
# 所以我们要把图片内嵌到邮件里面, 有cid 超链接的方式,就可以展示图片了
# 但尽量让图片小的,最好别超过100kb
with open("/root/logo.png", "rb") as f:
sign_logo = f.read()
msgImage = MIMEImage(sign_logo)
# 这边Content-ID 的值和 html里面 image src要对应上才能加载图片
# <image src="cid:logo"></image> 类似这样
msgImage.add_header('Content-ID', '<logo>')
msg.attach(msgImage)
# 添加Excel文件到附件
with open(file, 'rb') as f:
excel = f.read()
att1 = MIMEText(excel, 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="hello.xlsx"')
msg.attach(att1)
try:
# 邮箱服务端的地址
smtpobj = smtplib.SMTP_SSL("smtp.qiye.aliyun.com")
# 465是加密的安全连接端口
smtpobj.connect("smtp.qiye.aliyun.com", 465)
# 邮箱登陆账号密码
# 这边的邮箱账号最好是和发件人一致
# 不然接收人那边会有提醒是,发件人是msg['From'] 里面的人
# 代发者是ff@xx.com 这个邮箱
smtpobj.login("ff@xx.com", "pw")
smtpobj.sendmail('ff@xx.com', to_receiver+cc_receiver, msg.as_string())
except Exception as e:
print(str(e))
finally:
smtpobj.quit()
一个比较简单的关于发邮件的模版,涵盖了以下功能要素:
1. 邮件实例是怎么创建的
2. 发件人,接收人,抄送者,主题对应的 key 是From,To,Cc,Subject
3. 如何把图片正确的嵌入到HTML格式的邮件正文中
4. 附件文件添加