用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文件比较示例分享
Jan 10 Python
python实现数通设备端口监控示例
Apr 02 Python
Python脚本实现DNSPod DNS动态解析域名
Feb 14 Python
python中global用法实例分析
Apr 30 Python
python集合用法实例分析
May 30 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
Jun 14 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
利用python将图片版PDF转文字版PDF
May 03 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
如何对python的字典进行排序
Jun 19 Python
Python爬取梨视频的示例
Jan 29 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
php-fpm配置详解
2014/02/12 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
JavaScript中数组对象的那些自带方法介绍
2013/03/12 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
React快速入门教程
2017/01/17 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
Python中特殊函数集锦
2015/07/27 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
Python hashlib模块的使用示例
2020/10/09 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
后勤工作职责
2013/12/22 职场文书
微电影大赛策划方案
2014/06/05 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
中小学生学籍证明
2014/10/25 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
因家庭原因离职的辞职信范文
2015/05/12 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python