已完成lab1 & lab2
This commit is contained in:
62
Lab2/receiver.py
Normal file
62
Lab2/receiver.py
Normal file
@@ -0,0 +1,62 @@
|
||||
import imaplib
|
||||
import email
|
||||
import json
|
||||
from email.header import decode_header
|
||||
|
||||
# 从JSON文件中加载配置信息
|
||||
with open('email_config.json', 'r') as config_file:
|
||||
config = json.load(config_file)
|
||||
|
||||
user = config['sender']
|
||||
password = config['password']
|
||||
imap_url = config['imap_url']
|
||||
|
||||
# 连接到IMAP服务器
|
||||
mail = imaplib.IMAP4_SSL(imap_url)
|
||||
mail.login(user, password)
|
||||
mail.select('inbox')
|
||||
|
||||
# 搜索所有邮件
|
||||
result, data = mail.search(None, 'ALL')
|
||||
mail_ids = data[0]
|
||||
|
||||
id_list = mail_ids.split()
|
||||
id_list.reverse()
|
||||
emails = []
|
||||
|
||||
# 遍历邮件ID
|
||||
for i in id_list:
|
||||
result, data = mail.fetch(i, '(RFC822)')
|
||||
raw_email = data[0][1]
|
||||
raw_email_string = raw_email.decode('utf-8',errors="ignore")
|
||||
email_message = email.message_from_string(raw_email_string)
|
||||
|
||||
# 解析邮件内容
|
||||
mail_from = email_message['From']
|
||||
mail_subject = decode_header(email_message['Subject'])[0][0]
|
||||
if isinstance(mail_subject, bytes):
|
||||
mail_subject = mail_subject.decode('utf-8')
|
||||
mail_body = ''
|
||||
if email_message.is_multipart():
|
||||
for part in email_message.walk():
|
||||
ctype = part.get_content_type()
|
||||
cdispo = str(part.get('Content-Disposition'))
|
||||
if ctype == 'text/plain' and 'attachment' not in cdispo:
|
||||
mail_body = part.get_payload(decode=True).decode('utf-8')
|
||||
break
|
||||
else:
|
||||
mail_body = email_message.get_payload(decode=True).decode('utf-8')
|
||||
|
||||
emails.append({'From': mail_from, 'Subject': mail_subject, 'Body': mail_body})
|
||||
|
||||
# 保存邮件列表到JSON文件
|
||||
with open('emails.json', 'w') as outfile:
|
||||
json.dump(emails, outfile, indent=4, ensure_ascii=False)
|
||||
|
||||
# 打印最后一封邮件的信息
|
||||
if emails:
|
||||
print("From: ", emails[0]['From'])
|
||||
print("Subject: ", emails[0]['Subject'])
|
||||
print("Body: ", emails[0]['Body'])
|
||||
|
||||
mail.logout()
|
||||
Reference in New Issue
Block a user