You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python IMAP读取Hotmail邮件时链接字符异常问题排查

问题原因

你看到的3D字符是Quoted-Printable(QP)编码的转义结果:

  • QP编码中,特殊字符=会被转义为=3D
  • 链接里的=Br是QP的软换行标记:行尾的=表示换行,后续字符是下一行内容,需要拼接起来。
    Hotmail的IMAP服务器返回的邮件内容默认使用QP编码,你只转成UTF-8但没处理QP解码,所以残留了这些转义字符。
解决方法

用Python标准库quopri直接解码QP编码内容,就能自动处理这些转义:

直接解码链接

import quopri

encoded_link = "https://accounts.tester.org/pass?userid=3D390191762&key=3D234295618-uqK=BrOjVkYE8O0DRTPfUfAWeBadbBy"
decoded_link = quopri.decodestring(encoded_link).decode('utf-8')
print(decoded_link)
# 输出正确链接:https://accounts.tester.org/pass?userid=390191762&key=234295618-uqKBrOjVkYE8O0DRTPfUfAWeBadbBy

更规范的邮件处理流程

建议先对整个邮件正文做QP解码,再提取链接,避免遗漏其他转义:

import imaplib
import quopri
from email import policy
from email.parser import BytesParser

# 连接Hotmail IMAP服务器
mail = imaplib.IMAP4_SSL('imap-mail.outlook.com')
mail.login('your_hotmail@outlook.com', 'your_password')
mail.select('inbox')

# 获取最新邮件
_, data = mail.search(None, 'ALL')
latest_id = data[0].split()[-1]
_, raw_email = mail.fetch(latest_id, '(RFC822)')

# 解析邮件内容
msg = BytesParser(policy=policy.default).parsebytes(raw_email[0][1])
body = msg.get_content()

# 处理QP编码
if 'quoted-printable' in msg.get('Content-Transfer-Encoding', '').lower():
    decoded_body = quopri.decodestring(body).decode(msg.get_content_charset() or 'utf-8')
else:
    decoded_body = body

# 从decoded_body中提取验证链接(这里可根据实际用正则或其他方式提取)

内容的提问来源于stack exchange,提问作者Macrowave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:02:33