【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にアクセスして新しいプロジェクトを作りましょう。

 

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

  • lineToken・・・取得したアクセストークン
  • interval・・・何分前からのメールを取得して通知して欲しいか
const sendLine = (body, lineToken) => {
  let options ={
        "method"  : "post",
        "payload" : {
          'message': body
         },
        "headers" : {"Authorization" : "Bearer "+ lineToken}  
      };
    UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

const setSearchCondition = () => {
  const now = Math.floor(new Date().getTime() / 1000) ;
  const interval = 20; //〇分前~現在の新着メールを取得 #--トリガーをこれに合わせておく!!
  const term = now - (60 * interval);

  return '(is:unread after:'+ term + ')';
}

const searchMail = (searchCondition) => {
  return GmailApp.search(searchCondition);
}

const getMessages = (searchResult) => {
  const mails = GmailApp.getMessagesForThreads(searchResult);

  let detailMessages = []
  for (const messages of mails) {
    const message = messages.pop()
    detailMessages.push(
        "\n【Date】: " + message.getDate() 
      + "\n【From】: " + message.getFrom()
      + "\n【Subject】: " + message.getSubject()
      + "\n【Body】: \n" + message.getPlainBody().slice(0,200)
    )   
  }

  GmailApp.markThreadsRead(searchResult);
  return detailMessages;
}

const main = () => {
  const lineToken = "〇〇"; //LINE notify token
 
  const result = searchMail(setSearchCondition()) 
  if (result.length > 0) {
    const messages = getMessages(result)
 
    messages.forEach(message => {
      sendLine(message, lineToken)
    }) 
  }
}

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

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

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

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

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

トリガーを設定する

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

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

まとめ

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

おすすめの記事