用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单元测试unittest实例详解
May 11 Python
Python实现堆排序的方法详解
May 03 Python
Python文件操作之合并文本文件内容示例代码
Sep 19 Python
Python selenium抓取微博内容的示例代码
May 17 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
Django中ORM外键和表的关系详解
May 20 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
Oct 23 Python
提高python代码运行效率的一些建议
Sep 29 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
python如何做代码性能分析
Apr 26 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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开发工具
2015/11/09 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
探究数组排序提升Python程序的循环的运行效率的原因
2015/04/01 Python
详解python实现读取邮件数据并下载附件的实例
2017/08/03 Python
详解python中init方法和随机数方法
2019/03/13 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
python开发前景如何
2020/06/11 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
如何强制垃圾回收
2015/10/06 面试题
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
房产协议书范本
2014/10/18 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
优秀班主任主要事迹材料
2014/12/16 职场文书
员工年度工作总结2015
2015/05/18 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
高一作文之乐趣
2019/11/21 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
Pyhton模块和包相关知识总结
2021/05/12 Python
python实现股票历史数据可视化分析案例
2021/06/10 Python
Java基于字符界面的简易收银台
2021/06/26 Java/Android