第13章 email
13.1 smtplib:简单邮件传输协议客户
smtplib包括一个SMTP类,可以用来与邮件服务器通信发送邮件。
说明:后面的例子中,email地址。主机名和IP地址都被故意修改为没有实际意义。除此以外,这些脚本展示的命令和响应序列都是准确的。
13.1.1 发送email消息
SMTP最常用的一种用法就是连接到一个邮件服务器并发送一个消息。可以把邮件服务器主机名和端口传递到构造函数,也可以显式调用connect()。一旦连接,可以调用sendmail()并提供信封参数和消息体。消息文本要完整并遵循RFC 5322,因为smtplib根本不会修改内容或首部。这说明,调用者需要增加From和To首部。
import smtplib
from email.mime.text import MIMEText
_user = "发件人"
_pwd = "授权码" # 需要在QQ邮箱中开启SMTP服务,并获得授权码。
_to = "收件人"
msg = MIMEText("This is the body of the message.")
msg["Subject"] = "Simple test message"
msg["From"] = _user
msg["To"] = _to
try:
s = smtplib.SMTP_SSL("smtp.qq.com", 465)
s.login(_user, _pwd)
s.sendmail(_user, _to, msg.as_string())
s.quit()
print("Success!")
except smtplib.SMTPException as e:
print ("Falied,%s" %e)
这个例子中还打开了调试,以便显示客户与服务器之间的通信。否则,这个示例根本不会产生任何输出。
Success!
sendmail()的第二个参数(即接收者)会作为一个列表传递。这个列表中可以包括任意多个地址,消息将被逐一传送到各个地址。由于信封消息与消息首部是分开的,所以将地址包含在方法参数中而不是置于消息首部中,这样可以实现暗送(Blind Carbon-Copy,BCC)。