# -*- coding: utf-8 -*- """ email_util.py """ from __future__ import print_function, unicode_literals, absolute_import, division import smtplib from email.header import Header from email.mime.text import MIMEText from email.utils import formataddr # 默认的发件人 DEFAULT_MAIL_USERNAME = 'admin@domain-admin.cn' def get_email_server(mail_host='localhost', mail_port=25): """ 创建邮箱连接服务的工厂方法 :param mail_host: 主机地址 :param mail_port: 端口 :return: """ # 获取email服务 if mail_port == 465: # ssl 465端口 server = smtplib.SMTP_SSL(mail_host) elif mail_port == 587: # starttls 587端口 server = smtplib.SMTP(mail_host, mail_port) server.starttls() else: # 25端口 server = smtplib.SMTP(mail_host, mail_port) return server def send_email( subject, content, to_addresses, mail_host='localhost', mail_port=25, content_type='plain', mail_alias=None, mail_username=None, mail_password=None ): """ 发送邮件 ref: https://www.runoob.com/python/python-email.html :param mail_host: 主机地址 :param mail_port: 端口 :param mail_alias: 发件人别名 :param subject: 主题 :param content: 内容 :param to_addresses: 收件人列表 :param mail_username: 发件人账号 :param mail_password: 发件人密码 :param content_type: 内容类型 - plain: 文本 - html: 富文本 :return: """ mail_username = mail_username or DEFAULT_MAIL_USERNAME mail_alias = mail_alias or mail_username # 构造邮件 message = MIMEText(content, content_type, 'utf-8') # 邮箱昵称、发件人邮箱账号 message['Subject'] = Header(subject, 'utf-8') message['From'] = formataddr((mail_alias, mail_username)) # bugfix: 显示收件人 message['To'] = ','.join(formataddr((mail, mail)) for mail in to_addresses) server = get_email_server(mail_host, mail_port) # 需要登录,否则匿名 if mail_password: server.login(mail_username, mail_password) # 发送 server.sendmail( from_addr=mail_username, to_addrs=to_addresses, msg=message.as_string() ) # 退出 server.quit()