質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Q&A

解決済

1回答

1629閲覧

node.js nodemailer で gmail 送信できません!

madamdaama

総合スコア45

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

0グッド

0クリップ

投稿2022/01/31 08:18

ローカル環境(localhost:3000)でホームページの問い合わせフォームをnode.jsのnodemailerでGmail送信させようとしています。Google Developers Console でリフレッシュトークンも取得して、コードを書きました。メールアドレスやパスワードも問題なく(それでウェブ上ではログイン可能)、リフレッシュトークンもコピペしているので間違いようがなく、しかしプログラムは上手く作動しません。ターミナルには以下のエラーがでます。

Error: Mail command failed: 530-5.7.0 Authentication Required. Learn more at
530 5.7.0 https://support.google.com/mail/?p=WantAuthError lt17sm9492993pjb.41 - gsmtp

該当部のコードは以下の通り。

node.js

1const transporter = nodemailer.createTransport({ 2 host: "smtp.gmail.com", 3 port:465, 4 secure: true, 5 auth:{ 6 type: 'OAuth2', 7 user: process.env.EMAIL_ADDRESS, 8 pass: process.env.EMAIL_PASSWORD, 9 clientId: process.env.CLIENT_ID, 10 clientSecret: process.env.CLIENT_SECRET, 11 refreshToken: process.env.REFRESH_TOKEN, 12 accessToken: process.env.ACCESS_TOKEN 13 } 14}); 15 16app.post('/contact', (req, res, next) => { 17 const username = req.body.username; 18 const useremail = req.body.useremail; 19 const usermessege = req.body.usermessege; 20 const errors = []; 21 22 if (username === '') { 23 errors.push('お名前がありません!'); 24 } 25 if (useremail === '') { 26 errors.push('メールアドレスがありません!'); 27 } 28 if (usermessege === '') { 29 errors.push('メッセージがありません!'); 30 } 31 if (errors.length > 0) { 32 res.render('contact.ejs', { errors: errors }); 33 } else { 34 next(); 35 } 36}, 37 (req, res) => { 38 const username = req.body.username; 39 const useremail = req.body.useremail; 40 const usermessege = req.body.usermessege; 41 const mailOptions = { 42 from: process.env.EMAIL_ADDRESS, 43 to: process.env.EMAIL_ADDRESS2, 44 subject: '問い合わせ', 45 text: req.body.username + req.body.useremail + req.body.usermessege 46 }; 47 48 transporter.sendMail(mailOptions, function (error, info) { 49 if (error) { 50 console.log(error); 51 } else { 52 console.log(Email_sent); 53 res.redirect('/aftercontact'); 54 } 55 }); 56 57 });

html(ejs)

1<form action="/contact" method="post"> 2 <p>お名前</p> 3 <input type="text" name="username"> 4 <p>メールアドレス</p> 5 <input type="email" name="useremail"> 6 <p>ご質問ご意見</p> 7 <textarea type="text" name="usermessege"></textarea> 8 <% if (errors.length>0) { %> 9 <ul class="errors"> 10 <% errors.forEach(error=>{ %> 11 <li> <%= error %> </li> 12 <% }); %> 13 </ul> 14 <% } %> 15 <p>※全ての項目を必ず間違いなくご記入ください。</p> 16 <button type="submit" class="go">送信</button> 17</form>

.envファイルに記載されている情報には問題がないとすれば、いったい何が原因なのでしょうか? エラーメッセージに表記されているグーグルーのサポートに書いてあることは一通り試しましたが無理でした。
ご指導ご鞭撻のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

madamdaama

2022/01/31 08:46

質問者のmadamadaamaです。 制作中のホームページを、ローカル環境で試している最中です。この問い合わせフォームのところだけは全くうまく作動せず、様々なページを参照してコーディングしたのですが歯が立ちません。
madamdaama

2022/02/01 03:23

ちなみに上記node.jsのaccessTokenの部分を消して実行すると今度は、 Error: No recipients defined (中略) code: 'EENVELOPE', command: 'API' と別のエラーが出ます。 この場合の問題は’EENVELOPE’’でメール送信の項目に問題があるということですから、少なくともログインは完了していると考えていいのでしょうか?
madamdaama

2022/02/01 06:57

process.envを使うことを止めて、文字を直に記載したら、とりあえずメール送信は可能になりました。が、新たに問題が発生し、 ①メッセージ(req.body.usermessege)のみが送信され、名前やメールアドレスは記載されていない。 ②メール送信後のredirectの処理がなされない。 の二点です。もちろん何故に.envファイルが読み込めていないのかという根本的な原因もあるのですが。
madamdaama

2022/02/01 07:20

①メッセージのみが送信される問題は、コードを text:username+useremail+usermessege とすることで解決しました。あとはredirectと.envの問題のみとなりました。
guest

回答1

0

自己解決

メール送信自体は出来るようになったので、一応解決とします。
残りの二つの問題は別途質問を立てさせていただきます。

投稿2022/02/01 08:29

madamdaama

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問