zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

メモ:GASでAWSから来る請求書PDFをアカウント別に名前を付けて保存する

参考

https://korotoro.hatenablog.com/entry/2015/12/05/224731
例によって上記ほぼそのまんまです。エイリアスとかでAWSアカウント毎にメアドが違う場合にわかるように分離したかった。

■事前準備:

・添付ファイルをまとめておくフォルダ名(以下の例:AWS_Tax_Invoice)
・添付ファイルがついたメールの検索条件(以下の例:subject:("Amazon Web Services Tax Invoice Available") has:attachment newer_than:20d')
を以下のコードに反映する必要があるので、それぞれ用意します。

■使い方

1)集めたい添付ファイルのついたメール群を受信しているGmailアカウントにログインしておく
2)https://script.google.com/home で[+新しいプロジェクト]
3)hoge.gsに下記コードを修正のうえ張り付けて実行
4)Googleアカウント承認が走るので承認(初回のみ
5)実行→実行ログを見つめる。。。
6)時計のマークから月一回とか毎日定時とかの実行設定もできる


function labelpick(){
   var f = DriveApp.createFolder('AWS_Tax_Invoice');  //ここに作りたい'フォルダ名'を入れる
   var ID = f.getId(); 
   var folder = DriveApp.getFolderById(ID);
   var threads = GmailApp.search('subject:("Amazon Web Services Tax Invoice Available") has:attachment newer_than:20d'); //受信トレイの'検索条件'を入れる
    
    for (var x=0; x<threads.length; x++) {

      var messages = threads[x].getMessages();

        for (var y=0; y<messages.length; y++) { 
         var attachments = messages[y].getAttachments();
         var recipients  = messages[y].getTo() + '.pdf'; //宛先メアド+.pdfでファイル名を指定する
            for (var z=0; z<attachments.length; z++) {
              var file = attachments[z].setName(recipients);
              var nakami =DriveApp.createFile(file);          
              folder.addFile(nakami);
              DriveApp.getRootFolder().removeFile(nakami);
            }
        }  
    }  
}