您的位置:首页 > 编程语言 > Python开发

《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第16章 发送电子邮件和短信(1)】

2018-03-17 23:08 1421 查看

1.  SMTP 

SMTP:简单邮件传输协议(Simple Mail Transfer Protocol),只负责向别人发送邮件。Python的smtplib模块将它简化成几个函数。

2.  发送电子邮件

1)  连接到 SMTP 服务器

a)     查询邮件供应商的域名和端口信息。



b)     smtplib.SMTP()创建一个 SMTP对象,传入域名作为一个字符串参数,传入端口作为整数参数。SMTP 对象表示与SMTP 邮件服务器的连接,它有一些发送电子邮件的方法。示例:
>>> smtpObj =smtplib.SMTP('smtp.qq.com', 587)
>>> type(smtpObj)
<class 'smtplib.SMTP'>
c)     如果 smtplib.SMTP()调用不成功,你的 SMTP 服务器可能不支持 TLS 端口 587。在这种情况下,你需要利用smtplib.SMTP_SSL()和 465 端口,来创建 SMTP 对象。示例:
>>> smtpObj = smtplib.SMTP_ _SSL('smtp.gmail.com',465)

2)  发送 SMTP 的“Hello”消息

获得SMTP对象后,需要调用它的ehlo()方法向点子邮件的服务器“打招呼”。示例:
>>>smtpObj.ehlo()
(250, b'smtp.qq.com\nPIPELINING\nSIZE73400320\nSTARTTLS\nAUTH LOGIN PLAIN\nAUTH=LOGIN\nMAILCOMPRESS\n8BITMIME')
如果在返回的元组中,第一项是整数 250(SMTP 中“成功”的代码),则问候成功了。

3)  开始 TLS 加密

如果要连接到 SMTP 服务器的587 端口(即使用 TLS 加密),接下来需要调用starttls()方法。这是为连接实现加密必须的步骤。如果使用的是SSL加密,则这步可以省略。示例:
>>> smtpObj.starttls()
(220, b'Ready to start TLS')

4)  登录到 SMTP 服务器

到 SMTP 服务器的加密连接建立后,可以调用 login()方法,用你的用户名和电子邮件密码登录。示例:>>> smtpObj.login('username@qq.com', 'password')(235, b'Authentication successful')
注:如果登陆的是QQ邮箱,那么password填写的是QQ邮箱的授权码,不是邮箱的密码。QQ邮箱授权码获取方式参考链接:
http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

5)  发送电子邮件

登陆到电子邮件提供商的SMTP服务器之后就可以调用sendmai()方法来发送邮件了。示例:
>>> smtpObj.sendmail('my _ _ email_ _ address@gmail.com', 'recipient@example.com',
'Subject: So long.\nDear Alice, so long andthanks for all the fish. Sincerely,
Bob')
{}
sendmail()方法需要三个参数。
a)     你的电子邮件地址字符串(电子邮件的“from”地址)。
b)     收件人的电子邮件地址字符串,或多个收件人的字符串列表(作为“to”地址)。
c)     电子邮件正文字符串必须以'Subject: \n'开头,作为电子邮件的主题行。'\n'换行符将主题行与电子邮件的正文分开。
sendmail()的返回值是一个字典。对于电子邮件传送失败的每个收件人,该字典中会有一个键值对。空的字典意味着对所有收件人已成功发送电子邮件。

6)  从 SMTP 服务器断开

确保在完成发送电子邮件时,调用 quit()方法。这让程序从SMTP 服务器断开。示例:
>>> smtpObj.quit()
(221, b'2.0.0 closing connectionko10sm23097611pbd.52 - gsmtp')
返回值 221 表示会话结束。
发送邮件示例:import smtplib
# 连接到SMTP服务器
smtpObj = smtplib.SMTP('smtp.qq.com', 587)

# 发送SMTP的hello消息
smtpObj.ehlo()

# 创建TLS加密连接
smtpObj.starttls()

# 登陆邮箱
smtpObj.login('XXX@qq.com', '授权码')

# 发送邮件
smtpObj.sendmail('发件人邮箱', '收件人邮箱','邮件内容')

# 断开服务器连接
smtpObj.quit()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python smtp
相关文章推荐