python 读取QQ邮件内容

本文介绍如何利用Python的imaplib和email库读取QQ邮箱的邮件内容,包括设置SMTP服务器,授权登录,遍历收件箱并提取邮件详情。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

输出结果:
在这里插入图片描述
代码:

## -*- coding: utf-8 -*-

from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
import poplib

# 输入邮件地址, 口令和POP3服务器地址:
email = '812721863@qq.com'
password = '略'	# 这个密码不是邮箱登录密码,是pop3服务密码
pop3_server = 'pop.qq.com'

def guess_charset(msg):
    charset = msg.get_charset()
    if charset is None:
        content_type = msg.get('Content-Type', '').lower()
        pos = content_type.find('charset=')
        if pos >= 0:
            charset = content_type[pos + 8:].strip()
    return charset

def decode_str(s):
    value, charset = decode_header(s)[0]
    if charset:
        value = value.decode(charset)
    return value

def print_info(msg, indent=0):
    if indent == 0:
        for header in ['From', 'To', 'Subject']:
            value = msg.get(header, '')
            if value:
                if h
### 使用Python通过IMAP协议读取QQ邮箱邮件 为了实现通过IMAP协议读取QQ邮箱中的邮件,可以按照以下方法完成。以下是详细的解决方案: #### 1. 导入必要的库 需要导入 `imaplib` 和 `email` 模块来处理IMAP连接以及解析邮件内容。 ```python import imaplib import email from email.header import decode_header ``` #### 2. 配置IMAP服务器参数 对于QQ邮箱,IMAP服务地址为 `imap.qq.com`,并需使用SSL加密连接,默认端口号为993[^3]。 ```python host = 'imap.qq.com' user = 'your_email@qq.com' # 替换为您的QQ邮箱账号 passwd = 'your_auth_code' # 替换为您生成的授权码,而非登录密码 conn = imaplib.IMAP4_SSL(host) # SSL加密连接 conn.login(user, passwd) ``` #### 3. 列出邮箱文件夹 可以通过调用 `list()` 方法查看当前账户下的所有文件夹及其状态。 ```python status, folders = conn.list() print(folders) ``` 通常情况下,QQ邮箱的主要文件夹有以下几个: - `"INBOX"` 对应 **收件箱** - `"Sent Messages"` 对应 **已发送** - `"Drafts"` 对应 **草稿箱** - `"Deleted Messages"` 对应 **已删除** - `"Junk"` 对应 **垃圾箱** 这些文件夹名可以直接用于后续的选择操作[^3]。 #### 4. 选择目标文件夹 假设我们想读取收件箱中的邮件,则可以选择 `"INBOX"` 文件夹。 ```python mail_directory = "INBOX" conn.select(mail_directory) ``` #### 5. 搜索符合条件的邮件 可以根据不同的条件搜索邮件,比如未读邮件、特定发件人的邮件等。这里以查找未读邮件为例。 ```python status, data = conn.search(None, '(UNSEEN)') email_ids = data[0].split() ``` 如果需要更复杂的查询条件(如来自某个发件人),可以组合多个条件: ```python status, data = conn.search(None, '(FROM "example@example.com")') ``` #### 6. 获取并解析邮件内容 遍历每封邮件ID,逐一获取其具体内容,并解析邮件头和正文部分。 ```python for e_id in email_ids: _, msg_data = conn.fetch(e_id, "(RFC822)") # RFC822表示完整的原始邮件数据 raw_email = msg_data[0][1] # 解析邮件对象 email_message = email.message_from_bytes(raw_email) # 提取主题 subject, encoding = decode_header(email_message['Subject'])[0] if isinstance(subject, bytes): subject = subject.decode(encoding or 'utf-8') # 提取出发者信息 from_ = email.utils.parseaddr(email_message.get('From'))[1] print(f"邮件编号: {e_id}") print(f"主题: {subject}") print(f"发件人: {from_}") # 打印正文内容 if email_message.is_multipart(): for part in email_message.walk(): content_type = part.get_content_type() content_disposition = str(part.get("Content-Disposition")) if "attachment" not in content_disposition: body = part.get_payload(decode=True).decode(part.get_content_charset(), errors='ignore') print(f"正文:\n{body}\n") else: body = email_message.get_payload(decode=True).decode(email_message.get_content_charset(), errors='ignore') print(f"正文:\n{body}\n") # 标记为已读 (可选) conn.store(e_id, '+FLAGS', '\\Seen') ``` 以上代码实现了对指定范围内的邮件进行提取、解码及打印的功能[^2]。 --- ### 注意事项 1. QQ邮箱需要开启IMAP功能才能正常访问。 2. 授权码代替了实际登录密码,请前往QQ邮箱的安全设置页面生成对应的授权码。 3. 若遇到网络异常或其他错误,建议检查SMTP/IMAP权限是否被禁用或IP受限等问题[^5]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值