用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实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
django_orm查询性能优化方法
Aug 20 Python
Django+JS 实现点击头像即可更改头像的方法示例
Dec 26 Python
python实现贪吃蛇小游戏
Mar 21 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
python 寻找离散序列极值点的方法
Jul 10 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
如何用python免费看美剧
Aug 11 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 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生成条形码大揭秘
2015/09/24 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
redux处理异步action解决方案
2020/03/22 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
python正则表达式判断字符串是否是全部小写示例
2013/12/25 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
python执行使用shell命令方法分享
2017/11/08 Python
Django中的forms组件实例详解
2018/11/08 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
Python如何读取文件中图片格式
2020/01/13 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
增大python字体的方法步骤
2020/07/05 Python
美国钻石商店:Zales
2016/11/20 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
北大自主招生自荐信
2013/10/19 职场文书
小学门卫岗位职责
2013/12/17 职场文书
酒店人事专员岗位职责
2013/12/19 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB