用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 相关文章推荐
使用python实现baidu hi自动登录的代码
Feb 10 Python
python脚本实现分析dns日志并对受访域名排行
Sep 18 Python
编写Python的web框架中的Model的教程
Apr 29 Python
Python实现合并字典的方法
Jul 07 Python
Python实现简单的文件传输与MySQL备份的脚本分享
Jan 03 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
详解python中asyncio模块
Mar 03 Python
python递归实现快速排序
Aug 18 Python
Python多线程thread及模块使用实例
Apr 28 Python
django 解决扩展自带User表遇到的问题
May 14 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
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
咖啡产品发展的三大浪潮
2021/03/04 咖啡文化
PHP自动更新新闻DIY
2006/10/09 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
php中get_meta_tags()、CURL与user-agent用法分析
2014/12/16 PHP
PHP答题类应用接口实例
2015/02/09 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
2016/10/20 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
JavaScript通过this变量快速找出用户选中radio按钮的方法
2015/03/23 Javascript
小白谈谈对JS原型链的理解
2016/05/03 Javascript
AngularJS使用自定义指令替代ng-repeat的方法
2016/09/17 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
Python学习小技巧总结
2018/06/10 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
Django权限控制的使用
2021/01/07 Python
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
RUIFIER官网:英国奢侈高级珠宝品牌
2020/06/12 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
最经典的商业地产项目广告词
2014/03/13 职场文书
员工培训协议书
2014/09/15 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python