メールの添付ファイルをGoogleドライブにアップして、件名と本文に加えてファイルのリンクをChatworkに投稿するGoogleAppsScript


使用用途

WEBの問い合わせフォームなどに設定しているメールを、Chatworkで複数人対応したいときに使用したりすると良いでしょう。※Gmail使っていない場合は、Gmail上で他のアカウントを受信できるようにすれば良い。

プログラム概要

Gmailから未読+条件で検索
未読のメールを既読すると同時に
添付ファイルをGoogleドライブの特定のフォルダにセット
セットしたファイルのファイル名&URLリンクを取得する
メールの件名、本文の後にファイル名&URLリンクをメッセージとして特定のルームに投稿する。

設定箇所

コードに変数記入4か所

  • ChatworkAPIトークン(BOTアカウントのAPIトークン)
  • ChatworkのROOMID(BOTアカウントは事前にルームに加入させておく)
  • Chatwork宛先ID(TOを入れる人数を増やすときはコード変更)
  • Gmail検索条件(is:unread に続く条件) #### その他設定
  • GoogleドライブフォルダID(フォルダの権限を閲覧可にしておく)


コード.js
function main() {
  //チャットワークトークン・ID
  const CW_TOKEN = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";                    
  const CW_ROOM = "99999999";
  const CW_TO = "9999999";

  //Gmailから特定条件のスレッドを検索しメールを取り出す
  var strTerms = 'is:unread label:[email protected]';
  var myThreads = GmailApp.search(strTerms, 0, 50); //条件にマッチしたスレッドを取得
  var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する→二次元配列で格納

  //チャットワークAPI
  var client = ChatWorkClient.factory({
    token: CW_TOKEN
  });

  //各スレッド×メール
  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 filelist = ""
        var myFolder = DriveApp.getFolderById("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); //フォルダを取得
        var attachments = msg.getAttachments(); //添付ファイルを取得
        for(var k in attachments){
          var file = myFolder.createFile(attachments[k]); //ドライブに添付ファイルを保存
          filelist = filelist + "\n" + attachments[k].getName() + "\n" + file.getUrl()
        }

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

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