用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 (1)
Oct 31 Python
Python守护进程用法实例分析
Jun 04 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 Python
使用Python读取大文件的方法
Feb 11 Python
python Flask 装饰器顺序问题解决
Aug 08 Python
python 获取图片分辨率的方法
Jan 08 Python
python中多个装饰器的调用顺序详解
Jul 16 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
Flask框架搭建虚拟环境的步骤分析
Dec 21 Python
详解PyQt5信号与槽的几种高级玩法
Mar 24 Python
python如何写try语句
Jul 14 Python
Python Selenium异常处理的实例分析
Feb 28 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时间戳使用实例代码
2008/06/07 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
微信小程序之数据双向绑定与数据操作
2017/05/12 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
vue中如何自定义右键菜单详解
2020/12/08 Vue.js
Python实现的中国剩余定理算法示例
2017/08/05 Python
django定期执行任务(实例讲解)
2017/11/03 Python
python如何对实例属性进行类型检查
2018/03/20 Python
解决python删除文件的权限错误问题
2018/04/24 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
python与字符编码问题
2019/05/24 Python
python批量修改ssh密码的实现
2019/08/08 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
matplotlib事件处理基础(事件绑定、事件属性)
2021/02/03 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
澳洲网红粉泥面膜:Sand & Sky
2019/08/13 全球购物
车间副主任岗位职责
2013/12/24 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
Java SSM配置文件案例详解
2021/08/30 Java/Android
JavaScript流程控制(分支)
2021/12/06 Javascript