Gmail自動化: Gmailを自動化するための8つの便利なGoogleスクリプト

Automate Gmail Featured

Gmailは、それ自体ですでに非常に強力なメールクライアントです。フィルターを使うことで、受信トレイをより良く整理するための自動化を設定できます。しかし、パワーユーザーにとっては、フィルター機能はカスタムスクリプトを書くことと比べると不十分です。これらの8つのGoogleスクリプトは、さらにGmailを自動化することができます。

ヒント: もう1つの簡単なGmailのヒントとして、Gmailで自動転送を設定してみてください。

目次

    1. X日後にメールを自動削除
    1. 古いメールをすべてアーカイブ
    1. 重要なメールのSMS通知を受け取る
    1. あなたのメールの要約を作成
    1. メールをPDFとしてGoogle Driveに保存
    1. フォローアップメールを自動的に送信
    1. 件名キーワードに基づいてメールにラベルを付ける
    1. 特定のメールを複数の他のアドレスに転送
  • よくある質問

1. X日後にメールを自動削除

メールを読んだ後、役に立つかどうかに関係なく、そのまま受信トレイに残しておくことがよくあります。Googleがストレージに制限を設けたため、受信トレイを整理し、無駄なメールを取り除く必要があるかもしれません。以下のスクリプトは、「Delete Me」ラベルの付いたメールをチェックし、「X」日後に削除します。

  1. Googleアカウントにログインし、Googleスクリプトに移動して新しいプロジェクトを作成します。

Automate Gmail New Project

  1. 次のスクリプトを貼り付けて保存します。メールを受信トレイから削除するまでの日数を変更できます(変数 delayDays)。
function auto_delete_mails(){  
  var label = GmailApp.getUserLabelByName("Delete Me");  
if(label == null){  
    GmailApp.createLabel('Delete Me');  
}  
else{  
    var delayDays =2; // メッセージがゴミ箱に移動するまでの日数を入力     
    var maxDate =new Date();  
    maxDate.setDate(maxDate.getDate()-delayDays);  
    var threads = label.getThreads();  
for(var i =0; i < threads.length; i++){  
if(threads[i].getLastMessageDate()
  1. スクリプトをスケジュールで実行するための新しいトリガーを作成します。「左側のメニューにあるスケジュールアイコン -> トリガー -> トリガーを追加」を開きます。

Automate Gmail Triggers

  1. トリガーの設定をカスタマイズしてスクリプトを毎時実行するようにし、下にスクロールして「保存」をクリックします。

Automate Gmail Add Trigger

このスクリプトが実行されると、Gmailアカウントに「Delete Me」という新しいラベルが作成されます。このラベルを付けた無駄なメールは、スクリプトで指定された日数後に削除されます。

ヒント: メールが手に負えなくなっていると思ったら、SaneBoxのレビューを読んで、メール管理に役立つかどうか確認してください。

2. 古いメールをすべてアーカイブ

メールを削除するよりも安全なオプションを望む場合、以下の手順に従って古いメールをすべてアーカイブするスクリプトを作成できます。

  1. 次のコードで新しいGoogleスクリプトを作成します。
function archiveOldEmails(){  
  // 受信トレイ内のすべてのスレッドを取得  
  var threads = GmailApp.getInboxThreads();  
  
  // すべてのスレッドをループ  
for(var i =0; i < threads.length; i++){  
    var thread= threads[i];  
    var messages =thread.getMessages();  
  
    // スレッド内のすべてのメッセージをループ  
for(var j =0; j < messages.length; j++){  
      var message = messages[j];  
      var age =(new Date() - message.getDate()) / (1000 * 60 * 60 * 24);  
  
      // メッセージが30日より古ければアーカイブ  
if(age >30){  
thread.moveToArchive();  
}  
}  
}  
}
  1. スクリプトを毎日実行するためのトリガーを作成します(上記のように)。

指定した時間にスクリプトが実行され、受信トレイからアーカイブにメールが移動されます。これらのアーカイブされたメールは「すべてのメール」セクションでも利用可能です。

知っておくと良い: 受信トレイのメールに心配したくない場合、すぐにすべてをクリーンアップする方法を示すガイドがあります。このガイドは、すべての未読メールを既読としてマークして削除する方法を示します。

3. 重要なメールのSMS通知を受け取る

このGoogleスクリプトは、GoogleカレンダーのSMS機能を利用して重要なメールを受け取った際にSMSを送信します。

  1. 次のコードで新しいGoogleスクリプトを作成します。
function Gmail_send_sms(){  
  var label = GmailApp.getUserLabelByName("Send Text");  
if(label == null){  
    GmailApp.createLabel('Send Text');  
}  
else{  
    var threads = label.getThreads();  
    var now =new Date().getTime();  
for(var i =0; i < threads.length; i++){  
      var message = threads[i].getMessages()[0];  
      var from= message.getFrom();  
      var subject = message.getSubject();  
      CalendarApp.createEvent(subject,new Date(now+60000),new Date(now+60000),{location: from}).addSmsReminder(0);  
}  
    label.removeFromThreads(threads);  
}  
}
  1. 保存して、5分ごとに実行されるトリガーを作成します。
  2. 受信メールに自動的に「Send Text」ラベルを追加するGmailフィルターを作成します。Gmailで、検索オプションアイコンをクリックします。

Automate Gmail 2 Search Bar Options 1

  1. 受信トレイに重要なメールがあることを知らせるSMS通知のための条件をカスタマイズし、「フィルタを作成」をクリックします。

Automate Gmail 2 Search Filters

  1. 「ラベルを適用」をチェックし、「Send Text」を選んで「フィルタを作成」をクリックします。

Automate Gmail 2 Filter Send Text

スクリプトは5分ごとに受信トレイをスキャンします。「Send Text」ラベルの付いたメールを検出すると、Googleカレンダーにイベントを直ちに作成し、それがSMSを発信します。

ヒント: PCからSMSテキストメッセージを送信することもできます。

4. あなたのメールの要約を作成

すべてのメールを個別に読むのではなく、未読メールの要約を1通のメールとして作成するスクリプトを書くことができます。

  1. 次のコードで新しいGoogleスクリプトを作成します。
function createEmailSummary(){  
    // 未読メールを検索  
    var threads = GmailApp.search("is:unread");  
    var summary ="未読メール:\n";  
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];  
        summary += message.getFrom() + ": " + message.getSubject() + "\n";  
}  
}  
  
    // 件名に特定のキーワードが含まれているメールを検索  
    var threads = GmailApp.search("subject:(important meeting)");  
    summary +="\n件名に「important meeting」のキーワードが含まれているメール:\n";  
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];  
        summary += message.getFrom() + ": " + message.getSubject() + "\n";  
}  
}  
  
    // ここにさらに検索条件を追加できます  
    // ...  
  
    // 要約をメールとして送信  
    GmailApp.sendEmail("[email protected]","メール要約", summary);  
}
  1. [email protected]”をあなたのメールアドレスに変更します。
  2. スクリプトを毎日実行するための新しいトリガーを作成します。

