Emergency Situation Sharing Tool
Abstract#
GMAILを使ってEMAILをアプリケーションから出そうとしていました、相当に苦労しています。できるかな。Topics#
Googleの正式なドキュメントを探しておこう#
Google APIなるものがある。コンソール[4]から使う。Gmail APIもある[5]. |
Javaでは?#
クイックスタート[6]試してみる。ラベルのリストを取るだけだったら手順に従えば、割とうまくいく。 |
[8]を参考にメールの送信にチャレンジ。build.gradleのdependencyにcompile 'javax.mail:mail:1.4.7'の追加を忘れずに。 |
mailを送るとなるとSCOPEを変えないといけない。うまくやらないと以下のメッセージが出続ける |
Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden { "code" : 403, "errors" : [ { "domain" : "global", "message" : "Insufficient Permission", "reason" : "insufficientPermissions" } ], "message" : "Insufficient Permission" }
[6]で示されるGmailQuickstart.javaのソースの中にも書いてあるのだが、If modifying these scopes, delete your previously saved credentials/ folder.をやらないといけない。具体的には、tokensフォルダの中のStoredCredentialというバイナリファイルを消すと、Oauthをやり直すことになり、SCOPEが更新される。初めてGMAIL APIによるメール送信に成功!!! |
Androidでは?#
->Send Message by Gmail in AndroidFirebaseでは?#
よし、サーバを経由しよう。よって、何らかの方法でサーバにメッセージを送って保存して、それをEMAILでサーバからアプリに配信しよう。 |
Firebaseのサンプル見つけた[2]これに従ってやっていると。。。なんと、SPARKプランだと外部APIをたたけないのは知っていたが、Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictionsというメッセージが。。。GMAILもたたけないのか。 |
I/System.out: exception = javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbtS 534-5.7.14 NZNrXO6WopLLkOsOviYc4hjQ7KaqvazAk0w0FQ1fInDZZ4go32nP5RzQ0ci2tufzg55y7n 534-5.7.14 rvN9GSNRDZF3NWwoGINBDdk-na3YqEue0CENoQNdLDm2mTKb8-WkPpgqrwTLQnLmRe5mEr 534-5.7.14 cY2Xr2ql5AjBZ3SPNT3_DLKJPRypwOhC7kmcZqVVeDVA2rDAj35H1IH7oupX2pOie07Cvr 534-5.7.14 B-xy7jfkx7XBmjjfkLF5EQEOVnCwhzJi55UsPuF-mvTGPBHFbl> Please log in via 534-5.7.14 your web browser and then try again. 534-5.7.14 Learn more at 534 5.7.14 https://support.google.com/mail/answer/78754 11-v6sm6040618pfq.43 - gsmtp finish sending email
I do not know why but the error message was changed. Still does not work. |
Node.jsでは?#
Node.jsを使って送れるか試してみよう。ここ[3]を参照。Google APIの登録など途中まではうまくいったが、getLabel.jsを実行するあたりで下記のエラーがでて止まる。。。 |
(node:12764) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'getRoot' of undefined at list (gmail\node_modules\googleapis\build\src\apis\gmail\v1.js:529:31) at list (internal/util.js:230:26) at main (gmail\getLabels.js:31:28) at <anonymous> (node:12764) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 3) (node:12764) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
after then, I tried this example[7], and successfully got Label list. Then how can I send message!? I will try. |
reference#
- [#2]Google, Send Confirmation Emails with Cloud Functions, https://github.com/firebase/functions-samples/tree/master/email-confirmation
- [#3]のびすけ, 2018.02.21, Google公式ライブラリを利用してNode.jsからGmailの送受信をしてみよう, https://dotstud.io/blog/gmail-api-from-nodejs/
- [#4]Google APIs, https://console.developers.google.com/
- [#5]Google, Gmail API, 2018年1月, https://console.developers.google.com/apis/library/gmail.googleapis.com
- [#6]Google, 2018年8月, Java Quickstart, https://developers.google.com/gmail/api/quickstart/java
- [#7]Google, 2018年8月, Node.js Quickstart, https://developers.google.com/gmail/api/quickstart/nodejs
- [#8]Google, 2017年5月, Sending Email, https://developers.google.com/gmail/api/guides/sending