GASで簡単!Gmailの添付ファイルを自動でドライブに保存する方法

あの、catmanさん…GASでGmailの添付ファイルをドライブに自動で保存する方法を教えてくれませんか?最近、手作業でやるのが大変で…
猫男
猫男
catman
catman
いいだろう。catmanがGASでGmailの添付ファイルドライブに保存するスクリプトを一緒に作っていこう。まずは基本からだ。

GASでGmailから添付ファイルを取得する

GASを使うとGmailの添付ファイルを簡単に取得できる。まずはメールから添付ファイルを得る方法を説明しよう。

GmailAppを使ってメールを取得

GmailAppクラスを使ってGmailのラベルやスレッドを取得することができる。


function getAttachments() {
  const threads = GmailApp.search('has:attachment');
  const messages = threads[0].getMessages();
  const attachments = messages[0].getAttachments();
  attachments.forEach(attachment => {
    Logger.log(attachment.getName());
  });
}

ここでは、GmailApp.search メソッドで添付ファイルのあるスレッドを取得している。

次に、スレッドからメッセージを、メッセージから添付ファイルを取得する流れだ。

GASで添付ファイルをGoogleドライブに保存する

次は取得した添付ファイルドライブに保存してみよう。

DriveAppを使ってファイルを保存

DriveAppクラスを使うと、Google ドライブにファイルを簡単に保存することができる。


function saveAttachmentsToDrive() {
  const threads = GmailApp.search('has:attachment');
  const messages = threads[0].getMessages();
  const attachments = messages[0].getAttachments();
  attachments.forEach(attachment => {
    const file = DriveApp.createFile(attachment);
    Logger.log('Saved ' + file.getName());
  });
}

DriveApp.createFile メソッドを使って、添付ファイルドライブに保存する。

保存時に各ファイルの名前をログに記録している。これで処理の状況が確認できる。

なるほど!Gmailの添付ファイルが自動でドライブに保存されるようになるんですね!
猫男
猫男
catman
catman
そうだ。これで手間を大幅に省けるようになるはずだ。次は少し応用編をやってみようか。

GASを活用して自動化の幅を広げよう

より高度な使い方として、特定のラベルや日付範囲でフィルタリングすることができる。

特定のラベルを持つメールから添付ファイルを保存


function saveLabeledAttachments() {
  const threads = GmailApp.search('label:important has:attachment');
  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(message => {
      const attachments = message.getAttachments();
      attachments.forEach(attachment => {
        const file = DriveApp.createFile(attachment);
        Logger.log('Saved ' + file.getName() + ' from ' + message.getSubject());
      });
    });
  });
}

特定のラベルに基づいてメールを検索する例だ。

取得した添付ファイルを、それぞれのメッセージの件名とともにログに残している。これで、どのメールからファイルが来たかわかる。

練習問題

先ほど説明したスクリプトを少し変えて、実際に送信者をフィルターするスクリプトを書いてみよう。

 

 

解答・解説


function saveAttachmentsFromSender() {
  const threads = GmailApp.search('from:example@example.com has:attachment');
  threads.forEach(thread => {
    const messages = thread.getMessages();
    messages.forEach(message => {
      const attachments = message.getAttachments();
      attachments.forEach(attachment => {
        const file = DriveApp.createFile(attachment);
        Logger.log('Saved ' + file.getName() + ' from ' + message.getSubject());
      });
    });
  });
}

このスクリプトは、特定の送信者から送られた添付ファイルドライブに保存するものだ。

GmailApp.search メソッドで ‘from:example@example.com has:attachment’ を指定し、送信者をフィルタリングする。

特定の送信者や条件に基づいて絞り込むことで、さらに自動化が精密に行えるようになる。