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中快速进行多个字符替换的方法小结
Dec 15 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
使用python制作一个为hex文件增加版本号的脚本实例
Jun 12 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
Python阶乘求和的代码详解
Feb 14 Python
python不相等的两个字符串的 if 条件判断为True详解
Mar 12 Python
Python实现的北京积分落户数据分析示例
Mar 27 Python
python框架flask入门之环境搭建及开启调试
Jun 07 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
keras:model.compile损失函数的用法
Jul 01 Python
pyqt5实现井字棋的示例代码
Dec 07 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
大师制作的中短波矿石收音机
2020/04/02 无线电
PHP与javascript对多项选择的处理
2006/10/09 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
Ext面向对象开发实践(续)
2008/11/18 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
D3.js实现直方图的方法详解
2016/09/25 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
JavaScript日期选择功能示例
2017/01/16 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
three.js 入门案例详解
2018/01/23 Javascript
移动端如何用下拉刷新的方式实现上拉加载
2018/12/10 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
python实现图书借阅系统
2019/02/20 Python
利用python求积分的实例
2019/07/03 Python
Python安装whl文件过程图解
2020/02/18 Python
Python configparser模块配置文件过程解析
2020/03/03 Python
Python Scrapy框架:通用爬虫之CrawlSpider用法简单示例
2020/04/11 Python
Python读写锁实现实现代码解析
2020/11/28 Python
员工试用期自我鉴定范文
2014/09/15 职场文书
会计入职心得体会
2016/01/22 职场文书
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python