2015-10-13 5 views
8

Ниже приведен мой код Node.js. Используя результаты кода в:Ошибка Nodemailer и "SSL23_GET_SERVER_HELLO: неизвестный протокол"

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: '[email protected]', 
     pass: 'mypassword' 
    }, 
    tls: {ciphers: "SSLv3"} 
})); 

Как решить эту ошибку?

+0

Возможный дубликат [SSL23 \ _GET \ _SERVER \ _HELLO: неизвестный протокол \ [подключение к порту msa (587) \]] (http://stackoverflow.com/questions/22462819/ssl23-get-server-hellounknown-protocol- connection-to-msa-587-port) – hobo

+0

Возможный дубликат [node-request - Получение ошибки] SSL23 \ _GET \ _SERVER \ _HELLO: неизвестный протокол "] (http://stackoverflow.com/questions/15421050/node-request -getting-error-ssl23-get-server-hellounknown-protocol) –

ответ

1

Используйте это это работает

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" 
     } 
     } 
    }); 
+0

Что такое clientId, clientSecret, refreshToken? – Naveen

+0

@Naveen Создайте приложение в Gmail и после создания приложения вы получите все это. –

0

Похоже, вы делаете это немного сложнее, чем должно быть. Я успешно использую это с версией 0.7.0 от 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(); 
     }); 
+0

не работает этот код –

+0

Да. Я использую его на производственном сервере. Какова точная ошибка, связанная с этим и с какой версией узла вы используете? – tier1

+1

Я использую http-сервер на localhost. Второй вопрос: как создать https-сервер на localhost –

0

Ваша проблема, скорее всего, SSLv3. Most servers have it disabled.

TLS Protocol: ON, 
    auth: { 
     user: '[email protected]', 
     pass: 'super-secret-password' 
    }, 
    tls: {ciphers: "SSLv3"} 

Вы должны использовать TLS 1.0 и выше.

Вы также должны использовать использование Server Name Indication or SNI, но я не знаю, как сообщить Node.js, чтобы использовать его.

6

Я имел эту ошибку, используя SMTP третьей стороны с узловым модулем 'nodemailer-SMTP-транспортной'.

Моя проблема оказалась в том, что я использовал порт 587.

Когда я включил его в 465 все это начал работать.

Моя конфигурация выглядит следующим образом:

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

И мой адрес электронной функции (машинопись, Блюберд 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); 
      } 
     }); 
    }); 
}; 
+0

работает для zoho.com.Zoho отметил порт как 587 для категории безопасности: TLS, так почему он терпит неудачу на порту 587, а работает на 465 –

2

Я столкнулся подобной проблемой

решена с этим thread

// 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' 
    } 
}); 
Смежные вопросы