Automate Gmail 4 Summary Example

スクリプトが実行されると、まだ読んでいない各タイプのメールが何通あるかを含むメールが送信されます。上記のスクリプトは良い出発点です - 「重要なミーティング」が件名に含まれるメールの数をカウントします。スクリプトを調整して、希望の検索基準をカウントすることができます。

5. メールをPDFとしてGoogle Driveに保存

Google Driveにアーカイブしたいメールがある場合、メールスレッド内のすべてのメッセージを1つのPDFファイルとしてGoogle Driveに保存するGoogleスクリプトを使用できます。以下のスクリプトは、すべてのメッセージを1つのPDFファイルとしてGoogle Driveに保存します。メールに添付ファイルがある場合、フォルダーが作成され、メッセージと添付ファイルがその中に保存されます。

  1. 次のコードで新しいGoogleスクリプトを作成します。
function save_Gmail_as_PDF(){  
  // 「Save As PDF」ラベルを取得または存在しない場合は作成  
  var label = GmailApp.getUserLabelByName("Save As PDF");    
  if(label == null){  
    label = GmailApp.createLabel('Save As PDF');  
  }  
  
  // ラベルのあるスレッドを取得  
  var threads = label.getThreads();    
  for (var i = 0; i < threads.length; i++) {      
    var messages = threads[i].getMessages();  
    var subject = messages[0].getSubject();  
    var bodys = [];  
    // スレッド内のすべてのメッセージをループ  
    for(var j = 0; j < messages.length; j++){    
      var message = messages[j];  
      bodys.push({  
        body: message.getPlainBody(),  
        from: message.getFrom(),  
      });  
      var attachments  = message.getAttachments();  
      var temp_attach = message.getAttachments();  
      if(temp_attach.length > 0){  
        for(var k =0; k < temp_attach.length; k++){  
          attachments.push(temp_attach[k]);  
        }  
      }  
    }  
    // メッセージ本文からGoogle Docsドキュメントを作成  
    var bodyDoc = DocumentApp.create(subject);  
    var bodyDocId = bodyDoc.getId();  
    var bodyDocFile = DriveApp.getFileById(bodyDocId);  
    var bodyDocBody = bodyDoc.getBody();  
    bodyDocBody.setText(bodys.map(obj => `From: ${obj.from}\n${obj.body}`).join('\n\n'));  
    bodyDoc.saveAndClose();  
  
    // Google DocsドキュメントをPDFに変換  
    var blob = bodyDocFile.getAs('application/pdf');  
    var pdfFile = DriveApp.createFile(blob);  
  
    // 添付ファイルがある場合  
    if(attachments.length > 0){  
      // メッセージの件名でDriveにフォルダーを作成  
      var folder = DriveApp.createFolder(subject);  
      for (var j = 0; j < attachments.length; j++) {  
        folder.createFile(attachments[j]);  
      }  
      // メッセージ本文のPDFファイルをそのフォルダーに追加  
      folder.createFile(pdfFile);  
    }  
    // Google DocsドキュメントをGoogle Driveから削除  
    DriveApp.getFileById(bodyDocId).setTrashed(true);  
    // スレッドからラベルを削除  
    label.removeFromThread(threads[i]);  
  }  
}
  1. 保存して、定期的に実行されるトリガーを設定します。

