python 发送邮件 ---- 正文内容包含: 文字, 表格, 附件
- import pandas as pd
- import smtplib
- from email.mime.text import MIMEText
- from email.mime.multipart import MIMEMultipart
- filename='C:\\Users\\thinkpad\\Desktop\\1.xlsx' #附件地址
- def send_mail(to_list,sub,context,filename): #to_list: 收件人; sub: 主题; content: 邮件内容
- mail_host="smtp.163.com" #设置服务器
- mail_user="XXXX@163.com" #用户名
- mail_pass="xxxxxx" #口令
- mail_postfix="163.com" #发件箱的后缀
- me="服务器"+"<"+mail_user+"@"+mail_postfix+">" #这里的 "服务器" 可以任意设置, 收到信后, 将按照设置显示
- msg = MIMEMultipart() #给定 msg 类型
- msg['Subject'] = sub #邮件主题
- msg['From'] = me
- msg['To'] = ";".join(mailto_list)
- msg.attach(context)
- #构造附件 1
- att1 = MIMEText(open(filename, 'rb').read(), 'xls', 'gb2312')
- att1["Content-Type"] = 'application/octet-stream'
- att1["Content-Disposition"] = 'attachment;filename='+filename[-6:]# 这里的 filename 可以任意写, 写什么名字, 邮件中显示什么名字, filename[-6:] 指的是之前附件地址的后 6 位
- msg.attach(att1)
- try:
- s = smtplib.SMTP()
- s.connect(mail_host) #连接 smtp 服务器
- s.login(mail_user,mail_pass) #登陆服务器
- s.sendmail(me, mailto_list, msg.as_string()) #发送邮件
- s.close()
- return True
- except Exception:
- return False
- if __name__ == '__main__':
- mailto_list=["zhanghaili@autoht.com"]
- a=pd.DataFrame({'数列 1':(1,1,1,1),'数列 2':(2,2,2,2),'数列 3':(3,3,3,3),'数列 4':(4,4,4,4)})
- a.index={'行 1','行 2','行 3','行 4'} #这里 dataframe 类型 a 就是要输出的表格
- sub="test"
- d='' #表格内容
- for i in range(len(a)):
- d=d+"""
- <tr>
- <td>"""+ str(a.index[i]) +"""</td>
- <td>"""+ str(a.iloc[i][0]) +"""</td>
- <td width="60" align="center">"""+ str(a.iloc[i][1]) +"""</td>
- <td width="75">"""+ str(a.iloc[i][2]) +"""</td>
- <td width="80">"""+ str(a.iloc[i][3]) +"""</td>
- </tr>""" html ="""<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <body>
- <div id="container">
- <p><strong > 测试程序邮件发送:</strong></p>
- <div id="content">
- <table width="30%" border="2" bordercolor="black" cellspacing="0" cellpadding="0">
- <tr>
- <td width="40"><strong > 统计 </strong></td>
- <td width="50"><strong > 数列 1</strong></td>
- <td width="60" align="center"><strong > 数列 2</strong></td>
- <td width="50"><strong > 数列 3</strong></td>
- <td width="80"><strong > 数列 4</strong></td>
- </tr>"""+d+"""
- </table>
- </div>
- </div>
- </div>
- </body>
- </html>
- """ context = MIMEText(HTML,_subtype='html',_charset='utf-8') #解决乱码
- if send_mail(mailto_list,sub,context,filename):
- print ("发送成功")
- else:
- print( "发送失败")
来源: http://www.bubuko.com/infodetail-2987511.html