用smtplib和email封装python发送邮件模块类分享


Posted in Python onFebruary 17, 2014
#!/usr/bin/python
# encoding=utf-8
# Filename: send_email.py
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText  
import smtplib  

class SendEmail:
    # 构造函数:初始化基本信息
    def __init__(self, host, user, passwd):
        lInfo = user.split("@")
        self._user = user
        self._account = lInfo[0]
        self._me = self._account + "<" + self._user + ">" 
        server = smtplib.SMTP()  
        server.connect(host)  
        server.login(self._account, passwd)
        self._server = server      
    # 发送文件或html邮件    
    def sendTxtMail(self, to_list, sub, content, subtype='html'):    
        # 如果发送的是文本邮件,则_subtype设置为plain
        # 如果发送的是html邮件,则_subtype设置为html
        msg = MIMEText(content, _subtype=subtype, _charset='utf-8')  
        msg['Subject'] = sub  
        msg['From'] = self._me  
        msg['To'] = ";".join(to_list)  
        try:
            self._server.sendmail(self._me, to_list, msg.as_string())   
            return True  
        except Exception, e:  
            print str(e)  
            return False
    # 发送带附件的文件或html邮件       
    def sendAttachMail(self, to_list, sub, content, subtype='html'):
        # 创建一个带附件的实例
        msg = MIMEMultipart()  
        # 增加附件1
        att1 = MIMEText(open(r'D:\javawork\PyTest\src\main.py','rb').read(), 'base64', 'utf-8')
        att1["Content-Type"] = 'application/octet-stream'
        # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
        att1["Content-Disposition"] = 'attachment; filename="main.py"'
        msg.attach(att1)
        # 增加附件2
        att2 = MIMEText(open(r'D:\javawork\PyTest\src\main.py','rb').read(), 'base64', 'utf-8')
        att2["Content-Type"] = 'application/octet-stream'
        att2["Content-Disposition"] = 'attachment; filename="main.txt"'
        msg.attach(att2)
        # 增加邮件内容
        msg.attach(MIMEText(content, _subtype=subtype, _charset='utf-8'))
        msg['Subject'] = sub  
        msg['From'] = self._me
        msg['To'] = ";".join(to_list)
        try:
            self._server.sendmail(self._me, to_list, msg.as_string())   
            return True  
        except Exception, e:  
            print str(e)  
            return False
     # 发送带附件的文件或html邮件       
    def sendImageMail(self, to_list, sub, content, subtype='html'):
        # 创建一个带附件的实例
        msg = MIMEMultipart()
        # 增加邮件内容
        msg.attach(MIMEText(content, _subtype=subtype, _charset='utf-8'))
        # 增加图片附件
        image = MIMEImage(open(r'D:\javawork\PyTest\src\test.jpg','rb').read())
        #附件列表中显示的文件名
        image.add_header('Content-Disposition', 'attachment;filename=p.jpg')     
        msg.attach(image)  
        msg['Subject'] = sub  
        msg['From'] = self._me
        msg['To'] = ";".join(to_list)
        try:
            self._server.sendmail(self._me, to_list, msg.as_string())   
            return True  
        except Exception, e:  
            print str(e)  
            return False
    # 析构函数:释放资源  
    def __del__(self):
        self._server.quit()
        self._server.close()
mailto_list = ['xxx@163.com'] 
mail = SendEmail('smtp.163.com', 'xxx@163.com', 'xxxxxx')
if mail.sendTxtMail(mailto_list, "测试邮件", "hello world!<br><br><h1>你好,发送文本文件测试<h1>"):  
    print "发送成功"  
else:  
    print "发送失败"
if mail.sendAttachMail(mailto_list, "测试邮件-带两个附件", "hello world!<br><br><h1>你好,发送文本文件测试<h1>"):  
    print "发送成功"  
else:  
    print "发送失败"
if mail.sendImageMail(mailto_list, "测试邮件-带一个图片的附件", "hello world!<br><br><h1>你好,发送文本文件测试<h1>"):  
    print "发送成功"  
else:  
    print "发送失败"
Python 相关文章推荐
Python3实现生成随机密码的方法
Aug 23 Python
Python调用ctypes使用C函数printf的方法
Aug 23 Python
python中的随机函数random的用法示例
Jan 27 Python
python3基于TCP实现CS架构文件传输
Jul 28 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
基于python实现KNN分类算法
Apr 23 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
浅析PyTorch中nn.Module的使用
Aug 18 Python
python代码如何实现余弦相似性计算
Feb 09 Python
Python使用pycharm导入pymysql教程
Sep 16 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
python通配符之glob模块的使用详解
Apr 24 Python
python类参数self使用示例
Feb 17 #Python
python实现爬虫下载漫画示例
Feb 16 #Python
python发送邮件示例(支持中文邮件标题)
Feb 16 #Python
python定时器使用示例分享
Feb 16 #Python
python求素数示例分享
Feb 16 #Python
python检测服务器是否正常
Feb 16 #Python
java直接调用python脚本的例子
Feb 16 #Python
You might like
PHP四大安全策略
2014/03/12 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
一端时间轮换的广告
2006/06/26 Javascript
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
js no-repeat写法 背景不重复
2009/03/18 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
JQuery validate插件验证用户注册信息
2016/05/11 Javascript
js的各种排序算法实现(总结)
2016/07/23 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
Python实现的破解字符串找茬游戏算法示例
2017/09/25 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
法律工作求职自荐信
2013/10/31 职场文书
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
职业女性的职业规划
2014/03/04 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
导游词开场白
2015/01/31 职场文书
薪资证明范本
2015/06/19 职场文书
工商行政处罚决定书
2015/06/24 职场文书
学子宴致辞大全
2015/07/27 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python