Thunderbird では、特定のフィルタールールセットに対して、[次のすべてに一致]または[次のいずれかに一致]を選択できます。混合する方法はありませんORとAND論理演算子を自由に((AとB)OR(CとD))AND E.のような、より複雑な基準を作成するために、
任意のプラグイン上で実現することができますがありますか?
Thunderbird では、特定のフィルタールールセットに対して、[次のすべてに一致]または[次のいずれかに一致]を選択できます。混合する方法はありませんORとAND論理演算子を自由に((AとB)OR(CとD))AND E.のような、より複雑な基準を作成するために、
任意のプラグイン上で実現することができますがありますか?
回答:
私は一人の人から来たさまざまな主題をフィルタリングする必要があったので、私の解決策はこれでした:
確認する必要があることの1つは、最初のファイラーがリストの上位にあるため、最初に実行されることです。私はそれが最もエレガントなソリューションではないことを知っていますが、ニーズに合わせて拡張することができます。
これを行うのに適した拡張機能は見つかりませんが、単一のフォルダを検索しているだけの場合、クイック検索ツールバーも同様に機能します。
たとえば、トミーとビリーからのすべてのメッセージの基準を作成したいが、件名にFwdが含まれるメッセージ、および転送を含むサンドラからのメッセージの基準を作成したい場合は、検索を設定します(検索に設定されたクイック検索ツールバーを使用します)式による):
((from:Tommy OR from:Billy)AND -subject:Fwd)OR(from:Sandra)
ただし、複数のフォルダーでは、これは不可能です。
J
FiltaQuillaといくつかのjavascriptアクション/ルールを使用すると、実行できます。ただし、ここでは、プロセスを簡略化するためにFiltaQuillaソースにいくつかの変更を加えた例を示します。
この例では、フィルタリングの3つの段階を実行します。マーキング-メールのみを分類します。次に、変更-いくつかの論理計算を行い、電子メールの件名またはヘッダーを変更します。そして、アクション-実際のアクションを実行します。各ステージでは、通常、Thunderbirdのフィルターダイアログでフィルターを編集しますが、FiltaQuillaによるオプションが追加されます。ステージ1と2は結果を新しく追加された電子メールヘッダーフィールドに保存し、ステージ2と3はフィールドの結果を使用して通常のアクションの前に何らかのロジックを実行します。
Thunderbird 3.1でのみ機能する多くの機能があるようです。したがって、最初にTB 3.1にアップグレードしてください。次に、FiltaQuillaをインストールします。
FiltaQuilla設定タブで、「サブジェクトのサフィックス」と「Javascriptアクション」を有効にします。
拡張ディレクトリの「filtaquilla@mesquilla.com/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」をリストに追加します。次に、フィルターダイアログの条件に「mykeywords contains company-」を選択します。
アクションセクションで[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」の場合、「result-AB」を「mykeywords」などに追加します。次に、次の段階で「mykeywords contains result-AB」の実際の意味を確認します「。
上記の例では、「[VN IGNORE]」を件名の行の先頭に追加して、件名の電子メールに関係している3つの会社を示していることも示しています。
ここで、「mykeywords」に含まれる値に基づいてアクションルールを作成します。これは通常の設定になります。
FiltaQuillaは、条件セクションでJavaScriptをサポートしています。したがって、拡張機能のソースコードを変更したくない場合は、フィルターダイアログの条件セクションにもう少しコードを記述する必要があります。そのコードを使用すると、任意の論理計算も実行できます。
詳細については、FiltaQuillaサイトをご覧ください。