博客
关于我
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 视图 事务 存储过程 SQL注入
查看>>
MySQL 存储过程参数:in、out、inout
查看>>
mysql 存储过程每隔一段时间执行一次
查看>>
mysql 存在update不存在insert
查看>>
Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
查看>>
Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
查看>>
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
查看>>
Mysql 学习总结(89)—— Mysql 库表容量统计
查看>>
mysql 实现主从复制/主从同步
查看>>
mysql 审核_审核MySQL数据库上的登录
查看>>
mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
查看>>
mysql 导入导出大文件
查看>>
MySQL 导出数据
查看>>
mysql 将null转代为0
查看>>
mysql 常用
查看>>
MySQL 常用列类型
查看>>
mysql 常用命令
查看>>
Mysql 常见ALTER TABLE操作
查看>>
MySQL 常见的 9 种优化方法
查看>>