需求:因为有时候会在服务器上进行模型的训练,希望能够及时获得模型训练的消息便加入此功能
同时为了方便调用,我将这个代码处理成为了函数。
因为本人只提供一个通知功能,对于邮件内其他内容,如附件等仅做简单讨论,其他情况读者可以自行搜索,尝试。
send_email_text
:
pythondef send_email_text(
from_addr: str,
password: str,
to_addr: str,
smtp_server: str,
text: str,
from_who: str,
to_who: str,
theme: str,
) -> bool:
r"""
发送纯文本邮件到指定邮箱地址
Args:
from_addr (str):发送方的邮件地址
password (str):smtp授权码
to_addr (str):接收方邮件地址
smtp_server (str):发送方服务器,例,若发送方为@qq.com则发送方服务器为smtp.qq.com
text (str):邮件内容
from_who (str):发送方名称
to_who (str):接收方名称
theme (str):邮件主题
Returns:
send_flag (bool):是否成功发送邮件
"""
import smtplib # smtplib 用于邮件的发信动作
from email.mime.text import MIMEText # email 用于构建邮件内容
from email.header import Header # 构建邮件头
# 邮件内容
msg = MIMEText(text, "plain", "utf-8")
msg["From"] = Header(from_who) # 发送者
msg["To"] = Header(to_who) # 接收者
subject = theme
msg["Subject"] = Header(theme, "utf-8") # 邮件主题
try:
smtpobj = smtplib.SMTP_SSL(smtp_server)
smtpobj.connect(smtp_server, 465) # 建立连接--qq邮箱服务和端口号(可百度查询)
smtpobj.login(from_addr, password) # 登录--发送者账号和口令
smtpobj.sendmail(from_addr, to_addr, msg.as_string())
send_flag = True
except smtplib.SMTPException:
send_flag = False
finally:
# 关闭服务器
smtpobj.quit()
return send_flag
调用例子:
pythonprint(
send_email_text(
from_addr="---",
password="---",
to_addr="---",
smtp_server="smtp.qq.com",
text="test send_email function",
from_who="Geaming",
to_who="another Geaming",
theme="function test",
)
)
特别提醒
在调用时候请注意发送方服务器和对应端口。
有些时候可能会有携带一些附件的发送需求,提供函数如下:
新增入参:
pythonattachments (List[str]):附件地址列表
attachments_name (List[str]):附件名称列表
pythonimport typing
def send_email(
from_addr: str,
password: str,
to_addr: str,
smtp_server: str,
text: str,
from_who: str,
to_who: str,
theme: str,
attachments: typing.List[str],
attachments_name: typing.List[str],
) -> bool:
r"""
发送纯文本邮件到指定邮箱地址
Args:
from_addr (str):发送方的邮件地址
password (str):smtp授权码
to_addr (str):接收方邮件地址
smtp_server (str):发送方服务器,例,若发送方为@qq.com则发送方服务器为smtp.qq.com
text (str):邮件内容
from_who (str):发送方名称
to_who (str):接收方名称
theme (str):邮件主题
attachments (List[str]):附件地址列表
attachments_name (List[str]):附件名称列表
Returns:
send_flag (bool):是否成功发送邮件
"""
import smtplib # smtplib 用于邮件的发信动作
from email.mime.text import MIMEText # email 用于构建邮件内容
from email.mime.multipart import MIMEMultipart
from email.header import Header # 构建邮件头
# 邮件内容
msg = MIMEMultipart()
msg.attach(MIMEText(text, "plain", "utf-8"))
msg["From"] = Header(from_who) # 发送者
msg["To"] = Header(to_who) # 接收者
subject = theme
msg["Subject"] = Header(theme, "utf-8") # 邮件主题
for idx, att_path in enumerate(attachments):
att = MIMEText(open(att_path, "rb").read(), "base64", "utf-8")
att["Content-Type"] = "application/octet-stream"
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att["Content-Disposition"] = f'attachment; filename="{attachments_name[idx]}"'
msg.attach(att)
try:
smtpobj = smtplib.SMTP_SSL(smtp_server)
smtpobj.connect(smtp_server, 465) # 建立连接--qq邮箱服务和端口号(可百度查询)
smtpobj.login(from_addr, password) # 登录--发送者账号和口令
smtpobj.sendmail(from_addr, to_addr, msg.as_string())
send_flag = True
except smtplib.SMTPException:
send_flag = False
finally:
# 关闭服务器
smtpobj.quit()
return send_flag
调用例子:
pythonprint(
send_email(
from_addr="---",
password="---",
to_addr="---",
smtp_server="smtp.qq.com",
text="test send_email function",
from_who="Geaming",
to_who="another Geaming",
theme="function test",
attachments=[
r"---\1.jpg",
r"---\1.txt",
],
attachments_name=["1.jpg", "1.txt"],
)
)
特别提醒
在调用时候,附件传入路径请使用raw string。
本文作者:Geaming
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!