Google Apps Script GASでgmailに来たメールの添付ファイルをgoogleドライブに入れるスクリプト

GASでGmailに来た添付ファイル付きメールから添付ファイルをgoogleドライブにアップロード google

メールに添付されたファイルをとにかくgoogleドライブの指定したフォルダに放り込むスクリプトです。

例えば、複合機に来るfaxのメール転送機能を使って、PDF添付のメールが来たはいいけど、手動でどこかに保存・・・面倒ですよね。
しかも自分のPCにダウンロードしたら、他のPCでそのPDF使いたい時どうするの?ってことになります。

Gmailにfaxのメールを送り、GAS使って添付ファイルをgoogleドライブに保存するようにすれば、そのフォルダを共有された人は全員がアクセスできて便利ですね。

スポンサーリンク

Googleドライブにフォルダを作り、共有設定しておく

googleアカウントを共有してもいいんですが、それよりはGoogleドライブにフォルダを作り、そのフォルダにアクセスできるアカウントに共有したほうが良いです。

フォルダを作ったら、urlのフォルダID(folderID)部分をコピーしておく。下記のようなURLになっていると思う。

https://drive.google.com/drive/u/0/folders/folderID

GASを作る

Googleドライブで、新規 Google Apps Scriptを作成。

全体の流れ

自分は下記のような流れとしました。これを後述するトリガー設定でcronのように一定時間毎に実行するだけです。

  1. 受信ボックス内の未読メールリストを取得
  2. メール1通1通内容を見る
  3. 添付ファイルがあれば、添付ファイルを取得しgoogleドライブにアップ
  4. メールを既読にする
  5. もう必要ないのでメールをゴミ箱に移動

メールの検索方法はgmailの検索ボックスと同じ

gmail開くと、画面上に検索ボックスがあります。例えば左パネルの「迷惑メール」を選択すると、検索ボックスにはin:spam と出てきます。これと同じことを検索文字列として記述します。

var SEARCH_TERM = 'is:unread {in:inbox in:spam} {from:xxx@cfautog@tokyo from:yyy@gmail.com}';

上記だと下記のようになります。

  • is:unread 未読
  • {in:inbox in:spam} 受信箱と迷惑メールフォルダが対象(複数の場合は{}で囲みスペース}
  • {from:xxx@cfautog.tokyo from:yyy@gmail.com} xxx@cfautog@tokyo yyy@gmail.comから来たメールが対象

実装する

下記です。SEARCH_TERM内fromのメールアドレスなどを自分の環境に合わせましょう。

var DST_FOLDER = 'folderID';
var SEARCH_TERM = 'is:unread {in:inbox in:spam} {from:xxx@cfautog@tokyo from:yyy@gmail.com}';
var MSG_NUM = 10; //一度に検索するメッセージ数


function myFunction(){
  searchMaili(DST_FOLDER, SEARCH_TERM);
}

function searchMail(folderID, searchTerm)
{
  var myFolder = DriveApp.getFolderById(folderID);

  //メッセージ検索
  var threads = GmailApp.search(searchTerm, 0, MSG_NUM);
  var msglist = GmailApp.getMessagesForThreads(threads);

  for( var i=0; i<msglist.length; i++ ){
    for(var j=0; j<msglist[i].length; j++ ){
      if( msglist[i][j].isInTrash() ){
        continue; //対象メッセージがゴミ箱に入っていたら何もしない
      }

      //添付ファイル
      var attachments = msglist[i][j].getAttachments();
      for( var k=0 in attachments ){
        //指定したフォルダに添付ファイルをアップロード
        myFolder.createFile(attachments[k]);
      }
    }
  }

  //既読にする
  for( var i=0; i<threads.length; i++ ){
    GmailApp.markThreadRead(threads[i]);
  }

  //ゴミ箱に移動
  for( var i=0; i<msglist.length; i++ ){
    for( var j=0; j<msglist[i].length; j++ ){
      GmailApp.moveMessageToTrash(msglist[i][j]);
    }
  }
}

トリガーで定期的にGASを実行する

Gmailに適当な添付ファイル付きメールを送ってから、スクリプトを実行し成功すると、googleドライブフォルダに添付ファイルが入っていると思います。

あとは、トリガーを作成すれば一定周期でスクリプトが実行され、勝手にgoogleドライブに入っていきます。

添付ファイルをドライブに入れたらメール通知するなどはスクリプトに追記すれば良い

時々googleドライブに見に行くのも面倒なので、添付ファイルがアップロードされたらメール通知するようにGASに追加すれば良いと思います。

コメント

タイトルとURLをコピーしました