web-dev-qa-db-ja.com

Thunderbirdのメッセージフィルターでフィルタールールを組み合わせて、より高度なフィルター基準を作成するにはどうすればよいですか?

Thunderbirdでは、特定のフィルタールールのセットに対して、次のすべてに一致または次のいずれかに一致のいずれかを選択できます。 [〜#〜] or [〜#〜][〜#〜] and [〜#〜]論理演算子を自由に組み合わせて、より複雑な基準を作成する方法はありません。 like((A AND B)OR(C AND D))ANDE。
上記を実現できるプラグインはありますか?

13
Piotr Dobrogost

私は一人から来るたくさんの異なる主題をフィルタリングする必要があったので、私の解決策はこれでした:

  1. 次のいずれかに一致するフィルターを追加し、必要なサブジェクトを追加しました。
  2. 実行するように設定したアクションは、優先度を最低に設定することです。
  3. 次に、次のすべてに一致する新しいフィルターを追加しました:優先度が最も低く、from contains(フィルターをかけたい電子メールアドレス)。
  4. 私が設定したアクションは、特定のフォルダーに移動することでした。

確認する必要があることの1つは、最初のファイラーがリストの上位にあるため、最初に実行されることです。これが最もエレガントなソリューションではないことはわかっていますが、ニーズに合わせて拡張することができます。

5
Angel Delgado

これを行うのに適した拡張機能が見つからないようですが、単一のフォルダーを検索する場合は、クイック検索ツールバーも同様に機能します。

たとえば、TommyとBillyからのすべてのメッセージの基準を作成したいが、件名にFwdが含まれているメッセージは作成したくない場合、およびフォワードを含むSandraからのメッセージを作成したい場合は、検索を設定します(クイック検索ツールバーを検索に設定して使用)式による):

((from:Tommy OR from:Billy)AND -subject:Fwd)OR(from:Sandra)

ただし、複数のフォルダーがある場合、これは不可能です。

J

3
JDB

FiltaQuilla、およびいくつかのjavascriptアクション/ルールを使用すると、実行可能です。ただし、これは、プロセスを簡素化するためにFiltaQuillaソースにいくつかの変更を加えた例です。

ここでの例では、フィルタリングの3つの段階を実行します。マーキング-電子メールのみを分類します。次に、変更-これは論理計算を実行し、電子メールの件名またはヘッダーを変更します。そして、アクション-実際のアクションを実行します。各段階では、通常はThunderbirdフィルターダイアログでフィルターを編集しますが、FiltaQuillaによってオプションが追加されます。ステージ1と2は、新しく追加された電子メールヘッダーフィールドに結果を保存し、ステージ2と3は、フィールドの結果を使用して、通常のアクションの前にいくつかのロジックを実行します。

手順:

FiltaQuillaをインストールします

多くの機能がThunderbird3.1でのみ機能しているようです。したがって、最初にTB 3.1にアップグレードします。次に、FiltaQuillaをインストールします。

FiltaQuilla設定タブで、「件名のサフィックス」と「Javascriptアクション」を有効にします。

FiltaQuillaソースを変更する

拡張ディレクトリの「[email protected]/content/filtaquilla.js」を次のように編集します。

