39

http://localhost:8080サーバーが実際に電子メールを送信できるかどうかをテストできるように、(nodemailer モジュールを使用して) 基本的な NodeJS サーバーをローカルにセットアップしました ( )。

SMTP オプションを正しく理解していれば (間違っている場合は訂正してください)、自分のサーバーから誰かのメール アカウントに直接メールを送信する、Node.js を使用してメールを送信することができますが、実際の電子メール アカウント(この場合は個人の Gmail アカウント) 経由、つまり SMTP を使用します。このオプションでは、NodeJS を介してそのアカウントにリモートでログインする必要があります。

したがって、以下のサーバーでは、実際に NodeJs を使用して、個人の電子メール アカウントから個人の電子メール アカウントに電子メールを送信しようとしています。

ここに私の単純なサーバーがあります:

var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport("SMTP", {
    service: 'Gmail',
    auth: {
        user: '*my personal Gmail address*',
        pass: '*my personal Gmail password*'
    }
});

var http = require('http');
var httpServer = http.createServer(function (request, response)
{
    transporter.sendMail({
       from: '*my personal Gmail address*',
       to: '*my personal Gmail address*',
       subject: 'hello world!',
       text: 'hello world!'
    });
}).listen(8080);

しかし、それは機能していません。Google から次のようなメールが届きました。

Google アカウント: サインイン試行がブロックされました これがあなたである場合 Gmail などの Google 製アプリに切り替えてアカウントにアクセスするか (推奨)、https://www.google.com/settings/security/で設定を変更できます安全性の低いアプリを削除すると、アカウントは最新のセキュリティ基準によって保護されなくなります。

nodemailer GitHub ページで上記の問題の解決策を見つけることができませんでした。誰かが解決策/提案を持っていますか?

ありがとう!:-)

4

9 に答える 9

79

答えはグーグルからのメッセージにあります。

問題の 2 番目の部分については、

私は実際にはnodemailer githubページの手順に従っているだけなので、コードにエラーはありません

nodemailer の github ページと、次のコードを参照してください。

var transporter = nodemailer.createTransport({
service: 'Gmail',
auth: {
    user: 'gmail.user@gmail.com',
    pass: 'userpass'
}
});

: があるという点で、コードとは少し異なりますnodemailer.createTransport("SMTP"。SMTP パラメータを削除すると動作します (テスト済み)。また、なぜそれを http サーバーにカプセル化するのですか? 次の作品:

var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
    service: 'Gmail',
    auth: {
        user: 'xxx',
        pass: 'xxx'
    }
});

console.log('created');
transporter.sendMail({
from: 'xxx@gmail.com',
  to: 'xxx@gmail.com',
  subject: 'hello world!',
  text: 'hello world!'
});
于 2014-10-04T19:58:13.297 に答える
17

ドメインを smtp.gmail.com に設定しただけで動作します。VPS Vultr を使用しています。

コード:

const nodemailer = require('nodemailer');
const ejs = require('ejs');
const fs = require('fs');

let transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        user: 'xxx@gmail.com',
        pass: 'xxx'
    }
});

let mailOptions = {
    from: '"xxx" <xxx@gmail.com>',
    to: 'yyy@gmail.com',
    subject: 'Teste Templete ✔',
    html: ejs.render( fs.readFileSync('e-mail.ejs', 'utf-8') , {mensagem: 'olá, funciona'})
};

transporter.sendMail(mailOptions, (error, info) => {
    if (error) {
        return console.log(error);
    }
    console.log('Message %s sent: %s', info.messageId, info.response);
});

私の ejs テンプレート (e-mail.ejs):

<html>
    <body>
        <span>Esse é um templete teste</span>
        <p> gerando com o EJS - <%=mensagem%> </p>
    </body>
</html>

確実に:

ごきげんよう ;)

于 2017-06-07T20:20:29.833 に答える
4

そして、依存関係として smtp モジュールをインストールします。

npm install smtp

var nodemailer = require('nodemailer');

var transporter = nodemailer.createTransport({
  service: 'gmail',
  type: "SMTP",
  host: "smtp.gmail.com",
  secure: true,
  auth: {
    user: 'writeYourGmailId@gmail.com',
    pass: 'YourGmailPassword'
  }
});

var mailOptions = {
  from: 'xyz.khan704@gmail.com',
  to: 'azran.khan704@gmail.com',
  subject: 'Sending Email to test Node.js nodemailer',
  text: 'That was easy to test!'
};

transporter.sendMail(mailOptions, function(error, info){
  if (error) {
    console.log(error);
  } else {
    console.log('Email sent');
  }
});

https://myaccount.google.com/lesssecureappsにアクセスしてオン に変更してください。一部のアプリやデバイスでは安全性の低いサインイン技術が使用されているため、アカウントがより脆弱になります。これらのアプリへのアクセスをオフにすることをお勧めしますが、リスクがあっても使用したい場合はアクセスをオンにすることをお勧めします。

于 2018-09-08T13:35:02.033 に答える
4

デバッグの目的で、エラー メッセージ (存在する場合) を表示するコールバック関数を実装すると便利です (nodemailer github ページでは実行されません)。

transporter.sendMail({
    from: from,
    to: to,
    subject: subject,
    html: text
}, function(err){
    if(err)
        console.log(err);
})

それは私の問題を解決するのに役立ちました...新しいバージョンが正しく動作していないことがわかりました:

「nodemailer 1.0 には重大な変更があるようですので、代わりに 0.7 を使用する必要があります: http://www.nodemailer.com/

12/17/15 の nodemailer に投稿されたメッセージ:

重大な変更があるため、Nodemailer を 0.7 以下から 1.0 にアップグレードしないでください。0.7 ブランチは、好きなだけ使い続けることができます。ここで 0.7 のドキュメントを参照してください。"

ここでこの答えを見つけました

于 2015-11-19T14:05:55.257 に答える
0

ここに画像の説明を入力

有効にするスクリーンショットを提供するだけでxShiraseの回答に追加します。また、前回の試行があなたによるものであることをセキュリティで確認してください。

Xshirase はすべての賛成票に値します。Iam はスクリーンショットを表示しているだけです。

于 2020-11-25T18:18:15.030 に答える