Google Apps ScriptでDriveとGMail連携

2017-09-23(土)

参加者が撮った写真を自動でWebアルバムみたいに表示したい

という要望があったので,この手の連携となればIFTTTだろと調べてみたのだが,不特定多数からの受付が出来なさそうなので諦め。

GMailだとusername@gmail.comなアドレスについて,username+tag@gmail.comでも受信できる技があるので,それをトリガにGoogle Photosに保存できるだろと少し調査。 取り敢えずGoogle Driveなら直ぐ出来そうなので

特定のアドレスに送られたメールの添付ファイルをGoogle Driveのフォルダに自動で保存する(メールはゴミ箱へ)

という処理に。

  • e-mail: username+tag@gmail.com
  • Google Driveのフォルダ: Test

で,ググって出てきたスクリプトだと

var subject = Threads[i].getMessages()[0].getSubject();
if(subject=="Target"){

みたいな処理だったので,ならToでもできるだろって事で

var to = Threads[i].getMessages()[0].getSubject();
if(to=="username+tag@gmail.com"){

としたら,Outlookが

to:<username+tag@gmail.com>

で送ってくるのでFalseになる。調べたら部分一致はindexOfでイケるらしいので下記で成功。

function gmailFileUploader() {
  var Threads = GmailApp.getInboxThreads(); 
  for(var i=0;i<50;i++){ 
    var status = Threads[i].isUnread();
    if(status==true){ 
      var to = Threads[i].getMessages()[0].getTo();
      if(to.indexOf("username+tag@gmail.com")>-1){
        var attachments = Threads[i].getMessages()[0].getAttachments(); 
        var folders = DriveApp.getFoldersByName("Test");
        while(folders.hasNext()){
          var folder = folders.next();
          for(var j = 0;j<attachments.length;j++){
            var data = DriveApp.createFile(attachments[j]);
            folder.addFile(data); 
          }
        }
        Threads[i].moveToTrash(); //保存終了したらゴミ箱に移動
      }
    }
  }    
}

Category: Memo Tagged: Javascript