![]() |
![]() |
![]() |
milter managerリファレンスマニュアル | ![]() |
---|---|---|---|---|
#define SMFI_VERSION #define SM_LM_VRS_MAJOR (version) #define SM_LM_VRS_MINOR (version) #define SM_LM_VRS_PLVL (version) #define MI_SUCCESS #define MI_FAILURE typedef SMFICTX; typedef SMFICTX_PTR; typedef smfiDesc_str; typedef smfiDesc_ptr; typedef sfsistat; #define bool #define true #define false sfsistat xxfi_connect (SMFICTX *context, char *host_name, _SOCK_ADDR *address); sfsistat xxfi_helo (SMFICTX *context, char *fqdn); sfsistat xxfi_envfrom (SMFICTX *context, char **arguments); sfsistat xxfi_envrcpt (SMFICTX *context, char **arguments); sfsistat xxfi_header (SMFICTX *context, char *name, char *value); sfsistat xxfi_eoh (SMFICTX *context); sfsistat xxfi_body (SMFICTX *context, unsigned char *data, size_t data_size); sfsistat xxfi_eom (SMFICTX *context); sfsistat xxfi_abort (SMFICTX *context); sfsistat xxfi_close (SMFICTX *context); sfsistat xxfi_unknown (SMFICTX *context, const char *command); sfsistat xxfi_data (SMFICTX *context); sfsistat xxfi_negotiate (SMFICTX *context, unsigned long actions, unsigned long steps, unsigned long unused0, unsigned long unused1, unsigned long *actions_output, unsigned long *steps_output, unsigned long *unused0_output, unsigned long *unused1_output); int smfi_opensocket (bool remove_socket); int smfi_register (struct smfiDesc description); int smfi_main (void); int smfi_setbacklog (int backlog); int smfi_setdbg (int level); int smfi_settimeout (int timeout); int smfi_setconn (char *connection_spec); int smfi_stop (void); int smfi_version (unsigned int *major, unsigned int *minor, unsigned int *patch_level); #define SMFIF_ADDHDRS #define SMFIF_CHGBODY #define SMFIF_MODBODY #define SMFIF_ADDRCPT #define SMFIF_DELRCPT #define SMFIF_CHGHDRS #define SMFIF_QUARANTINE #define SMFIF_CHGFROM #define SMFIF_ADDRCPT_PAR #define SMFIF_SETSYMLIST #define SMFIS_CONTINUE #define SMFIS_REJECT #define SMFIS_DISCARD #define SMFIS_ACCEPT #define SMFIS_TEMPFAIL #define SMFIS_NOREPLY #define SMFIS_SKIP #define SMFIS_ALL_OPTS #define SMFIM_CONNECT #define SMFIM_HELO #define SMFIM_ENVFROM #define SMFIM_ENVRCPT #define SMFIM_DATA #define SMFIM_EOM #define SMFIM_EOH #define SMFIP_NOCONNECT #define SMFIP_NOHELO #define SMFIP_NOMAIL #define SMFIP_NORCPT #define SMFIP_NOBODY #define SMFIP_NOHDRS #define SMFIP_NOEOH #define SMFIP_NR_HDR #define SMFIP_NOHREPL #define SMFIP_NOUNKNOWN #define SMFIP_NODATA #define SMFIP_SKIP #define SMFIP_RCPT_REJ #define SMFIP_NR_CONN #define SMFIP_NR_HELO #define SMFIP_NR_MAIL #define SMFIP_NR_RCPT #define SMFIP_NR_DATA #define SMFIP_NR_UNKN #define SMFIP_NR_EOH #define SMFIP_NR_BODY #define SMFIP_HDR_LEADSPC char* smfi_getsymval (SMFICTX *context, char *name); int smfi_setreply (SMFICTX *context, char *return_code, char *extended_code, char *message); int smfi_setmlreply (SMFICTX *context, const char *return_code, const char *extended_code, ...); int smfi_addheader (SMFICTX *context, char *name, char *value); int smfi_chgheader (SMFICTX *context, char *name, int index, char *value); int smfi_insheader (SMFICTX *context, int index, char *name, char *value); int smfi_chgfrom (SMFICTX *context, char *mail, char *arguments); int smfi_addrcpt (SMFICTX *context, char *recipient); int smfi_addrcpt_par (SMFICTX *context, char *recipient, char *arguments); int smfi_delrcpt (SMFICTX *context, char *recipient); int smfi_progress (SMFICTX *context); int smfi_replacebody (SMFICTX *context, unsigned char *new_body, int new_body_size); int smfi_quarantine (SMFICTX *context, char *reason); int smfi_setpriv (SMFICTX *context, void *data); void* smfi_getpriv (SMFICTX *context); int smfi_setsymlist (SMFICTX *context, int state, char *macros);
libmilter/mfapi.hはSendmailのlibmilter互換APIを提供します。Sendmailのlibmilterの代わりにこのライブラリを使用することができます。milter.orgのAPIドキュメントもみてください。
#define SM_LM_VRS_MAJOR(version) (((version) & 0x7f000000) >> 24)
version
からメジャーバージョン番号を取りだします。
|
バージョン番号。 |
#define SM_LM_VRS_MINOR(version) (((version) & 0x007fff00) >> 8)
version
からマイナーバージョン番号を取りだします。
|
バージョン番号。 |
#define SM_LM_VRS_PLVL(version) ((version) & 0x0000007f)
version
からパッチレベルを取りだします。
|
バージョン番号。 |
typedef struct smfi_str SMFICTX;
milterセッションの情報を持っています。SMFICTX
は各milterセッション毎に作成されます。SMFICTX
はlibmilter APIの中でもっとも重要なオブジェクトです。
typedef struct smfiDesc smfiDesc_str;
milterの情報を持っています。smfi_register()
でsmfiDesc_str
使います。
sfsistat xxfi_connect (SMFICTX *context, char *host_name, _SOCK_ADDR *address);
各milterセッションの最初に呼ばれるコールバック。
すべての利用可能な応答ステータスは以下の通りです。
現在の接続に対する処理を続行します。 |
|
現在の接続を拒否します。 |
|
これ以上処理を続けずに、現在の接続を受け入れます。 |
|
現在の接続を一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxのステータスコードになります。) |
|
MTAに返答しません。milterは |
milter.orgのxxfi_connectも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
SMTPクライアントのホスト名。 |
|
SMTPクライアントのアドレス。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_helo (SMFICTX *context, char *fqdn);
このコールバックはSMTPの"HELO"/"EHLO"コマンドのときに呼ばれます。
すべての利用可能な応答ステータスは以下の通りです。
現在の接続に対する処理を続行します。 |
|
現在の接続を拒否します。 |
|
これ以上処理を続けずに、現在の接続を受け入れます。 |
|
現在の接続を一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxのステータスコードになります。) |
|
MTAに返答しません。milterは |
milter.orgの xxfi_heloも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
SMTPの"HELO"/"EHLO"コマンドでのFQDN。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_envfrom (SMFICTX *context, char **arguments);
このコールバックはSMTPの"MAIL FROM"コマンドのときに呼ばれます。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在の差出人とメッセージを拒否します。新しい差出人が指定されるかもしれません。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
これ以上処理を続けずに、現在のメッセージを受け入れます。 |
|
現在の差出人とメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxのステータスコードになります。)新しい差出人が指定されるかもしれません。 |
|
MTAに返答しません。milterは |
milter.orgの xxfi_envfromも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
SMTPの"MAIL FROM"コマンドの引数。最初の要素は差出人のアドレスです。NULL 終端しています。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_envrcpt (SMFICTX *context, char **arguments);
このコールバックはSMTPの"RCPT TO"コマンドのときに呼ばれます。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在の宛先を拒否します。現在のメッセージの処理は続きます。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
現在の宛先を受け入れます。 |
|
現在の宛先を一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxのステータスコードになります。)現在のメッセージの処理は継続します。 |
|
MTAに返答しません。milterは |
milter.orgの xxfi_envrcptも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
SMTPの"RCPT TO"コマンドの引数。最初の要素は宛先です。NULL 終端しています。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_header (SMFICTX *context, char *name, char *value);
このコールバックは各ヘッダに対して呼ばれます。もし、smfiDesc
::xxfi_flagsにSMFIP_HDR_LEADSPC
フラグが設定されていれば、value
はヘッダ名と値を区切る":"の後ろにあるスペースも含みます。
例:
From: from <from@example.com> To: recipient <recipient@example.com> Subject:a subject
"From", " from <from@example.com>" "To", " recipient <recipient@example.com>" "Subject", "a subject"
"From", "from <from@example.com>" "To", "recipient <recipient@example.com>" "Subject", "a subject"
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在のメッセージを拒否します。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
これ以上処理を続けずに、現在のメッセージを受け入れます。 |
|
現在のメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxステータスコードになります。) |
|
MTAに返答しません。milterは |
milter.orgの xxfi_headerも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
ヘッダ名。 |
|
ヘッダ値。value は折り返し時に挿入された空白を含むかもしれません。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_eoh (SMFICTX *context);
このコールバックはすべてのヘッダが処理されたときに呼ばれます。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在のメッセージを拒否します。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
これ以上処理を続けずに、現在のメッセージを受け入れます。 |
|
現在のメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxステータスコードになります。) |
|
MTAに返答しません。milterは |
milter.orgの xxfi_eofも見てください。
|
現在のmilterセッションのコンテキスト。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_body (SMFICTX *context, unsigned char *data, size_t data_size);
このコールバックは本文のデータを受け取ったときに呼ばれます。このコールバックはxxfi_eoh()
とxxfi_eom()
の間に0回以上呼ばれます。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在のメッセージを拒否します。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
これ以上処理を続けずに、現在のメッセージを受け入れます。 |
|
現在のメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxステータスコードになります。) |
|
これ以上の本文の処理を省略します。 |
|
MTAに返答しません。milterは |
milter.orgの xxfi_bodyも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
本文の1かたまり。 |
|
data のサイズ。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_eom (SMFICTX *context);
このコールバックはすべてのxxfi_body()
呼び出しが終わった後に呼ばれます。すべてのメッセージ変更はこのコールバックの中でだけ行えます。変更はsmfi_addheader()
、smfi_chgfrom()
などです。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
これ以上処理を続けずに、現在のメッセージを受け入れます。 |
|
現在のメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxステータスコードになります。) |
milter.orgの xxfi_eomも見てください。
|
現在のmilterセッションのコンテキスト。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_abort (SMFICTX *context);
このコールバックは xxfi_envfrom()
からxxfi_eom()
の間のどこかのタイミングで呼び出される可能性があります。このコールバックはmilter内部でエラーが発生し、かつ、メッセージ処理が完了していないときだけ実行されます。例えば、milterがSMFIS_ACCEPT
、SMFIS_REJECT
、SMFIS_DISCARD
、SMFIS_TEMPFAIL
を返しているときはこのコールバックは呼ばれません。
milterがxxfi_envfrom()
からxxfi_eom()
の間にメッセージのために割り当てたリソースがある場合は、このコールバックの中で解放してください。しかし、接続用に割り当てられたリソースは解放しないで下さい。そのリソースはxxfi_close()
で解放してください。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
これ以上処理を続けずに、現在のメッセージを受け入れます。 |
|
現在のメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxステータスコードになります。) |
milter.orgの xxfi_abortも見てください。
|
現在のmilterセッションのコンテキスト。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_close (SMFICTX *context);
このコールバックは各milterセッションの最後に呼ばれます。milterがセッション中で割り当てたリソースはこのコールバックの中で解放してください。
すべての応答ステータスは無視されます。SMFIS_CONTINUE
を使って下さい。
milter.orgの xxfi_closeも見てください。
|
現在のmilterセッションのコンテキスト。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_unknown (SMFICTX *context, const char *command);
このコールバックは未知のSMTPコマンドまたは未実装のSMTPコマンドが送られてきた場合に呼ばれます。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージを拒否します。 |
|
現在のメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxステータスコードになります。) |
|
MTAに返答しません。milterは |
MTAは、未知のSMTPコマンドまたは未実装のSMTPコマンドは常に拒否することに中してください。
milter.orgの xxfi_unknownも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
未知のSMTPコマンド。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_data (SMFICTX *context);
このコールバックはSMTPの"DATA"コマンドのときに呼ばれます。
すべての利用可能な応答ステータスは以下の通りです。
現在のメッセージに対する処理を続けます。 |
|
現在のメッセージを拒否します。 |
|
現在のメッセージを受け入れて、だまって破棄します。 |
|
現在の宛先を受け入れます。 |
|
現在のメッセージを一時的な障害が発生したとして拒否します。(つまり、SMTPでは4xxステータスコードになります。) |
|
MTAに返答しません。milterは |
milter.orgの xxfi_dataも見てください。
|
現在のmilterセッションのコンテキスト。 |
返値 : |
応答ステータス。 |
sfsistat xxfi_negotiate (SMFICTX *context, unsigned long actions, unsigned long steps, unsigned long unused0, unsigned long unused1, unsigned long *actions_output, unsigned long *steps_output, unsigned long *unused0_output, unsigned long *unused1_output);
このコールバックはMTAからネゴシエーション要求があったときに呼ばれます。MTAから受け取ったactions
とsteps
を変更したい場合は、actions_output
とsteps_output
を設定して、SMFIS_CONTINUE
を返してください。もし、actions
とsteps
の両方を変更しない場合は、たんにSMFIS_ALL_OPTS
を返してください。
すべての利用可能な応答ステータスは以下の通りです。
すべての利用可能なアクションとステップを有効にします。 |
|
現在のセッションを拒否します。 |
|
|
milter.orgの xxfi_negotiateも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
MTAから受け取ったアクション。 |
|
MTAから提案されたmilterプロトコルの実行ステップ。 |
|
使われません。 |
|
使われません。 |
|
MTAに要求するアクション。 |
|
MTAに要求するmilterプロトコルの実行ステップ。 |
|
使われません。 |
|
使われません。 |
返値 : |
応答ステータス。 |
int smfi_opensocket (bool remove_socket);
MTAからの接続されるソケットを作成します。
通常は、smfi_opensocket()
を明示的に呼ぶ必要はありません。ソケットはsmfi_main()
の中で暗黙的に作られます。
失敗条件は以下の通りです。
smfi_register()
の呼び出しに成功していない。
smfi_setconn()
の呼び出しに成功していない。
接続指定がUNIXドメインソケットでremove_socket
が真のとき、smfi_opensocket()
が既存のUNIXドメインソケットの削除に失敗した場合。
smfi_opensocket()
が新しいソケットの作成に失敗した場合。
milter.orgの smfi_opensocketも見てください。
|
新しいソケットを作る前に、既存のUNIXドメインソケットを削除しようとするかどうか。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_register (struct smfiDesc description);
milterの実装をコールバックとして登録します。
失敗条件は以下の通りです。
互換性のないxxfi_version。
不正なxxfi_flagsの値。
milter.orgの smfi_registerも見てください。
|
milterの説明。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_main (void);
イベントループに入ります。milterはsmfi_main()
を呼ぶ前に、smfi_register()
、smfi_setconn()
などで初期化していなければいけません。
失敗条件は以下の通りです。
ソケットの作成に失敗したとき。
milter.orgの smfi_mainも見てください。
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_setbacklog (int backlog);
listen(2)で使われるmilterの接続キューの最大長を設定します。
失敗条件は以下の通りです。
backlog
<= 0.
milter.orgの smfi_setbacklogも見てください。
|
処理待ちの接続キューの最大長。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_setdbg (int level);
ログレベルを設定します。level
が0ならすべてのログメッセージが抑制されます。大きい値を指定すればするほど多くのログメッセージが出力されます。
milter.orgの smfi_setdbgも見てください。
|
ログレベル。 |
返値 : |
常にMI_SUCCESS 。 |
int smfi_settimeout (int timeout);
入出力のタイムアウト時間を秒で設定します。既定値は7210秒です。timeout
== 0は待たないことを意味します。"永遠に待つ"ではありません。
milter.orgの smfi_settimeoutも見てください。
|
タイムアウト値を秒で指定します。 |
返値 : |
常にMI_SUCCESS 。 |
int smfi_setconn (char *connection_spec);
接続指定を設定します。
connection_spec
の書式は以下のいずれかです。
"unix:/PATH/TO/SOCKET": UNIXドメインソケット。
"inet:PORT"、"inet:PORT@HOST_NAME"、"inet:PORT@IP_ADDRESS": IPv4。
"inet6:PORT"、"inet6:PORT@HOST_NAME"、"inet6:PORT@IP_ADDRESS": IPv6。
失敗条件は以下の通りです。
不正な形式。
connection_spec
がNULL
。
milter.orgの smfi_setconnも見てください。
|
MTAと通信するための接続指定。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_stop (void);
milterを中止します。これ以上の接続を受け付けませんが、処理中の接続は最後まで続けます。
milter.orgの smfi_stopも見てください。
返値 : |
常にMI_SUCCESS 。 |
int smfi_version (unsigned int *major, unsigned int *minor, unsigned int *patch_level);
libmilterのバージョンを取得します。バージョンはビルド時のlibmilterのバージョンではなくて、実行時に使用しているバージョンです。
milter.orgの smfi_versionも見てください。
|
メジャーバージョンを返すアドレス。 |
|
マイナーバージョンを返すアドレス。 |
|
パッチレベルを返すアドレス。 |
返値 : |
常にMI_SUCCESS 。 |
#define SMFIF_ADDHDRS 0x00000001L
milterはsmfi_addheader()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_CHGBODY 0x00000002L
milterはsmfi_chgbody()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_ADDRCPT 0x00000004L
milterはsmfi_addrcpt()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_DELRCPT 0x00000008L
milterはsmfi_delrcpt()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_CHGHDRS 0x00000010L
milterはsmfi_chgheader()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_QUARANTINE 0x00000020L
milterはsmfi_quarantine()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_CHGFROM 0x00000040L
milterはsmfi_chgfrom()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_ADDRCPT_PAR 0x00000080L
milterはsmfi_addrcpt_par()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIF_SETSYMLIST 0x00000100L
milterはsmfi_setsymlist()
を呼ぶかもしれません。
smfiDesc
とxxfi_negotiate()
とmilter.orgのsmfi_registerも見てください。
#define SMFIS_CONTINUE 0
現在の処理を継続します。
各コールバック(xxfi_connect()
、xxfi_helo()
など)とmilter.orgのコールバックの返値の説明も見てください。
#define SMFIS_REJECT 1
現在処理中のターゲットを拒否します。
各コールバック(xxfi_connect()
、xxfi_helo()
など)とmilter.orgのコールバックの返値の説明も見てください。
#define SMFIS_DISCARD 2
現在処理中のターゲットを受け入れて、だまって破棄します。
各コールバック(xxfi_envfrom()
、xxfi_envrcpt()
など)とmiler.orgのコールバックの返値の説明も見てください。
#define SMFIS_ACCEPT 3
現在処理中のターゲットを受け入れます。
各コールバック(xxfi_connect()
、xxfi_helo()
など)とmilter.orgのコールバックの返値の説明も見てください。
#define SMFIS_TEMPFAIL 4
現在のターゲットに対して、一時的な障害ステータスを返します。
各コールバック(xxfi_connect()
、xxfi_helo()
など)とmilter.orgのコールバックの返値の説明も見てください。
#define SMFIS_NOREPLY 7
MTAに返答しません。
各コールバック(xxfi_connect()
、xxfi_helo()
など)とmilter.orgのコールバックの返値の説明も見てください。
#define SMFIS_ALL_OPTS 10
MTAから受け取ったすべてのネゴシエーションオプションを使います。これはxxfi_negotiate()
の中でだけ使えます。
#define SMFIP_NOCONNECT 0x00000001L
MTAはxxfi_connect()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NOHELO 0x00000002L
MTAがxxfi_helo()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NOMAIL 0x00000004L
MTAがxxfi_mail()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NORCPT 0x00000008L
MTAがxxfi_rcpt()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NOHDRS 0x00000020L
MTAがxxfi_header()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NOEOH 0x00000040L
MTAがxxfi_eoh()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_HDR 0x00000080L
milterがxxfi_header()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NOUNKNOWN 0x00000100L
MTAがxxfi_unknown()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NODATA 0x00000200L
MTAがxxfi_data()
の情報を送信しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_SKIP 0x00000400L
MTAがxxfi_body()
でのSMFIS_SKIP
をサポートしていることを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_RCPT_REJ 0x00000800L
MTAは拒否した宛先も送信し、xxfi_envrcpt()
が呼び出されることを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_CONN 0x00001000L
milterがxxfi_connect()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_HELO 0x00002000L
milterがxxfi_helo()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_MAIL 0x00004000L
milterがxxfi_envfrom()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_RCPT 0x00008000L
milterがxxfi_envrcpt()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_DATA 0x00010000L
milterがxxfi_data()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_UNKN 0x00020000L
milterがxxfi_unknown()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_EOH 0x00040000L
milterがxxfi_eoh()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_NR_BODY 0x00080000L
milterがxxfi_body()
に返答しないことを示します。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
#define SMFIP_HDR_LEADSPC 0x00100000L
xxfi_header()
コールバックが':'の後のスペース付きでヘッダの値を受けとることを示します。例はxxfi_header()
を見てください。
このフラグはxxfi_negotiate()
のsteps_output
で取得・設定できます。
char* smfi_getsymval (SMFICTX *context, char *name);
現在のmilterセッションコンテキスト中でのname
というマクロ名の値を返します。smfi_getsymval()
はxxfi_XXXコールバックの中で使えます。(例えば、xxfi_connect()
、xxfi_helo()
など)
name
が"i"のように1文字でない場合は、"{if_name}"のようにかっこ("{"と"}")で囲みます。
milter.orgの smfi_getsymvalも見てください。Sendmailの既定のマクロもそのページに載っています。
|
現在のmilterセッションのコンテキスト。 |
|
マクロ名。 |
返値 : |
もしあればname というマクロ名の値、なければNULL 。 |
int smfi_setreply (SMFICTX *context, char *return_code, char *extended_code, char *message);
エラー応答コードを設定します。4xx return_code
はSMFIS_TEMPFAIL
のときに使います。5xx return_code
はSMFIS_REJECT
のときに使います。
失敗条件は以下の通りです。
return_code
が4xxでも5xxでもない。
extended_code
が4.x.xでも5.x.xでもない。
milter.orgの smfi_setreplyも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
3桁のSMTPエラー応答コード。(RFC 2821)4xxと5xxだけが使えます。 |
|
拡張応答コード(RFC 1893/2034)またはNULL 。4.x.xと5.x.xだけが使えます。 |
|
SMTP応答のテキスト部分またはNULL 。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_setmlreply (SMFICTX *context, const char *return_code, const char *extended_code, ...);
エラー応答コードを設定します。4xx return_code
はSMFIS_TEMPFAIL
のときに使います。5xx return_code
はSMFIS_REJECT
のときに使います。
失敗条件は以下の通りです。
return_code
が4xxでも5xxでもない。
extended_code
が4.x.xでも5.x.xでもない。
milter.orgの smfi_setmlreplyも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
3桁のSMTPエラー応答コード。(RFC 2821)4xxと5xxだけが使えます。 |
|
拡張応答コード(RFC 1893/2034)またはNULL 。4.x.xと5.x.xだけが使えます。 |
|
SMTP応答のテキスト部分の一行。最後にNULL を指定すること。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_addheader (SMFICTX *context, char *name, char *value);
現在のメッセージのヘッダリストにヘッダを追加します。smfi_addheader()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
name
がNULL
。
value
がNULL
。
xxfi_eom()
以外のところで呼ばれた。
SMFIF_ADDHDRS
フラグがsmfi_register()
の中でも、xxfi_negotiate()
でも指定されていない。
ネットワークエラー発生。
milter.orgの smfi_addheaderも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
ヘッダ名。 |
|
ヘッダ値。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_chgheader (SMFICTX *context, char *name, int index, char *value);
name
という名前のヘッダのうち、index
番目にあるヘッダを変更します。value
がNULL
ならそのヘッダは削除されます。smfi_chgheader()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
name
がNULL
。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_CHGHDRS
フラグが設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_chgheaderも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
ヘッダ名。 |
|
名前がname のすべてのヘッダの中の位置。(1ベース) |
|
ヘッダ値。ターゲットのヘッダを削除する場合はNULL を指定してください。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_insheader (SMFICTX *context, int index, char *name, char *value);
ヘッダのindex
番目にヘッダを挿入します。smfi_insheader()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
name
がNULL
。
value
がNULL
。FIXME: 未実装。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_ADDHDRS
フラグが設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_insheaderも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
挿入されるヘッダの位置。0は先頭に追加するという意味になります。 |
|
ヘッダ名。 |
|
ヘッダ値。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_chgfrom (SMFICTX *context, char *mail, char *arguments);
送信者のアドレスを変更します。smfi_chgfrom()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
mail
がNULL
。FIXME: 未実装。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_CHGFROM
フラグが設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_chgfromも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
新しい送信者のアドレス。 |
|
ESMTPの追加の引数。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_addrcpt (SMFICTX *context, char *recipient);
宛先アドレスを追加します。smfi_addrcpt()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
recipient
がNULL
。FIXME: 未実装。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_ADDRCPT
フラグが設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_addrcptも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
新しい宛先アドレス。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_addrcpt_par (SMFICTX *context, char *recipient, char *arguments);
追加のESMTP引数付きで宛先アドレスを追加します。smfi_addrcpt_par()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
recipient
がNULL
。FIXME: 未実装。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_ADDRCPT_PAR
フラグが設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_addrcpt_parも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
宛先アドレス。 |
|
ESMTPの追加の引数。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_delrcpt (SMFICTX *context, char *recipient);
宛先のアドレスを削除します。smfi_delrcpt()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
recipient
がNULL
。FIXME: 未実装。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_DELRCPT
フラグが設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_delrcptも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
宛先アドレス。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_progress (SMFICTX *context);
現在の接続を維持します。smfi_progress()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_progressも見てください。
|
現在のmilterセッションのコンテキスト。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_replacebody (SMFICTX *context, unsigned char *new_body, int new_body_size);
現在の本文のデータをnew_body
で置き換えます。smfi_replacebody()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
new_body
== NULL
でnew_body_size
> 0のとき。FIXME: 未実装。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_CHGBODY
が設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_replacebodyも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
新しい本文のデータ。 |
|
new_body のサイズ。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_quarantine (SMFICTX *context, char *reason);
現在のメッセージをreason
という理由で隔離します。smfi_quarantine()
はxxfi_eom()
の中で呼ぶことができます。
失敗条件は以下の通りです。
reason
がNULL
または空。FIXME: 未実装。
xxfi_eom()
以外で呼ばれた。FIXME: 未実装。
smfi_register()
あるいはxxfi_negotiate()
でSMFIF_QUARANTINE
が設定されていない。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_quarantineも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
隔離理由。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
int smfi_setpriv (SMFICTX *context, void *data);
プライベートなデータを設定します。
失敗条件は以下の通りです。
context
が不正。FIXME: 未実装。
milter.orgの smfi_setprivも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
プライベートなデータ。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |
void* smfi_getpriv (SMFICTX *context);
プライベートなデータを取得します。
失敗条件は以下の通りです。
context
が不正。FIXME: 未実装。
milter.orgの smfi_getprivも見てください。
|
現在のmilterセッションのコンテキスト。 |
返値 : |
smfi_setpriv() で設定したプライベートなデータかNULL 。 |
int smfi_setsymlist (SMFICTX *context, int state, char *macros);
要求するマクロのリストを設定します。smfi_setsymlist()
はxxfi_negotiate()
の中で呼ぶことができます。
失敗条件は以下の通りです。
state
が不正。FIXME: 未実装。
macros
がNULL
または空。FIXME: 未実装。
state
の要求マクロリストがすでに設定されている。FIXME: 未実装。
xxfi_negotiate()
以外から呼ばれた。FIXME: 未実装。
ネットワークエラー発生。
milter.orgの smfi_setsymlistも見てください。
|
現在のmilterセッションのコンテキスト。 |
|
SMFIM_CONNECT のようなSMFIM_XXXとして定義された状態。 |
|
"{rcpt_mailer} {rcpt_host}"のような空白で区切られたマクロ名のリスト。 |
返値 : |
成功した場合はMI_SUCCESS 、そうでない場合はMI_FAILURE 。 |