Node.js nodemailer 错误 - 错误的版本号/无效的问候语

Sim*_*ter 7 node.js nodemailer

我在 node.js 服务器上设置 nodemailer 时遇到了一个大问题。尝试了我在互联网上找到的一切,但没有任何效果。唯一易于设置的是 gmail 服务。但不幸的是我不能使用那个。

安全设置为true 时,我收到一个 ssl 错误,原因是版本代码错误

[Error: 22468:error:1408F10B:SSL routines:ssl3_get_record:wrong version number:c:\ws\deps\openssl\openssl\ssl\record\ssl3_record.c:332:
] {
  library: 'SSL routines',
  function: 'ssl3_get_record',
  reason: 'wrong version number',
  code: 'ESOCKET',
  command: 'CONN'
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将secure设置为false 时,我会收到一个无效的问候错误

Error: Invalid greeting. response=* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2016 Double Precision, Inc.  See COPYING for distribution information.: * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2016 Double Precision, Inc.  See COPYING for distribution information.
    at SMTPConnection._actionGreeting (C:\Users\Motiondata\Documents\repos\rmn_app\server\rmn_server\node_modules\nodemailer\lib\smtp-connection\index.js:1189:27)
    at SMTPConnection._processResponse (C:\Users\Motiondata\Documents\repos\rmn_app\server\rmn_server\node_modules\nodemailer\lib\smtp-connection\index.js:932:20)
    at SMTPConnection._onData (C:\Users\Motiondata\Documents\repos\rmn_app\server\rmn_server\node_modules\nodemailer\lib\smtp-connection\index.js:739:14)
    at Socket.SMTPConnection._onSocketData (C:\Users\Motiondata\Documents\repos\rmn_app\server\rmn_server\node_modules\nodemailer\lib\smtp-connection\index.js:189:44)
    at Socket.emit (events.js:315:20)
    at addChunk (_stream_readable.js:309:12)
    at readableAddChunk (_stream_readable.js:284:9)
    at Socket.Readable.push (_stream_readable.js:223:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:188:23) {
  code: 'EPROTOCOL',
  response: '* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2016 Double Precision, Inc.  See COPYING for distribution information.',
  command: 'CONN'
}
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

const transporter = nodemailer.createTransport({
  host: process.env.MAIL_HOST, // mx.example.com
  port: process.env.MAIL_PORT, // 143
  secure: true,
  auth: {
    user: process.env.MAIL_ADDRESS,
    pass: process.env.MAIL_PWD
  }
})
Run Code Online (Sandbox Code Playgroud)

我检查了凭据一千次,它们绝对不是问题。

希望任何人都可以帮助我。提前致谢。

Vic*_*ban 19

使用

secure: false, // true for 465, false for other ports

Nodemailer 文档中的示例:

let transporter = nodemailer.createTransport({
    host: 'smtp.ethereal.email',
    port: 587,
    secure: false, // true for 465, false for other ports
    auth: {
        user: account.user, // generated ethereal user
        pass: account.pass  // generated ethereal password
    }
});
Run Code Online (Sandbox Code Playgroud)

来源:nodemailer 示例

  • 这相当于说“我无法打开门,我该怎么办? - 把门移开” (8认同)

MiK*_*r13 16

参考这里提到的这个问题:https : //github.com/andris9/Nodemailer/issues/165

看看这是否有帮助,添加 tls 密码选项以使用 SSLv3:

const transport = nodemailer.createTransport({
    host: process.env.MAIL_HOST, // mx.example.com
    port: process.env.MAIL_PORT, // 143
    secureConnection: false, // TLS requires secureConnection to be false
    auth: {
        user: process.env.MAIL_ADDRESS,
        pass: process.env.MAIL_PWD
    },
    tls: {
        ciphers:'SSLv3'
    }
});
Run Code Online (Sandbox Code Playgroud)

对于 Outlook365,这应该有效:

service: "Outlook365",
auth: {
   user: '[YOUR_O365_EMAIL]',
   pass: '[YOUR_O365_PASSWORD]'
}, 
Run Code Online (Sandbox Code Playgroud)

请参阅此处:https : //stackoverflow.com/a/37725123/9360885

如果您使用的是 HotMail,则删除主机和端口并添加service: "hotmail",.

如果这有帮助,请将其标记为已接受的答案,以便将来对其他人有帮助。