发送邮件
import smtplib
from email.mime.text import MIMEText # 负责构造文本
from email.mime.multipart import MIMEMultipart # 负责将多个对象集合起来
from email.header import Header
class SendEmail:
"""邮件发送类"""
def __init__(self, sub_title, sub_content):
"""
初始化
:param sub_title: 邮件主题
:param sub_content: 邮件正文
"""
self.host = "100.100.100.100" # smtp服务器地址
self.sender = "sender@sender.com" # 发件人邮箱
self.s_name = self.sender.split('@')[0]
self.password = "admin" # 邮箱授权码(不一定是密码)
self.receivers = ["receiver1@receiver.com", "receiver2@receiver.com"] # 收件人邮箱,可以为多个
self.r_name_list = []
self.subject_content = sub_title
self.body_content = sub_content
self.port = 25 # 端口地址默认为 25
# 构造文本, 参数: 正文内容, 文本格式, 编码方式
self.message_text = MIMEText(self.body_content, "plain", "utf-8")
# 创建邮件对象
self.mm = MIMEMultipart('related')
# 创建SMTP对象
self.stp = smtplib.SMTP(
# 邮件信息设置
self.set_info()
def receiver_handle(self):
"""
收件人处理
设置接受者, 注意严格遵守格式, 里面邮箱为接受者邮箱
self.mm["To"] = f"{self.r_name}<{self.receivers[0]}>"
"""
for receiver in self.receivers:
r_name = receiver.split('@')[0]
to_result = f'{r_name}<{receiver}>'
self.r_name_list.append(to_result)
for r_name in self.r_name_list:
self.mm['To'] = r_name
def set_info(self):
"""设置邮件信息"""
# 设置发送者, 注意严格遵守格式, 里面邮箱为发件人邮箱
self.mm["From"] = f"{self.s_name}<{self.sender}>"
# 设置接受者
self.receiver_handle()
# 设置邮件主题
self.mm["Subject"] = Header(self.subject_content, 'utf-8')
# 向MIMEMultipart对象中添加文本对象
self.mm.attach(self.message_text)
def add_file(self, f_path, f_name, charset='utf-8'):
"""
添加附件
:param f_path: 附件路径
:param f_name: 重命名附件
:param charset: 文件名编码格式
"""
# 构造附件
self.atta = MIMEText(open(f_path, 'rb').read(), 'base64', 'utf-8')
# 设置附件信息
self.atta.add_header("Content-Disposition", "attachment", filename=(charset, '', f_name))
# 添加附件到邮件信息当中去
self.mm.attach(self.atta)
def send_mail(self, is_ssl=False, debug=False):
"""
发送邮件
:param is_ssl: 是否使用SSL
:param debug: 是否打印交互信息
"""
if is_ssl:
self.stp = smtplib.SMTP_SSL(self.host) # 不加此段代码则用25的端口, 否则要用465端口
self.port = 465
self.stp.connect(self.host, self.port) # 设置发件人邮箱的域名和端口
if debug:
self.stp.set_debuglevel(1) # set_debuglevel(1)可以打印出和SMTP服务器交互的所有信息
# 登录邮箱, 参数: 邮箱地址, 邮箱授权码
self.stp.login(self.sender, self.password)
# 发送邮件, 参数: 发件人邮箱地址, 收件人邮箱地址, 把邮件内容格式改为str
self.stp.sendmail(self.sender, self.receivers, self.mm.as_string())
def quit(self):
# 关闭 SMTP 对象
self.stp.quit()