Search K
Appearance
Appearance
Q:咦?在此之前呢??
A:太简单了不需要在此之前(bushi) 当然不是! 需要对一个协议做了解!! ta是: IMAP协议! IMAP(Internet Message Access Protocol)即互联网消息访问协议,它是一种邮件获取协议,用于从邮件服务器上访问邮件盒中的邮件。与POP3(邮局协议版本3)相比,IMAP提供了更为丰富的操作,允许用户在服务器上直接管理邮件,而不是像POP3那样通常将邮件下载到本地计算机。 以下是IMAP协议的一些主要特点:
也因如此,选择使用IMAP协议连接服务器比较好。
我们要用python进行对邮件服务器的请求获取邮箱内的前五份邮件
先给大家放出连接模块
_server = 'outlook.office365.com'
def get_five(imap_server,username,password):
# 连接到IMAP服务器
mail = imaplib.IMAP4_SSL(imap_server)
# 登录邮箱
mail.login(username, password)
# 选择收件箱
mail.select('inbox')
# 搜索所有邮件
status, email_ids = mail.search(None, 'ALL')
# email_ids是一个字节字符串,其中包含所有邮件的ID
# 我们需要将其转换为列表,并遍历每一个邮件ID
email_ids = email_ids[0].split()
time = 0
# 遍历所有邮件ID并获取邮件内容
for e_id in email_ids:
if time <= 5:
# 获取邮件的详细内容
status, data = mail.fetch(e_id, '(RFC822)')
# 解析邮件内容
raw_email = data[0][1]
email_message = email.message_from_bytes(raw_email)
# 解码邮件主题
subject = decode_header(email_message['subject'])[0][0]
if isinstance(subject, bytes):
# 如果主题是字节串,尝试使用GB2312解码
subject = subject.decode('gb2312', 'ignore')
print('标题:', subject)
from_header = email_message['From']
from_address = email.utils.parseaddr(from_header)[1] # 提取邮箱地址
print('来自于:', from_address)
# 如果邮件是multipart类型,我们需要遍历每个部分
if email_message.is_multipart():
for part in email_message.walk():
# 如果邮件部分是文本类型
if part.get_content_type() == 'text/plain' or part.get_content_type() == 'text/html':
# 尝试获取编码信息
content_charset = part.get_content_charset()
if content_charset is None:
content_charset = 'utf-8'
# 尝试使用指定的编码解码
try:
payload = part.get_payload(decode=True).decode(content_charset)
except UnicodeDecodeError:
# 如果指定编码解码失败,尝试使用'latin1'作为备选编码
payload = part.get_payload(decode=True).decode('latin1', 'ignore')
print(payload)
print('-------------------------------------分界线---------------------------------------')
break
else:
# 对于非multipart邮件,直接打印正文
try:
content_charset = email_message.get_content_charset()
if content_charset is None:
content_charset = 'utf-8'
print(email_message.get_payload(decode=True).decode(content_charset))
except UnicodeDecodeError:
# 如果指定编码解码失败,尝试使用'latin1'作为备选编码
print(email_message.get_payload(decode=True).decode('latin1', 'ignore'))
print('-------------------------------------分界线---------------------------------------')
time += 1
else:
break
# 断开连接
mail.logout()
可以看到的是,在get_five函数中def get_five(imap_server,username,password):
有三个函数,分别是IMAP服务器的ip地址、用户名(即你的邮箱)、(登录)密码
提示
qq邮箱需根据网站中指引使用
在此处的password应填写qq邮箱的IMAP服务授权码
在使用时可以使用
import get_all_mails
# 主程序内容
get_all_mails.get_five(xxx,xxx,xxx)
以下是演示的主程序内容
import get_all_mails
get_all_mails.get_five('outlook.office365.com','username@outlook.com','example123')
以上的参数解释:
outlook.office365.com
: outlook邮箱IMAP服务器地址username@outlook.com
: 更改为你的邮箱地址example123
: 更改为你的邮箱登录密码在这里我要嘲笑某位C姓用户,给我发了半天邮件一个不差全被outlook扔垃圾邮件里面去了哈哈哈哈哈哈