【问题标题】:Nodemailer cannot send emails to STMP server if running within Docker container如果在 Docker 容器中运行,Nodemailer 无法向 SMTP 服务器发送电子邮件
【发布时间】:2020-08-29 10:55:07
【问题描述】:

我有一个 Node.js 应用程序使用 nodemailer 向 SMTP 服务器发送电子邮件。这运行良好。但是,如果我将相同的应用程序放在 docker 容器中,服务器会拒绝处理电子邮件,并以错误响应:

error: Error: Invalid login: 535 Incorrect authentication data
     at SMTPConnection._formatError (/usr/src/app/node_modules/smtp-connection/lib/smtp-connection.js:528:15)
     at SMTPConnection._actionAUTHComplete (/usr/src/app/node_modules/smtp-connection/lib/smtp-connection.js:1231:30)
     at SMTPConnection.<anonymous> (/usr/src/app/node_modules/smtp-connection/lib/smtp-connection.js:319:22)
     at SMTPConnection._processResponse (/usr/src/app/node_modules/smtp-connection/lib/smtp-connection.js:669:16)
     at SMTPConnection._onData (/usr/src/app/node_modules/smtp-connection/lib/smtp-connection.js:493:10)
     at TLSSocket.emit (events.js:310:20)
     at addChunk (_stream_readable.js:286:12)
     at readableAddChunk (_stream_readable.js:268:9)
     at TLSSocket.Readable.push (_stream_readable.js:209:10)
     at TLSWrap.onStreamRead (internal/stream_base_commons.js:186:23)

有人知道,Docker 中的 nodemailer 是否需要对配置进行任何更改?

这不是凭据的问题。它是具有相同 nodemailer 配置和相同凭据的相同应用程序。唯一的区别是应用程序的运行位置(直接在服务器上或在 Docker 容器内)。

另外,如果我在 Docker 容器中运行 ping 命令,我可以 ping SMTP 服务器。因此,服务器是可访问的,但应用程序无法连接到它。

【问题讨论】:

  • 尝试在network_mode: host 中运行您的容器,看看是否有帮助

标签: docker nodemailer


【解决方案1】:

我解决了。这是密码的问题。更多详情:

SMTP 凭据存储在 .env 文件中。密码在此文件中被转义:

PASSWORD='secret'

随着对 Docker 和 Docker Compose 的更改,使用相同的 .env 文件并将凭据提交到 docker-compose.yaml 中的应用程序:

 environment:
        SMTP_PASS: ${PASSWORD}

现在,Docker Compose 似乎自动转义了所有环境变量。现在 nodemailer 配置中使用的密码是错误的,因为它在字符串的开头和结尾都有单引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2018-10-17
    相关资源
    最近更新 更多