n日以上経過した特定のGmailメッセージを削除する自動化されたソリューション


8

n日以上経過した特定のGmailメッセージを削除する必要があります(検索文字列を使用してすべてのメッセージを取得できます)。私はこれがGmail内で直接不可能であることを知っています(たとえば、この質問を参照してください)。そのため、私のアカウント(および通常、同様のハウスキーピングタスク)でそのようなアクティビティを処理できるWebアプリケーションを探しています。

メッセージが指定された期間に達したときにメッセージを既読としてアクティブにマークする自動化ソリューションが望ましいソリューションです。Gmailのフィルターと構文を使用してこれを実現する方法はありますか?役立つアプリ、スクリプトなどはありますか?


このアクションを実行するGreasemonkeyスクリプトを書くことが可能かもしれません。
アンダーソングリーン

これを達成することにも興味があります。従業員求む。
Randy6T9 2012

回答:


0
  1. この回答を書いている時点(2013年1月)では、Gmailにこれを行うための組み込み機能はありません。
  2. これらすべての古いニュースレターと通知で同じ問題が発生し、組み込みのフィルターの助けを借りて、これを正確に行うためのGoogleアプリスクリプトを作成しました。こちらをご覧ください:http : //2sdd.blogspot.ru/2012/11/how-to-clean-up-gmail-inbox-from-emails.html

スクリプトは非常にシンプルです。ご自分のニーズに合わせて自由にハッキングしてください。


ありがとうございます。また、基本的に問題を解決するスクリプトを提供します(ただし、間接的には、これは実際にGoogleで実装する必要があります)。「ベストアンサー」の更新:)
WoJ 2013年

6

Googleによると:

  • older_thannewer_than古いもの新しいものに似ていますが、日、月、年にd、m、yを使用した相対日付を許可します。
    例:newer_than:2d
    意味:過去2日以内に送信されたメッセージを検索します。

これにより、これらを削除するフィルターを作成でき、特定のラベルのメールのみを削除することもできます。

ソース


1
おかげで、これは私が探していたものではありません。特定の条件を満たすメールを検索できることを知っています。私がしたいのは、自分の側から手動で操作することなく、それらを処理する自動化された方法(その場合は削除)を用意することです。
WoJ 2013年

2
@WoJフィルターは、特定の条件を満たすメッセージを自動的に削除するために使用するフィルターです。older_than:条件があっても、受信トレイに入るときにメッセージがフィルターによってのみ処理され、その後、メッセージ指定された期間より古くなるとフィルターがトリガーされないという問題はありますか?
Nathan Craike 2013年

1
@ネイサンクレイク:正確に。私は着信メールを処理するたくさんのフィルターを持っていますが、あなたが言ったように、これは着信メール専用であり、einboxのものではありません。
WoJ 2013年

これは機能しません。Googleによると、「label:」、「in:」、「is:」、日付範囲(「before:」、「after:」など)、またはスター基準(「has:yellow-star」など)を含むフィルター検索は、着信メールと一致しないため、お勧めしません。
DxTx 2018年

3

なぜ単純な検索、選択、削除をしないのですか?

たとえば、2009年1月1日より前にすべてのメールを削除したい場合は、Gmailで-を検索します。

before:2009/1/1

(何でも検索でき、この回答の残りは引き続き機能します)
2009年1月1日より前に受信トレイ内のすべてのメールが返されます-

ここに画像の説明を入力してください

次に、このボックスをチェックして、現在のページのすべてのメールを選択します-

ここに画像の説明を入力してください

Googleはページ上のすべてのメールを選択、検索クエリに一致するすべてのメールを選択するかどうかも尋ねます-

ここに画像の説明を入力してください

をクリックするとSelect all conversations that match this search、2009年1月1日より前のすべてのメールが選択されます。これは、削除するすべてのメールです。

次に、Deleteボタンをクリックすると、確信があるかどうか尋ねられます-

このアクションは、この検索のすべての会話に影響します。続行してもよろしいですか?

を押すOkとメールが削除されます。


2
注意-会話がオンになっている場合、指定した日付より前に発生した会話の一部であれば、その日付以降のメッセージも削除されます。
mhoran_psprep

おかげで、これは私が達成したいものではありません。私は検索オプションについて知っています。私が探しているのは、「たとえば10日より前」のメッセージを照合する方法です(たとえば)。「5月1日より古い」ではありません(今日の場合)。典型的な使用法は、TVのリストのように、特定の時間だけセンを作成するメッセージを取り除くことです。これは、日付ベースではなく、相対的な時間測定である必要があります。
WoJ

フィルターを作成しますか?そうでない場合は、「10日以上経過」を「2012年1月5日より前」に変更するのは1ステップで済み、1秒もかかりません。
Bibhas

このアクションを自動的に実行するGreasemonkeyスクリプトの作成方法を知っていますか?
アンダーソングリーン

2

Googleに10,000通のメールがある場合、一度に8,000通を20通ずつ削除するのは楽しい方法ではありません。メールが大量にある場合の簡単なオプションは、Thunderbirdなどの無料のメールクライアントを入手して、X日より古いメールを削除するように設定することです。メールクライアントの制限よりもメールを長く保持する場合は、クライアントから削除されたときにサーバーから削除するように設定します。次に、メールをクライアントで時々チェックして、サーバーからメールを削除します。


