python 发送邮件(文字、表格、附

发布时间:2019-09-21 10:54:33编辑:auto阅读(1932)


    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( "发送失败")


    程序运行成功后:


关键字