[GAS&LINE Notify]家族向けのメールをLINEグループに自動転送するGASを組んでみた
電気料金やガス料金、住宅関連のサービスは、自分のアドレスで登録しているのですが、いちいちコピペしてLINEで送ったり、メール転送するのは面倒だなと思い、調べてみたら発見しました。
以下のNote記事を参考にさせていただきました。大感謝です。
作成したコード(ほぼコピペ)
発行したLINE Tokenに差し替えれば、そのまま使用できます。本文を長めに通知したかったので、文字数を1000文字にしています。
var lineToken = "取得したLINETokenはここに貼る"; //LINE notify token
var get_interval = 1; //1分前~現在の新着メールを取得 #--トリガーをこれに合わせておく!!
function send_line(Me){
var payload = {'message' : Me};
var options ={
"method" : "post",
"payload" : payload,
"headers" : {"Authorization" : "Bearer "+ lineToken}
};
UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
function fetchContactMail() {
//取得間隔
var now_time= Math.floor(new Date().getTime() / 1000) ;//現在時刻を変換
// var time_term = now_time - (60 * get_interval); //分数→秒数に変換
var time_term = now_time - ((60 * get_interval) + 5); //分→秒に変換して+5秒しておく(0秒だと失敗しちゃうことがある)
//検索条件指定
var strTerms = '(is:unread after:'+ time_term + ')';
//取得
var myThreads = GmailApp.search(strTerms);
var myMsgs = GmailApp.getMessagesForThreads(myThreads);
var valMsgs = [];
for(var i = 0; i < myMsgs.length;i++){
valMsgs[i] = "\n【date】: " + Utilities.formatDate(myMsgs[i].slice(-1)[0].getDate(), 'Asia/Tokyo', 'MM/dd HH:mm') // MM/dd HH:mm の形式で日時を表示
+ "\n【From】: " + myMsgs[i].slice(-1)[0].getFrom() //送信元情報を取得
+ "\n【Subject】: " + myMsgs[i].slice(-1)[0].getSubject() //メール件名を取得
+ "\n【Body】: \n" + myMsgs[i].slice(-1)[0].getPlainBody().slice(0,1000); //1,000文字まで本文を通知
//myMsgs[i].markRead(); //メッセージを既読にする
}
return valMsgs;
}
function main() {
new_Me = fetchContactMail()
if(new_Me.length > 0){
for(var i = new_Me.length-1; i >= 0; i--){
send_line(new_Me[i])
}
}
}
37行目: //myMsgs[i].markRead();
この処理がエラーになってしまうのでコメントアウトしてます…
LINE Token の発行
早速、優秀なサイトを引用させていただきます。(僕が整理するよりも圧倒的にわかりやすいので)
投稿先は、通知専用のLINEグループを作成し、そこを指定しました。
[メインアカウント]Gmailフィルタを使用した転送設定
まずは、メインアカウントからLINE通知用カウントへ、Gmailフィルタを使用した転送設定を行いました。参考はこちら。
検索条件は、メールアドレスのみだと不要なメールも届いてしまう場合もあるため、件名の条件も組み合わせたりしました。
from:(xxx@test.com) subject:(件名の検索ワード)
メインアカウントで転送したメールをすぐに検索できるようにラベル付もしました。
[LINE 通知用アカウント]スプレッドシートからコードを作成する
スクリプトを直接記載することもできますが、僕はスプレッドシートからスクリプトエディタを起動するやり方を採用しました。(スプレッドシート内にLINE NotifyのTokenをメモしてます)
myfunction的なのがかかれていますが、以下のようにまるっとコードを貼りました。
[LINE通知用アカウント]早速動かしてみる
LINE通知用アカウントに届いたメールのすべてをLINE通知させる設定なので、通知用アカウントにメールを送り、プログラムを動かしてみます。
[main]を選んで、「▶」の実行ボタンで動きます。うまくいけば、LINEにメッセージが通知されます。
[LINE通知用アカウント]定期的に実行するスケジュールをセットしてみる
以下のボタンをクリックすると、トリガー設定の画面に移動します。
「+トリガーを追加」をクリックし、以下を例に設定してみてください。
実行する関数: main ※ main以外だと動きません
実行するデプロイ: Head
イベントのソース: 時間主導型
時間ベースのトリガータイプ: 分ベースのタイマー
時間の間隔を選択: 10分おき ※2行目のインターバルタイムと合わせます
エラー通知設定: どれでもOKです
これで設定は完了です。もう一度、LINE通知用アカウントにメールを送り、スケジュール通りに実行され、LINEに通知が届けば閑静です。
上記の記述であれば、日時は以下のように表示してくれます。
所感
コミュニケーションツールの主体はLINEに移行されていますが、ユーザIDといえばメールアドレスであり、通知は基本、メールだなと思っています。
共有のメールアカウントを作成するのもありですが、LINEで通知できたらお互い楽だよなーと思って、作成しました。サービスが増えてもフィルタ条件を追加するだけですし、運用も楽ちん。
LINE Notifyのサービスが終了しないことを祈らんばかりですw