设为首页 收藏本站
查看: 633|回复: 0

[经验分享] 使用python发送html的邮件

[复制链接]

尚未签到

发表于 2017-5-3 08:03:13 | 显示全部楼层 |阅读模式
  实现功能1:查询数据,然后做成报表,再发送这些报表
  代码:

写道

import smtplib
from datetime import datetime, timedelta
import time
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart

def get_html_msg(send_date):
     head = """<head><meta charset="utf-8">
    <STYLE TYPE="text/css" MEDIA=screen>
    <!--
     table {font-size:20px;border-collapse: collapse;font-family: arial;}
    thead {border: 2px solid #B1CDE3;background: #00ffff;font-size:18px;padding: 10px 10px 10px       10px;color: #4f6b72;font-family: times;}
     th {vertical-align:top;font-size:12px;padding: 5px 5px 5px 5px;color: #4f6b72;font-family: arial;}
     body {font-family: arial;}
    -->
    </STYLE>
    </head>"""

     p = """<p>大家好:<br>截止到 """ + get_cpu_report_date(send_date, format_min) + """,各个设备性     能指标报表如下,请查阅。<br></p>"""

     body = """<body>""" + p + """
     <table border="0" cellpadding="0" cellspacing="0">
     <th>""" + get_cpu_table() +"""</th>
     <th>"""+get_io_table() + """</th>
     <th>"""+get_load_table() + """</th>
     <th>"""+get_memory_table() + """</th>
     <th>"""+get_process_speed_table() + """</th>
     </table>
     </body>"""
     html = """<html>""" + head + body + """</html>"""
     return html

def send_mail(html_msg):
     msg = MIMEMultipart()
     content = MIMEText(html_msg,'html')
     msg.attach(content)
     msg['To'] = ";".join(to_list)
     msg['From'] = from_addr
     msg['Subject'] = subject
     s = smtplib.SMTP('xxxx')
     s.set_debuglevel(0)
     s.sendmail(from_addr, to_list, msg.as_string())
     s.quit()
     print "ok"

if __name__ == "__main__":
     now = datetime.now()
     html = get_html_msg()
     send_mail(html)
  实现功能2(发送附件):(转载)

#!/usr/bin/env python
#-*-coding:utf8-*-
import os, smtplib, mimetypes
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
MAIL_LIST = ["username@iyunv.com"]
MAIL_HOST = "smtp.iyunv.com"
MAIL_USER = "username"
MAIL_PASS = "password"
MAIL_POSTFIX = "iyunv.com"
MAIL_FROM = MAIL_USER + "<"+MAIL_USER + "@" + MAIL_POSTFIX + ">"
def send_mail(subject, content, filename = None):
try:
message = MIMEMultipart()
message.attach(MIMEText(content))
message["Subject"] = subject
message["From"] = MAIL_FROM
message["To"] = ";".join(MAIL_LIST)
if filename != None and os.path.exists(filename):
ctype, encoding = mimetypes.guess_type(filename)
if ctype is None or encoding is not None:
ctype = "application/octet-stream"
maintype, subtype = ctype.split("/", 1)
attachment = MIMEImage((lambda f: (f.read(), f.close()))(open(filename, "rb"))[0], _subtype = subtype)
attachment.add_header("Content-Disposition", "attachment", filename = filename)
message.attach(attachment)
smtp = smtplib.SMTP()
smtp.connect(MAIL_HOST)
smtp.login(MAIL_USER, MAIL_PASS)
smtp.sendmail(MAIL_FROM, MAIL_LIST, message.as_string())
smtp.quit()
return True
except Exception, errmsg:
print "Send mail failed to: %s" % errmsg
return False
if __name__ == "__main__":
if send_mail("测试信", "我的博客欢迎您/", r"G:\attachment.rar"):
print "发送成功!"
else:
print "发送失败!"

 1、首先要理解一个常识(RFC)
RFC(The Request for Comments)是一个关于Internet各种标准的文档,定义了很多的网络协议和数据格式,标准的Internet邮件遵从RFC2822(Internet Message Format)等几个文档,其中RFC822中描述了邮件头(mail headers)的格式。具体文档在Python帮助里都可以查到全文。
2、其次要熟悉Python的几个模块
关于邮件的有email,smtplib等,关于编码的有base64,binascii等,发送邮件的方式就是先根据RFC构造好邮件的各个部分,然后登录到smtp服务器sendmail就可以了。
3、下面贴代码
1 DSC0000.gif # -*- coding: cp936 -*-
2
3from email.Header import Header
4from email.MIMEText import MIMEText
5from email.MIMEMultipart import MIMEMultipart
6import smtplib, datetime
7
8#创建一个带附件的实例
9msg = MIMEMultipart()
10
11#构造附件
12att = MIMEText(open('d:\\tc201.rar', 'rb').read(), 'base64', 'gb2312')
13att["Content-Type"] = 'application/octet-stream'
14att["Content-Disposition"] = 'attachment; filename="tc201.rar"'
15msg.attach(att)
16
17#加邮件头
18msg['to'] = 'zhousl@xxx.com'
19msg['from'] = 'zhousl@xxx.com'
20msg['subject'] = Header('冒烟测试结果 (' + str(datetime.date.today()) + ')', \
21                        'gb2312')
22#发送邮件
23server = smtplib.SMTP('smtp.xxx.com')
24server.sendmail(msg['from'], msg['to'], \
25                 msg.as_string())
26server.close
4、几个值得注意的地方
1)构造附件时注意采用正确的字符集,这个困惑我好久,开始没有用gb2312,发过去的压缩文件就是坏的;
2)上面的代码中没有包括登录smtp服务器的指令,而Internet上面的smtp服务器一般都是要求认证的,可以通过smtp.login方法进行登陆
3)sendmail方法中的参数to可以是包含多个地址的元组,这样可以发送邮件给多个人了
4)Python2.4以前的版本是不支持gb2312字符集的,要下载安装Python2.4才能跑上面的代码,当然2.4.1肯定会更好一点

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372286-1-1.html 上篇帖子: python的web框架webpy【Templetor】(四) 下篇帖子: 解决线上故障-python分析日志脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表