用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 相关文章推荐
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
python requests post多层字典的方法
Dec 27 Python
python的slice notation的特殊用法详解
Dec 27 Python
python:解析requests返回的response(json格式)说明
Apr 30 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
Python datetime 如何处理时区信息
Sep 02 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 Python
Python多线程 Queue 模块常见用法
Jul 04 Python
使用scrapy实现增量式爬取方式
Jun 21 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/11/23 PHP
php csv操作类代码
2009/12/14 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
php计算给定日期所在周的开始日期和结束日期示例
2017/02/06 PHP
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
js获取url中&quot;?&quot;后面的字串方法
2014/05/15 Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
2015/04/21 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
原生js实现无限循环轮播图效果
2017/01/20 Javascript
JS鼠标滚动分页效果示例
2017/07/05 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
python使用socket进行简单网络连接的方法
2015/04/29 Python
python链接Oracle数据库的方法
2015/06/28 Python
详解Python pygame安装过程笔记
2017/06/05 Python
Python 快速实现CLI 应用程序的脚手架
2017/12/05 Python
python程序快速缩进多行代码方法总结
2019/06/23 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
使用css3匹配手机屏幕横竖状态
2014/01/27 HTML / CSS
Volcom法国官网:美国冲浪滑板品牌
2017/05/25 全球购物
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
建筑横幅标语
2014/10/09 职场文书
学校党支部承诺书
2015/04/30 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python
Python 图片添加美颜效果
2022/04/28 Python