1

このようなものがハッキングされています。私はおそらく誰かが書いた何かに基づいてそれをベースにしましたが、それはずっと前に覚えていません。

それ以来、それは確実に動かなくなってきました。仕組みは次のとおりです。

通常、特定のタグが付いたメッセージを探し、そのタグを別のタグに置き換えてからアーカイブします。

具体的には、メッセージは受信トレイフィルタでタグ付けされ、「期限切れ」になる方法を示します。以下の例では、これはそれらが何歳であるかに基づいており、ラベルはと呼ばれBulk/Expires/[Daily|Weekly|Monthly]ます。(注:これはネストされたタグですが、ネストする必要はありません。このように整理しておくだけです)。毎日いくつかのGoogle Appsスクリプトが実行され、これらのラベル内のスレッドが何らかの条件(通常は日付)に一致するかどうかをチェックします。次に、そのタグを別のタグ(Bulk/Expired下記)に置き換えてアーカイブします。メッセージを削除することもできます。

これは、1日以上経過したメッセージをクリーンアップするコード(追加のコメント付き)です。毎日午前4時にトリガーするように設定されています。

function cleanUpDaily() {
  // Enter # of days before messages are archived
  var delayDays = 1 
  // make an empty Date() object
  var maxDate = new Date(); 
  // Set that date object ('maxDate')to the current data minus 'delayDays'.
  // In this case it's a date 1 day before the time when this runs.
  maxDate.setDate(maxDate.getDate()-delayDays); 
  // this is the label that finds messages eligible for this filter
  var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Daily"); 
  // this is the new label so I know a message has already been "Expired"
  var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); 
  // Get the message threads which might need to be expired.
  var threads = currLabel.getThreads(); 
  // Iterate over those threads and check if they need to be expired
  for (var i = 0; i < threads.length; i++) { 
    // You can put whatever kinds of conditions in here,
    // but this is just going to check if they were recieved before
    // 'maxDate' which here is 1 day before runtime.
    if (threads[i].getLastMessageDate()<maxDate) 
      {
        // If they're old, archive them
        threads[i].moveToArchive(); 

        // Remove the old label, they won't need to be expired again 
        // This isn't required, but it will make it slow, and Google will
        // time-out things that take too long, in my experaince it will
        // become slow and start timing out if there are more than a few
        // dozen threads to process, YMMV.
        threads[i].removeLabel(currLabel);

        // Label the thread with a new label indicating it's gone through this 
        // process. Also not strictly necessary, but it's useful if you'd like
        // to do some more processing on them in the future.
        threads[i].addLabel(newLabel); 
      }
  }
}

これは、1週間または1か月で有効期限が切れるものに対してこれを行うためのコードです。これらの関数を毎週または毎月実行するようにトリガーを設定します。

function cleanUpWeekly() {
  var delayDays = 7 // Enter # of days before messages are moved to archive
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate()-delayDays);
  var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Weekly"); // this is the label that finds messages eligible for this filter
  var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
  var threads = currLabel.getThreads();
  for (var i = 0; i < threads.length; i++) {
    if (threads[i].getLastMessageDate()<maxDate)
      {
        threads[i].moveToArchive();
        threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
        threads[i].addLabel(newLabel);
      }
  }
}

function cleanUpMonthly() {
  var delayDays = 30 // Enter # of days before messages are moved to archive
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate()-delayDays);
  var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Monthly"); // this is the label that finds messages eligible for this filter
  var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
  var threads = currLabel.getThreads();
  for (var i = 0; i < threads.length; i++) {
    if (threads[i].getLastMessageDate()<maxDate)
      {
        threads[i].moveToArchive();
        threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
        threads[i].addLabel(newLabel);
      }
  }
}

現在、私はBulk/Expiredメッセージを受け取るものに取り組んでおり、それらにPurgeタグがある場合、それはそれらを永久に削除します。メールを削除する(クレイジー)ことはありませんが、アーカイブされたメーリングリストの多くは、検索結果を汚染する傾向があります。この煩わしさが私のデジタル買いだめの傾向を圧倒し始めました。唯一の変更は、forループがメッセージに「パージ」タグがあるかどうかを確認することです。特定のスレッドが持っているラベルが配列として返されるため、これは簡単ではありません。そのため、数行のコードを追加するその配列を確認する必要があります。なめらかな方法を見つけない限り。

主にこれを使用して、Google Inboxでニュースレターを管理します。「Bulk / Expires / Daily」タグのメッセージバンドルを設定しました。フィルターにより、今日のニュースレターのみが表示されます。そして、ある日読んだかどうかにかかわらず、最新のものがそこにあります。InboxをRSSリーダーにハッキングするようなものです。私は毎週または毎月発行される定期的なニュースレター/一括メール送信についても同じことをします。一般的に、彼らの年齢が関連性を削除したときに私はそれらを失効させます。



0

いいえ、そうではありません。あなたがリンクした質問についてアルエベレットが言及しているようなことをお勧めします。実行するさまざまなタスクにさまざまなリンクを設定できます。

数日より古いメールを自動的に削除する方法があればいいのですが、現時点では削除できません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.