DAY5-Python学习笔记

时间:2022-12-31 12:48:50

1.电子邮件:

邮件历程:

DAY5-Python学习笔记

 

发件人 -> 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'\r\n'.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