用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基于回溯法子集树模板实现8皇后问题
Sep 01 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
python+pyqt5编写md5生成器
Mar 18 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
pygame实现俄罗斯方块游戏(基础篇2)
Oct 29 Python
python 实现让字典的value 成为列表
Dec 16 Python
使用Python的Turtle库绘制森林的实例
Dec 18 Python
Python使用Pandas库常见操作详解
Jan 16 Python
django xadmin 管理器常用显示设置方式
Mar 11 Python
python数据类型强制转换实例详解
Jun 22 Python
Pycharm及python安装详细教程(图解)
Jul 31 Python
python实现简单聊天功能
Jul 07 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注入实例
2006/10/09 PHP
文件上传程序的全部源码
2006/10/09 PHP
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
CodeIgniter上传图片成功的全部过程分享
2013/08/12 PHP
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
JavaScript下利用fso判断文件是否存在的代码
2010/12/11 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
js Dialog 实践分享
2012/10/22 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
javascript制作游戏开发碰撞检测的封装代码
2015/03/31 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
Textarea输入字数限制实例(兼容iOS&amp;安卓)
2017/07/06 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
Django重置migrations文件的方法步骤
2019/05/01 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Django实现跨域请求过程详解
2019/07/25 Python
CSS3 制作旋转的大风车(充满童年回忆)
2013/01/30 HTML / CSS
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
本科毕业生自我鉴定
2013/11/02 职场文书
教师个人自我鉴定
2014/02/08 职场文书
婚礼秀策划方案
2014/05/19 职场文书
承诺书模板
2014/08/30 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python
php访问对象中的成员的实例方法
2021/11/17 PHP