[要約] RFC 6609は、Sieveメールフィルタリングの拡張機能である"Include Extension"についての仕様を定めています。この拡張機能の目的は、Sieveスクリプト内で他のスクリプトをインクルードすることにより、再利用性と保守性を向上させることです。

Internet Engineering Task Force (IETF)                          C. Daboo
Request for Comments: 6609                                   Apple, Inc.
Category: Standards Track                                       A. Stone
ISSN: 2070-1721                                              Serendipity
                                                                May 2012
        

Sieve Email Filtering: Include Extension

Sieveメールフィルタリング:拡張子を含める

Abstract

概要

The Sieve Email Filtering "include" extension permits users to include one Sieve script inside another. This can make managing large scripts or multiple sets of scripts much easier, and allows a site and its users to build up libraries of scripts. Users are able to include their own personal scripts or site-wide scripts.

Sieve Email Filteringの「include」拡張により、ユーザーは1つのSieveスクリプトを別のSieveスクリプトに含めることができます。これにより、大規模なスクリプトまたは複数のスクリプトセットの管理がはるかに簡単になり、サイトとそのユーザーがスクリプトのライブラリを構築できるようになります。ユーザーは、独自の個人用スクリプトまたはサイト全体のスクリプトを含めることができます。

Status of This Memo

本文書の状態

This is an Internet Standards Track document.

これはInternet Standards Trackドキュメントです。

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.

このドキュメントは、IETF(Internet Engineering Task Force)の製品です。これは、IETFコミュニティのコンセンサスを表しています。公開レビューを受け、インターネットエンジニアリングステアリンググループ(IESG)による公開が承認されました。インターネット標準の詳細については、RFC 5741のセクション2をご覧ください。

Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc6609.

このドキュメントの現在のステータス、エラータ、およびフィードバックの提供方法に関する情報は、http://www.rfc-editor.org/info/rfc6609で入手できます。

Copyright Notice

著作権表示

Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved.

Copyright(c)2012 IETF Trustおよびドキュメントの作成者として特定された人物。全著作権所有。

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

