Nodemailer和“SSL23_GET_SERVER_HELLO:未知协议”错误

以下是我的Node.js代码。 使用代码导致:

Error: 0:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794

这里是代码:

 var express = require('express') , fs = require("fs") , app = express() , path = require('path') , request = require('request') , bodyParser = require('body-parser') , http = require('http') , server = http.createServer(app) , io = require('socket.io').listen(server, {log: true, origins: '*:*'}) ; var smtpTransport = require('nodemailer-smtp-transport'); var options = { key : fs.readFileSync('server.key'), cert : fs.readFileSync('server.crt') }; var nodemailer = require('nodemailer'); var sendmailTransport = require('nodemailer-sendmail-transport'); var emailserver = nodemailer.createTransport(smtpTransport({ service: 'Gmail', port: 25, strictSSL: false, host:'smtp.gmail.com', SSL Protocol: 'off', TLS Protocol: ON, auth: { user: 'choudhary1707@gmail.com', pass: 'mypassword' }, tls: {ciphers: "SSLv3"} })); 

如何解决这个错误?

使用这个工作

 var nodemailer = require('nodemailer'); var smtpTransport = nodemailer.createTransport("SMTP", { service: "Gmail", connectionTimeout : "7000", greetingTimeout : "7000", auth: { XOAuth2: { user: "email id", clientId: "client id", clientSecret: "secret", refreshToken: "refresh token" } } }); 

我有这个错误使用“ nodemailer-smtp-transport ”节点模块的第三方smtp。

我的问题原来是我正在使用端口587。

当我把它切换到465时,它开始工作。

我的configuration如下所示:

 const smtpConfiguration = { host: '<my smtp host>', port: 465, secure: true, // use TLS auth: { user: '<user account>', pass: '<password>' } }; 

和我的电子邮件function(打字稿,蓝鸟诺言):

 export const SendEmail = (from:string, to:string[], subject:string, text:string, html:string) => { const transportOptions = smtpConfiguration; const transporter = nodemailer.createTransport(smtpTransport(transportOptions)); const emailOptions = { from: from, to: to.join(','), subject: subject, text: text, html: html }; return new Promise((resolve, reject) => { transporter.sendMail(emailOptions, (err, data) => { if (err) { return reject(err); } else { return resolve(data); } }); }); }; 

看起来像你做得比它需要更复杂一点。 我成功使用了Nodemailer 0.7.0版本。

 var smtpTransport = nodemailer.createTransport("SMTP", { service: "Gmail", auth: { user: "***@gmail.com", pass: "****" } }); var mailOptions = { from: "****@gmail.com", to: to, subject: 'Subject Line!', text: 'Alternate Text', html: '<label>Hello!</label>' } smtpTransport.sendMail(mailOptions, function(error, response) { if (error) { console.log(error); } else { console.log("Message sent: " + response.message); } // if you don't want to use this transport object anymore, uncomment following line smtpTransport.close(); // shut down the connection pool, no more messages callback(); }); 

你的问题可能是SSLv3。 大多数服务器都禁用它 。

 TLS Protocol: ON, auth: { user: 'jdoe@example.com', pass: 'super-secret-password' }, tls: {ciphers: "SSLv3"} 

您应该使用TLS 1.0和更高版本。

您还应该使用服务器名称指示或SNI ,但我不知道如何告诉Node.js使用它。