【プログラミング知識0でもできる！】Gmailで受信したメールをLINEに通知させる方法

## 概要
メールが煩雑化し、大事なメールが埋もれてしまうことがあり、日常的に頻繁に利用するLINEであれば見逃すことはないのでは？と思い実装してみました。
非常に多く参考となる記事があったため、それを参考にしながら自分なりにまとめてみました。

## 使用するツール

・LINE（通知を受け取るグループをあらかじめ作成しておくと◎）

・LINE Notify：LINEのトーク画面に自動で通知を飛ばすことができるサービス

・GAS(Google Apps Script)：JavaScriptがベースとなるGoogleが提供するプログラミング言語

## 手順

**（1）Google Chromeを開き、画面左上の「アプリ」から「Googleドライブ」を選択する**

**（2）ドライブ画面の左上にある「＋新規」をクリックし、下記の手順でGoogle Apps Scriptを選択する**

![7851854A-86A4-4C8E-9D6F-EEB480A29235_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1516225/67fe1e5a-26ad-a11d-5d13-5b7a0940118a.jpeg)


**（3）デフォルトでプロジェクト名が「無名のプロジェクト」となっているので、任意のプロジェクト名に修正する**

**（4）下記のコードをコピペする（コピペ後この画面は開きっぱなしで！）**

・1行目にはこの後に取得するトークンを貼り付ける

・2行目のqueryには今回LINEに通知を送るときの条件を記述する

例）fromの@以下が「@gmail.com」のメールを通知する

⇒”from:@gmail.com”

例）件名（subject）が「お知らせ」のメールを通知する

⇒”subject:お知らせ”

```js
var LINE_NOTIFY_TOKEN = "取得したトークンを記載";
var query = "from:gmail.com";
//queryには条件を記述
//今回の場合はfromが「@gmail.com」のメールが届くように設定されている

//メールをチェックし条件に該当するメールをLINEに通知する
function getMail(){
 
  //指定した条件でスレッドを検索して取得 
  var myThreads = GmailApp.search(query, 0, 10);
  
  //スレッドからメールを取得し二次元配列に格納
  var myMessages = GmailApp.getMessagesForThreads(myThreads);
  
 
  for(var i in myMessages){
    for(var j in myMessages[i]){
 
      //スターがないメッセージのみ処理   
      if(!myMessages[i][j].isStarred()){ 
        
        var strDate　=　myMessages[i][j].getDate();
        var strmsg = Utilities.formatDate(myMessages[i][j].getDate(), 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss')+"\n"; //タイムスタンプ
        strmsg += myMessages[i][j].getSubject() + "\n";//Subject 
        strmsg += myMessages[i][j].getPlainBody().slice(0,200);//本文の先頭から200文字
        
        //LINEにメッセージを送信
        sendLineMessage(strmsg);
 
        //処理済みのメッセージをスターをつける
        myMessages[i][j].star(); 
      }
    }
  }
}
 
 
//LINEにメッセージを送信する
function sendLineMessage(msg) {
  var response = UrlFetchApp.fetch("https://notify-api.line.me/api/notify", {
    "method": "post",
    "headers": {
      "Authorization": "Bearer " + LINE_NOTIFY_TOKEN
    },
    "payload": {
      "message": msg
    }
  });
}

```

**（5）新規タブで[https://notify-bot.line.me/ja/](https://notify-bot.line.me/ja/)を開く**

**（6）右上の「ログイン」から自分のLINEアカウントにログインする**

**（7）ログイン後、アカウント名に切り替わるので右上のアカウント名をクリックし「マイページ」を開く**

**（8）ページ下部の「アクセストークンの発行(開発者向け)」からトークンを発行する（ここで発行したトークンを先ほどのコードの1行目に追加する）**

・トークン名は任意の名前でOK

・あらかじめ通知を受け取るグループを作成している場合、そのグループを選択する（1:1でLINE Notifyから通知を受け取るでもOK！）

**（9）LINEグループにLINE Notifyを招待し、追加する**

**（10）トークンが取得されたか確認する**

・「アクセストークンの発行(開発者向け)」の下にある[LINE Nortify API Document](https://notify-bot.line.me/doc/ja/#:%7E:text=%24%20curl%20%2DX%20POST%20%2DH%20'Authorization%3A%20Bearer%20%3Caccess_token%3E'%20%2DF%20'message%3Dfoobar'%20%5C)の中に動作確認用のコマンドがある。Macの場合は、下記をターミナルに入力すると確認できる。

`curl -X POST -H "Authorization: Bearer 発行したアクセストークン" -F "message=ABC" [https://notify-api.line.me/api/notify](https://notify-api.line.me/api/notify)`

・成功した場合、設定したLINEグループに「ABC」というメッセージが届く

**（11）GASに戻り、実行ログの左隣にあるプルダウンから「getMail」を選択し、実行の左隣にある保存ボタン（またはcommand + S）にて保存する**

![65F28B2D-69A1-49DF-A37A-362E5D8D784D_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1516225/a0f49c6c-24ab-abdd-89f5-62649bde83cf.jpeg)

**(12)最後に「▷実行」を押して完了**

## まとめ
今回の実装で初めてLINEのAPIを使ってみました。他にも便利な機能がたくさんあるようなので、今後自分でアプリケーションを作成する際に積極的に使用していきたいなと思います。
最後までご覧いただきありがとうございました。

## 参考

[https://technical.verybestcbp.com/gmailtoline/](https://technical.verybestcbp.com/gmailtoline/)
[https://qiita.com/chibi929/items/6e56ade1b65d1eef1051](https://qiita.com/chibi929/items/6e56ade1b65d1eef1051)
[https://qiita.com/chivi_dump/items/a62a7b8c32e6ea894a09](https://qiita.com/chivi_dump/items/a62a7b8c32e6ea894a09)