1.电子邮件:
邮件历程:
发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人
编写MUA把邮件发到MTA:
MUA和MTA使用的协议就是SMTP:Simple Mail Transfer Protocol。
在发邮件时,先配置SMTP服务器(发到哪个MTA上),例如163提供的SMTP服务器地址:smtp.163.com。,SMTP服务器还要求你填写邮箱地址和邮箱密码
编写MUA从MDA上收邮件:
MUA和MDA使用的协议有两种:POP:Post Office Protocol(俗称POP3) IMAP:Internet Message Access Protocol
MDA收邮件时,MDA服务器也要求验证你的邮箱密码
SMTP发送邮件:SMTP发邮件协议
email模块:
负责构造邮件
from email.mime.text import MIMEText
# #第一个参数邮件正文,第二个参数MIME的subtype('plain'表示纯文本),utf-8编码保证多语言兼容性
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
# 输入Email地址和口令:
from_addr = input('From: ')
password = input('Password: ')
# 输入收件人地址:
to_addr = input('To: ')
# 输入SMTP服务器地址:
smtp_server = input('SMTP server: ')
import smtplib
server = smtplib.SMTP(smtp_server, 25) # SMTP协议默认端口是25
server.set_debuglevel(1) #打印出和SMTP服务器交互的所有信息
server.login(from_addr, password) #登录SMTP服务器
server.sendmail(from_addr, [to_addr], msg.as_string()) #发邮件,发给多个人传入一个list,正文是一个str,as_string()把MIMEText对象变成str
server.quit()
完整邮件:
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s): #_format_addr()
来格式化一个邮件地址
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = input('SMTP server: ')
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)
msg['To'] = _format_addr('管理员 <%s>' % to_addr) #msg['To']
接收的是字符串而不是list,如果有多个邮件地址,用,
分隔即可
msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
smtplib模块:
负责发送邮件
读取邮件:
import poplib
# 输入邮件地址, 口令和POP3服务器地址:
email = input('Email: ')
password = input('Password: ')
pop3_server = input('POP3 server: ')
# 连接到POP3服务器:
server = poplib.POP3(pop3_server)
# 可以打开或关闭调试信息:
server.set_debuglevel(1)
# 可选:打印POP3服务器的欢迎文字:
print(server.getwelcome().decode('utf-8'))
# 身份认证:
server.user(email)
server.pass_(password)
# stat()返回邮件数量和占用空间:
print('Messages: %s. Size: %s' % server.stat())
# list()返回所有邮件的编号:
resp, mails, octets = server.list()
# 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]
print(mails)
# 获取最新一封邮件, 注意索引号从1开始:
index = len(mails)
resp, lines, octets = server.retr(index)
# lines存储了邮件的原始文本的每一行,
# 可以获得整个邮件的原始文本:
msg_content = b'
'.join(lines).decode('utf-8')
# 稍后解析出邮件:
msg = Parser().parsestr(msg_content)
# 可以根据邮件索引号直接从服务器删除邮件:
# server.dele(index)
# 关闭连接:
server.quit()
2.
HTTP协议:浏览器和服务器之间的传输协议
GET / HTTP/1.1
打开一个网页GET请求,/
表示URL的路径,HTTP/1.1
指示采用的HTTP协议版本是1.1
域名:
Host: www.sina.com.cn
200
表示一个成功的响应,后面的OK
是说明。失败的响应有404 Not Found
:网页不存在,500 Internal Server Error
:服务器内部出错:
HTTP/1.1 200 OK
Content-Type
指示响应的内容,这里是text/html
表示HTML网页:
Content-Type: text/html
HTTP请求:
方法GET:仅请求资源
方法POST:请求资源还附带用户数据
路径:/full/url/path
域名:由Host头指定:Host: www.sina.com.cn