web-dev-qa-db-ja.com

NodemailerはSMTPトランスポートなしでメールを送信します

SMTPトランスポートなしでnodemailer経由でメールを送信しようとしています。だから私はそれをやった:

var mail = require("nodemailer").mail;

mail({
    from: "Fred Foo ✔ <[email protected]>", // sender address
    to: "******@gmail.com", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
});

しかし、私が実行すると、それが得られます:

> node sendmail.js
Queued message #1 from [email protected], to [email protected]
Retrieved message #1 from the queue, reolving gmail.com
gmail.com resolved to gmail-smtp-in.l.google.com for #1
Connecting to gmail-smtp-in.l.google.com:25 for message #1
Failed processing message #1
Message #1 requeued for 15 minutes
Closing connection to the server

Error: read ECONNRESET
    at errnoException (net.js:901:11)
    at TCP.onread (net.js:556:19)

Windows 7 32を使用しています。

[〜#〜] edit [〜#〜]これはLinuxで動作するWindows関連のバグのようです

編集#2

Gitシェルでtelnet smtp.gmail 587と入力すると、ここでブロックされます:

220 mx.google.com ESMTP f7...y.24 -gsmtp
19
Vinz243

出力例から、間違ったポート25に接続しているようです。開いているgmail smtpポートは、SSLと他の587 TLSに対して465です。

Nodemailerは、電子メールドメインに基づいて正しい構成を検出します。この例では、トランスポーターオブジェクトを設定していないため、構成されているデフォルトのポート25を使用します。ポートを変更するには、オプションでタイプを指定します。

Gmailで動作する小さな例を次に示します。

var nodemailer = require('nodemailer');

// Create a SMTP transport object
var transport = nodemailer.createTransport("SMTP", {
        service: 'Gmail',
        auth: {
            user: "[email protected]",
            pass: "Nodemailer123"
        }
    });

console.log('SMTP Configured');

// Message object
var message = {

    // sender info
    from: 'Sender Name <[email protected]>',

    // Comma separated list of recipients
    to: '"Receiver Name" <[email protected]>',

    // Subject of the message
    subject: 'Nodemailer is unicode friendly ✔', 

    // plaintext body
    text: 'Hello to myself!',

    // HTML body
    html:'<p><b>Hello</b> to myself <img src="cid:note@node"/></p>'+
         '<p>Here\'s a nyan cat for you as an embedded attachment:<br/></p>'
};

console.log('Sending Mail');
transport.sendMail(message, function(error){
  if(error){
      console.log('Error occured');
      console.log(error.message);
      return;
  }
  console.log('Message sent successfully!');

  // if you don't want to use this transport object anymore, uncomment following line
  //transport.close(); // close the connection pool
});
14
Risto Novik

nodemailer 0.7.1。を使用します。
以前にnodemailerをインストールした場合は、それによって削除します

npm remove nodemailer

今でそれをインストールします

npm install [email protected]

次のコードはログインせずにメールを送信しますが、本番環境でのみ機能し、ローカルでは機能しません

var mail = require("nodemailer").mail;

mail({
    from: "Fred Foo ✔ <[email protected]>", // sender address
    to: "[email protected], [email protected]", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
});
9
Rahul Soni

現在のnodemailerには、smtpなしでメールを送信するオプションがなくなったようです。 sendmail ライブラリ([〜#〜] not [〜#〜]電子メールを送信するにはsmtp/authが必要です。 Linuxでsendmailを使用するのと似たような経験をします。

_const sendmail = require('sendmail')();

sendmail({
  from: '[email protected]',
  to: '[email protected]',
  subject: 'Hello World',
  html: 'Hooray NodeJS!!!'
}, function (err, reply) {
  console.log(err && err.stack)
  console.dir(reply)
})
_

silentをオンにして、冗長性を低くすることもできます:const sendmail = require('sendmail')({silent: true});。注意すべき点の1つは、送信者が_[email protected]_のようなDMARCpolicy を持つドメインであってはならないことです。

7
LeOn - Han Li

おそらく、Windowsファイアウォールまたは発信アクセスを防止するウイルス対策です。 nodemailerデバッグメッセージを有効にしてみてください。

デバッグを有効にする

var nodemailer = require("nodemailer"),
  transport = nodemailer.createTransport('direct', {
    debug: true, //this!!!
  });

transport.sendMail({
    from: "Fred Foo ✔ <[email protected]>", // sender address
    to: "******@gmail.com", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
}, console.error);
4
vodolaz095

これは、nodemailerで可能と思われます。他の回答が提供されたときにこれがなかったかどうかはわかりません。ここに文書化されているように: https://nodemailer.com/transports/sendmail/ 組み込みのsendmailを使用して、送信することができます。私は自分で使用するためにこれをテストしましたが、うまく動作します。 SMTPには明らかに利点がありますが、それが不可能だと言うのは正しくありません。

0
Brian F Leighty

設定すると、メールを送信できます。 https://www.google.com/settings/security/lesssecureapps これは私のために働いた

0
pitu

SMTPサーバー、つまりユーザーに代わってメールを転送するメールサーバーが必要です。したがって、Harakaなどの独自のSMTPサーバーをセットアップするか、Nodemailerに資格情報を提供して、1つに接続します。 Gmail、MSN、Yahoo。私もNodeJを学び始め、プロジェクトにメール機能を含めようとしていましたが、これは私が直面したのと同じ問題でした。

0
dv3