博客
关于我
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/

你可能感兴趣的文章
mysql 判断表字段是否存在,然后修改
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>
mysql 多个表关联查询查询时间长的问题
查看>>
mySQL 多个表求多个count
查看>>
mysql 多字段删除重复数据,保留最小id数据
查看>>
MySQL 多表联合查询:UNION 和 JOIN 分析
查看>>
MySQL 大数据量快速插入方法和语句优化
查看>>
mysql 如何给SQL添加索引
查看>>
mysql 字段区分大小写
查看>>
mysql 字段合并问题(group_concat)
查看>>
mysql 字段类型类型
查看>>
MySQL 字符串截取函数,字段截取,字符串截取
查看>>
MySQL 存储引擎
查看>>
mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>