あまり数学とは関係ないですが、忘れそうなので個人用の備忘録として記事にします.
やりたいこと
- 受信したGmailをLINEに転送する
- 無料で行う
GAS ("Google Apps Script" の略らしい) を用い, Gmailの新着メールをLINEに転送する by Google Apps Script - パンダのプログラミングブログさんのコードを用いることで実装できた.
JavaScriptを初めて触った(そのうえ, 今後触る予定もない)ので, 詰まったことや忘れそうなことだけを記載.
LINE Notify Token を設定する。
LINE Notify にログインし、 右上の「メニュー - マイページ 」を選択. ページ下部にある「アクセストークンの発行(開発者向け)」から、 「トークンを発行する」をクリック. トークン(長い英数字の文字列)が表示される. トークンは1度しか表示されないので, コピーを忘れずに. (発行は1回きりではないので, 忘れたらやり直すこともできるが...)
Google Apps Script (GAS) の設定
Apps Script – Google Apps Script の左上、「新しいプロジェクト」を選択.
コードを書く.
1. LINEトークンを貼り付ける.
// LINE Notify のトークンを hoge に貼り付ける const LINE_NOTIFY_TOKEN = 'hoge' const ENDPOINT = 'https://notify-api.line.me/api/notify'
先程コピーしたLINE Notify のトークンを貼り付ける. (元の記事の中には、「プロパティに格納しておきましょう。」などと記述があるのですが、現在(2022/01/26)のバージョンでのやり方が不明でした... 取り急ぎ、このコードで動きます)
2. 転送したいメールを検索する条件を与える
// Fromのアドレスを指定 const FROM_ADDRESS = ['abc@example.com','important.com' ].join(' OR ') // 同期する間隔(分) const MINUTES_INTERVAL = 5
上記の例では, abc@example.com
と,
important.com
のどちらかが, Fromのアドレスに含まれる場合にメールが転送される.
MINUTES_INTERVAL
は同期する間隔を指定し, 例では5分となる.
他にも,
// To のアドレスを指定 const TO_ADDRESS = [''].join(' OR ') // Subject を指定 const SUBJECT = [''].join(' OR ')
などもできる.
尚, ['']
のままにした場合は, 空文字列となり全てのメールが転送される.
3. 検索条件を指定する
const now = Math.floor(new Date().getTime() / 1000) const intervalMinutesAgo = now - (60 * MINUTES_INTERVAL) const query = `(is:unread from:(${FROM_ADDRESS}) to:(${TO_ADDRESS}) subject:(${SUBJECT}) after:${intervalMinutesAgo})` const threads = GmailApp.search(query)
query
に検索条件をすべて詰め込んでいる.
- "is:unread"は未読のみを対象にする. 指定しなければ既読のものも含まれる.
- "from:(${FROM_ADDRESS}) to:(${TO_ADDRESS}) subject:(${SUBJECT}) "は先程格納した値を使うように指定する.
Date().gettime()
で, UNIX 元期 からのミリ秒が得られるので, 秒に換算したものをnow
に格納.intervalMinutesAgo
がMINUTES_INTERVAL
分前であるから, これ以後に受け取ったメールのみを転送するようにafter
で指定.
4. 転送する文言を得る
for (const messages of mails) { const latestMessage = messages.pop() messageDate = latestMessage.getDate() messageDate = Utilities.formatDate(messageDate,"JST", "yyyy/MM/dd HH:mm:ss") const notice = ` -------------------------------------- 件名: ${latestMessage.getSubject()} 受信日: ${[messageDate]} -------------------------------------- ${latestMessage.getPlainBody().slice(0, 350)} ` notices.push(notice) latestMessage.markRead() }
元のサイトのコードでは日時表記がmmddyyyyだった & 時刻がアメリカ時間で表示されるので, 手を加えた.
messageDate = latestMessage.getDate() messageDate = Utilities.formatDate(messageDate,"JST", "yyyy/MM/dd HH:mm:ss")
でyyyy/MM/dd HH:mm:ss
表記にできる. ("HH"を"hh"にすると12時間表記になる. )
formatDate
の詳細は
Google Apps Script メモ - formatDate
にあった.
latestMessage.markRead()
をつけることで, メールを既読にできる.
完成
メモしておきたいことは以上.
Gmailの新着メールをLINEに転送する by Google Apps Script - パンダのプログラミングブログさんの記事がとても勉強になった. (というかJavascriptを何も理解しないまま完成してしまった...)
参考文献
Gmailの新着メールをLINEに転送する by Google Apps Script - パンダのプログラミングブログ