Gmail收取POP3邮件总是出错:服务器返回错误“Error in RETR command: Received an empty line”的解决方法

引言

我喜欢使用Gmail通过POP3收我单位邮箱的邮件做一个备份,因为单位邮箱的搜索能力实在太差了。不过最近Gmail收POP3邮件总是出错:服务器返回错误“Error in RETR command: Received an empty line”。网上查了一下,包括Gmail给出的意见都是有一封邮件里面有空行,导致这个错误,删除这封邮件就可以了。不过,由于我用Gmail收邮件时并不让它删除邮件,而是定期手工删除,这样的我的邮箱里面有5000封邮件,怎么确定哪封邮件是应该删除的就成为了一个难题。

解决方法

手工删除了一些可疑邮件之后并没有解决问题。我决定用DeekSeek生成一个Python程序,让它去模拟POP3收信过程,并逐封邮件测试以定位问题邮件。以下是一个可检测异常邮件的示例脚本:

import poplib
from email import parser
import getpass

def debug_pop3_retrieve():
    # 配置信息
    pop3_server = 'mail.b.com'
    port = 995
    username = 'a@b.com'
    password = getpass.getpass("Enter your password: ")  # 安全输入密码

    try:
        # 连接服务器
        mail_server = poplib.POP3_SSL(pop3_server, port)
        mail_server.user(username)
        mail_server.pass_(password)
        print(f"Connected. Messages: {mail_server.stat()[0]}")

        # 获取邮件列表
        total_messages = mail_server.stat()[0]
        msg_parser = parser.BytesParser()

        # 逐封邮件测试
        for i in range(1, total_messages + 1):
            try:
                print(f"Testing message {i}...")
                # 仅用RETR命令触发可能的错误
                response, lines, octets = mail_server.retr(i)
                
                # 检查是否返回空行(关键错误点)
                if not lines:
                    raise poplib.error_proto(f"Empty response for message {i}")
                
                # 解析邮件内容
                raw_email = b'\n'.join(lines)
                parsed_email = msg_parser.parsebytes(raw_email)
                
                # 提取并显示邮件标题
                subject = parsed_email['Subject']
                print(f"邮件标题: {subject}")

            except poplib.error_proto as e:
                print(f"❌ Error at message {i}: {str(e)}")
                print("="*50)
                print("建议操作:")
                print(f"1. 登录Gmail网页版删除第 {i} 封邮件")
                print(f"2. 或在脚本中删除:mail_server.dele({i})")
                break
            except Exception as e:
                print(f"Other error at {i}: {str(e)}")
                break

    except Exception as e:
        print(f"Connection failed: {str(e)}")
        # 检查常见错误:
        if "Authentication failed" in str(e):
            print("提示:需开启Gmail的POP3访问或使用应用专用密码")
    finally:
        if 'mail_server' in locals():
            mail_server.quit()

if __name__ == '__main__':
    debug_pop3_retrieve()

这个程序会打印每条邮件的标题,如果遇到可疑邮件就会报告错误。报告错误的前一条邮件通常就是有问题邮件,把它删除了问题就解决了。Gmai提示我它自3月30日以来检索邮件出错,实际上我删除了3月21日的一封邮件,一切才恢复正常。

结语

虽然这个脚本不一定能够解决所有类似问题,但是如果你也遇到类似问题,不妨试试。这个脚本不会自动删除任何邮件,可以放心使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神一样的老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值