博客
关于我
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:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>
mysqldump数据库备份无法进行操作只能查询 --single-transaction
查看>>
mysqldump的一些用法
查看>>
mysqli
查看>>
MySQLIntegrityConstraintViolationException异常处理
查看>>
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>