本文共 6107 字,大约阅读时间需要 20 分钟。
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
只发送邮件正文。
# -*- 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
发送正文并添加附件,如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
转载地址:http://nxht.baihongyu.com/