Функции обратного вызова
Фильтр sendmail должен реализовывать хотя бы одну функцию обратного вызова, которые регистрируются с помощью функции smfi_register.
| Флаг | Описание |
|---|---|
| xxfi_connect | Функция xxfi_connect вызывается один раз в начале каждого соединения SMTP. Функция возвращает значение SMFIS_CONTINUE. |
| xxfi_hello | Функция xxfi_hello вызывается всякий раз, когда клиент отправляет команду HELO/EHLO. |
| xxfi_envfrom | Функция xxfi_envfrom вызывается в начале сообщения. |
| xxfi_envrcpt | Функция xxfi_envrcpt вызывается для каждого получателя. |
| xxfi_data | Функция xxfi_data обрабатывает команду DATA. |
| xxfi_unknown | Функция xxfi_unknown обрабатывает неизвестные команды протокола SMTP. |
| xxfi_header | Функция xxfi_header обрабатывает заголовок сообщения. |
| xxfi_eoh | Функция xxfi_eoh обрабатывает заголовки сообщения. |
| xxfi_body | Функция xxfi_body обрабатывает фрагмент тела сообщения. |
| xxfi_eom | Функция xxfi_eom обрабатывает конец сообщения. |
| xxfi_abort | Функция xxfi_abort обрабатывает сообщения, передача которых прервана. |
| xxfi_close | Функция xxfi_close вызывается для закрытия текущего соединения. |
| xxfi_negotiate | Функция xxfi_negotiate вызывается в начале соединения SMTP. |
Функции обратного вызова должны правильно возвращать значение. Если функция обратного вызова возвращает значение, не входящее в число заранее определенных, то возникает ошибка, и команда sendmail прерывает соединение с фильтром.
- Функции обратного вызова, ориентированные на получателя, влияют на обработку сообщения для одного получателя.
- Функции обратного вызова, ориентированные на сообщение, влияют на обработку одного сообщения.
- Функции обратного вызова, ориентированные на соединение, действуют в течение всего соединения (в ходе которого может быть доставлено несколько сообщений различным группам получателей).
- Функция xxfi_envrcpt ориентирована на получателя. Функции xxfi_conect, xxfi_hello и xxfi_close ориентированы на соединение. Все прочие функции обратного вызова ориентированы на сообщение.
| Флаг | Описание |
|---|---|
SMFIS_CONTINUE |
Продолжить обработку для текущего соединения, сообщения или получателя. |
SMFIS_REJECT |
|
SMFIS_DISCARD |
|
SMFIS_ACCEPT |
|
SMFIS_TEMPFAIL |
Возвратить временную ошибку, то есть соответствующая команда SMTP возвращает код ошибки
|
SMFIS_SKIP |
Пропустить дальнейшие обратные вызовы того же типа в этой транзакции. В данный момент это значение может возвращать только функция xxfi_body. Это значение можно использовать, если для параметра milter передано достаточно фрагментов тела сообщения для принятия решения. Однако возможны случаи, когда для возвращаемого значения будут вызываться функции модификации сообщений, разрешенные только из функции xxfi_eom. Прим.: Параметр milter должен согласовать это поведение с почтовой программой (MTA). Параметр milter проверяет, доступно ли действие протокола SMFIP_SKIP. Если действие SMFIP_SKIP доступно, то параметр milter должен его потребовать.
|
SMFIS_NOREPLY |
|