用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中nan与inf转为特定数字方法示例
May 11 Python
Python win32com 操作Exce的l简单方法(必看)
May 25 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
python3实现磁盘空间监控
Jun 21 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
django 通过URL访问上传的文件方法
Jul 28 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
如何利用Python开发一个简单的猜数字游戏
Sep 22 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
Python中return函数返回值实例用法
Nov 19 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
Dec 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取整的几种方式
2013/06/25 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
微信支付的开发流程详解
2016/09/13 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
轻松实现php文件上传功能
2017/02/17 PHP
详解PHP中mb_strpos的使用
2018/02/04 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
在Python的Flask框架中验证注册用户的Email的方法
2015/09/02 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
浅析python继承与多重继承
2018/09/13 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Pyqt5自适应布局实例
2019/12/13 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
餐厅总厨求职信
2014/03/04 职场文书
前台岗位职责
2015/02/13 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
2016年第16个全民国防教育日宣传活动总结
2016/04/05 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
vue封装数字翻牌器
2022/04/20 Vue.js