2015-03-17 5 views
8

Я пытаюсь отправить электронную почту из своего приложения, используя nodemailer.Отправка электронной почты с помощью nodemailer

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

var nodemailer = require('nodemailer'); 
var smtpTransport = require('nodemailer-smtp-transport'); 
var transporter = nodemailer.createTransport(smtpTransport ({ 
    host: 'smtp.companyname.dk', 
    secureConnection: true, 
    port: 587, 
    auth: { 
     user: '[email protected]', 
     pass: '****' 
    } 
})); 

var mailOptions = { 
    from: 'Olaf <[email protected]>', 
    to: '[email protected]', 
    subject: 'This is a test ', 
     text: 'Hello world ', 
     html: '<b>Hello world </b>' 
    }; 

transporter.sendMail(mailOptions, function(error, info){ 
    if(error){ 
     console.log(error); 
    }else{ 
    console.log('Message sent: ' + info.response); 
    } 
}); 

После выполнения этого, он дает мне следующую ошибку:

{ [Error: Hostname/IP doesn't match certificate's altnames: "Host: smtp.companyname.dk. is not in the cert's altnames: DNS:*.mailcloud.dk, DNS:mailcloud.dk"] 
    reason: 'Host: smtp.companyname.dk. is not in the cert\'s altnames: DNS:*.mailcloud.dk, DNS:mailcloud.dk', 
    host: 'smtp.companyname.dk.', 
    cert: 
    { subject: { OU: 'Domain Control Validated', CN: '*.mailcloud.dk' }, 
    issuer: { O: 'AlphaSSL', CN: 'AlphaSSL CA - G2' }, 
    subjectaltname: 'DNS:*.mailcloud.dk, DNS:mailcloud.dk', 
    infoAccess: { 'CA Issuers - URI': [Object], 'OCSP - URI': [Object] }, 
    modulus: 'AFFDE405E26382FC1F9A126B51C763A21DCB90228DF9B9BFF466B00DA17BCBDA48E0315E0A6E4E8E0C65B3E5A9BF9A98448DF8006869B913C8D644B78B2176C240AA703DF7C5109F7FC9EDBAE0A69E35E00A81D753990A7DF531CC1F47A778A1CC18271298DBB71E341E846139951D9B119C237BDD9AA6F7D16A62FC5D4D6BEA0288DAC700E5C87E472B75365C522B0342185F16854659EE48637B6124269C4E18CC040344928D115350805EF66738922230349DEC97E2D68D0B4175EA6B63BC161B841C150B7009AAC0E8A06CD34D3912926D98CEBF83F6C187AD08A5045F9868512EFDD478FAA81FA0402F5C44B3FD70F82BA4F102352A01B02B77F0FA096D', 
    exponent: '10001', 
    valid_from: 'Oct 3 08:22:02 2014 GMT', 
    valid_to: 'Dec 21 11:07:29 2017 GMT', 
    fingerprint: '35:3A:87:5C:91:8C:B2:7C:4E:87:D1:E3:26:84:57:E5:A1:73:62:F3', 
    ext_key_usage: [ '1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2' ], 
    serialNumber: '****', 
    raw: <Buffer 30 82 04 a7 30 82 03 8f a0 03 02 01 02 02 12 11 21 75 e4 f8 11 73 a4 c5 05 36 5f fe 9b b3 0b 4f 86 30 0d 06 09 2a 86 48 86 f7 0d 01 01 05 05 00 30 2e ... > } } 

Я застрял с этим в течение нескольких дней сейчас и смотрел везде, так Надеюсь, кто-то может помочь мне с этим (или, по крайней мере, указать в правильном направлении).

ответ

14

Попробуйте добавить:

tls: { 
     rejectUnauthorized: false 
    }, 

Чтобы ваши варианты nodemailer объекта.

+0

Просто попробовал это, и это дает мне эту ошибку '{[Ошибка: сообщение не удалось] код:«EMESSAGE», ответ:«550 5.7.1 Клиент не имеет разрешения для отправки в качестве этого отправителя», responseCode : 550} ' Я не знаю, есть ли что сказать, но прямо сейчас я пытаюсь отправить электронное письмо с моей локальной машины !? – Backer

+0

Имейте в виду, что этот параметр оставляет вас уязвимыми для [нападений MITM на SSL] (https://stackoverflow.com/a/16311147/4068278). –

+0

Этот вариант работал для меня. Но безопасно ли это? Мой порт 587. Каковы последствия установки этого параметра в false? – Abhilasha

3

После добавления того, что предложил @Richard Macarthy, и подняв новую ошибку, я вернулся, я понял, что письмо from в моем mailOptions должно быть таким же, как письмо, которое я использую, чтобы отправлять электронные письма - что на самом деле имеет смысл.

В этом случае:

var mailOptions = { 
    from: 'Olaf <[email protected]>', 
    to: '[email protected]', 
    ... 
+0

Рад видеть, что вы разобрались! –

2
var transporter = nodemailer.createTransport({<br> 
host: 'hostSTMP', 
secure: false, //disable SSL  
requireTLS: true, //Force TLS 
    tls: { 
     rejectUnauthorized: false 
    }, 
    port: port, //Port of STMP service 
    auth: { 
     user: '[email protected]', 
     pass: 'password' 
    } 
}); 

rejectUnauthorized: Если это правда, сертификат сервера сверить список прилагаемого УЦ. Событие ошибки выдается, если проверка не выполняется; По умолчанию: true.

rejectUnauthorized: Если false, вы говорите: «Мне все равно, не могу ли я проверить идентификацию сервера».

+0

Не могли бы вы объяснить свой ответ? –

+0

Выполнено, если у вас есть вопрос, напишите мне;) –

Смежные вопросы