如何用Python连接微软邮箱收取邮件?代码连接失败求助
微软邮箱IMAP连接失败排查与修复
问题概述
无法连接hotmail.com邮箱,已确认官方IMAP服务器配置,但代码卡在创建IMAP实例环节,报错:
socket.gaierror: [Errno 11001] getaddrinfo failed
原代码:
import imaplib import pprint imap_host = 'outlook.office365.com:993' imap_user = 'myemail@hotmail.com' imap_pass = 'password' imap = imaplib.IMAP4(imap_host) # code dosen't execute past this line. I guess it has something to do with SSL or TSL ## login to server imap.login(imap_user, imap_pass) 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 imap.close()
问题根源
- 连接方式错误:微软IMAP服务器要求SSL加密连接,原代码使用
imaplib.IMAP4()(明文连接),不符合服务器要求。 - 主机端口格式错误:
IMAP4构造函数需要分开传递主机和端口参数,原代码将两者合并为一个字符串,导致域名解析失败。
修复方案
1. 切换SSL加密连接
使用imaplib.IMAP4_SSL()替代imaplib.IMAP4(),这是微软IMAP服务器要求的加密连接方式。
2. 拆分主机与端口参数
将imap_host拆分为单独的主机地址和端口号,分别传递给连接函数:
- 主机地址:
outlook.office365.com - SSL端口:
993
3. 额外配置注意事项
- 确保邮箱已开启IMAP功能(在邮箱设置的「邮件>同步邮件」菜单中启用)
- 若账号开启了两步验证,需使用应用专用密码替代原登录密码进行连接
修正后的完整代码
import imaplib import pprint imap_host = 'outlook.office365.com' imap_port = 993 imap_user = 'myemail@hotmail.com' imap_pass = 'your_app_password_or_regular_password' # 建立SSL加密连接 imap = imaplib.IMAP4_SSL(imap_host, imap_port) # 登录邮箱服务器 imap.login(imap_user, imap_pass) # 选择收件箱 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 # 关闭收件箱并退出连接 imap.close() imap.logout()
内容的提问来源于stack exchange,提问作者samsonmarandi
相关产品推荐
相关产品推荐

