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使用新浪微博API发送微博的例子
Apr 10 Python
Python编程中time模块的一些关键用法解析
Jan 19 Python
python下载图片实现方法(超简单)
Jul 21 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
python自动化实现登录获取图片验证码功能
Nov 20 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
python模板入门教程之flask Jinja
Apr 11 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乱码问题
2012/03/25 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
javascript some()函数用法详解
2014/11/13 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
2016/09/13 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
2017/07/19 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
jquery 输入框数字限制插件
2009/11/10 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
javascript中简单的进制转换代码实例
2013/10/26 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
python中import reload __import__的区别详解
2017/10/16 Python
Python enumerate索引迭代代码解析
2018/01/19 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
详解Python 切片语法
2019/06/10 Python
AUC计算方法与Python实现代码
2020/02/28 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
Python实现播放和录制声音的功能
2020/08/12 Python
html5简介及新增功能介绍
2020/05/18 HTML / CSS
学生实习介绍信
2014/01/15 职场文书
上班迟到检讨书
2014/09/15 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
如何写好闭幕词
2019/04/02 职场文书
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA