web-dev-qa-db-ja.com

n日以上前の特定のGmailメッセージを削除する自動ソリューション

N日より古い特定のGmailメッセージを削除する必要があります(検索文字列を使用してセット全体を取得できます)。私はこれがGmail内で直接可能ではないことを知っています(たとえば この質問 を参照)ので、私のアカウント(および一般的には同様のハウスキーピングタスク)でそのようなアクティビティを処理できるwebappを探しています。

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

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

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

0
Igor Romanov

Googleによると:

  • older_thannewer_thanolderおよびnewerに似ていますが、d、mを使用した相対的な日付を許可します、y、日、月、および年
    例:newer_than:2d
    意味:過去2日間に送信されたメッセージを検索します。

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

ソース

単純な検索ではなく、選択して削除してください。

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

before:2009/1/1

(あなたは何でも検索することができ、この答えの残りはまだ機能します)
2009年1月1日より前の受信トレイ内のすべてのメールを返します-

enter image description here

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

enter image description here

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

enter image description here

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

[Delete]ボタンをクリックすると、確認のメッセージが表示されます-

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

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

3
Bibhas

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

2
Elrond

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

それ以来、それは確実に持ち去られました。仕組みは次のとおりです。

一般的に特定のタグを持つメッセージを探し、そのタグを別のタグに置き換えてからアーカイブします。

具体的に、メッセージは受信ボックスフィルターでタグ付けされ、「期限切れ」になる方法を示します。以下の例では、これはそれらがどれだけ古いかに基づいており、ラベルは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ループがメッセージに 'Purge'タグがあるかどうかを確認することです。特定のスレッドのラベルは配列として返されるため、これは簡単ではありません。そのため、数行のコードを追加するその配列を確認する必要があります。私はいくつかの洗練された方法を見つけない限り。

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

1
ccoffman

https://github.com/omkar9999/GmailCleaner の最新の効率的なスクリプトを試してください。

スクリプトは、毎分実行するようにスケジュールされている場合、数分以内に数千の古いジャンクメールをクリーンアップし、Googleの日次クォータを超えません。

1
omkar marathe

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

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

0
ComputerLocus

このGoogleスクリプトを使用することもできます。利点は、ネストされたラベルも指定できることです。

Google Appsスクリプト。Gmailの電子メールを削除

実行するには、スクリプトのコピーを作成し、ラベルと「N」日の値を追加して、「実行」->「初期化」を実行し、次に「実行」->「インストール」を実行します。

0
arunskrish