DAY5-Python学习笔记

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'\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

 







猜你喜欢

转载自www.cnblogs.com/xussi/p/9062112.html