この文書は、BCP 78およびこの文書の発行日に有効なIETF文書に関するIETFトラストの法的規定(http://trustee.ietf.org/license-info)の対象となります。これらのドキュメントは、このドキュメントに関するあなたの権利と制限を説明しているため、注意深く確認してください。このドキュメントから抽出されたコードコンポーネントには、Trust Legal Provisionsのセクション4.eに記載されているSimplified BSD Licenseのテキストが含まれている必要があり、Simplified BSD Licenseに記載されているように保証なしで提供されます。

Table of Contents

目次

   1. Introduction and Overview .......................................2
   2. Conventions Used in This Document ...............................2
   3. Include Extension ...............................................3
      3.1. General Considerations .....................................3
      3.2. Control Structure "include" ................................4
      3.3. Control Structure "return" .................................7
      3.4. Interaction with the "variables" Extension .................8
           3.4.1. Control Structure "global" ..........................8
           3.4.2. Variables Namespace global .........................10
      3.5. Interaction with Other Extensions .........................11
   4. Security Considerations ........................................12
   5. IANA Considerations ............................................12
   6. References .....................................................13
      6.1. Normative References ......................................13
      6.2. Informative References ....................................13
   Appendix A. Acknowledgments .......................................14
        
1. Introduction and Overview
1. 紹介と概要

It's convenient to be able to break Sieve [RFC5228] scripts down into smaller components that can be reused in a variety of different circumstances. For example, users may want to have a default script and a special 'vacation' script, the latter being activated when the user goes on vacation. In that case, the default actions should continue to be run, but a vacation command should be executed first. One option is to edit the default script to add or remove the vacation command as needed. Another is to have a vacation script that simply has a vacation command and then includes the default script.

Sieve [RFC5228]スクリプトをさまざまな異なる状況で再利用できる小さなコンポーネントに分割できると便利です。たとえば、ユーザーはデフォルトのスクリプトと特別な「休暇」スクリプトを必要とする場合があり、後者は休暇中にアクティブになります。その場合、デフォルトのアクションは引き続き実行されますが、休暇コマンドが最初に実行されます。 1つのオプションは、デフォルトのスクリプトを編集して、必要に応じてVacationコマンドを追加または削除することです。もう1つは、単にVacationコマンドがあり、デフォルトのスクリプトが含まれているVacationスクリプトを作成することです。

This document defines the Sieve Email Filtering "include" extension, which permits users to include one Sieve script inside another.

このドキュメントでは、ユーザーが1つのSieveスクリプトを別のSieveスクリプトに含めることができるようにする、Sieveメールフィルタリングの "include"拡張を定義します。

2. Conventions Used in This Document
2. このドキュメントで使用される規則

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

このドキュメントのキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」は、 [RFC2119]で説明されているように解釈されます。

Conventions for notations are as in Sieve [RFC5228], Section 1.1.

表記法の表記法は、Sieve [RFC5228]、セクション1.1と同じです。

The following key phrases are used to describe scripts and script execution:

次のキーフレーズは、スクリプトとスクリプトの実行を説明するために使用されます。

script a valid Sieve script.

有効なSieveスクリプトを記述します。

script execution an instance of a Sieve interpreter invoked for a given message delivery, starting with the user's active script and continuing through any included scripts until the final disposition of the message (e.g., delivered, forwarded, discarded, rejected, etc.).

スクリプト実行特定のメッセージ配信のために呼び出されたSieveインタープリターのインスタンス。ユーザーのアクティブスクリプトから開始し、メッセージの最終的な処理(配信、転送、破棄、拒否など)まで含まれているすべてのスクリプトを続行します。

immediate script the individual Sieve script file being executed.

即時スクリプト実行中の個々のSieveスクリプトファイル。

including script the individual Sieve script file that had an include statement that included the immediate script.

includeスクリプト直接のスクリプトを含むincludeステートメントが含まれる個々のSieveスクリプトファイル。

3. Include Extension
3. 拡張子を含める
3.1. General Considerations
3.1. 一般的な考慮事項

Sieve implementations that implement the "include", "return", and "global" commands described below have an identifier of "include" for use with the capability mechanism. If any of the "include", "return", or "global" commands are used in a script, the "include" capability MUST be listed in the "require" statement in that script.

以下で説明する「include」、「return」、および「global」コマンドを実装するSieve実装には、機能メカニズムで使用するための「include」の識別子があります。 「include」、「return」、または「global」コマンドのいずれかがスクリプトで使用されている場合、「include」機能は、そのスクリプトの「require」ステートメントにリストされている必要があります。

Sieve implementations need to track the use of actions in included scripts so that implicit "keep" behavior can be properly determined based on whether any actions have executed in any script.

Sieveの実装では、含まれているスクリプトでのアクションの使用を追跡する必要があるため、スクリプトでアクションが実行されたかどうかに基づいて暗黙の「保持」動作を適切に決定できます。

Sieve implementations are allowed to limit the total number of nested included scripts, but MUST provide for a total of at least three levels of nested scripts including the top-level script. An error MUST be generated either when the script is uploaded to the Sieve repository, or when the script is executed, if any nesting limit is exceeded. If such an error is detected whilst processing a Sieve script, an implicit "keep" action MUST be executed to prevent loss of any messages.

Sieve実装は、ネストされたインクルードスクリプトの総数を制限できますが、最上位のスクリプトを含む、少なくとも3レベルのネストされたスクリプトの合計を提供する必要があります。スクリプトがSieveリポジトリにアップロードされたとき、またはスクリプトが実行されたときに、ネストの制限を超えた場合は、エラーを生成する必要があります。 Sieveスクリプトの処理中にこのようなエラーが検出された場合、メッセージの損失を防ぐために、暗黙の「保持」アクションを実行する必要があります。

Sieve implementations MUST NOT allow recursive script inclusion. Both direct recursion, where script A includes script A (itself), and indirect recursion, where script A includes script B which includes script A once again, are prohibited.

Sieve実装は、再帰的なスクリプトの包含を許可してはなりません。スクリプトAにスクリプトA(それ自体)が含まれる直接再帰と、スクリプトAにスクリプトAが再度含まれるスクリプトBが含まれる間接再帰は禁止されています。

Sieve implementations MUST generate an error at execution time if an included script is a recursive inclusion. Implementations MUST NOT generate errors for recursive includes at upload time, as this would force an upload ordering requirement upon script authors and generators.

インクルードされたスクリプトが再帰的にインクルードされる場合、Sieve実装は実行時にエラーを生成する必要があります。実装はアップロード時に再帰的インクルードのエラーを生成してはなりません。これは、スクリプトの作成者とジェネレーターにアップロードの順序付け要件を強制するためです。

Sieve implementations MUST generate an error at execution time if an included script does not exist, except when the ":optional" parameter is specified. Implementations MUST NOT generate errors for scripts missing at upload time, as this would force an upload ordering requirement upon script authors and generators.

":optional"パラメータが指定されている場合を除き、含まれているスクリプトが存在しない場合、Sieve実装は実行時にエラーを生成する必要があります。実装はアップロード時に欠落しているスクリプトのエラーを生成してはなりません。これは、スクリプトの作成者とジェネレーターにアップロードの順序付け要件を強制するためです。

If the Sieve "variables" extension [RFC5229] is present, an issue arises with the "scope" of variables defined in scripts that may include each other. For example, if a script defines the variable "${status}" with one particular meaning or usage, and another defines "${status}" with a different meaning, then if one script includes the other there is an issue as to which "${status}" is being referenced. To solve this problem, Sieve implementations MUST follow the scoping rules defined in Section 3.4 and support the "global" command defined there.

Sieveの「変数」拡張[RFC5229]が存在する場合、相互に含まれる可能性があるスクリプトで定義された変数の「スコープ」で問題が発生します。たとえば、スクリプトが特定の意味または使用法で変数「$ {status}」を定義し、別のスクリプトが別の意味で「$ {status}」を定義する場合、1つのスクリプトに他のスクリプトが含まれていると、次の問題があります。 「$ {status}」が参照されています。この問題を解決するために、Sieve実装はセクション3.4で定義されたスコープ規則に従い、そこで定義された「グローバル」コマンドをサポートする必要があります。

3.2. Control Structure "include"
3.2. 制御構造「含む」
      Usage:  include [LOCATION] [":once"] [":optional"] <value: string>
        
              LOCATION = ":personal" / ":global"
        

The "include" command takes an optional "location" parameter, an optional ":once" parameter, an optional ":optional" parameter, and a single string argument representing the name of the script to include for processing at that point. Implementations MUST restrict script names according to ManageSieve [RFC5804], Section 1.6. The script name argument MUST be a constant string as defined in [RFC5229], Section 3; implementations MUST NOT expand variables in the script name argument.

"include"コマンドは、オプションの "location"パラメーター、オプションの ":once"パラメーター、オプションの ":optional"パラメーター、およびその時点で処理するために含めるスクリプトの名前を表す単一の文字列引数を取ります。実装では、ManageSieve [RFC5804]、セクション1.6に従ってスクリプト名を制限する必要があります。スクリプト名の引数は、[RFC5229]のセクション3で定義されている定数文字列である必要があります。実装は、スクリプト名引数の変数を展開してはなりません(MUST NOT)。

The "location" parameter MUST default to ":personal" if not specified. The "location" parameter MUST NOT be specified more than once. The "location" has the following meanings:

指定されない場合、 "location"パラメーターはデフォルトで ":personal"に設定する必要があります。 "location"パラメータは複数回指定してはなりません(MUST NOT)。 「場所」には次の意味があります。

:personal Indicates that the named script is stored in the user's own personal (private) Sieve repository.

:personal指定されたスクリプトがユーザー自身の個人(プライベート)Sieveリポジトリに保存されていることを示します。

:global Indicates that the named script is stored in a site-wide Sieve repository, accessible to all users of the Sieve system.

:global指定されたスクリプトがサイト全体のSieveリポジトリに保存され、Sieveシステムのすべてのユーザーがアクセスできることを示します。

The ":once" parameter tells the interpreter only to include the named script if it has not already been included at any other point during script execution. If the script has already been included, processing continues immediately following the "include" command. Implementations MUST NOT generate an error if an "include :once" command names a script whose inclusion would be recursive; in this case, the script MUST be considered previously included, and therefore "include :once" will not include it again.

":once"パラメータは、スクリプトの実行中に他の時点で名前付きスクリプトがまだ含まれていない場合にのみ、名前付きスクリプトを含めるようにインタープリタに指示します。スクリプトが既に含まれている場合、「include」コマンドの直後に処理が続行されます。 "include:once"コマンドがインクルードが再帰的であるスクリプトを指定する場合、実装はエラーを生成してはなりません(MUST NOT)。この場合、スクリプトは以前にインクルードされたと見なされる必要があるため、「include:once」は再びインクルードしません。

Note: It is RECOMMENDED that script authors and generators use the ":once" parameter only when including a script that performs general duties such as declaring global variables and making sanity checks of the environment.

注:スクリプトの作成者とジェネレーターが ":once"パラメーターを使用するのは、グローバル変数の宣言や環境の正常性チェックなどの一般的な作業を実行するスクリプトを含める場合のみにすることをお勧めします。

The ":optional" parameter indicates that the script may be missing. Ordinarily, an implementation MUST generate an error during execution if an "include" command specifies a script that does not exist. When ":optional" is specified, implementations MUST NOT generate an error for a missing script, and MUST continue as if the "include" command had not been present.

「:optional」パラメータは、スクリプトがない可能性があることを示します。通常、「include」コマンドが存在しないスクリプトを指定している場合、実装は実行中にエラーを生成する必要があります。 ":optional"が指定されている場合、実装は不足しているスクリプトに対してエラーを生成してはならず(MUST NOT)、 "include"コマンドが存在しなかったかのように続行しなければなりません(MUST)。

The included script MUST be a valid Sieve script. Implementations MUST validate that each script has its own "require" statements for all optional capabilities used by that script. The scope of a "require" statement is the script in which it immediately appears, and neither inherits nor passes on capabilities to other scripts during the course of execution.

含まれるスクリプトは、有効なSieveスクリプトである必要があります。実装は、各スクリプトがそのスクリプトで使用されるすべてのオプション機能について独自の「require」ステートメントを持っていることを検証する必要があります。 「require」ステートメントのスコープは、それがすぐに現れるスクリプトであり、実行中に他のスクリプトに機能を継承したり、渡したりすることはありません。

A "stop" command in an included script MUST stop all script processing, including the processing of the scripts that include the immediate one. The "return" command (described below) stops processing of the immediate script only, and allows the scripts that include it to continue.

含まれているスクリプトの「停止」コマンドは、直接のスクリプトを含むスクリプトの処理を含め、すべてのスクリプト処理を停止する必要があります。 「return」コマンド(以下で説明)は、即時スクリプトの処理のみを停止し、それを含むスクリプトの続行を許可します。

The "include" command MAY appear anywhere in a script where a control structure is legal, and MAY be used within another control structure, e.g., an "if" block.

「include」コマンドは、制御構造が正当であるスクリプト内の任意の場所に表示される場合があり、別の制御構造、たとえば「if」ブロック内で使用される場合があります。

Examples:

例:

The user has four scripts stored in their personal repository:

ユーザーの4つのスクリプトが個人リポジトリに保存されています。

"default"

"デフォルト"

This is the default active script that includes several others.

これは、他のいくつかを含むデフォルトのアクティブスクリプトです。

require ["include"];

["include"]が必要です。

      include :personal "always_allow";
      include :global "spam_tests";
      include :personal "spam_tests";
      include :personal "mailing_lists";
        

Personal script "always_allow"

個人用スクリプト「always_allow」

This script special-cases some correspondent email addresses and makes sure any message containing those addresses is always kept.

このスクリプトは、対応する電子メールアドレスを特殊なケースで扱い、それらのアドレスを含むメッセージが常に保持されるようにします。

      if address :is "from" "boss@example.com"
      {
          keep;
      }
      elsif address :is "from" "ceo@example.com"
      {
          keep;
      }
        

Personal script "spam_tests" (uses "reject" [RFC5429])

個人用スクリプト「spam_tests」(「reject」を使用[RFC5429])

This script does some user-specific spam tests to catch spam messages not caught by the site-wide spam tests.

このスクリプトは、サイト全体のスパムテストで検出されなかったスパムメッセージを検出するために、ユーザー固有のスパムテストを実行します。

require ["reject"];

["reject"]が必要です。

      if header :contains "Subject" "XXXX"
      {
          reject "Subject XXXX is unacceptable.";
      }
      elsif address :is "from" "money@example.com"
      {
          reject "Mail from this sender is unwelcome.";
      }
        

Personal script "mailing_lists"

個人用スクリプト「mailing_lists」

This script looks for messages from different mailing lists and files each into a mailbox specific to the mailing list.

このスクリプトは、異なるメーリングリストからのメッセージを検索し、それぞれをメーリングリストに固有のメールボックスに格納します。

require ["fileinto"];

require ["fileinto"];

      if header :is "List-ID" "sieve.ietf.org"
      {
          fileinto "lists.sieve";
      }
      elsif header :is "List-ID" "ietf-imapext.imc.org"
      {
          fileinto "lists.imapext";
      }
        

There is one script stored in the global repository:

グローバルリポジトリには1つのスクリプトが格納されています。

Site script "spam_tests" (uses "reject" [RFC5429])

サイトスクリプト「spam_tests」(「reject」を使用[RFC5429])

This script does some site-wide spam tests that any user at the site can include in their own scripts at a suitable point. The script content is kept up to date by the site administrator.

このスクリプトは、サイトのすべてのユーザーが適切な時点で独自のスクリプトに含めることができるサイト全体のスパムテストを実行します。スクリプトの内容は、サイト管理者によって最新に保たれています。

require ["reject"];

["reject"]が必要です。

      if anyof (header :contains "Subject" "$$",
                header :contains "Subject" "Make money")
      {
          reject "No thank you.";
      }
        
3.3. Control Structure "return"
3.3. 制御構造「戻り」

Usage: return

使用法:戻る

The "return" command stops processing of the immediately included script only and returns processing control to the script that includes it. If used in the main script (i.e., not in an included script), it has the same effect as the "stop" command, including the appropriate "keep" action if no other actions have been executed up to that point.

「return」コマンドは、すぐに含まれるスクリプトの処理のみを停止し、処理制御をそれを含むスクリプトに戻します。メインスクリプトで使用する場合(つまり、インクルードスクリプトでは使用しない場合)、「stop」コマンドと同じ効果があります。その時点までに他のアクションが実行されていない場合は、適切な「keep」アクションが含まれます。

3.4. Interaction with the "variables" Extension
3.4. 「変数」拡張機能との相互作用

In order to avoid problems of variables in an included script "overwriting" those from the script that includes it, this specification requires that all variables defined in a script MUST be kept "private" to the immediate script by default -- that is, they are not "visible" to other scripts. This ensures that two script authors cannot inadvertently cause problems by choosing the same name for a variable.

含まれているスクリプトの変数の問題を回避するために、それを含むスクリプトの変数を「上書き」するため、この仕様では、スクリプトで定義されているすべての変数をデフォルトで直接スクリプトに対して「プライベート」に保つ必要があります。つまり、他のスクリプトからは見えません。これにより、2人のスクリプト作成者が変数に同じ名前を選択することにより、誤って問題を発生させることがなくなります。

However, sometimes there is a need to make a variable defined in one script available to others. This specification defines the new command "global" to declare that a variable is shared among scripts. Effectively, two namespaces are defined: one local to the immediate script, and another shared among all scripts. Implementations MUST allow a non-global variable to have the same name as a global variable but have no interaction between them.

ただし、1つのスクリプトで定義された変数を他のスクリプトで使用できるようにする必要がある場合があります。この仕様では、変数がスクリプト間で共有されることを宣言する新しいコマンド「グローバル」を定義しています。事実上、2つの名前空間が定義されています。1つは直接のスクリプトにローカルで、もう1つはすべてのスクリプトで共有されます。実装では、非グローバル変数がグローバル変数と同じ名前を持つことを許可する必要がありますが、それらの間の相互作用はありません。

3.4.1. Control Structure "global"
3.4.1. 制御構造「グローバル」
      Usage:  global <value: string-list>
        

The "global" command accepts a string list argument that defines one or more names of variables to be stored in the global variable space. Each name MUST be a constant string and conform to the syntax of variable-name as defined in the "variables" extension document [RFC5229], Section 3. Match variables cannot be specified, and namespace prefixes are not allowed. An invalid name MUST be detected as a syntax error.

「グローバル」コマンドは、グローバル変数スペースに格納される変数の1つ以上の名前を定義する文字列リスト引数を受け入れます。各名前は定数文字列である必要があり、「変数」拡張ドキュメント[RFC5229]のセクション3で定義されている変数名の構文に準拠する必要があります。一致変数は指定できず、名前空間の接頭辞は許可されません。無効な名前は構文エラーとして検出する必要があります。

The "global" command is only available when the script has both "include" and "variables" in its require line. If the "global" command appears when only "include" or only "variables" has been required, an error MUST be generated when the script is uploaded.

「global」コマンドは、スクリプトのrequire行に「include」と「variables」の両方がある場合にのみ使用できます。 「include」または「variables」のみが必要なときに「global」コマンドが表示される場合、スクリプトのアップロード時にエラーを生成する必要があります。

If a "global" command is given the name of a variable that has previously been defined in the immediate script with "set", an error MUST be generated either when the script is uploaded or at execution time.

「グローバル」コマンドに「set」を使用して直前のスクリプトで以前に定義されている変数の名前が指定されている場合、スクリプトのアップロード時または実行時にエラーを生成する必要があります。

If a "global" command lists a variable that has not been defined in the "global" namespace, the name of the variable is now marked as global, and any subsequent "set" command will set the value of the variable in global scope.

「グローバル」コマンドが「グローバル」名前空間で定義されていない変数をリストする場合、変数の名前はグローバルとしてマークされ、その後の「set」コマンドはグローバルスコープで変数の値を設定します。

A variable has global scope in all scripts that have declared it with the "global" command. If a script uses that variable name without declaring it global, the name specifies a separate, non-global variable within that script.

変数は、 "global"コマンドで宣言されたすべてのスクリプトでグローバルスコープを持っています。スクリプトがその変数名をグローバルに宣言せずに使用する場合、その名前はそのスクリプト内で別の非グローバル変数を指定します。

Interpretation of a string containing a variable marked as global, but without any value set, SHALL behave as any other access to an unknown variable, as specified in the "variables" extension document [RFC5229], Section 3 (i.e., evaluates to an empty string).

グローバルとしてマークされた変数を含む文字列の解釈は、値が設定されていない場合、「変数」拡張ドキュメント[RFC5229]のセクション3で指定されているように、不明な変数への他のアクセスとして動作する必要があります(つまり、空と評価されます)。ストリング)。

