Frappe配置Gmail邮箱收信时触发imaplib.IMAP4.error报错
解决Frappe拉取Gmail邮件时出现imaplib.IMAP4.error: got more than 20480 bytes报错
问题背景
在Frappe项目中配置Gmail账号作为默认收件箱后,新邮件进入时触发pull_from_email_account报错,邮件无法同步到Communication doctype,报错详情如下:
Traceback (most recent call last): File "/usr/lib/python3.8/imaplib.py", line 1022, in _command_complete typ, data = self._get_tagged_response(tag, expect_bye=logout) File "/usr/lib/python3.8/imaplib.py", line 1148, in _get_tagged_response self._get_response() File "/usr/lib/python3.8/imaplib.py", line 1050, in _get_response resp = self._get_line() File "/usr/lib/python3.8/imaplib.py", line 1158, in _get_line line = self.readline() File "/usr/lib/python3.8/imaplib.py", line 316, in readline raise self.error("got more than %d bytes" % _MAXLINE) imaplib.IMAP4.error: got more than 20480 bytes
使用版本:
- ERPNext 12.30.1
- Frappe 12.27.0
- Python 3.8
问题原因
这个报错由Python标准库imaplib的默认行长度限制导致。imaplib默认设置_MAXLINE = 20480(20KB),当拉取的邮件中存在单一行内容超过该长度时,就会触发错误,中断邮件同步流程。
解决方案
方案1:临时修改Python标准库
- 找到Python 3.8的
imaplib.py文件,路径通常为/usr/lib/python3.8/imaplib.py - 打开文件,找到定义
_MAXLINE的代码行(约300行位置):_MAXLINE = 20480 - 将值修改为更大的数值,例如
_MAXLINE = 102400(100KB) - 保存文件后,重启Frappe服务
方案2:持久化修改Frappe代码(避免Python升级覆盖)
- 打开Frappe中处理邮件拉取的核心文件:
frappe/email/doctype/email_account/email_account.py - 在文件开头导入
imaplib并动态调整_MAXLINE:import imaplib # 增大imaplib的行长度限制 imaplib._MAXLINE = 102400 - 保存文件后,重启Frappe服务
额外注意事项
- 确认Gmail账号已开启IMAP访问:登录Gmail → 设置 → 转发和POP/IMAP → 启用IMAP
- 若账号开启了两步验证,需使用应用专用密码作为Frappe邮箱配置的登录密码
- 检查Frappe中Email Account的配置参数:
- IMAP服务器:
imap.gmail.com - 端口:
993 - 加密方式:
SSL
- IMAP服务器:
内容的提问来源于stack exchange,提问作者Azad
相关产品推荐
相关产品推荐

