GASでGmailから特定の添付ファイルを取得!スプレッドシートと連携して効率化

Gmailに届く大量の添付ファイルの管理に困ったことはありませんか?

「特定の添付ファイルだけを取り出したい」と思っても、Gmailを一つ一つ確認しながらでは手間も時間もかかってしまいます。

そこで、この記事ではGoogle Apps Script(GAS)を使ってGmailから特定の添付ファイルを取得、Google ドライブにまとめて保存する方法をご紹介します。

併せてスプレッドシートと連携して情報を整理できます。

手間のかかる作業を自動化して、時間を有効に使えるようになります。

目次

完成イメージ

スプレッドシート

Google ドライブ

  • ファイル名、受信日時を絞って特定の添付ファイルのみを取得
  • Google ドライブにまとめて添付ファイルを保存
  • スプレッドシート内で取得したファイルを一覧にし、リンクを開いて確認可

今回の例では、Gmail内の特定の条件を満たす添付ファイルを自動で取得し、指定したGoogleドライブのフォルダに保存します。

スプレッドシートを使って管理し、メールの日付、送信元、件名、添付ファイルの名前が一覧として記録されます。

  • スプレッドシートの構成
    特定のフォルダIDかURLを入力し、取得したい添付ファイル名のキーワードや受信日を指定。
  • GAS実行の結果
    Gmailの指定条件に合致する添付ファイルが自動的に取得され、Googleドライブに保存。
    スプレッドシートには各メールの詳細を一覧で表示。

手順

STEP
Googleドライブにフォルダを作成

Googleドライブ内に、添付ファイルを保存するためのフォルダを作成します。
(例:「添付ファイル」フォルダ)

作成したフォルダを開き、URLもしくはURLの最後に表示されているフォルダID(一連の英数字の部分)をコピーします。

例: https://drive.google.com/drive/folders/1yBwYZFoDQyIb2_lX5-XXXXXXXXXXXX の「1yBwYZFoDQyIb2_lX5-XXXXXXXXXXXX」の部分。

STEP
スプレッドシートを準備

新規スプレッドシートを作成し、必要な項目を入力します。

Google ドライブの保存先、Gmailの抽出条件としてA1:A4に項目を入力します。

また、Gmailから取得した内容を整理するため、以下の項目を作成します。

項目の入力(例)

A列からD列の項目名
A6日付
B6メールアドレス
C6件名
D6添付ファイル

なお、今回の例ではシート名を「添付ファイル取得」としてGAS実行の際に参照します。

STEP
Gmail添付ファイルの取得条件を入力

Gmail内の特定の添付ファイルを取得するため、セルB1からB4に条件を入力します。

  • B1: 保存先フォルダのIDまたはURLを貼り付けます。
  • B2: 添付ファイル名に含まれるキーワードを入力。
  • B3: 取得対象メールの受信開始日を入力。
  • B4: 取得対象メールの受信終了日を入力。
STEP
GASエディタを開く

GASエディタを開く

画像に alt 属性が指定されていません。ファイル名: GAS.png

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
GASスクリプトの作成

function myFunction(){

}

が最初から入っているため、消去して以下のスクリプトを貼り付けます。

function getEmailAttachments() {
  // スプレッドシートとシートの設定
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('添付ファイル取得');
  
  // セルからフォルダIDまたはURLを取得し、フォルダIDを抽出
  var folderInput = sheet.getRange('B1').getValue();
  var folderId = folderInput.includes('https://') ? folderInput.match(/[-\w]{25,}/)[0] : folderInput;
  
  // 添付ファイルのキーワードと日付範囲を取得
  var fileKeyword = sheet.getRange('B2').getValue();  // 添付ファイルのキーワード
  var startDate = new Date(sheet.getRange('B3').getValue());  // 開始日
  var endDate = new Date(sheet.getRange('B4').getValue());    // 終了日
  
  // 終了日に1日追加して、その日の23:59までを検索対象にする
  endDate.setDate(endDate.getDate() + 1);
  
  // フォルダを取得
  var folder = DriveApp.getFolderById(folderId);
  
  // Gmailで検索クエリを作成
  var query = 'has:attachment after:' + Utilities.formatDate(startDate, Session.getScriptTimeZone(), 'yyyy/MM/dd') + 
              ' before:' + Utilities.formatDate(endDate, Session.getScriptTimeZone(), 'yyyy/MM/dd');
  
  // メールを取得
  var threads = GmailApp.search(query);
  var row = 7;  // 書き込み開始行(7行目から)
  
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var attachments = message.getAttachments();
      
      // 添付ファイルの処理
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        
        // 添付ファイル名にキーワードが含まれているか確認
        if (attachment.getName().indexOf(fileKeyword) !== -1) {
          // ファイルを保存
          var file = folder.createFile(attachment);
          
          // ファイルのリンクを取得
          var fileUrl = file.getUrl();
          
          // スプレッドシートに情報を記録
          sheet.getRange(row, 1).setValue(message.getDate());  // 日付
          sheet.getRange(row, 2).setValue(message.getFrom());  // メールアドレス
          sheet.getRange(row, 3).setValue(message.getSubject());  // 件名
          
          // D列にハイパーリンク付きのファイル名を設定
          sheet.getRange(row, 4).setFormula('=HYPERLINK("' + fileUrl + '", "' + file.getName() + '")');
          
          row++;
        }
      }
    }
  }
  
  // 処理完了メッセージ
  SpreadsheetApp.getUi().alert('添付ファイルの取得が完了しました');
}
スクリプトの説明
スプレッドシートとシートの設定
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('添付ファイル取得');
  • 今回の例では、スプレッドシートの「添付ファイル取得」というシートを指定し、GASのスクリプトでアクセスできるようにしています。
  • 必要に応じてシート名をご変更ください
