2014-09-13 5 views
0
var nodemailer = require('nodemailer'); 
var smtpTransport = require('nodemailer-smtp-transport'); 

var transport = nodemailer.createTransport(smtpTransport({ 
    host: 'mail.mydomain.com', 
    port: 587, 
    secure: true, 
    auth: { 
    user: 'hello', 
    pass: 'thepassword' 
    } 
})); 

var mailOptions = { 
    from: 'Tester <[email protected]>', // sender address 
    to: '[email protected]', // list of receivers 
    subject: 'Hello', // Subject line 
    text: 'hey', // plaintext body 
    html: 'hey' // html body 
}; 

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

SMTP를 통해 전자 메일을 보내려면 자체 포스트잇 서버에 연결하려고합니다. 내가 이것을 실행할 때, 내가 얻을 :전자 메일을 보내는 동안 SSL 오류가 발생하여 연결할 수 없습니다.

[Error: 139969407567744:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:787: ] 

내가 내 SMTP 포트가 나는 SSL 내 후위 서버에서 사용할 수 있다고 확신 587 것을 확신합니다. Mac의 Mail 응용 프로그램에서 SSL을 통해 연결합니다.

이 내 후위 설정입니다 : 내 후위는 절단을 위해 내가 StartSSL을 사용하고

myhostname = mail.mydomain.com 
myorigin = mail.mydomain.com 
mydestination = mail.mydomain.com, mydomain.com, localhost, localhost.localdomain 
relayhost = 
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 
mailbox_size_limit = 0 
recipient_delimiter = + 
inet_interfaces = all 

alias_maps = hash:/etc/aliases, regexp:/etc/aliases_regex 
#alias_database = hash:/etc/aliases 

smtpd_tls_CAfile=/etc/postfix/tls/startssl-ca-bundle.pem 
smtpd_tls_cert_file=/etc/postfix/tls/mail.mydomain.crt 
smtpd_tls_key_file=/etc/postfix/tls/mail.mydomain.key 
smtpd_use_tls=yes 


smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache 
smtpd_tls_security_level=may 
smtpd_tls_protocols = !SSLv2, !SSLv3 

#local_recipient_maps = proxy:unix:passwd.byname $alias_maps 

milter_default_action = accept 
milter_protocol = 2 
smtpd_milters = inet:127.0.0.1:8891 
non_smtpd_milters = inet:127.0.0.1:8891 

virtual_alias_domains =mydomain.com 
virtual_alias_maps = hash:/etc/postfix/virtual 

.

StartCom_Certification_Authority_2.pem 
StartCom_Certification_Authority_G2.pem 
StartCom_Certification_Authority.pem 

/etc/ssl에서 : 그리고 내 Node.js를 서버에,이를 참조하십시오. 따라서 Node.js 서버에 이미 루트 인증서가 설치되어 있다고 가정합니다.

Sep 13 04:08:30 d-mail postfix/submission/smtpd[724]: connect from unknown[107.170.206.11] 
Sep 13 04:08:30 d-mail postfix/submission/smtpd[724]: lost connection after UNKNOWN from unknown[107.170.206.11] 
Sep 13 04:08:30 d-mail postfix/submission/smtpd[724]: disconnect from unknown[107.170.206.11] 

내가 내 Node.js를 응용 프로그램에서 연결할 수없는 이유를 모르겠지만, 연결할 수 있습니다 : 나는 위의 Node.js를 코드를 실행하면

, 내 mail.log에이를 수 그것은 내 자신의 맥북에 완벽하게 괜찮아.

Node.js 서버에 일부 인증서를 설치해야합니까?

답변

2

포트 587에서는 SSL을 직접 말하지 않지만 일반 텍스트로 시작하고 나중에 STARTTLS 명령으로 SSL로 업그레이드합니다. 즉, secure은 false 여야합니다. https://github.com/andris9/nodemailer-smtp-transport을 참조하십시오.