87 lines
2.3 KiB
Python
87 lines
2.3 KiB
Python
# -*- 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()
|