一、邮件包含的元素
(1)邮件头部:发件人、收件人、主题
(2)邮件正文(文字、表格、图片等)、附件
(3)发件人信息及备注信息
二、python代码
(1)模块导入
# pandas格式化数据
import pandas as pd
# smtp邮件传输协议
import smtplib
# 负责构造文本,创建一个 HTML 格式的邮件正文
from email.mime.text import MIMEText
from email.header import Header
# 发送邮件,负责将多个对象集合起来
from email.mime.multipart import MIMEMultipart
# 读入文件
from pathlib import Path
(2)构造邮件头部信息
# 构造邮件头部
message = MIMEMultipart()
message['From'] = 'XX.com'
message['To'] = 'XX.com'
message['Subject'] ='测试邮件'
(3)构造邮件正文
#邮件正文开头
head_text = '''<p style="font-size: 16px; color: blue;">您好:</p>
<p style="font-size:18px;text-indent:2em;">这里是一段测试样例。</p>
'''
#正文中加入表格
# 读入csv文件路径
path = Path(r'email_test.csv')
# 读取文件,并修改表格头
tables_data = pd.read_csv(path, encoding="UTF-8").rename(columns={"date": "日期", "flow": "流量"})
#表格样式
css_table_style = """
<style>
#customers {
font-family:"Arial", Trebuchet MS, Helvetica, sans-serif;
font-size: 14px;
border-collapse: collapse;
width: 50%;
}
#customers td, #customers th {
border: 1px solid #ddd;
padding: 3px;
text-align: center;
}
#customers tr:nth-child(even){background-color: #f2f2f2;}
#customers tr:hover {background-color: #ddd;}
#customers th {
padding-top: 12px;
padding-bottom: 12px;
text-align: center;
background-color: #4CAF50;
color: white;
}
</style>
<body>
"""
# 把表格转化为HTML格式
css_table_body = tables_data.to_html(index=False, table_id="customers")
css_table_end = '''\n</body>'''
table_messages = css_table_style+css_table_body+css_table_end
# 发件人相关信息
remarks = """<br />
<p> 此邮件是通过程序自动发送,请勿单独回复!<br> 若对邮件内容存有疑问,请邮件通知发件人。</p>"""
information = """<br /><br />
<p><span style="color:#CCEEFF;">————————————————</span><br />
<span style="font-size:24px;color:#00FF00;font-family:"黑体";>如有疑问,请与我联系!</span></p>
<p><span style="font-size:30px;color:navy;font-family:"黑体";">XXX</span>
# 将邮件正文的各部分组合在一起
theBody = MIMEText(head_text + table_messages + remarks + information, _subtype='html', _charset='utf-8')
message.attach(theBody)
(4)发送邮件
# 发送邮件
print("开始测试 >>>")
try:
smtp = smtplib.SMTP()
smtp.connect('smtp.exmail.qq.com')
smtp.login(username, password)
smtp.sendmail(sender, main_receivers, message.as_string())
smtp.quit()
except smtplib.SMTPException as e:
print(e)