メーリングリストでの配信メールをLINEに転送する




#はじめに
 学校からの連絡は、電子メールで配信するようになっています。しかし、一人ひとり登録するのは面倒で、グループへの投稿が可能なLINEの方が便利です。

 また、私はサークルでの連絡手段としてメーリングリストを使ってましたが、LINEの方が便利です。しかし、ガラケーしか持っていないメンバーがいてLINEに移行できません。そこで、電子メールからLINEに転送するためIFTTTを使っておりましたが、2019年にGmailからLINEへの転送サービスが止まってしまいました。

その後 Google apps script を使ったGmailからLINEに転送する記事を発見し、それを参考に作成して、LINEへの転送を運用しました。そのやり方と注意点などを記載します。

#準備
GoogleアカウントとLINEアカウントが必要です。

#LINEの設定 - LINE Notify からアクセストークンの発行
- [LINE Notify] (https://notify-bot.line.me/ja/) にアクセスしてログインします。マイページからトークンを発行するをクリックします。

- 次の「トークンを発行する」の画面からトークン名を入力し、転送先のトークルームを選び発行するをクリックします。
![token.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701666/00d39f09-051e-74be-a2b5-23028549fc86.png)


- 次のようにトークンが発行されますので、これをコピーしておきます。
![token2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701666/ebe6ff04-8223-3104-0c7d-1a712c55e2ce.png)


- LINE　Notify の設定は以上です。

# Google apps script の設定
- [Google apps script] (https://www.google.com/script/start/) から **Start scripting** を選び、googleアカウントでログインします。

- Google apps scriptの画面から　**新しいプロジェクト** を選択します。

![newproject2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701666/ee5dc053-13c9-23e2-631e-217d5c2b5dfa.png)

- 次のコードを入力します。1行目 lineTokenの"*************"には先程コピーしたLINE Notifyのトークンをコピーします。


```
var lineToken = "*************"; //LINE notify のトークンを入力
var get_interval = 15; //〇〇何分前まで受信したメールを転送対象とする。転送エラーを考慮してx3程度が良いと思います。

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 strTerms = '(is:unread after:'+ time_term + ')';
  
  //取得
  var myThreads = GmailApp.search(strTerms);
  var myMsgs = GmailApp.getMessagesForThreads(myThreads);
  //var valMsgs = [];
  //var msgnum = 0;
  
  for (var i = myMsgs.length - 1; i >= 0; i--) {
    var msgsInThread = myMsgs[i];
    for (var j = 0; j < msgsInThread.length; j++) {
      var msg = msgsInThread[j];

      //未読のみ
      if (msg.isUnread()) {
        //メールを既読にする
        msg.markRead();
        if (msg.getFrom() !== "apps-scripts-notifications@google.com"){
        //メッセージ作成（絵文字も可）
        var msgbody = "\n" + msg.getSubject() +
                      "\n"+msg.getFrom() + "より" +
                      "\n"+msg.getPlainBody();
        //msgnum++;
        send_line(msgbody);
        console.log(msg.getSubject()); 
      }
      }
    }
  } 
}

function main() {
  new_Me = fetchContactMail()
}
```
- 名前（ここでは「LINEへ転送」とします）をつけてスクリプトを保存します。画面左上の矢印をクリックして戻って、プロジェクト横の︙マークをクリックしてトリガーを選択します。
![triger1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701666/cea366c2-7a00-7cad-47cc-a722b153f620.png)

- 画面右下の**トリガーを追加**をクリックし、次のように設定します。**時間の間隔**はメールを転送する間隔となります。トリガー回数には制限がありますので、5分以上が無難です
- 設定したら保存します。

![triger2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/701666/929d84ff-d42c-e48c-7e58-84229c07ec1a.png)

- 保存すればトリガーが実行され、新規メールがあればLINE Notifyのトークンのトークルームに転送されます。

# 運用して気づいたこと
ときどき、スクリプトが実行エラーになります。そのたび指定した頻度でエラー通知が来ます。少し鬱陶しいのでエラー通知メールは転送されないようにapps-scripts-notifications@google.comからのメールは転送処理しないようにしました。
また、一回だけトリガーがストップしメール転送もストップしたことがあります。転送されないことに気がついたのは1週間後でした。原因はわかりません。学校の連絡は重要な内容もありますので、電子メールとの併用をお勧めします。

#参考URL
スクリプトのほとんどは次の記事を利用させていただきました。
[[Gmail to LINE]GASで新着メールをLINEに転送する](https://qiita.com/Damon/items/bbe6350ef1a4a10fe397)