基于Python3版本的学习。
学习知识来源:风变编程
要用python群发邮件,需用到两个python的内置模块。
smtplib模块 是用来发送邮件用的。
email模块 是用来构建邮件内容的。
smtplib模块
官网教程:https://docs.python.org/3/library/smtplib.html
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。
Python创建 SMTP 对象语法如下:
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
参数说明:
host: SMTP 服务器主机。 你可以指定主机的ip地址或者域名,这个是可选参数。
port: 如果你提供了 host 参数, 你需要指定 SMTP 服务使用的端口号,一般情况下 SMTP 端口号为25。
local_hostname: 如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可。
Python SMTP 对象使用 sendmail 方法发送邮件,语法如下:
SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])
参数说明:
from_addr: 邮件发送者地址。
to_addrs: 字符串列表,邮件发送地址。
msg: 发送消息
这里要注意一下第三个参数,msg 是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意 msg 的格式。这个格式就是 smtp 协议中定义的格式。
总结方法:
要发送邮件,就需要用到smtplib模块的以下方法:
import smtplib
server = smtplib.SMTP()
server.connect(host, port)
server.login(username, password)
server.sendmail(sender, to_addr, msg.as_string())
server.quit()
解释:
第一行: 引入smtplib模块
第三行: SMTP 是一个类(class),要想调用 smtplib 模块下、SMTP 类下的方法,应该这样写:smtplib.SMTP.方法。
SMTP 协议是由源服务器到目的地服务器传送邮件的一组规则。
可以简单理解为:我们需要通过SMTP指定一个服务器,这样才能把邮件送到另一个服务器。
第四行: 连接(connect)指定的服务器。
host是指定连接的邮箱服务器,你可以指定服务器的域名。
port 是“端口”的意思。一般情况下SMTP默认端口号为25。
以QQ邮箱为例:
SMTP服务器地址是:smtp.qq.com
端口是:465或587
有两种写法:
第一种是使用默认端口:25。
import smtplib
server = smtplib.SMTP()
server.connect('smtp.qq.com', 25)
第二种是其他端口,比如465。
由于QQ邮箱采用的加密方式是SSL,我们需要写成这样:
import smtplib
server = smtplib.SMTP_SSL()
#如果端口是用SSL加密,请这样写代码。其中server是变量名
server.connect('smtp.qq.com', 465)
#如果出现编码错误UnicodeDecodeError,你可以这样写:server.connect('smtp.qq.com', 465,'utf-8')
提醒:QQ邮箱的 POP3/SMTP服务 一般默认关闭SMTP服务,我们得先去开启它。
如果你打算用QQ邮箱自动发邮件,请保存好这个授权码。在你使用SMTP服务登录邮箱时,要输入这个授权码作为密码登录
第五行: login是登录的意思,也就是登录你指定的服务