Emergency Situation Sharing Tool
Abstract#
GMAILを使ってEMAILをアプリケーションから出そうとしていました、相当に苦労しています。できるかな。
Topics#
Googleの正式なドキュメントを探しておこう#
Google APIなるものがある。コンソールから使う。Gmail APIもある. |
Javaでは?#
クイックスタート試してみる。ラベルのリストを取るだけだったら手順に従えば、割とうまくいく。 |
を参考にメールの送信にチャレンジ。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"
}
で示されるGmailQuickstart.javaのソースの中にも書いてあるのだが、If modifying these scopes, delete your previously saved credentials/ folder.をやらないといけない。具体的には、tokensフォルダの中のStoredCredentialというバイナリファイルを消すと、Oauthをやり直すことになり、SCOPEが更新される。初めてGMAIL APIによるメール送信に成功!!! |
Androidでは?#
->
Send Message by Gmail in Android
Firebaseでは?#
よし、サーバを経由しよう。よって、何らかの方法でサーバにメッセージを送って保存して、それをEMAILでサーバからアプリに配信しよう。 |
Firebaseのサンプル見つけたこれに従ってやっていると。。。なんと、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を使って送れるか試してみよう。ここを参照。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, and successfully got Label list. Then how can I send message!? I will try. |
reference#
- Google, Send Confirmation Emails with Cloud Functions, https://github.com/firebase/functions-samples/tree/master/email-confirmation
- のびすけ, 2018.02.21, Google公式ライブラリを利用してNode.jsからGmailの送受信をしてみよう, https://dotstud.io/blog/gmail-api-from-nodejs/
- Google APIs, https://console.developers.google.com/
- Google, Gmail API, 2018年1月, https://console.developers.google.com/apis/library/gmail.googleapis.com
- Google, 2018年8月, Java Quickstart, https://developers.google.com/gmail/api/quickstart/java
- Google, 2018年8月, Node.js Quickstart, https://developers.google.com/gmail/api/quickstart/nodejs
- Google, 2017年5月, Sending Email, https://developers.google.com/gmail/api/guides/sending