2

私のubuntu(10.04)ボックスから、次のメールを問題なく送信できます。

echo "hello" | mail -s 'test email' my_gmail_nickname@gmail.com

同じマシンで実行されているnode.jsアプリからメールを送信しようとすると、機能しません。

var nodemailer = require('nodemailer');
nodemailer.SMTP = {
  host: 'localhost'
}
nodemailer.send_mail(
{
    sender: 'me@example.com',
    to:'my_gmail_nickname@gmail.com',
    subject:'Hello!',
    html: 'test',
    body:'test'
},
function(error, success){
    console.log(error);
    console.log(success);
    console.log('Message ' + success ? 'sent' : 'failed');
});

エラーメッセージがあります:

me@luc:~/gridteams/services/gpshop$ cat nohup.out 
{ stack: [Getter/Setter],
  arguments: undefined,
  type: undefined,
  message: 'ECONNREFUSED, Connection refused',
  errno: 111,
  code: 'ECONNREFUSED',
  syscall: 'connect' }
null
sent

接続が拒否されたのがわかりますが、なぜこのエラーが発生するのかわかりません。欠けている部分は何だと思いますか?

4

1 に答える 1

7

あなたの問題は次のようなものだと思います:

コマンドライン プログラムmailは、メールの送信に/usr/sbin/sendmailというバイナリを使用します。sendmail は、メールの配信を試みるコマンドライン プログラムです。メール インフラストラクチャへのローカル接続を使用します。

ノード nodemailer は、存在しない TCP ポート 25 でホストlocalhostの SMTP サーバーに接続しようとします。検証のために telnet プログラムを使用して接続を試みてください。

実行中のサーバーは次のとおりです。

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 xxxx.de ESMTP Postfix
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

ここでは実行中のサーバーはありません:

$ telnet localhost 25
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused

2 番目の場合は、SMTP に問題があり、ポート 25 でのリッスンが開始/有効化されていません (セキュリティ上の理由から)。最初に構成する必要があります。

または - nodemail のドキュメントによると、sendmail バイナリも使用できます。

'sendmail' alternative

Alternatively if you don't want to use SMTP but the sendmail

コマンドで sendmail プロパティを true に設定します (または、コマンドがデフォルト パスにない場合は sendmail へのパスとして設定します)。

nodemailer.sendmail = true;

or

nodemailer.sendmail = '/path/to/sendmail';

If sendmail is set, then SMTP options are discarded.
于 2011-08-18T11:45:58.337 に答える