Ci-dessous, mon code Node.js. L'utilisation du code entraîne:
Error: 0:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:794
Voici le code:
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: '[email protected]',
pass: 'mypassword'
},
tls: {ciphers: "SSLv3"}
}));
Comment résoudre cette erreur?
Utilisez ceci cela fonctionne
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"
}
}
});
J'ai eu cette erreur en utilisant un tiers smtp avec le module de nœud ' nodemailer-smtp-transport '.
Mon problème s'est avéré que j'utilisais le port 587.
Lorsque je suis passé au 465, tout a commencé à fonctionner.
Ma configuration ressemble à:
const smtpConfiguration = {
Host: '<my smtp Host>',
port: 465,
secure: true, // use TLS
auth: {
user: '<user account>',
pass: '<password>'
}
};
Et ma fonction email (TypeScript, bluebird Promise):
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);
}
});
});
};
J'ai rencontré le même problème
résolu avec ce fil
// For port 465
var transporter = nodemailer.createTransport({
Host: 'smtp.hostname',
port: 465,
secure: true,
auth: {
user: 'email',
pass: 'password'
}
});
// for port 587 or 25 or 2525 etc.
var transporter = nodemailer.createTransport({
Host: 'smtp.hostname',
port: 587,
secure: false,
requireTLS: true, // only use if the server really does support TLS
auth: {
user: 'email',
pass: 'password'
}
});
Votre problème est probablement SSLv3. La plupart des serveurs l'ont désactivé .
TLS Protocol: ON,
auth: {
user: '[email protected]',
pass: 'super-secret-password'
},
tls: {ciphers: "SSLv3"}
Vous devez utiliser TLS 1.0 et supérieur.
Vous devez également utiliser Indication du nom du serveur ou SNI , mais je ne sais pas comment dire à Node.js de l’utiliser.
On dirait que ça rend un peu plus compliqué que nécessaire. Je l’utilise avec succès avec la version 0.7.0 de Nodemailer .
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();
});