はじめに
※本記事は、GAS(Google Apps Script)やバッチファイルを使って、バックオフィス周りの業務効率化、業務改善を実施している非エンジニアによる記事です。
Gmailで受信するメールの中には、PDFファイルが添付されているものがあります。これらのPDFファイルを手動でダウンロードしてGoogleドライブに保存するのは。量が多くなればなるほど、かなり手間がかかります。
この記事では、Google Apps Script (GAS) を活用して以下を自動化する方法を紹介します。
実践するスクリプトの概要
- 指定した送信元アドレスから受信したメールの中で、特定の文言を含む件名のメールを検索。
- 添付されているPDFファイルをGoogleドライブに保存。
- 保存したPDFのURLをスプレッドシートの指定タブに反映。
※私は、毎月電子契約で締結されるサービス解約書類(70~100件)をリンク化して、確認業務をスムーズに行うことが出来ています。(もちろん、電子契約サービスの管理画面から確認することもできますが、仕様上1件1件確認するために少々手間がかかっていました。)
コードの全体像
以下は今回のタスクを実現するGASのスクリプトです。
※下記のGoogleドライブのフォルダIDと取得したいPDFの送信元のアドレスは、ご自身で適切なものを記載ください。
const FOLDERID = 'GoogleドライブのフォルダIDを反映'; // フォルダIDを記載
const query = title + ' has:attachment from:取得したいPDFの送信元のアドレス'; // Gmail検索クエリ
コード
function getPdfFromGmail() {
// スプレッドシートを取得
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheetname = 'PDF取得';
const sheet = spreadsheet.getSheetByName(sheetname);
console.log(sheetname);
// C列の最終行を取得
const lastRow = sheet.getRange(sheet.getMaxRows(), 3).getNextDataCell(SpreadsheetApp.Direction.UP).getRow(); // C列の最終列を取得
console.log(lastRow);
// 保存先のドライブフォルダを指定
const FOLDERID = 'GoogleドライブのフォルダIDを反映'; // フォルダIDを記載
const folder = DriveApp.getFolderById(FOLDERID); // 指定のフォルダを取得
// スプレッドシートのD列を上から最終行まで処理
for (let row = 3; row <= lastRow; row++) {
const title = sheet.getRange(row, 4).getValue(); // メールタイトルを取得
console.log(title);
const query = title + ' has:attachment from:取得したいPDFの送信元のアドレス'; // Gmail検索クエリ
console.log(query);
const threads = GmailApp.search(query); // 条件に一致するスレッドを取得
const messages = GmailApp.getMessagesForThreads(threads); // スレッドのメッセージを取得
// メッセージから添付ファイルを取得してフォルダに保存
for (const thread of messages) {
for (const message of thread) {
const attachments = message.getAttachments();
for (const attachment of attachments) {
console.log(attachment.getName());
const file = folder.createFile(attachment); // ドライブに添付ファイルを保存
const fileUrl = file.getUrl(); // ファイルのURLを取得
console.log(fileUrl);
const lastcol = sheet.getRange(row, sheet.getMaxColumns()).getNextDataCell(SpreadsheetApp.Direction.PREVIOUS).getColumn(); // 最終列を取得
console.log(lastcol);
// 最終列が4未満なら4列目に、それ以降なら次の列にURLを反映
if (lastcol < 4) {
sheet.getRange(row, 4).setValue(fileUrl);
} else {
sheet.getRange(row, lastcol + 1).setValue(fileUrl);
}
}
}
}
}
}
スクリプトの機能解説
1. Gmailの検索クエリを使用
以下の条件でGmailを検索します。
- 件名にD列のタイトルが含まれている。
- 添付ファイルが存在する。
- 送信元が指定したメールアドレスである。
2. 添付ファイルをGoogleドライブに保存
取得した添付ファイルを、指定したGoogleドライブフォルダに保存します。
3. URLをスプレッドシートに反映
保存したファイルのURLを、「PDF取得」タブのD列以降に書き込みます。
実行手順
-
Googleスプレッドシートを作成
「PDF取得」という名前のシートを作成し、C列にPDF取得したいメールのタイトルを入力します。
※D列以降は、GASで反映するPDFリンクの列とします。
※添付のようなフォーマットにしてください。
-
Google Apps Scriptプロジェクトを作成
拡張機能
→Apps Script
をクリックし、GASプロジェクトを新規作成し、上記コードをコピー&ペーストしてください。
-
スクリプトを実行
「getPdfFromGmail」を実行すると、条件に一致するPDFファイルがGoogleドライブに保存され、スプレッドシートにURLが反映されます。
スプレッドシートのメニューバーからスクリプト実行できるようにしておくと便利です。
やり方はこちらから
おわりに
いかがでしたでしょうか。
このスクリプトを活用すれば、Gmailの添付PDFファイルを効率よく取得できます。特に、定型的な処理や、大量のファイル管理が必要な場面で非常に便利です。ぜひ、カスタマイズして業務に役立ててください!