Example:

例:

The active script

アクティブなスクリプト

The included script may contain repetitive code that is effectively a subroutine that can be factored out. In this script, the test that matches last will leave its value in the test_mailbox variable, and the top-level script will file the message into that mailbox. If no tests matched, the message will be implicitly kept in the INBOX.

含まれているスクリプトには、実質的に除外できるサブルーチンである反復的なコードが含まれている場合があります。このスクリプトでは、最後に一致するテストはその値をtest_mailbox変数に残し、トップレベルのスクリプトはメッセージをそのメールボックスにファイルします。一致するテストがない場合、メッセージは暗黙的にINBOXに保持されます。

      require ["fileinto", "include", "variables", "relational"];
      global "test";
      global "test_mailbox";
        
      set "test" "$$";
      include "subject_tests";
        
      set "test" "Make money";
      include "subject_tests";
        
      if string :count "eq" "${test_mailbox}" "1"
      {
          fileinto "${test_mailbox}";
          stop;
      }
        

Personal script "subject_tests"

個人用スクリプト「subject_tests」

This script performs a number of tests against the message, sets the global test_mailbox variable with a folder to file the message into, and then falls back to the top-level script.

このスクリプトは、メッセージに対していくつかのテストを実行し、グローバルtest_mailbox変数にメッセージをファイルするフォルダーを設定してから、最上位のスクリプトにフォールバックします。

      require ["include", "variables"];
      global ["test", "test_mailbox"];
        
      if header :contains "Subject" "${test}"
      {
          set "test_mailbox" "spam-${test}";
      }
        
