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

运行Python imaplib邮箱连接代码报getaddrinfo()参数类型错误

错误触发原因

报错核心是传入IMAP连接方法的服务器地址参数类型不符合要求,具体代码问题点如下:

  • 读取服务器地址时调用readlines()方法,该方法返回值是列表(哪怕文件仅存一行地址,返回的也是带换行符的单元素列表),而getaddrinfo()需要字符串格式的主机名参数,传入列表直接触发类型报错。
  • 打开serverimap.txt时传入字节类型文件名b'serverimap.txt',属于不规范写法,存在跨平台兼容风险。
  • 所有文件读取操作都没有做首尾空白、换行符清理:readline()读取出的内容默认带尾部换行符\n,不管是账号密码还是服务器地址带多余字符,都会导致连接、登录失败。
  • mail.select()方法单次仅支持指定一个邮箱文件夹,原代码同时传入"INBOX"和"Junk"两个参数,即使连接成功也会触发参数错误。
修复后代码
import imaplib
import email

# 读取账号密码
with open('Accounts.txt', 'r', encoding='utf-8') as f:
    # 原代码[1:]是跳过行首第一个字符,若你的账号行无前置多余字符请删除该切片
    data = f.readline().strip()
# maxsplit=1避免密码本身包含冒号时被错误拆分
user, password = data.split(':', 1)

# 读取IMAP服务器地址
with open('serverimap.txt', 'r', encoding='utf-8') as f:
    imap_server = f.readline().strip()

# 建立SSL连接
mail = imaplib.IMAP4_SSL(imap_server, 993)
mail.login(user.strip(), password.strip())
print("logged in successfully")

# 单次仅能选择一个文件夹,需操作垃圾邮件则替换参数为"Junk"
mail.select("INBOX")
注意事项
  • 若Accounts.txt中存储的账号行没有前置特殊字符,必须删除原代码里的[1:]切片,否则会丢失账号首字符导致登录失败。
  • 读取文本文件建议显式指定文件编码,避免不同操作系统默认编码差异引发乱码问题。
  • 若需要同时操作多个文件夹,需要在完成第一个文件夹的操作后调用mail.close(),再重新调用select()切换目标文件夹。

内容的提问来源于stack exchange,提问作者ربح مضمون

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:21:43