// Suffix to subject
self.subjectSuffix =
{
  ...
  apply: function(aMsgHdrs, aActionValue, aListener, aType, aMsgWindow)
  {
    for (var i = 0; i < aMsgHdrs.length; i++)
    {
      var msgHdr = aMsgHdrs.queryElementAt(i, Ci.nsIMsgDBHdr);
      ////var appSubject = _mimeAppend(aActionValue, msgHdr.subject, false);
      ////msgHdr.subject = appSubject;
      var headerName = "mykeywords";
      var headerValue = msgHdr.getStringProperty(headerName);
      msgHdr.setStringProperty(headerName, headerValue + " " + aActionValue);
      headerValue = msgHdr.getStringProperty(headerName);
        // Cu.reportError("chg : " + headerName + " : " + headerValue);
    }
  },

このコードは、「Suffix to Subject」の元のアクションを変更して、「mykeywords」という名前の新しいヘッダーに接尾辞付きの文字列を追加します。この新しいヘッダーフィールドは、フィルタリングの最初の2段階の結果を文字列ワードの形式で保持するために使用されます。

このソースコードの変更は、通常、件名の接尾辞はあまり役に立たないため、「接尾辞」アクションを再利用することです。したがって、内部の内臓を再利用しても、FiltaQuillaの使いやすさに大きな影響はありません。これを行わない場合は、公式の機能リクエストをFiltaQuillaの作成者に投稿して、必要な機能を追加する必要があります。そうでない場合は、フィルター条件にJavasctipt条件としてもう少しJavascriptコードを記述する必要があります。

マーキング用のフィルタールールを作成する

例として、一連のルールを作成します。各ルールには「件名の接尾辞」という1つのアクションしかありませんが、接尾辞の付いた単語はそれぞれ、得られた結果を識別します。たとえば、「company-A」、「company-B」などの単語の接尾辞を付けて、送信元に応じて電子メールを分類します。これらの単語「company-A」、「company-B」などに注意してください。 。、は「mykeywords」ヘッダーフィールドに連結されます。

これらのルールをフィルタールールリストの先頭に配置します。

論理変更用のフィルタールールを作成する

フィルタルールのヘッダーフィールドのドロップボックスで、[カスタマイズ]を使用して「mykeywords」をリストに追加します。次に、フィルターダイアログの条件として「mykeywordscontainscompany-」を選択します。

アクションセクションで「Javascriptアクション」を選択します。次のようなコードを追加します。

for (let index = 0; index < msgHdrs.length; index++)
{
  let hdr = msgHdrs.queryElementAt(index, Ci.nsIMsgDBHdr);
  let s = hdr.getStringProperty("mykeywords");
  let v = s.split("company-"); /* result words are in v[] now */
  let r = ""; /* logic conversion result */
  let cnt = 0;
  if ( v != undefined && v.length != undefined && v.length > 0) {
    let lastVN = 0;
    for(var i=v.length -1; i>=0; i--) {
      let ss = v[i];
      if ( ss.length > 1 ) {
          ss = ss.substring(0);
          /* convert company A into VIP, B into NORMAL, C into IGNORE. 
           * Assume the marking section starts with A,B, then C thus 
           * C gets parsed first, then A and B. 
           */
          if (ss.search(/A/) == 0)  { ss = "V"; lastVN = 1; } /*VIP*/
          else if (ss.search(/B/) == 0 ) { ss = "N"; lastVN = 1; } /*NORMAL*/
          else if (ss.search(/C/) == 0   ) { ss = "IGNORE"; }
          /* prepend subject line */
          if ( cnt == 0 ) { r = ss + "] ";
          } else { if (lastVN == 0) r = ss + " " + r; else  r = ss + r;  }
          cnt ++;
      }
    } /* for(var i=v.length -1; */
    if ( cnt > 0 ) { r = "[" + r; }
  } /* if ( v != undefined && */
  hdr.subject = r + hdr.subject;
} /* for (let index = 0; */

この時点で、すべてのマーキング結果に「mykeywords」ヘッダーフィールドからスクリプトでアクセスできます。文字列を解析するだけで、解析後に任意のロジックを適用して、希望するロジック結果を得ることができます。たとえば、「A」と「B」の場合に適用したり、「mykeywords」に「result-AB」を追加したりできます。次の段階で、「mykeywords contains result-AB」をチェックして、「AとB」の実際の意味を確認します。 "。

上記の例は、件名の前に「[VN IGNORE]」を追加して、3社のどれが件名の電子メールに関与しているかを示すこともできることを示しています。

アクションのフィルタールールを作成する

次に、「mykeywords」に含まれる値に基づいてアクションルールを作成します。これは通常の設定になります。

ノート:

FiltaQuillaは、条件セクションでjavascriptをサポートしています。したがって、拡張ソースコードを変更したくない場合は、フィルターダイアログの条件セクションにもう少しコードを記述する必要があります。そのコードを使用すると、任意の論理計算も実行できます。

詳細については、FiltaQuillaサイトをご覧ください。

2
minghua

式の各副節にタグを使用できるかもしれません。 if((from:Tommy OR from:Billy)then tag with "TomAndBilly" tag。次に、not subject:FwdANDタグTomAndBillyを探してフィルタリングします。これは試していません。 TBが複数回フィルタリングされない場合は機能しません。メールを別のフォルダやアカウントにバウンスすることで、強制的に複数回送信することもできます(ただし、開始されます)。取得する本当に醜い)。

TB3ではより良いタグ付けが必要だと聞きましたが、UIでは明らかではないようです。

1
Sam Brightman