用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字典序问题实例
Sep 26 Python
python内存管理分析
Apr 08 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
python 连接sqlite及简单操作
Jun 30 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 Python
numpy数组之存取文件的实现示例
May 24 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
python推导式的使用方法实例
Feb 28 Python
numpy数据类型dtype转换实现
Apr 24 Python
Python实现简单的猜单词
Jun 15 Python
Python jiaba库的使用详解
Nov 23 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 fsockopen函数被禁用的解决办法
2013/08/07 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
js实现点击获取验证码倒计时效果
2021/01/28 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
详解angular部署到iis出现404解决方案
2018/08/14 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
python中cPickle用法例子分享
2014/01/03 Python
使用Python获取Linux系统的各种信息
2014/07/10 Python
github配置使用指南
2014/11/18 Python
python中的编码知识整理汇总
2016/01/26 Python
浅析使用Python操作文件
2017/07/31 Python
基于Python代码编辑器的选用(详解)
2017/09/13 Python
Python3.4实现从HTTP代理网站批量获取代理并筛选的方法示例
2017/09/26 Python
深入理解Django中内置的用户认证
2017/10/06 Python
Python代码实现KNN算法
2017/12/20 Python
python版本五子棋的实现代码
2018/12/11 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
python绘制汉诺塔
2021/03/01 Python
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
ASOS英国官网:英国在线时装和化妆品零售商
2017/05/19 全球购物
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
求职简历自荐信
2013/10/20 职场文书
群众路线表态发言材料
2014/10/17 职场文书
校运会通讯稿
2015/07/18 职场文书