[小工具]发送SMTP邮件

2018-05-18  本文已影响45人  reneeChoi

前言

最近突然冒出的一个想法所以有了这篇文章:使用python脚本检测机器是否异常,继而判断异常后自动发送邮件到邮箱。而在此之前,我基本上都是等机器出现异常情况,导致程序出现问题才去解决。所以这个是很有必要学习如何自动发送邮件。

相关定义

发送SMTP的几种方式

  1. Jenkins
  2. python
  3. Java
    ...

SMTP Server的类型

1.一些已存在的邮件: 126.com, 163.com, outlook.com等
2.使用window系统自带工具搭建SMTP
3.使用hmailServer搭建(需要有备案好的域名)

实现步骤

本文以python3.6+163邮箱为例,实现发送SMTP邮件

# 第三方 SMTP 服务
mail_host = "smtp.163.com"  # 设置服务器
mail_user = "***@163.com"  # 用户名
mail_pass = "***"  # 授权码

sender = '***@163.com'
receiver = '**@qq.com'  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

message = MIMEText("python email test content", "plain", "utf-8")
message['From'] = sender
message['To'] = receiver

subject = 'Python SMTP Email 163'
message['Subject'] = Header(subject, 'utf-8')

try:
    smtpObj = smtplib.SMTP()
    smtpObj.connect(mail_host, 25)  # 25 为 SMTP 端口号
    smtpObj.ehlo()  # 向Gamil发送SMTP 'ehlo' 命令
    smtpObj.starttls() #启动TLS
    smtpObj.login(mail_user, mail_pass)
    smtpObj.sendmail(sender, receiver, message.as_string())
    smtpObj.quit()
    print("Send Successfully")
except smtplib.SMTPException as e:
    print(e)

注意:

  1. 检查发送邮件的机子能否ping通 smtp.163.com, 如果不能ping通可能是被屏蔽了或者是网络有问题。
  2. 我们的163邮箱需要开启客户端授权码,上面的mail_pass是授权码,而不是邮箱的密码。如果不知道如何开启,请戳这里
  3. 邮件主题不要存在test等字眼,否则会被当成违规内容而发送不成功。

小结

因为公司的电脑会将163,126等smtp server屏蔽掉,最后只能用公司自己的邮箱服务器,而且公司如果将上面的代码参数替换成公司的邮箱服务器会报错,主要是因为验证方式不支持,所以最后放弃了python发送邮件的方式,最后采用了Jenkins发送邮箱,关于Jenkins发送邮件,请参考这里

上一篇下一篇

猜你喜欢

热点阅读