需求
最近需要在公司的阿里云上进行某需求的预警通知,采用邮件通知的方式。
探索
经过了解,阿里云是默认屏蔽邮件端口25,即使在安全组设置的25端口依然不行。虽然可以官方申请开通25端口,但是现在都不给通过了。再经博客了解,发现可以使用邮件SSL端口465进行发送邮件。
执行
一、开通QQ邮箱SMTP服务(已开启则忽略)
1.登陆QQ邮箱,点击设置
2.进入账户页面
3.页面滚动到最下面,看到开启服务,选择第一个POP3/SMTP服务最右边点击开启,然后根据提示进行操作开通,记下授权码,后面有用。
二、代码测试
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 邮箱配置
SMTP_CONFIG = {
"mail_host" : "smtp.qq.com", # qq邮件服务器
"mail_user" : "xxxxxx@qq.com", # 用户名
"mail_pass" : "xxxxxxxxxx", # 授权码,上面开通qqSTMP服务的授权码
"sender" : "xxxxxxxx@qq.com", # 发送邮箱
"receivers" : ['xxxxxxxx@163.com'] # 接收邮箱,可多个任意邮箱
}
class SendMsg():
def send_email(self, subject, content):
# 第三方 SMTP 服务
try:
message = MIMEText(content, 'plain', 'utf-8') # 发送内容
message['Subject'] = Header(subject, 'utf-8') # 发送标题
message['From'] = SMTP_CONFIG["sender"] # 发送人
message['To'] = SMTP_CONFIG["receivers"][0] # 接收人
smtp = smtplib.SMTP_SSL(host=SMTP_CONFIG["mail_host"], port=465) # 465是邮件ssl端口
smtp.login(SMTP_CONFIG["mail_user"] ,SMTP_CONFIG["mail_pass"]) # 服务器登录
smtp.sendmail(SMTP_CONFIG["sender"], SMTP_CONFIG["receivers"], message.as_string())
smtp.close()
print("邮件发送成功")
except smtplib.SMTPException:
print("发送失败")
if __name__ == "__main__":
SendMsg().send_email("testjob","testjob")
结果
邮件发送成功