Gmailへの添付ファイルを自動でGoogleDriveに格納する方法

By | November 5, 2020

概要

Gmailへの添付ファイルを自動でGoogleDriveに格納する仕組みの作り方についてご紹介致します。

今回は例として、AdobeSignの証明済み契約書書類が自動でGoogleDriveに格納されるようにしていきたいと思います。

全体の流れのイメージ

  1. AdobeSign経由のメールが自動で「AdobeSign-未処理」フォルダに格納される
  2. GASで定期的に「AdobeSign-未処理」フォルダ内のメールにクエリをかけ、GoogleDrive転記処理を行った上で、処理が成功した場合に当該のメールが「AdobeSign-処理済」に移されるようにする。

開発の流れのイメージ

  1. 「AdobeSign」・「未処理」・「処理済」のラベルを作成する。(※未処理と処理済のラベルはAdobeSignにネストされる。)
  2. AdobeSignからの署名済み契約書書類が添付されたメールに自動で「AdobeSign-未処理」ラベルが付けられるよう、「メールの自動振り分け設定」を行う。
  3. 「AdobeSign-未処理」ラベルの付いたメールに関して、添付されている契約書書類をGoogleDriveに自動格納し、「AdobeSign-処理済」ラベルに付け変えるGASを記述する。

手順1(ラベル作成)

①「画面上部のラベルマーク>新規作成」の順にクリック

②ラベルを作成

手順2(メールの自動振り分け設定)

①「メール右上の設定アイコン>メールの自動振り分け設定」の順にクリック

②AdobeSign経由であることを一意に確定する情報を入力し、「フィルタを作成」をクリック

③アクションを指定して、再度「フィルタを作成」をクリック

手順3(GASの作成と記述)

①スプレッドシートを作成する

②ツールからスクリプトエディタを起動

③プロジェクト名をクリックして、プロジェクト名を変更

④下記のコードをコピペ(環境に合わせてコード編集してください。)

function AdobeSignFileUploader() {
  
  //変数準備          
  var target_folder = DriveApp.getFolderById('ここにフォルダidを入力!');
  var query_condition = "label:AdobeSign/未処理";
  
  //処理対象メール取得
  var threads = GmailApp.search(query_condition);
  var messages = GmailApp.getMessagesForThreads(threads);
  
  if(messages.length > 0){
    
    for(var i = 0; i < messages.length; i++) {
      for(var j = 0; j < messages[i].length; j++) {
        var attach = messages[i][j].getAttachments();
        for(var k = 0; k < attach.length; k++){
          target_folder.createFile(attach[k]);
        }
      }
      
      var label1 = GmailApp.getUserLabelByName('AdobeSign/未処理');
      var label2 = GmailApp.getUserLabelByName('AdobeSign/処理済');
      threads[i].removeLabel(label1);  
      threads[i].addLabel(label2);
    }
    
  }
  
}

※フォルダIDは下記画像のように、該当のフォルダを開いている画面のURL欄から取得できます。

⑤「時計アイコン」をクリック

⑥ロジックを走らせるタイムトリガを設定し、保存