smtplib模块

smtplib为Python在3.x版本中标准库的内容, 我们不需要额外安装;
使用该模块, 可以让我们更加轻松的实现模拟邮件客户端发送邮件等功能;


smtplib常用方法

首先, 我们将使用smtplib.SMTP()类, 初始化一个Smtp实例对象

1
2
import smtplib
c_smtp = smtplib.SMTP()#创建SMTP对象

使用实例函数connect与远程邮件服务器进行连接

1
connect(self, host='localhost', port=0)

参数解释:

  • host : 邮件服务器主机地址, 如常用的163邮箱主机地址: smtp.163.com
  • port : 主机端口, 一般的smtp服务端口为25

使用实例函数login在已连接服务器进行登陆验证:

1
login(self, user, password)

参数解释:

  • user : 邮件服务器用户名
  • password : 这里的password为邮件服务器提供的三方邮件客户端的专用密码, 以163为例: 该密码在设置选项中的客户端授权密码可以查看到

使用实例函数sendmail在已连接服务器进行登陆验证:

1
sendmail(self, from_addr, to_addrs, msg, mail_options=[], rcpt_options=[])

参数解释:

  • from_addr : 发件人
  • to_addrs : 收件人
  • msg : 邮件内容

发送信件的简单代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import smtplib

host = 'smtp.163.com'#邮件服务器主机地址
port = '25'#主机端口

user = 'example@163.com'#邮件服务器用户名
password = 'passwd'#邮件服务器客户端授权密码

from_addr = 'example@163.com'#发件人
to_addrs = ['to@qq.com']#收件人
#收件人: 值为列表,如果有多个收件人可以添加到该列表


msg = '\r\n'.join(["From: %s" % from_addr,
                  "To: %s" % to_addrs,
                  "Subject: %s" % '这是一封测试邮件',
                  '\r\n你好,世界']
                  ).encode()
#组装需要发送信件的字符串并编码

s = smtplib.SMTP()
s.connect(host, port)
s.login(user, password)
s.sendmail(from_addr, to_addrs, msg)
#组装需要发送信件的字符串并编码

s = smtplib.SMTP()#创建SMTP对象
s.connect(host, port)#连接SMTP服务器
s.login(user, password)#登陆服务器
s.sendmail(from_addr, to_addrs, msg)#发送信件

这里需要注意的是, 邮件字符串msg在拼接时, 需要from_addr为真实邮箱用户, 一般与登陆邮箱用户名相同, 祝君好运~