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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Gmail

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

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

847閲覧

nodemailerでgmailからメールを送信したい。

so_airy

総合スコア14

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Gmail

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

Node.js

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/21 00:05

したいこと

表題とタグの通り。
firebaseを利用し、swiftで作ったアプリからcloud functionsとnodemailerを利用してgmailからメールを送信したいです。
少しタイトルと内容にズレがあり、限定的な条件では送信できています。

やったこと

1.cloud functionsに下記のsendMailをデプロイ。
2.swiftで作ったアプリからsendMailをcallする機能を設定。
3.gmailの安全性の低いアプリのアクセスを有効に設定。
4.実際にアプリからsendMailをcallする動作を実行。
→メールは送信されず、下記のエラーが出力される。
5.ココからgoogleアカウントへのアクセスを許可。
→許可した直後の10分程度のみ、アプリからのcallに応えてメールが送信されるようになる。
→10分程度後、再びアカウントアクセスを許可しなければメールは送信されなくなる。

JavaScript

1 2const functions = require("firebase-functions"); 3const nodemailer = require("nodemailer"); 4const gmailEmail = functions.config().gmail.email; 5const gmailPassword = functions.config().gmail.password; 6const adminEmail = functions.config().admin.email; 7 8// 送信に使用するメールサーバーの設定 9const mailTransport = nodemailer.createTransport({ 10 service: "gmail", 11 auth: { 12 user: gmailEmail, 13 pass: gmailPassword 14 } 15}); 16 17// 管理者用のメールテンプレート 18const adminContents = data => { 19 return `hello`; 20}; 21 22exports.sendMail = functions.https.onCall(async (data, context) => { 23 let adminMail = { 24 from: gmailEmail, 25 to: adminEmail, 26 subject: "お問い合わせ", 27 text: adminContents(data) 28 }; 29 30 try { 31 await mailTransport.sendMail(adminMail); 32 } catch (e) { 33 console.error(`send failed. ${e}`); 34 throw new functions.https.HttpsError('internal', 'send failed', e); 35 } 36}); 37``` 38 39```error 40 41code = EAUTH; 42 command = "AUTH PLAIN"; 43 response = "534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv\n534-5.7.14 pYHiTjOt0b2Uz2HJOYSwtDwnHpZjoQsag_riY4eM6K0cjyCOOTFnUqbJhEtpG5qj1aotD\n534-5.7.14 acqX0C1IigCSgiUqY2rmpcp3CFKhsPOfR_9GBCdG9qiVncbzUjSZGeBSgW1CMM58>\n534-5.7.14 Please log in via your web browser and then try again.\n534-5.7.14 Learn more at\n534 5.7.14 https://support.google.com/mail/answer/78754 y11sm2039993ily.22 - gsmtp"; 44 responseCode = 534;

質問

この、gmailアカウントへのアクセスの許可を10分程度感覚で断続的に行うのはきついです。
どこかの設定でこれを1度だけで済ませられないでしょうか?
何か解決のヒントでも得られたらと思います。

ここまで読んでいただきありがとうございます。
よろしくお願い致します。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問