用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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
python daemon守护进程实现
Aug 27 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
使用requests库制作Python爬虫
Mar 25 Python
python计算两个矩形框重合百分比的实例
Nov 07 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
Jan 07 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
对Django url的几种使用方式详解
Aug 06 Python
Python callable内置函数原理解析
Mar 05 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
如何提高python 中for循环的效率
Apr 15 Python
python如何爬取动态网站
Sep 09 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
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
List Installed Software Features
2007/06/11 Javascript
IE和Firefox在JavaScript应用中的兼容性探讨
2008/04/01 Javascript
JavaScript入门学习书籍推荐
2008/06/12 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
详解python之简单主机批量管理工具
2017/01/27 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书