【GAS】Gmailに来たメールをLINEに転送して通知する方法

今回はGmailで受信したメールをLINEに通知する方法を紹介します。以前はIFTTTを使ってできたみたいだけど、何やらできなくなってしまったのでGAS(GoogleAppsScript)を使ってLINEに通知してやります。プログラムを書くけど、ほとんどコピペでいけるので簡単です。

ちなみにIFTTTはいろんなwebサービスを連携できるものでかなり便利なので、よかったら使ってみるといいですよ。

GmailのメールをLINEに通知する方法、いってみましょう。

GmailをLINEに通知する方法

GmailをLINEに通知するために以下の手順でいきます。

  1. LineNotifyからアクセストークンを取得する
  2. GAS(GoogleAppsScript)を記述する
  3. GASを実行してLINEに通知する

GmailのメールをLINEに通知させる時に、LINEからはLineNotifyというアカウントからその通知が送られてきます。なので、まずはLineNotifyの設定をないといけないんですよね。ちょっと難しい言葉が出てくるかもしれないけど、手順通りにやっていけばきっとできる。

LineNotifyからアクセストークンを取得する

通知されるLineのアカウントですね。LineNotifyにアクセスして、LINEのアカウントでログインしましょう。マイページに進んで、[トークンを発行する]をクリックです。

  • トークン名を記入してください・・・好きな名前でOK
  • 通知を送信するトークルームを選択してください・・・「1:1でLINE Notifyから通知を受け取る」を選択

「発行する」をクリックすると、トークンが発行されるので、それをコピーしてやりましょう。GAS( GoogleAppsScript)からLINEに通知するために必要なんです。

連携中サービスに今新しく作成したものが追加されるはずです。

GASを記述する

GoogleAppsScriptにアクセスして新しいプロジェクトを作りましょう。

 

コードは以下をコピペして、以下の部分は自分のものに変更してください。

  • line_token・・・取得したアクセストークン
  • get_interval・・・何分前からのメールを取得して通知して欲しいか
const line_token = "XXXXXXXXXXXXXXXXXXXXXXXXXX"; //LINE notify token
const get_interval = 5; //〇分前~現在の新着メールを取得 #--トリガーをこれに合わせておく!!

function send_line(body){
  let payload = {'message' :   body};
  let options ={
        "method"  : "post",
        "payload" : payload,
        "headers" : {"Authorization" : "Bearer "+ line_token}  
      };
    UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}


function fetchContactMail() {
  //取得間隔
  const now_time= Math.floor(new Date().getTime() / 1000) ;//現在時刻を変換
  const time_term = now_time - (60 * get_interval); //変換
  //検索条件指定
  const search_condition = '(is:unread after:'+ time_term + ')';

  //取得
  const search_result = GmailApp.search(search_condition);
  //既読
  GmailApp.markThreadsRead(search_result);
  const messages = GmailApp.getMessagesForThreads(search_result);
  let detail_messages = [];
  for(let i = 0; i < messages.length;i++){
    detail_messages[i] = "\n【Date】: " + messages[i].slice(-1)[0].getDate() 
                  + "\n【From】: " + messages[i].slice(-1)[0].getFrom()
                  + "\n【Subject】: " + messages[i].slice(-1)[0].getSubject()
                  + "\n【Body】: \n" + messages[i].slice(-1)[0].getPlainBody().slice(0,200); 
    messages[i].markRead();
  }

  return detail_messages;
}

function main() {
  new_messages = fetchContactMail()
  if(new_messages.length > 0){
    for(let i = new_messages.length-1; i >= 0; i--){
      send_line(new_messages[i])
    }
  }
}

ちょっと変数名なんかは変えていますが、以下の記事を参考にしました。ありがとうございます。

参考: [Gmail to LINE]GASで新着メールをLINEに転送する

このプログラムがやっていることは、指定した検索条件でGmailを取得、それをLINEに通知しているだけです。このプログラムを実行して実際にメールがLINEに通知されるか確かめてみてください。左上から[main]を選択して再生ボタンを押してみましょう。

以下のような画面になったら許可してやります。

実行してみると、5分前からのメールを取得して通知してくれます。もし、5分前のメールがない場合はget_intervalの値を変更するか、メールを送ってみるといいです。その後に再度実行するとこんな風にLINEに通知が来るはず。

トリガーを設定する

実際にLINEに通知がきたら準備完了です。自動で通知してくれるようにトリガーというものを設定します。

トリガーを追加すると、さっき書いたプログラムをどれぐらいの間隔で実行するか設定することができます。↑の場合、5分ごとにmain関数を動かします。設定したら保存して、実際にメールを送ってLINEに通知がされるか確認してみるといいですよ。

まとめ

プログラムを書いたりしてちょっと面倒だけど、設定すると後はLINEでGmailのメールを確認することができるから便利です。もちろん、プログラムはあくまで例なので自分の好きなように改造しちゃってください。Gmail関連で使える関数はGASのReferenceにいろいろ書いてあるので、より便利なものを作りたい方は覗いてみるといいです。(英語で何言ってんの?感はあると思う)

Twitterでフォローしよう

おすすめの記事