Automate Gmail 5 Saved Email Pdf

メールと添付ファイルをGoogle Driveに保存したい場合、単に「Save to PDF」というラベルを付けてください。各スレッドのメールの本文と送信者は古いものから順に表示されます。

知っておくと良い: Google Driveフォルダー内にどれだけのファイルがあるか不明な場合、このガイドではその確認方法を示します。

6. フォローアップメールを自動的に送信

メールに迅速に返答を得られないことがあります。この問題に対処するため、受取人に思い出させるフォローアップメールを送信できます。手動で各フォローアップを書くのではなく、スクリプトで自動的に送信することができます!

  1. 次のコードで新しいGoogleスクリプトを作成します。
function sendFollowupEmails(){  
  const startDate =new Date('2023-01-01');  
  
  const daysAgo =3;  
  var dateInPast =new Date();  
  dateInPast.setDate(dateInPast.getDate() - daysAgo);  
  
  var threads = GmailApp.search("is:sent before:" + dateInPast.toLocaleDateString() + " after:" + startDate.toLocaleDateString());  
  
for(var i =0; i < threads.length; i++){  
    var conversation = threads[i];  
  
    var foundResponse = false;  
    // 送信されたスレッドに1通以上のメールがある場合、フォローアップは不要  
    // すでにフォローアップしたか、返信があったからです。  
    if (conversation.getMessages().length > 1) {  
      foundResponse = true;  
    }  
  
    if (!foundResponse) {  
      var body = "こんにちは、前回のメールについてフォローアップしたいと思います。返信がなければ、興味がないと判断します。\n\nよろしくお願いします。\n[あなたの名前]";  
      conversation.replyAll(body);  
    }  
  }  
}
  1. スクリプト内でいくつかの設定をカスタマイズします:
  • startDate を現在の日付に近い時間に変更し、非常に古いスレッドを復活させないようにします。
  • daysAgo を変更して、フォローアップを送信する前にメールがどれだけ古いことを望むかを調整します。
  • [あなたの名前] を自分の名前に変更します。
  1. 保存して、毎週実行されるトリガーを設定します。

通常通りメールを送信し、スクリプトが自動的にフォローアップを処理します。

7. 件名キーワードに基づいてメールにラベルを付ける

メールが大量に届きますが、大部分を削除したくない場合、このスクリプトを使用して内容に基づいてラベルを付けて整理できます。

  1. 次のコードで新しいGoogleスクリプトを作成します。
function categorizeEmails(){  
  const emailsToGet =50;  
  var keywords ={  
"promo": "Promotions",  
"offer": "Promotions",  
"discount": "Promotions",  
"newsletter": "Newsletters",  
"action": "Todo",  
"required": "Todo",  
"shipped": "Orders",  
"delivered": "Orders",  
"receipt": "Orders",  
"invoice": "Orders"  
};  
  
  var threads = GmailApp.getInboxThreads(0, emailsToGet);  
  
for(var i =0; i < threads.length; i++){  
    var subject = threads[i].getFirstMessageSubject().toLowerCase();  
    var labels = GmailApp.getUserLabels();  
    var foundLabel = false;  
  
for(var keyword in keywords){  
if(subject.indexOf(keyword)!== -1){  
for(var j =0; j < labels.length; j++){  
if(labels[j].getName()=== keywords[keyword]){  
            threads[i].addLabel(labels[j]);  
            foundLabel = true;  
break;  
}  
}  
  
if(!foundLabel){  
          GmailApp.createLabel(keywords[keyword]);  
          threads[i].addLabel(GmailApp.getUserLabelByName(keywords[keyword]));  
}  
  
break;  
}  
}  
}  
}
  1. 影響を与えるメールの数を emailsToGet に、キーワードやラベルを keywords に合わせてカスタマイズできます。
  2. スクリプトを保存し、数分または数時間ごとに実行されるトリガーを設定します。

