Docker部署Directus通过SMTP发邮件出现EPIPE错误求助
Directus Docker容器SMTP发送邮件EPIPE错误调试方案
问题描述
我在Linode实例的Docker容器中部署了Directus,调用https://domain/directus/auth/password/request端点触发密码重置邮件时出现错误,错误日志如下:
POST /auth/password/request 204 102ms WARN: [email] Error: write EPIPE err: { "type": "Error", "message": "write EPIPE", "stack": Error: write EPIPE at afterWriteDispatched (node:internal/stream_base_commons:160:15) at writeGeneric (node:internal/stream_base_commons:151:3) at Socket._writeGeneric (node:net:962:11) at Socket._write (node:net:974:8) at writeOrBuffer (node:internal/streams/writable:392:12) at _write (node:internal/streams/writable:333:10) at Writable.write (node:internal/streams/writable:337:10) at LastNewline.ondata (node:internal/streams/readable:777:22) at LastNewline.emit (node:events:517:28) at addChunk (node:internal/streams/readable:335:12) "errno": -32, "code": "EPIPE", "syscall": "write" }
我的docker-compose.yml中SMTP配置如下:
EMAIL_SMTP_HOST: "hostname" EMAIL_SMTP_PORT: "465" EMAIL_SMTP_USER: "user@website" EMAIL_SMTP_PASSWORD: "password" EMAIL_SMTP_POOL: "true" EMAIL_SMTP_SECURE: "true" EMAIL_SMTP_IGNORE_TLS: "false" EMAIL_SMTP_NAME: "hostname"
调试步骤
验证SMTP连接基础可用性
进入Directus容器内部,用工具测试SMTP服务器连通性:docker exec -it <你的Directus容器名> bash # 用telnet测试 telnet hostname 465 # 或用nc测试 nc -zv hostname 465如果连接失败,检查Linode防火墙是否放行465端口,或者SMTP服务器是否限制了Linode实例的IP。
检查SMTP配置参数正确性
- 确认
EMAIL_SMTP_HOST地址无拼写错误; - 尝试切换端口与加密方式:部分服务商要求587端口+STARTTLS,修改配置如下再测试:
EMAIL_SMTP_PORT: "587" EMAIL_SMTP_SECURE: "false" EMAIL_SMTP_IGNORE_TLS: "false" - 用
swaks验证账号有效性(容器内先安装工具):apt update && apt install swaks swaks --to test@example.com --from user@website --smtp-server hostname --port 465 --ssl --auth-user user@website --auth-password password
- 确认
排查容器网络与服务商限制
- 部分SMTP服务商(如Gmail、Outlook)会拦截云服务器IP的请求,检查是否需要添加IP白名单或启用应用专用密码;
- 关闭连接池尝试:将
EMAIL_SMTP_POOL: "true"改为"false",重启容器后测试。
开启邮件调试日志
在docker-compose.yml中添加EMAIL_LOG_LEVEL: "debug",重启容器后查看日志,获取SMTP交互的详细过程,定位具体失败环节。排查SSL证书问题
如果SMTP服务器使用自签名证书,可临时添加EMAIL_SMTP_REJECT_UNAUTHORIZED: "false"(仅调试用,生产环境不建议),测试是否因证书验证导致连接中断。
内容的提问来源于stack exchange,提问作者RipzCurlz
相关产品推荐
相关产品推荐

