したいこと
表題とタグの通り。
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度だけで済ませられないでしょうか?
何か解決のヒントでも得られたらと思います。
ここまで読んでいただきありがとうございます。
よろしくお願い致します。
あなたの回答
tips
プレビュー