python发送邮件示例(支持中文邮件标题)


Posted in Python onFebruary 16, 2014
def sendmail(login={},mail={}):
    '''\
    @param login login['user'] login['passwd']
    @param mail mail['to_addr'] mail['subject'] mail['content'] mail['attach']
    '''
    from datetime import datetime
    from base64 import b64encode
    import smtplib, mimetypes
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.mime.image import MIMEImage
    user_info = login['user'].split('@')
    mail_configure = {}
    mail_configure['mail_encoding'] = 'utf-8'
    mail_configure['mail_supplier'] = user_info[1]
    mail_configure['from_addr'] = login['user']
    mail_configure['server_host'] = 'smtp.%s' % mail_configure['mail_supplier']
    error = None
    try:
        email = MIMEMultipart()
        email['from'] = mail_configure['from_addr']
        email['to'] = mail['to_addr']
        email['subject'] = '=?%s?B?%s?=' % (mail_configure['mail_encoding'],b64encode(mail['subject']))
        email_content = MIMEText(mail['content'], _charset=mail_configure['mail_encoding'])
        email.attach(email_content)
        if 'attach' in mail:
            for i in mail['attach']:
                ctype, encoding = mimetypes.guess_type(i)
                if ctype is None or not encoding is None:
                    ctype = 'application/octet-stream'
                maintype, subtype = ctype.split('/', 1)
                att = MIMEImage((lambda f: (f.read(), f.close()))(open(i, 'rb'))[0], _subtype = subtype)
                att.add_header('Content-Disposition', 'attachment', filename = i)
                email.attach(att)
        smtp = smtplib.SMTP()
        smtp.connect(mail_configure['server_host'])
        smtp.login(user_info[0], login['passwd'])
        smtp.sendmail(mail_configure['from_addr'], mail['to_addr'], email.as_string())
        smtp.quit()
    except Exception as e:
        error = e
    return (mail_configure['from_addr'], mail['to_addr'], error)

测试

def t21():
    login = {
        'user':'ak43@sina.com',
        'passwd':'hello@d'
    }
    mail = {
        'to_addr':'ak32@sina.com;ak32@21cn.com',
        'subject':'不带附件的测试邮件',
        'content':'''\
        sz002718,友邦吊顶
        sz002719,麦趣尔
        sz002722,金轮股份
        ''',
    }
    print sendmail(login, mail)
    login = {
        'user':'hellot@sina.com',
        'passwd':'hello#world'
    }
    mail = {
        'to_addr':'tom12@sina.com;tom12@21cn.com',
        'subject':'带附件的测试邮件',
        'content':'''\
        sz002718,友邦吊顶
        sz002719,麦趣尔
        sz002722,金轮股份
        ''',
        'attach':['e:/a/a.txt']
    }
    print sendmail(login, mail)
Python 相关文章推荐
Python的词法分析与语法分析
May 18 Python
在Python中处理时间之clock()方法的使用
May 22 Python
python读写ini配置文件方法实例分析
Jun 30 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
Python 3.8 新功能全解
Jul 25 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
AI:如何训练机器学习的模型
Apr 16 Python
python定时器使用示例分享
Feb 16 #Python
python求素数示例分享
Feb 16 #Python
python检测服务器是否正常
Feb 16 #Python
java直接调用python脚本的例子
Feb 16 #Python
python根据距离和时长计算配速示例
Feb 16 #Python
python根据经纬度计算距离示例
Feb 16 #Python
python转换摩斯密码示例
Feb 16 #Python
You might like
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
2013/08/25 Javascript
javascript解析json实例详解
2014/11/05 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
2017/04/01 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
js实现简单扫雷
2020/11/27 Javascript
分享一下Python 开发者节省时间的10个方法
2015/10/02 Python
Python随手笔记之标准类型内建函数
2015/12/02 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
Does C# support multiple inheritance? (C#支持多重继承吗)
2012/01/04 面试题
电视节目策划方案
2014/05/16 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
人事文员岗位职责
2015/02/04 职场文书
集结号观后感
2015/06/08 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
2016年学校招生广告语
2016/01/28 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript