freks blog

about

Google Apps Script(GAS)でメールの添付ファイルを保存する

created: 2024-05-02
おすすめ記事: 出会ってよかったプログラマー本

毎月届くGoogle Workspaceのレシートがメールで送られてくるのですが、自動保存したくてGoogle Apps Script (GAS) を使ってみました

Google Driveから、GASのファイルを作ります

Google Drive

コードを書いていきます

function saveGoogleWorkspaceReceipt() {
  var searchQuery = 'from:[email protected] subject:Google Workspace: is:unread';  // unreadで未開封のもの
  var threads = GmailApp.search(searchQuery);
  var folderId = '<folder id>'; // https://drive.google.com/drive/folders/<folder id>
  var folder = DriveApp.getFolderById(folderId);

  var now = new Date();
  var year = now.getFullYear();
  var month = now.getMonth();
  if (month == 0) {
    month = 12;
    year--;
  }
  var filename = year.toString() + ('0' + month).slice(-2) + '.pdf'; // 先月の年月.pdf

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();

    for (var j = 0; j < messages.length; j++) {
      var attachments = messages[j].getAttachments();

      for (var k = 0; k < attachments.length; k++) {
        var blob = attachments[k].copyBlob();
        blob.setName(filename);
        var file = folder.createFile(blob);
        Logger.log('Created File: ' + file.getUrl());
      }
    }
  }
}

folderId は、ブラウザでGoogle Drive開いて、保存したいディレクトリを開いた時のURLの https://drive.google.com/drive/folders/<folder id><folder id> の部分です

流れは

  • メールアドレス [email protected] から来た、タイトルが Google Workspace: で未読のメールを探す
  • 毎月、先月の領収書が届くので、ファイル名を先月.pdfにする e.g. 202404.pdf
  • 指定したフォルダに保存する

あとは、GASのファイルの上部にある実行ボタンを押すと実行されます
正しく動くか手動で検証しましょう

手動で添付ファイルを保存して、ファイル名を変えて、指定のディレクトリに保存する、がボタン一つになりました

まとめ

毎月発生する作業なので、メールが届いたら、とか、毎月n日に実行するとか、もうちょっと楽にしたいですね

PR

詳解! Google Apps Script完全入門

詳解! Google Apps Script完全入門

このリンクは、アフィリエイトリンクです


Amazonのアソシエイトとして、blog.freks.jp は適格販売により収入を得ています。
This site is managed by freks