Automate Gmail 7 Emails Labeled By Subject

これにより、特定のラベルが付いたメールだけを表示することで、物事を把握しやすくなります。このスクリプトは、メールを単に削除するのを避けながら、大部分のメールにうまく機能します。

ヒント: Gmailに複数の署名を設定し、異なるオーディエンスに迅速に切り替えて使用することができます。

8. 特定のメールを複数の他のアドレスに転送

Gmailにはメールを別のメールアドレスに転送するための組み込み機能がありますが、特定の条件を満たしたメールを複数のメールアドレスに転送することは簡単ではありませんが、このスクリプトがそれを可能にします。

  1. 次のコードで新しいスクリプトを作成します。
function emailForwarding(){  
  const emailsToGet =50;  
  var criteria =[  
{  
      sender: "[email protected]",  
      subjectContains: "invoice",  
      forwardTo: ["[email protected]","[email protected]"]  
},  
{  
      sender: "[email protected]",  
      subjectContains: "urgent",  
      forwardTo: ["[email protected]","[email protected]"]  
}  
];  
  
  var label = GmailApp.getUserLabelByName("Forwarded");  
if(!label){  
    label = GmailApp.createLabel("Forwarded");  
}  
  
  var threads = GmailApp.search("is:inbox",0, emailsToGet);  
for(var i =0; i < threads.length; i++){  
    var messages = threads[i].getMessages();  
    console.log('thread id:', threads[i].getId());  
for(var j =0; j < messages.length; j++){  
  
      var message = messages[j];  
      var sender = message.getFrom();  
      var subject = message.getSubject().toLowerCase();  
      console.log('sender', sender,'subject', subject);  
for(var k =0; k < criteria.length; k++){  
        var rule = criteria[k];  
if(sender.indexOf(rule.sender)!= -1 && subject.indexOf(rule.subjectContains)!= -1){  
          var recipient = rule.forwardTo.join(",");  
          GmailApp.sendEmail(recipient, subject, message.getPlainBody(),{cc: sender});  
          threads[i].addLabel(label);  
}  
}  
}  
}  
}
  1. 必要に応じて条件をカスタマイズします。
  2. 数分または数時間ごとに実行されるトリガーを作成します。

あなたのGmailは、条件に合ったメールを自動的に2つ以上のメールアドレスへ転送します。

知っておくと良い: Gmailには、休暇中や不在時に自動でメールに返信する方法があります。

よくある質問

Google Apps Scriptは無料で使用できますか?

はい、Google Apps ScriptはGmailアカウントがあれば無料で使用できます。しかし、使用に関して多くの制限と制約があります。Googleはこれをいつでも変更できるかもしれませんが、執筆時点では、ドキュメント作成、メールの読み取り/書き込み、スプレッドシートの作成、トリガーの総実行時間など、約40の機能が含まれています。無料アカウントは非常に低い制限がありますが、Google Workspaceにははるかに高い制限があります。

Google Apps Scriptを使用して他のサービスからデータにアクセスできますか?

はい、Google Apps ScriptはGoogleサービスだけに限定されません。外部の非Googleサービスのデータにアクセスできます(例えば、ポケモンAPI)し、UrlFetchAppのような組み込みクラスを使用して次のようにアクセスできます:

var response = UrlFetchApp.fetch("https://pokeapi.co/api/v2/pokemon/ditto"); Logger.log(response.getContentText()); // Dittoのすべての詳細が記録されます

Google Apps Scriptでエラーが発生した場合はどうすればよいですか?

コードをデバッグしてエラーを特定し、修正できます。幸運なことに、Google Apps Scriptには、コードのトラブルシューティングに使用できる組み込みのデバッガーがあります。それを使用するには、スクリプトエディタを開き、デバッグをクリックします。そこから、ブレークポイントを設定し、コードを一歩ずつ進め、変数を検査して問題を特定できます。

画像のクレジット: Pexels。すべてのスクリーンショットはBrandon Liによるものです。