python发送邮件示例(支持中文邮件标题)
admin
2023-07-31 02:00:49
0

复制代码 代码如下:
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)

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python查找阿姆斯特朗数 题目解释 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 + 5...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...