Files
2026-07-13 12:31:34 +08:00

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()