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

Python中使用imaplib无法登录各类邮箱账户的问题求助

解决IMAP连接mail.com等邮箱的认证失败问题

你遇到的核心问题是:IMAP服务器连接成功,但登录时始终返回authentication failed,但网页端能正常登录,且多个邮箱服务商都出现相同情况。以下是针对性的解决办法:

  • 启用应用专用密码
    现在多数主流邮箱服务商(mail.com、Yahoo、mail.ru等)都禁止直接用账户密码登录第三方应用,必须生成应用专用密码。以mail.com为例:

    1. 网页登录邮箱,进入「账户设置」
    2. 找到「安全」或「应用密码」选项
    3. 生成新的应用密码,替换代码里的imap_pass即可
  • 检查账户安全设置
    如果你的账户开启了两步验证(2FA),必须用应用专用密码登录,原密码无效;部分服务商默认拦截非官方应用登录,需要在安全设置里确认是否允许第三方IMAP客户端访问(注意:现在很多服务商已移除「允许不太安全的应用」选项,统一改用应用密码)

  • 确认服务器地址和端口
    虽然你当前用的imap.mail.com+993端口是正确的,但其他邮箱要对应正确的服务器:

    • Yahoo:imap.mail.yahoo.com,端口993
    • mail.ru:imap.mail.ru,端口993
      确保代码里的服务器地址和对应邮箱匹配
  • 验证用户名格式
    部分服务商要求用户名是完整邮箱地址(比如mail.com),但少数可能只需要前缀(@前的部分),可以两种格式都尝试一下

  • 尝试SASL认证方式
    有些服务器对认证方式有要求,可以替换imap.login()为SASL认证:

    imap.authenticate('PLAIN', lambda: (imap_user, imap_pass))
    

修正后的代码示例(使用应用密码)

import imaplib
import pprint

imap_host = 'imap.mail.com'
imap_user = 'username@email.com'
# 替换为你的应用专用密码
imap_pass = 'your_generated_app_password'

# 连接服务器
imap = imaplib.IMAP4_SSL(imap_host)
print(imap.port)
print("Connected to server.")
print(imap.welcome)

try:
    # 登录尝试
    imap.login(imap_user, imap_pass)
    print("Login complete.")

    # 选中收件箱
    imap.select('Inbox')

    # 获取所有邮件并打印第一封
    tmp, data = imap.search(None, 'ALL')
    for num in data[0].split():
        tmp, data = imap.fetch(num, '(RFC822)')
        print('Message: {0}\n'.format(num))
        pprint.pprint(data[0][1])
        break
except imaplib.IMAP4.error as e:
    print(f"登录失败: {e}")
finally:
    # 关闭连接
    imap.close()
    imap.logout()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:02:01