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 Android

Firebaseでは?#

よし、サーバを経由しよう。よって、何らかの方法でサーバにメッセージを送って保存して、それを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#

  1. [#2]Google, Send Confirmation Emails with Cloud Functions, https://github.com/firebase/functions-samples/tree/master/email-confirmation
  2. [#3]のびすけ, 2018.02.21, Google公式ライブラリを利用してNode.jsからGmailの送受信をしてみよう, https://dotstud.io/blog/gmail-api-from-nodejs/
  3. [#4]Google APIs, https://console.developers.google.com/
  4. [#5]Google, Gmail API, 2018年1月, https://console.developers.google.com/apis/library/gmail.googleapis.com
  5. [#6]Google, 2018年8月, Java Quickstart, https://developers.google.com/gmail/api/quickstart/java
  6. [#7]Google, 2018年8月, Node.js Quickstart, https://developers.google.com/gmail/api/quickstart/nodejs
  7. [#8]Google, 2017年5月, Sending Email, https://developers.google.com/gmail/api/guides/sending