フォルダIDまたはURLの取得
var folderInput = sheet.getRange('B1').getValue();
var folderId = folderInput.includes('https://') ? folderInput.match(/[-\w]{25,}/)[0] : folderInput;
  • B1セルにはGoogleドライブの保存先フォルダIDまたはURLを入力します。
  • URLが入力されている場合は正規表現でフォルダIDのみを抽出し、IDが直接入力されている場合はそのまま使用します。
添付ファイルのキーワードと日付範囲の取得
var fileKeyword = sheet.getRange('B2').getValue();  
var startDate = new Date(sheet.getRange('B3').getValue());  
var endDate = new Date(sheet.getRange('B4').getValue());    
  • B2セルから添付ファイル名に含まれるキーワードを取得します。
  • B3B4セルからメール受信の開始日と終了日を取得し、条件設定に使います。
終了日の設定
endDate.setDate(endDate.getDate() + 1);
  • 終了日に1日追加することで、終了日その日の23:59までを検索対象に含めます。
Gmailの検索クエリ作成
var query = 'has:attachment after:' + Utilities.formatDate(startDate, Session.getScriptTimeZone(), 'yyyy/MM/dd') + 
            ' before:' + Utilities.formatDate(endDate, Session.getScriptTimeZone(), 'yyyy/MM/dd');
  • 検索クエリqueryでは、「添付ファイルを含む」(has:attachment)、「開始日以降」(after:)、「終了日以前」(before:)という条件でGmailを検索する設定を行っています。
メールスレッドの取得
var threads = GmailApp.search(query);
  • 指定された検索条件に合致するスレッドを取得します。
メールメッセージの読み込み
for (var i = 0; i < threads.length; i++) {
  var messages = threads[i].getMessages();
  • 取得した各スレッド内のメッセージを読み込み、それぞれのメッセージを処理します。
添付ファイルの取得とキーワードの確認
for (var j = 0; j < messages.length; j++) {
  var message = messages[j];
  var attachments = message.getAttachments();
  for (var k = 0; k < attachments.length; k++) {
    var attachment = attachments[k];
    if (attachment.getName().indexOf(fileKeyword) !== -1) {
  • メッセージに含まれるすべての添付ファイルを取得し、そのファイル名に指定キーワードが含まれているかをチェックします。
添付ファイルの保存とリンク取得
var file = folder.createFile(attachment);
var fileUrl = file.getUrl();
  • キーワードに合致する添付ファイルをGoogleドライブに保存し、ファイルリンクを取得します。
スプレッドシートへの情報記録
sheet.getRange(row, 1).setValue(message.getDate());  
sheet.getRange(row, 2).setValue(message.getFrom());  
sheet.getRange(row, 3).setValue(message.getSubject());  
sheet.getRange(row, 4).setFormula('=HYPERLINK("' + fileUrl + '", "' + file.getName() + '")');
  • スプレッドシートのA列からD列にかけて、メール受信日時、送信元メールアドレス、件名、添付ファイル名とリンクを記録しています。
処理完了メッセージ
SpreadsheetApp.getUi().alert('添付ファイルの取得が完了しました');
  • スクリプトの処理が完了したら、ポップアップメッセージでユーザーに通知します。
STEP
スクリプトを保存

スクリプトを書いたら、名前をつけて保存します。

(例:「添付ファイル取得」)

STEP
スクリプトを実行

スクリプトを実行して、Gmailの添付ファイルを取得します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
Googleドライブ内に添付ファイルが保存される

スプレッドシートにメール情報とファイルリンクが記載され、指定フォルダに添付ファイルが保存されているか確認します。

スクリプト実行時の注意事項

GASは1回の実行で最大6分間の処理制限があります。

そのため、添付ファイルが多い場合には途中で処理が停止することがあります。

この制限については以下の方法で回避できます。

  • 日付やキーワードで検索結果を絞る
  • スクリプトを複数回実行して処理を分割

まとめ

今回の方法を使うことで、Gmailから必要な添付ファイルを取得して、スプレッドシートに管理しながらGoogleドライブに保存できます。

メールが多くなるほど手間がかかる作業をスクリプトを使って簡単に管理し、業務を効率化できます。

今回は、特定のファイルを対象期間を絞って取得する方法を紹介しました。

スクリプトを変更することで、以下のようなことも可能です。

  • Gmail内のすべての添付ファイルを取得する
  • Gmailを受信するたびにGoogle ドライブに保存する

目的に合わせて柔軟に対応できるのがGASのいいところですね。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次