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 05 Python
Python即时网络爬虫项目启动说明详解
Feb 23 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
python的pytest框架之命令行参数详解(上)
Jun 27 Python
python pandas生成时间列表
Jun 29 Python
Django 外键的使用方法详解
Jul 19 Python
centos7之Python3.74安装教程
Aug 15 Python
Python函数的定义方式与函数参数问题实例分析
Dec 26 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
Sep 04 Python
了解一下python内建模块collections
Sep 07 Python
分享几种python 变量合并方法
Mar 20 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 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
获取URL文件名后缀
2013/10/24 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
DOM相关内容速查手册
2007/02/07 Javascript
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
javascript基本算法汇总
2016/03/09 Javascript
canvas压缩图片转换成base64格式输出文件流
2017/03/09 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
js移动端图片压缩上传功能
2020/08/18 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
Python中的多重装饰器
2015/04/11 Python
python简单实现计算过期时间的方法
2015/06/09 Python
Python编写Windows Service服务程序
2018/01/04 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
python如何创建TCP服务端和客户端
2018/08/26 Python
Python logging模块用法示例
2018/08/28 Python
python画双y轴图像的示例代码
2019/07/07 Python
用python解压分析jar包实例
2020/01/16 Python
Python urllib库如何添加headers过程解析
2020/10/05 Python
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
Delphi CS笔试题
2014/01/04 面试题
实习自我鉴定模板
2013/09/28 职场文书
消防隐患整改通知书
2015/04/22 职场文书