1
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 1 year has passed since last update.

Gmailで取得したメールに条件を付け判断してチャットワークに自動投稿する

Last updated at Posted at 2022-04-12

例えばドメインやSSL更新のメール受信だけに頼ってる場合他の営業メールなどに埋もれてしまい抜けやすいのと、
毎度メールチェックするのもめんd・・工数かかるので、更新メールが来たらさくっと共有して事務とのやり取り行うように
GAS使ってメール監視するようにした。

チャットワークAPIキーを確保(1)

チャットワークアカウント事にAPIキーを取得できるので事前に取得しておく。

チャットワークで投下したいスレのIDを確保(2)

URLの末尾に「!rid00000000」って記載されてる数字の部分。

GASでコード作成

google app scriptで新規プロジェクトでコード作成。

ライブラリを追加

ChatWorkClient for Google Apps Scriptというライブライを追加します。
これを追加することでチャットワーク系の関数を利用できるようになります。
「ライブラリを追加」をクリックしスクリプトIDに下記を入力

1nf253qsOnZ-RcdcFu1Y2v4pGwTuuDxN5EbuvKEZprBWg764tjwA5fLav

検索するとChatWorkClientがヒットするので最新バージョンを追加して追加をクリック。
すると左ナビのライブラリの下にChatWorkClientが表示されるのでこれでOK

コード記載

脳死で利用するならCW_TOKENに(1)を、CW_ROOMに(2)を記載。
msgbodyはそのまま利用すればto all宛てに検索対象としたメール件名と本文をinfoタグでくくった状態のものが自動投下される。
チャット投下されるのはAPIキーを取得したアカウントから発言する形になります。

function mailCheckDomain() {
  //チャットワークトークン・ID
  const CW_TOKEN = "xxxxxxxx"; // チャットワークAPIキー
  const CW_ROOM = "YYYYY"; // チャットワークの投下したいスレID

  //Gmailから特定条件のスレッドを検索しメールを取り出す
  var strTerms = 'subject:ドメイン有効期限 OR ドメイン登録期限 OR 利用ドメイン'; // 検索したいメール条件
  var myThreads = GmailApp.search(strTerms, 0, 20); //条件にマッチしたスレッドを取得
  var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する→二次元配列で格納

  //チャットワークAPI
  var client = ChatWorkClient.factory({
    token: CW_TOKEN
  });
  Logger.log(myMsgs);
  //各スレッド×メール
  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();

        //メッセージ作成
        var msgBody = "[toall]" +
                      "[info]" +
                          "[title]" + msg.getSubject() + "[/title]" +
                          msg.getFrom() + "[hr]" +
                          msg.getPlainBody().slice(0,700) + "[hr]" +
                          msg.getDate() +
                      "[/info]";

        //チャットワークに送る
        client.sendMessage({
          room_id: CW_ROOM,
          body: msgBody
        });
      }
    }
  }
}

注意点

これは対象のメールで「未読なもの」をあえて対象にして、対象としたものを「既読とする」ように仕込んでます。
こうすることで基本受信したメールは目視することなくチャットワークの特定すれに投下される形になります。
Gmailでこれが発火する前に既読にしてしまった場合は対象外になるので注意です。
ウチは該当メールをフィルタで受信トレイスキップしてラベルつけて別管理してGmail上では基本確認しないようにしてます。

といった形でたまたま現状利用してるのがチャットワークだったのでその例を挙げましたが、
GAS使って旨い事すればslack投下だろうが、スプシに記載とか何とでもできるとは思いますがその辺は割愛。

1
0
2

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
1
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?