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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:02:24