《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 编程快速上手 — 让繁琐工作自动化》读书笔记之【第16章 发送电子邮件和短信(2)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第14章 处理CSV文件和JSON数据】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第9章 组织文件】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第15章 保持时间,计划任务和启动程序】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第8章 读写文件】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第10章 调试】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第3章 函数】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第13章 处理PDF和Word文档(2)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第13章 处理PDF和Word文档(1)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第1章 Python基础】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第11章 从Web抓取信息】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第18章 用 GUI 自动化控制键盘和鼠标】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记序
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第2章 控制流】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第5章 字典和结构化数据】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第6章 字符串操作】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第7章 模式匹配与正则表达式(2)】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第12章 处理Excel电子表格】
- 《Python 编程快速上手 — 让繁琐工作自动化》读书笔记之【第4章 列表】
- Python编程快速上手 让繁琐工作自动化 | 第三章 :实践项目