python自动发送邮件

需要什么库?

PyEmail

这个库能够实现基于SMTP协议自动发送邮件的功能

参考:Python SMTP发送邮件 | 菜鸟教程 (runoob.com)

需要哪些准备?

一个开启SMTP服务的邮箱

这里以163网易邮箱为例:

首先,需要拥有一个163网易邮箱(其它邮箱也可以)

然后,开启邮箱的smtp服务

开启后会获得一个授权码,这个码很重要,一定要保存好!!!

了解该邮箱smtp服务器的地址及其端口信息

例如,网易163邮箱相关信息为:

服务器名称 服务器地址 SSL协议端口号 非SSL协议端口号
IMAP imap.163.com 993 143
SMTP smtp.163.com 465/994 25
POP3 pop.163.com 995 110

其它邮箱相关信息可自行百度

这里我们使用smtp协议,所以选用第二行数据

一个或多个接收邮件的邮箱

注意,自动发邮件是可以群发的,所以也可能是多个。

并且,该方式发送的邮件可能会被接收方归为垃圾邮件,这时需要将发邮件的邮箱设置为白名单

代码实现

import smtplib
from email.mime.text import MIMEText

# smtp的服务器地址
mail_host = 'smtp.163.com'

# 邮箱的用户名,例如:xxx@163.com的用户名就是xxx
mail_user = '***'

# 授权码或密码(网易邮箱是授权码,即开启smtp服务时的授权码。但有些邮箱是密码)
mail_pass = '***'

# 发送方邮箱
sender = '***@163.com'

# 接收方邮箱(一个列表,表示可以群发)
receivers = ['***@***.com']

# 设置邮箱内容(content即为正文),文本格式(plain),编码格式(utf-8)
message = MIMEText('content', 'plain', 'utf-8')

# 设置邮箱标题
message['Subject'] = 'title'

# 设置消息发送方
message['From'] = sender

# 设置消息接收方
# 这个只是消息信息,并不代表只给该接收方发送邮件
# 整个receivers列表的邮箱都能收到邮件
message['To'] = receivers[0]

# 初始化smtp对象
smtpObj = smtplib.SMTP()

# 与服务器构建连接(这个25即为端口号)
smtpObj.connect(mail_host, 25)

# 登录邮箱
smtpObj.login(mail_user, mail_pass)

#发送邮件
smtpObj.sendmail(
    sender, receivers, message.as_string())

# 退出
smtpObj.quit()

总结

技术改变生活。自动发送邮件听起来就很酷,而且实用性也非常强。我们可以配合python访问第三方接口的能力甚至配合前端传回来的数据,以该方式给指定人群相关信息提醒。

总之,学以致用应该是每个技术爱好者不断完善自身技术,提升自身能力的信条之一。

但愿我们最终都能成为自己想要成为的样子。

posted @ 2022-09-18 13:16  临安剑客  阅读(75)  评论(0编辑  收藏  举报