前言
当训练时间变得越来越长时,一些很慌的人比如我,总是想着时不时看一眼训练的怎么样了,导致心不在焉。所以训练结束后自动发送邮件,是个不错的选择。
当然几年前就看到类似的方案通过itchat给自己发送微信。
为了尽量区分生活和工作,还是不要给自己发微信了,下班收到训练结果,可能忍不住。所以还是给自己的工作邮箱发邮件好了。
内容
内容其实很简单。
- 设置好邮箱的smtp服务,其实和outlook客户端收发邮件一个道理
- 把需要发送的信息作为邮件内容发送出去
核心代码如下:
# Import smtplib for the actual sending function
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
def send_email(subject="No subject", content="I am boring"):
mail_host = "smtp.163.com"
mail_user = "[email protected]"
mail_pw = "********" # 授权码
sender = "[email protected]"
receiver = "[email protected]"
# Create the container (outer) email message.
msg = MIMEText(content, "plain", "utf-8")
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = receiver
try:
smtp = smtplib.SMTP_SSL(mail_host, 994) # 实例化smtp服务器
smtp.login(mail_user, mail_pw) # 登录
smtp.sendmail(sender, receiver, msg.as_string())
print("Email send successfully")
except smtplib.SMTPException:
print("Error: email send failed")
if __name__ == '__main__':
send_email(subject="Training finished", content="I am boring")
邮箱设置
程序中有个mail_pw是邮箱授权码,可以通过自己的邮箱获取。登录自己常有的邮箱,以163为例。打开设置,将SMPT服务开启:
开启后,通过发动短信得到授权密码。(注意保密,泄漏后就相当于邮箱密码泄漏了)
将授权密码填入程序中的mail_pw变量即可。
其他
- Loss出现NAN时,自动结束训练
- 可配合nohup命令使用,即使断开服务器也在后台继续训练
- 如果想定时发送邮件,可配合crontab命令
- 发微信的文章:https://zhuanlan.zhihu.com/p/25597975?group_id=822180572054048768
联系方式
- 公众号YueTan