Milter介绍
功能
SMTP 和milter对应
|
SMTP Commands |
Milter Callbacks |
|
(open SMTP connection) |
xxfi_connect |
|
HELO ... |
xxfi_helo |
|
MAIL From: ... |
xxfi_envfrom |
|
RCPT To: ... |
xxfi_envrcpt |
|
[more RCPTs] |
[xxfi_envrcpt] |
|
DATA |
xxfi_data |
|
Header: ... |
xxfi_header |
|
[more headers] |
[xxfi_header] |
|
xxfi_eoh | |
|
body... |
xxfi_body |
|
[more body...] |
[xxfi_body] |
|
. |
xxfi_eom |
|
QUIT |
xxfi_close |
工作原理
For each of N connections
{
For each filter
processconnection (xxfi_connect)
For each filter
processhelo (xxfi_helo)
MESSAGE:For each message in thisconnection (sequentially)
{
Foreach filter
process sender (xxfi_envfrom)
Foreach recipient
{
For each filter
processrecipient (xxfi_envrcpt)
}
Foreach filter
{
process DATA (xxfi_data)
For each header
process header(xxfi_header)
process end of headers (xxfi_eoh)
For each body block
process thisbody block (xxfi_body)
process end of message (xxfi_eom)
}
}
For each filter
processend of connection (xxfi_close)
}
API
|
Function |
Description |
|
smfi_opensocket |
Try to create the interface socket. |
|
smfi_register |
Register a filter. |
|
smfi_setconn |
Specify socket to use. |
|
smfi_settimeout |
Set timeout. |
|
smfi_setbacklog |
Define the incoming listen(2) queue size. |
|
smfi_setdbg |
Set the milter library debugging (tracing) level. |
|
smfi_stop |
Cause an orderly shutdown. |
|
smfi_main |
Hand control to libmilter. |
|
Function |
Description |
|
smfi_getsymval |
Return the value of a symbol. |
|
smfi_getpriv |
Get the private data pointer. |
|
smfi_setpriv |
Set the private data pointer. |
|
smfi_setreply |
Set the specific reply code to be used. |
|
smfi_setmlreply |
Set the specific multi-line reply to be used. |
|
Function |
Description |
SMFIF_* flag |
|
smfi_addheader |
Add a header to the message. |
SMFIF_ADDHDRS |
|
smfi_chgheader |
Change or delete a header. |
SMFIF_CHGHDRS |
|
smfi_insheader |
Insert a header into the message. |
SMFIF_ADDHDRS |
|
smfi_chgfrom |
Change the envelope sender address. |
SMFIF_CHGFROM |
|
smfi_addrcpt |
Add a recipient to the envelope. |
SMFIF_ADDRCPT |
|
smfi_addrcpt_par |
Add a recipient including ESMTP parameter to the envelope. |
SMFIF_ADDRCPT_PAR |
|
smfi_delrcpt |
Delete a recipient from the envelope. |
SMFIF_DELRCPT |
|
smfi_replacebody |
Replace the body of the message. |
SMFIF_CHGBODY |
|
Function |
Description |
|
xxfi_connect |
connection info |
|
xxfi_helo |
SMTP HELO/EHLO command |
|
xxfi_envfrom |
envelope sender |
|
xxfi_envrcpt |
envelope recipient |
|
xxfi_data |
DATA command |
|
xxfi_unknown |
Unknown SMTP command |
|
xxfi_header |
header |
|
xxfi_eoh |
end of header |
|
xxfi_body |
body block |
|
xxfi_eom |
end of message |
|
xxfi_abort |
message aborted |
|
xxfi_close |
connection cleanup |
|
xxfi_negotiate |
option negotiattion |
|
Function |
Description |
|
smfi_progress |
Report operation in progress. |
|
smfi_quarantine |
Quarantine a message. |
|
Function |
Description |
|
smfi_version |
libmilter (runtime) version info |
|
smfi_setsymlist |
Set the list of macros that the milter wants to receive from the MTA for a protocol stage. |
return value
|
Return value |
|
SMFIS_CONTINUE |
|
Continue processing the current connection, message, or recipient. |
|
SMFIS_REJECT |
|
For a connection-oriented routine, reject this connection; callxxfi_close. |
|
For a message-oriented routine (except xxfi_eom orxxfi_abort), reject this message. |
|
For a recipient-oriented routine, reject the current recipient (but continue processing the current message). |
|
SMFIS_DISCARD |
|
For a message- or recipient-oriented routine, accept this message, but silently discard it. |
|
SMFIS_DISCARD should not be returned by a connection-oriented routine. |
|
SMFIS_SKIP |
|
Skip further callbacks of the same type in this transaction. Currently this return value is only allowed in xxfi_body(). It can be used if a milter has received sufficiently many body chunks to make a decision, but still wants to invoke message modification functions that are only allowed to be called from xxfi_eom(). Note: the milter must negotiate this behavior with the MTA, i.e., it must check whether the protocol action SMFIP_SKIP is available and if so, the milter must request it. |
|
SMFIS_NOREPLY |
|
Do not send a reply back to the MTA. The milter must negotiate this behavior with the MTA, i.e., it must check whether the appropriate protocol action SMFIP_NR_* is available and if so, the milter must request it. If you set the SMFIP_NR_* protocol action for a callback, that callback must always reply with SMFIS_NOREPLY. Using any other reply code is a violation of the API. If in some cases your callback may return another value (e.g., due to some resource shortages), then you must not set SMFIP_NR_* and you must use SMFIS_CONTINUE as the default return code. (Alternatively you can try to delay reporting the problem to a later callback for which SMFIP_NR_* is not |
|
SMFIS_ACCEPT |
|
For a connection-oriented routine, accept this connection without further filter processing; call xxfi_close. |
|
For a message- or recipient-oriented routine, accept this message without further filtering. |
|
SMFIS_TEMPFAIL |
|
Return a temporary failure, i.e., the corresponding SMTP command will return an appropriate 4xx status code. For a message-oriented routine (except xxfi_envfrom), fail for this message. |
|
For a connection-oriented routine, fail for this connection; call xxfi_close. |
|
For a recipient-oriented routine, only fail for the current recipient; continue message processing. |
本文介绍了Milter协议,一种允许第三方程序在邮件传输代理处理邮件过程中访问并修改邮件内容及元信息的技术。文中详细阐述了Milter的工作原理,包括其与SMTP命令的对应关系,以及如何通过不同的回调函数实现邮件的过滤与修改。
366

被折叠的 条评论
为什么被折叠?



