Node.js nodemailer 错误 - 版本错误 number/invalid 问候语
Node.js nodemailer error - wrong version number/invalid greeting
我在 node.js 服务器上设置 nodemailer 时遇到了一个大问题。尝试了我在互联网上找到的一切,但没有任何效果。唯一容易设置的是 gmail 服务。但不幸的是我不能使用那个。
将 secure 设置为 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'
}
但是当我尝试将 secure 设置为 false 时,我收到 invalid greeting 错误.
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'
}
我的代码如下:
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
}
})
我检查了凭证一千遍,它们绝对不是问题。
希望有人能帮助我。
提前致谢。
参考这里提到的这个问题:https://github.com/andris9/Nodemailer/issues/165
看看这是否有帮助,添加 tls.ciphers
选项以使用 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'
}
});
对于 Outlook365,这应该有效:
service: "Outlook365",
auth: {
user: '[YOUR_O365_EMAIL]',
pass: '[YOUR_O365_PASSWORD]'
},
参考这里:
如果您使用的是 HotMail,请删除 host
和 port
,然后添加 service: "hotmail"
.
使用
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
}
});
如果问题仍然存在,请在登录后手动将其输入到浏览器中进行修复。
我将端口 465 与 Gmail 一起使用并且有效。收到“版本号错误”错误 587。以下示例适用于 Cloud Functions 中的 GCP 服务帐户。
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
type: "OAuth2",
user: process.env.GMAIL_ADDRESS,
serviceClient: process.env.CLIENT_ID,
privateKey: process.env.PRIVATE_KEY.replace(/\n/g, "\n"),
},
});
我也运行遇到这个问题。但我设法修复了它。
解决起来很简单。
解法:
port: process.env.MAIL_PORT * 1
这会将您的 process.env.MAIL_PORT 类型从字符串更改为 整数。
为什么会出错?
NodeMail 需要类型为 integer 的端口,但您传递的是字符串。所以导致了错误。
我在 node.js 服务器上设置 nodemailer 时遇到了一个大问题。尝试了我在互联网上找到的一切,但没有任何效果。唯一容易设置的是 gmail 服务。但不幸的是我不能使用那个。
将 secure 设置为 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'
}
但是当我尝试将 secure 设置为 false 时,我收到 invalid greeting 错误.
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'
}
我的代码如下:
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
}
})
我检查了凭证一千遍,它们绝对不是问题。
希望有人能帮助我。 提前致谢。
参考这里提到的这个问题:https://github.com/andris9/Nodemailer/issues/165
看看这是否有帮助,添加 tls.ciphers
选项以使用 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'
}
});
对于 Outlook365,这应该有效:
service: "Outlook365",
auth: {
user: '[YOUR_O365_EMAIL]',
pass: '[YOUR_O365_PASSWORD]'
},
参考这里:
如果您使用的是 HotMail,请删除 host
和 port
,然后添加 service: "hotmail"
.
使用
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
}
});
如果问题仍然存在,请在登录后手动将其输入到浏览器中进行修复。
我将端口 465 与 Gmail 一起使用并且有效。收到“版本号错误”错误 587。以下示例适用于 Cloud Functions 中的 GCP 服务帐户。
const transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465,
secure: true,
auth: {
type: "OAuth2",
user: process.env.GMAIL_ADDRESS,
serviceClient: process.env.CLIENT_ID,
privateKey: process.env.PRIVATE_KEY.replace(/\n/g, "\n"),
},
});
我也运行遇到这个问题。但我设法修复了它。 解决起来很简单。
解法:
port: process.env.MAIL_PORT * 1
这会将您的 process.env.MAIL_PORT 类型从字符串更改为 整数。
为什么会出错?
NodeMail 需要类型为 integer 的端口,但您传递的是字符串。所以导致了错误。