用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使用metaclass实现Singleton模式的方法
May 05 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
Python快速查找list中相同部分的方法
Jun 27 Python
python reverse反转部分数组的实例
Dec 13 Python
Python实现的序列化和反序列化二叉树算法示例
Mar 02 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
Python3.5面向对象编程图文与实例详解
Apr 24 Python
python多线程扫描端口(线程池)
Sep 04 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
jupyter notebook插入本地图片的实现
Apr 13 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP脚本数据库功能详解(下)
2006/10/09 PHP
php长字符串定义方法
2012/07/12 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
在JavaScript里嵌入大量字符串常量的实现方法
2013/07/07 Javascript
js实现拉伸拖动iframe的具体代码
2013/08/03 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
详解Angular6.0使用路由步骤(共7步)
2018/06/29 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python错误处理操作示例
2018/07/18 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
使用Python生成200个激活码的实现方法
2019/11/22 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
男女钓鱼靴和甲板鞋:XTRATUF
2021/01/09 全球购物
表扬稿格式范文
2015/01/16 职场文书
公司庆典主持词
2015/07/04 职场文书