博客
关于我
Python模块系列:发送邮件(email)
阅读量:252 次
发布时间:2019-03-01

本文共 6107 字,大约阅读时间需要 20 分钟。

1 引入包

import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import formataddr, parseaddrfrom email.mime.application import MIMEApplicationfrom email.mime.multipart import MIMEMultipartimport loggingfrom datetime import datetime

2 发送普通邮件

只发送邮件正文。

# -*- coding: utf-8 -*-"""Created on Thu Feb  4 10:23:11 2021@author: xindaqi1"""import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import formataddr, parseaddrfrom email.mime.application import MIMEApplicationfrom email.mime.multipart import MIMEMultipartimport loggingfrom datetime import datetime# 邮件配置email_config = {   "email_from":"发件箱地址",                        "email_send_address":"发件箱用户名",                         "email_auth":"发件箱密码",                         "email_host":"发件箱服务器",                         "email_port": 465,                        "email_receive_address": "收件箱地址",                        "email_subject": "邮件主题"}# 抄送配置CarbonCopy_0 = [      {   'name':'***', 'email':'抄送邮件地址'},]CarbonCopy_5 = [    {   'name':'***', 'email':'抄送邮件地址'},    ]# 邮箱用户名和地址解析def _format_addr(s):    name, addr = parseaddr(s)    return formataddr((Header(name, 'utf-8').encode(), addr))    def send_email(content, user_email_config, cc_flag):    """    发送邮件    Parameters    ----------    content : string        邮件内容    user_email_config : list        用户信息列表.    cc_flag: int        抄送标志    Returns    -------    None.    """    now = datetime.now()    subject = user_email_config['email_subject']    EmailSubject = Header(subject, charset='utf-8').encode()    print("我是邮件配置信息:{}".format(user_email_config))    message = MIMEText(content, _charset='utf-8')    message['Subject'] = subject    message['From'] = user_email_config["email_from"]    # 发送到对应的项目组    message['To'] = ','.join([_format_addr('%s <%s>' % (x['name'], x['email'])) for x in user_email_config["email_receive_address"]])    # 抄送    if(cc_flag == 0):        CarbonCopy = CarbonCopy_0    else:        CarbonCopy = CarbonCopy_5    message['Cc'] = ','.join([_format_addr('%s <%s>' % (x['name'], x['email'])) for x in CarbonCopy])    message["Accept-Language"] = "zh-CN"    message["Accept-Charset"] = "ISO-8859-1,utf-8"        try:        user_email_li = user_email_config["email_receive_address"] + CarbonCopy        server = smtplib.SMTP_SSL(user_email_config["email_host"], user_email_config["email_port"])        server.login(user_email_config["email_send_address"], user_email_config["email_auth"])        server.sendmail(user_email_config["email_send_address"], [x['email'] for x in user_email_li], message.as_string())        server.quit()        print("[{}], 邮件发送成功,邮件接收人:{}".format(now, ','.join([x['email'] for x in user_email_li])))        return True    except Exception as e:        logging.exception(e)        print("[{}], 邮件发送失败,异常:{}".format(now, str(e)))        return False

3 发送附件

发送正文并添加附件,如Excel文件。

# -*- coding: utf-8 -*-"""Created on Thu Feb  4 10:23:11 2021@author: xindaqi1"""import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextfrom email.utils import formataddr, parseaddrfrom email.mime.application import MIMEApplicationfrom email.mime.multipart import MIMEMultipartimport loggingfrom datetime import datetime# 邮件配置email_config = {   "email_from":"发件箱地址",                        "email_send_address":"发件箱用户名",                         "email_auth":"发件箱密码",                         "email_host":"发件箱服务器",                         "email_port": 465,                        "email_receive_address": "收件箱地址",                        "email_subject": "邮件主题"}# 抄送配置CarbonCopy_0 = [      {   'name':'***', 'email':'抄送邮件地址'},]CarbonCopy_5 = [    {   'name':'***', 'email':'抄送邮件地址'},    ]def _format_addr(s):    name, addr = parseaddr(s)    return formataddr((Header(name, 'utf-8').encode(), addr))    def send_email(path, filename_li, content, user_email_config, cc_flag):    """    发送邮件    Parameters    ----------    path : string        附件文件路径    filename_li : list        附件文件名称列表    content : string        邮件内容    user_email_config : list        用户信息列表.    cc_flag: int        抄送标志    Returns    -------    None.    """    now = datetime.now()    subject = user_email_config['email_subject']    EmailSubject = Header(subject, charset='utf-8').encode()    print("我是邮件配置信息:{}".format(user_email_config))    # message = MIMEText(content, 'HTML', _charset='utf-8')    message = MIMEMultipart()    for filename in filename_li:        attachments = MIMEApplication(open(path + filename, 'rb').read())        attachments.add_header('Content-Disposition', 'attachment', filename=filename)        message.attach(attachments)    content_text = MIMEText(content, _charset="utf-8")    message.attach(content_text)    message['Subject'] = subject    message['From'] = user_email_config["email_from"]    # 发送到对应的项目组    message['To'] = ','.join([_format_addr('%s <%s>' % (x['name'], x['email'])) for x in user_email_config["email_receive_address"]])    # 抄送    if(cc_flag == 0):        CarbonCopy = CarbonCopy_0    else:        CarbonCopy = CarbonCopy_5    message['Cc'] = ','.join([_format_addr('%s <%s>' % (x['name'], x['email'])) for x in CarbonCopy])    message["Accept-Language"] = "zh-CN"    message["Accept-Charset"] = "ISO-8859-1,utf-8"        try:        user_email_li = user_email_config["email_receive_address"] + CarbonCopy        server = smtplib.SMTP_SSL(user_email_config["email_host"], user_email_config["email_port"])        server.login(user_email_config["email_send_address"], user_email_config["email_auth"])        server.sendmail(user_email_config["email_send_address"], [x['email'] for x in user_email_li], message.as_string())        server.quit()        print("[{}], 邮件发送成功,邮件接收人:{}".format(now, ','.join([x['email'] for x in user_email_li])))        return True    except Exception as e:        logging.exception(e)        print("[{}], 邮件发送失败,异常:{}".format(now, str(e)))        return False

4 小结

  • Python发送邮件:使用email模块
  • 仅发送邮件文本内容,使用:MIMEText(content, _charset=‘utf-8’)
  • 发送文本内容和附件,使用:MIMEMultipart()携带附件,MIMEText(content, _charset=‘utf-8’)携带文本内容

转载地址:http://nxht.baihongyu.com/

你可能感兴趣的文章
MongoDB学习笔记(8)--索引及优化索引
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS UC 2013-0-Prepare Tool
查看>>
msbuild发布web应用程序
查看>>
MSB与LSB
查看>>
MSCRM调用外部JS文件
查看>>
MSCRM调用外部JS文件
查看>>
MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
查看>>
MsEdgeTTS开源项目使用教程
查看>>
msf
查看>>
MSSQL数据库查询优化(一)
查看>>
MSSQL日期格式转换函数(使用CONVERT)
查看>>
MSTP多生成树协议(第二课)
查看>>
MSTP是什么?有哪些专有名词?
查看>>
Mstsc 远程桌面链接 And 网络映射
查看>>
Myeclipse常用快捷键
查看>>
MyEclipse用(JDBC)连接SQL出现的问题~
查看>>
myeclipse的新建severlet不见解决方法
查看>>
MyEclipse设置当前行背景颜色、选中单词前景色、背景色
查看>>