2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-09-04

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

  • 次のようにトークンが発行されますので、これをコピーしておきます。
    token2.png

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

Google apps script の設定

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

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

newproject2.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

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

  • 設定したら保存します。

triger2.png

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

運用して気づいたこと

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

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

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?