用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中PIL安装简单教程
Apr 21 Python
详解Python中的array数组模块相关使用
Jul 05 Python
pandas数据分组和聚合操作方法
Apr 11 Python
python sys.argv[]用法实例详解
May 25 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
python使用gdal对shp读取,新建和更新的实例
Mar 10 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python中常见错误及解决方法
Jun 21 Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 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产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
php程序内部post数据的方法
2015/03/31 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
JS中捕获console.log()输出的方法
2015/04/16 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
[55:18]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
进一步了解Python中的XML 工具
2015/04/13 Python
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
工作时间擅自离岗检讨书
2014/10/24 职场文书
留学推荐信英文范文
2015/03/26 职场文书
Pytest中conftest.py的用法
2021/06/27 Python
详解Nginx 被动检查服务器的存活状态
2021/10/16 Servers
box-shadow单边阴影的实现
2023/05/21 HTML / CSS