やってみた｜メーリングリストに届いた投稿をLINEに転送する

## はじめに（コメント）

特定のメール（メーリングリストのメール）を、LINEのグループに転送できると便利かなとおもって、やってみたので記録。

- お客様からの問い合わせメールを、お店のスタッフのグループLINEに転送するとか、応用範囲は広いかも

- かつては`IFTTT`を使うとかんたんにできたようだが、Gmailのポリシーが変わって、今はダメ（試したが、やはりダメだった）

## 環境

ここで書いていることは、下記のバージョンで実施しました。

- Gmail（フリー版）
- Safari バージョン14.1 (16611.1.21.161.6)
- macOS BigSur 11.3.1

## できること

- 条件に合うメールの本文を、LINEのグループに転送
- かなりリアルタイム（5分以内）に転送

## できない/わからないこと

- 添付書類は転送されない（メールを開いて見ることになる）
- Gmailじゃなくても同じことができると思うけれど、やり方はわからない


## 手順

[メールをラインに転送する方法! iPhone/AndroidのGmailを自動でLINEに通知しよう](https://sp7pc.com/gadget/line/23926)
に詳しく書いてあるので、追加することもない……。

書いていないことの補足を３つ。

- フィルタの設定
- スクリプト実例
- `Line Notify`を招待する

### フィルタの設定

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184128/8e153767-995d-2e74-9c7d-7eeffdb29c68.png" width=60%>

Gmailのフィルタ機能をつかって、

- 特定のメールアドレス（２箇所）から来たものに対して
- ラベル「AAAAAAAA」をつける

### スクリプト実例

[メールをラインに転送する方法! iPhone/AndroidのGmailを自動でLINEに通知しよう](https://sp7pc.com/gadget/line/23926)　のほとんどコピペだが……

- 上記で設定したラベル「AAAAAAAA」を指定
- 既読でも送るように変更
- 日付などのフォーマットを好みに合わせて変更（下図ご参照）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184128/9bec79cf-5219-3fb9-46cc-5a464181636b.jpeg" width=60%>


さて、実際に使っているスクリプトは下記（一部伏せ字）。`XXXXXXXX`には、取得したトークンを貼り付ける。


```javascript
var lineToken = "XXXXXXXX";  // 5x期 愛●保護者LINEグループ
var get_interval = 5; //●分前～現在の新着メールを取得 #--トリガーの時間間隔をこれに合わせる


/**
 * LINEにメッセージを転送します
 */
function main() {
 
  // 転送するメール情報を取得
  new_Me = fetchContactMail()
  
  // メール情報をLINEに転送
  if (new_Me.length > 0) {
    for (var i = new_Me.length-1; i >= 0; i--) {
      send_line(new_Me[i])
    }
  }
}


/**
 * LINEに転送するメッセージを取得します
 */
function fetchContactMail() {
  //取得間隔
  var now_time= Math.floor(new Date().getTime() / 1000);    // 現在時刻を変換
  var time_term = now_time - ((60 * get_interval) + 3);     // 秒にして+3秒しておく

  // 検索条件をここで指定
  // NOTE: 「転送用」ラベルをGmailで指定
  //  var strTerms = '(after:'+ time_term + ')';            // modified 既読も送る
  var strTerms = '(label:AAAAAAAA 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] = " " 
      // コメント欄を参考に、日付のフォーマットの仕方を変更
      + Utilities.formatDate(myMsgs[i].slice(-1)[0].getDate() , 'Asia/Tokyo', 'MM/dd HH:mm')
      + "\n\n[送信者]" + myMsgs[i].slice(-1)[0].getFrom()
      + "\n\n[件名]" + myMsgs[i].slice(-1)[0].getSubject()
      + "\n\n[本文]\n"+ myMsgs[i].slice(-1)[0].getPlainBody();
  }

 return valMsgs;
}


/**
 * LINEにメッセージを転送します
 * @param {String} Me メッセージの内容
 */
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);
}
```

とにかく、コピペして、`XXXXXXXX`と`AAAAAAAA`だけ変えると、動きます。


### `Line Notify`を招待する

- Gmailから、自分のLINEの`Line Notify`にメッセージが行く。

- したがって、転送したいグループに、`Line Notify`を招待する必要がある。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184128/3d65121a-e24b-e1d3-4bf6-cd68b2277305.jpeg" width=60%>


> ここのところがわからなくてハマった。



## その他リソース

メールをラインに転送する方法! iPhone/AndroidのGmailを自動でLINEに通知しよう
https://sp7pc.com/gadget/line/23926

Gmail to LINE GASで新着メールをLINEに転送する
https://qiita.com/Damon/items/bbe6350ef1a4a10fe397

Gmailの新着通知をLINEで受け取る by Google App Script
https://note.com/yuut6/n/nb3528b53ddfa