web-dev-qa-db-ja.com

「PLAIN」nodemailerの認証情報がありません

連絡先フォームでnodemailerを使用してフィードバックを受け取り、直接メールに送信しようとしています。これは以下のフォームです。

<form method="post" action="/contact">
      <label for="name">Name:</label>
      <input type="text" name="name" placeholder="Enter Your Name" required><br>
      <label for="email">Email:</label>
      <input type="email" name="email" placeholder="Enter Your Email" required><br>
      <label for="feedback">Feedback:</label>
      <textarea name="feedback" placeholder="Enter Feedback Here"></textarea><br>
      <input type="submit" name="sumbit" value="Submit">
</form>

これはサーバー側のリクエストがどのように見えるかです

app.post('/contact',(req,res)=>{
let transporter = nodemailer.createTransport({
    service: 'gmail',
    auth: {
        user: '[email protected]',
        password: 'password'
    }
});
var mailOptions = {
    from: req.body.name + '&lt;' + req.body.email + '&gt;',
    to: '[email protected]',
    subject: 'Plbants Feedback',
    text: req.body.feedback 
};
transporter.sendMail(mailOptions,(err,res)=>{
    if(err){
        console.log(err);
    }
    else {

    }
});

エラーが発生しますMissing credentials for "PLAIN"。どんな助けでも感謝します、どうもありがとうございました。

10
igolo

Nodemailerのドキュメント(リンク: https://nodemailer.com/smtp/oauth2/ )の例の3番目の3LO認証の設定を使用して、この問題を解決できました。私のコードは次のようになります:

let transporter = nodemailer.createTransport({
    Host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
        type: 'OAuth2',
        user: '[email protected]',
        clientId: '000000000000-xxx0.apps.googleusercontent.com',
        clientSecret: 'XxxxxXXxX0xxxxxxxx0XXxX0',
        refreshToken: '1/XXxXxsss-xxxXXXXXxXxx0XXXxxXXx0x00xxx',
        accessToken: 'ya29.Xx_XX0xxxxx-xX0X0XxXXxXxXXXxX0x'
    }
});

上記のリンクの例を見ると、 'expires'プロパティがあることがわかりますが、私のコードには含めていませんが、それでも正常に動作します。

ClientId、clientSecret、refreshToken、およびaccessTokenを取得するために、このビデオ https://www.youtube.com/watch?v=JJ44WA_eV8E を視聴しました。

これがまだあなたに役立つかどうかはわかりません。

14

Gmail/Googleアプリのメールサービスでは、認証にOAuth2が必要です。 PLAINテキストパスワードを使用するには、Googleアカウントで手動でセキュリティ機能を無効にする必要があります。

NodemailerでOAuth2を使用するには、以下を参照してください。 https://nodemailer.com/smtp/oauth2/

サンプルコード:

var email_smtp = nodemailer.createTransport({      
  Host: "smtp.gmail.com",
  auth: {
    type: "OAuth2",
    user: "[email protected]",
    clientId: "CLIENT_ID_HERE",
    clientSecret: "CLIENT_SECRET_HERE",
    refreshToken: "REFRESH_TOKEN_HERE"                              
  }
});

プレーンテキストのパスワードのみを使用する場合は、Googleアカウントで安全なログインを無効にして、次のように使用します。

var email_smtp = nodemailer.createTransport({      
  Host: "smtp.gmail.com",
  auth: {
    type: "login", // default
    user: "[email protected]",
    pass: "PASSWORD_HERE"
  }
});
4
Jeffrey Roshan

あなたが持っている

auth: {
    user: '[email protected]',
    password: 'password'
}

しかし、あなたはこれを書くべきです

auth: {
    user: '[email protected]',
    pass: 'password'
}

渡すパスワードの名前を変更するだけです。

2
Victor Fazer