3.4.2. Variables Namespace global
3.4.2. 変数名前空間グローバル

In addition to the "global" command, this document defines the variables namespace "global", in accordance with the "variables" extension document [RFC5229], Section 3. The "global" namespace has no sub-namespaces (e.g., 'set "global.data.from" "me@example.com";' is not allowed). The variable-name part MUST be a valid identifier (e.g., 'set "global.12" "value";' is not valid because "12" is not a valid identifier).

「グローバル」コマンドに加えて、このドキュメントは、「変数」拡張ドキュメント[RFC5229]、セクション3に従って、変数の名前空間「グローバル」を定義します。「グローバル」名前空間にはサブ名前空間がありません(たとえば、「セット」 "global.data.from" "me@example.com"; 'は許可されていません)。変数名の部分は有効な識別子でなければなりません(たとえば、「set "global.12" "value";」は、「12」が有効な識別子ではないため無効です)。

Note that the "variables" extension document [RFC5229], Section 3 suggests that extensions should define a namespace that is the same as its capability string (in this case, "include" rather than "global"). Nevertheless, references to the "global" namespace without a prior require statement for the "include" extension MUST cause an error.

「変数」拡張ドキュメント[RFC5229]のセクション3では、拡張機能がその機能文字列と同じ名前空間(この場合は「グローバル」ではなく「インクルード」)を定義することを推奨していることに注意してください。それにもかかわらず、「include」拡張の事前のrequireステートメントなしで「グローバル」名前空間を参照すると、エラーが発生する必要があります。

Example:

例:

require ["variables", "include"];

require ["variables"、 "include"];

set "global.i_am_on_vacation" "1";

「global.i_am_on_vacation」を「1」に設定します。

Variables declared global and variables accessed via the "global" namespace MUST each be one and the same. In the following example script, we see the variable "i_am_on_vacation" used in a "global" command, and again with the "global" namespace. Consider these as two syntaxes with identical meaning.

グローバルとして宣言された変数と、「グローバル」名前空間を介してアクセスされる変数は、それぞれ1つで同じでなければなりません。次のスクリプト例では、「global」コマンドで使用されている変数「i_am_on_vacation」が、「global」名前空間でも使用されています。これらを、同じ意味を持つ2つの構文と見なしてください。

Example:

例:

      require ["variables", "include", "vacation"];
      global "i_am_on_vacation";
        

set "global.i_am_on_vacation" "1";

「global.i_am_on_vacation」を「1」に設定します。

      if string :is "${i_am_on_vacation}" "1"
      {
          vacation "It's true, I am on vacation.";
      }
        
3.5. Interaction with Other Extensions
3.5. 他の拡張機能との相互作用

When "include" is used with the "editheader" extension [RFC5293], any changes made to headers in a script MUST be propagated both to and from included scripts. By way of example, if a script deletes one header and adds another, then includes a second script, the included script MUST NOT see the removed header, and MUST see the added header. Likewise, if the included script adds or removes a header, upon returning to the including script, subsequent actions MUST see the added headers and MUST NOT see the removed headers.

「include」が「editheader」拡張機能[RFC5293]と共に使用される場合、スクリプトのヘッダーに加えられた変更は、含まれるスクリプトとの間で伝達される必要があります。例として、スクリプトが1つのヘッダーを削除して別のヘッダーを追加し、次に2番目のスクリプトを含める場合、含まれるスクリプトは削除されたヘッダーを表示してはならず、追加されたヘッダーを表示する必要があります。同様に、インクルードされたスクリプトがヘッダーを追加または削除する場合、インクルードするスクリプトに戻ると、後続のアクションは追加されたヘッダーを確認する必要があり、削除されたヘッダーを確認してはなりません(MUST NOT)。

When "include" is used with the MIME extension [RFC5703] "foreverypart" control structure, the included script MUST be presented with the current MIME part as though it were the entire message. A script SHALL NOT have any special control over the control structure it was included from. The "break" command in an included script is not valid on its own and may not terminate a "foreverypart" iteration in another script. The included script can use "return" to transfer control back to the including script. A global variable can be used to convey results to the including script. A "stop" in an included script, even within a "foreverypart" loop, still halts all script execution, per Section 3.2.

「include」がMIME拡張[RFC5703]の「foreverypart」制御構造とともに使用される場合、インクルードされたスクリプトは、まるでメッセージ全体であるかのように、現在のMIMEパートとともに提示されなければなりません(MUST)。スクリプトは、それが含まれていた制御構造を特別に制御するものであってはなりません。含まれているスクリプトの「break」コマンドは、それ自体では無効であり、別のスクリプトの「foreverpart」イテレーションを終了しない場合があります。インクルードされたスクリプトは、「return」を使用して、制御をインクルードしたスクリプトに戻すことができます。グローバル変数を使用して、結果をインクルードスクリプトに伝えることができます。含まれているスクリプトの「stop」は、「foreverypart」ループ内であっても、セクション3.2に従ってすべてのスクリプトの実行を停止します。

When "include" is used with the "reject" extension [RFC5429], calling "reject" or "ereject" at any time sets the reject action on the message, and continues script execution. Apropos of the MIME extension, if an included script sees only a portion of the message and calls a reject, it is the entire message and not the single MIME part that carries the rejection.

"include"が "reject"拡張[RFC5429]と共に使用されている場合、 "reject"または "ereject"を呼び出すと、いつでもメッセージに拒否アクションが設定され、スクリプトの実行が続行されます。 MIME拡張に該当します。含まれているスクリプトがメッセージの一部のみを参照して拒否を呼び出す場合、それはメッセージ全体であり、拒否を運ぶ単一のMIME部分ではありません。

4. Security Considerations
4. セキュリティに関する考慮事項

Sieve implementations MUST ensure adequate security for the global script repository to prevent unauthorized changes to global scripts. For example, a site policy might enable only certain users with administrative privileges to modify the global scripts. Sites are advised against allowing all users to have write access to the sites' global scripts.

Sieve実装は、グローバルスクリプトへの不正な変更を防ぐために、グローバルスクリプトリポジトリに適切なセキュリティを確保する必要があります。たとえば、サイトポリシーでは、管理者権限を持つ特定のユーザーのみがグローバルスクリプトを変更できるようにする場合があります。すべてのユーザーがサイトのグローバルスクリプトに書き込みアクセスできるようにしないことをお勧めします。

Sieve implementations MUST ensure that script names are checked for validity and proper permissions prior to inclusion, in order to prevent a malicious user from gaining access to files accessible to the mail server software that should not be accessible to the user.

Sieve実装は、悪意のあるユーザーが、ユーザーがアクセスできないはずのメールサーバーソフトウェアがアクセスできるファイルにアクセスできないようにするために、含める前にスクリプト名の有効性と適切な権限を確認する必要があります。

Sieve implementations MUST ensure that script names are safe for use with their storage system. An error MUST be generated either when the script is uploaded or at execution time for a script including a name that could be used as a vector to attack the storage system. By way of example, the following include commands should be considered hostile: 'include "./../..//etc/passwd"', 'include "foo$(`rm star`)"'.

Sieveの実装では、スクリプト名がストレージシステムで安全に使用できることを確認する必要があります。スクリプトがアップロードされるとき、またはストレージシステムを攻撃するベクトルとして使用される可能性がある名前を含むスクリプトの実行時にエラーが生成される必要があります。例として、次のincludeコマンドは敵対的であると見なされます: 'include "./../..//etc/passwd"'、 'include "foo $(` rm star`) "'。

Beyond these, the "include" extension does not raise any security considerations that are not discussed in the base Sieve [RFC5228] document and the "variables" extension document [RFC5229].

これらを超えて、「include」拡張は、ベースのSieve [RFC5228]ドキュメントおよび「variables」拡張ドキュメント[RFC5229]で説明されていないセキュリティ上の考慮事項を発生させません。

5. IANA Considerations
5. IANAに関する考慮事項

The following template specifies the IANA registration of the Sieve extension specified in this document:

次のテンプレートは、このドキュメントで指定されているSieve拡張のIANA登録を指定しています。

To: iana@iana.org Subject: Registration of new Sieve extension

宛先:iana@iana.org件名:新しいSieve拡張の登録

Capability name: include Description: adds the "include" command to execute other Sieve scripts, the "return" action from an included script, and the "global" command and "global" variables namespace to access variables shared among included scripts. RFC number: this RFC Contact address: the Sieve discussion list <sieve@ietf.org>

機能名:include説明:他のSieveスクリプトを実行するための「include」コマンド、含まれるスクリプトからの「return」アクション、および含まれるスクリプト間で共有される変数にアクセスするための「global」コマンドと「global」変数の名前空間を追加します。 RFC番号:このRFC連絡先アドレス:Sieveディスカッションリスト<sieve@ietf.org>

This information has been added to IANA's "Sieve Extensions" registry (http://www.iana.org).

この情報は、IANAの「Sieve Extensions」レジストリ(http://www.iana.org)に追加されました。

6. References
6. 参考文献
6.1. Normative References
6.1. 引用文献

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

[RFC2119] Bradner、S。、「要件レベルを示すためにRFCで使用するキーワード」、BCP 14、RFC 2119、1997年3月。

[RFC5228] Guenther, P., Ed., and T. Showalter, Ed., "Sieve: An Email Filtering Language", RFC 5228, January 2008.

[RFC5228] Guenther、P。、編、およびT. Showalter、編、「Sieve:An Email Filtering Language」、RFC 5228、2008年1月。

[RFC5229] Homme, K., "Sieve Email Filtering: Variables Extension", RFC 5229, January 2008.

[RFC5229] Homme、K。、「Sieve Email Filtering:Variables Extension」、RFC 5229、2008年1月。

[RFC5804] Melnikov, A., Ed., and T. Martin, "A Protocol for Remotely Managing Sieve Scripts", RFC 5804, July 2010.

[RFC5804] Melnikov、A.、Ed。、およびT. Martin、「A Protocol for Remotely Managing Sieve Scripts」、RFC 5804、2010年7月。

6.2. Informative References
6.2. 参考引用

[RFC5293] Degener, J. and P. Guenther, "Sieve Email Filtering: Editheader Extension", RFC 5293, August 2008.

[RFC5293] Degener、J。およびP. Guenther、「Sieve Email Filtering:Editheader Extension」、RFC 5293、2008年8月。

[RFC5429] Stone, A., Ed., "Sieve Email Filtering: Reject and Extended Reject Extensions", RFC 5429, March 2009.

[RFC5429] Stone、A.、Ed。、「Sieve Email Filtering:Reject and Extended Reject Extensions」、RFC 5429、2009年3月。

[RFC5703] Hansen, T. and C. Daboo, "Sieve Email Filtering: MIME Part Tests, Iteration, Extraction, Replacement, and Enclosure", RFC 5703, October 2009.

[RFC5703] Hansen、T.およびC. Daboo、「Sieve Email Filtering:MIME Part Tests、Iteration、Extraction、Replacement、and Enclosure」、RFC 5703、2009年10月。

Appendix A. Acknowledgments
付録A謝辞

Thanks to Stephan Bosch, Ned Freed, Arnt Gulbrandsen, Tony Hansen, Kjetil Torgrim Homme, Jeffrey Hutzelman, Barry Leiba, Alexey Melnikov, Ken Murchison, Marc Mutz, and Rob Siemborski, for comments and corrections.

コメントと訂正をしてくれたStephan Bosch、Ned Freed、Arnt Gulbrandsen、Tony Hansen、Kjetil Torgrim Homme、Jeffrey Hutzelman、Barry Leiba、Alexey Melnikov、Ken Murchison、Marc Mutz、Rob Siemborskiに感謝します。

Authors' Addresses

著者のアドレス

Cyrus Daboo Apple Inc. 1 Infinite Loop Cupertino, CA 95014 USA

Cyrus Daboo Apple Inc.1 Infinite Loop Cupertino、CA 95014 USA

   EMail: cyrus@daboo.name
   URI:   http://www.apple.com/
        

Aaron Stone Serendipity 1817 California St. #104 San Francisco, CA 94109 USA

Aaron Stone Serendipity 1817 California St.#104 San Francisco、CA 94109 USA

   EMail: aaron@serendipity.cx