Postfix邮件过滤spam和virus函数
来源:互联网 发布:华为mate9怎么样知乎 编辑:程序博客网 时间:2024/06/06 11:04
在milter过滤spam和virus涉及函数
- milter_conn_event
- milter_helo_event
- milter_mail_event
- milter_rcpt_event
- milter_data_event
- milter_unknown_event
- milter_other_event
- check_milter_reply
milter_conn_event() —— report connect event
将一个SMTP客户端连接事件报告给指定的milter实例,函数返回一个SMTP回复(45 XX后面跟着增强的状态码和文本)、“D”(丢弃)、“H”(隔离)、“S”(关闭连接)或空指针。
函数原型: const char *milter_conn_event(MILTERS *milters, const char *client_name, const char *client_addr, const char *client_port, unsigned addr_family)
milter_helo_event() —— report helo event
将HELO或EHLO事件报告给指定的milter实例,函数返回一个SMTP回复(45 XX后面跟着增强的状态码和文本)、“D”(丢弃)、“H”(隔离)、“S”(关闭连接)或空指针。
函数原型: const char *milter_helo_event(MILTERS *milters, const char *helo_name,int esmtp_flag
milter_mail_event() —— report mail from event
将MAIL事件报告给指定的milter实例,函数返回一个SMTP回复(45 XX后面跟着增强的状态码和文本)、“D”(丢弃)、“H”(隔离)、“S”(关闭连接)或空指针。
函数原型: const char *milter_mail_event(MILTERS *milters, const char **argv)
milter_rcpt_event() —— report rcpt to event
将RCPT事件报告给指定的milter实例,函数返回一个SMTP回复(45 XX后面跟着增强的状态码和文本)、“D”(丢弃)、“H”(隔离)、“S”(关闭连接)或空指针。
函数原型: const char *milter_rcpt_event(MILTERS *milters, int flags, const char **argv)
milter_data_event() —— report data event
将DATA事件报告给指定的milter实例,函数返回一个SMTP回复(45 XX后面跟着增强的状态码和文本)、“D”(丢弃)、“H”(隔离)、“S”(关闭连接)或空指针。
函数原型: const char *milter_data_event(MILTERS *milters)
milter_unknow_event() —— report unknown command
将UNKOWN COMMAND事件报告给指定的milter实例,函数返回一个SMTP回复(45 XX后面跟着增强的状态码和文本)、“D”(丢弃)、“H”(隔离)、“S”(关闭连接)或空指针。
函数原型: const char *milter_unknown_event(MILTERS *milters, const char *command)
milter_other_event()——other SMTP event
返回当前的SMTP连接状态的缺省邮件过滤器回复;它不会改变milter状态。返回空指针结果标识一切正常。该函数可用于诸如身份验证、没有自己的milter事件例程的STARTTLS等SMTP命令。
函数原型: const char *milter_other_event(MILTERS *milters)
check_milter_reply() —— process reply from Milter
检查MILTER返回的状态,该函数返回处理信息。
函数原型: static const char *check_milter_reply(SMTPD_STATE *state, const char *reply)
milter过滤spam和virus说明
在上述函数中,都调用milter8_event函数向Rspamd报告事件和接收回复命令。
static const char *milter8_event(MILTER8 *milter, int event, int skip_event_flag,int skip_reply,ARGV *macros,...);
在milter8_event函数中调用vmilter8_write_cmd(1047-1054)函数向Rspamd报告事件。
/* * Send the command and data. */va_start(ap, macros);err = vmilter8_write_cmd(milter, event, data_len, ap);va_end(ap);if (err != 0)return (milter->def_reply);
调用milter8_read_resp()(1106)函数接收回复命令。
if (milter8_read_resp(milter, event, &cmd, &data_size) != 0)
然后根据接收到的命令cmd判断做出处理返回并返回:4、5、“D”、“H”、“S”、空指针。
Rmilter
main.c中的main函数连接、注册、打开smfi过滤器(321-330)。
smfi_setconn (cfg->sock_cred);if (smfi_register (smfilter) == MI_FAILURE) { msg_err("smfi_register failed"); exit (EX_UNAVAILABLE);}if (smfi_opensocket (true) == MI_FAILURE) { msg_err("Unable to open listening socket"); exit (EX_UNAVAILABLE);}
smfi_register的参数smfilter参数注册milter回调函数.在rmilter.c(69-89)。
struct smfiDesc smfilter ={ "rmilter", /* filter name */ SMFI_VERSION, /* version code -- do not change */ SMFIF_ADDHDRS | SMFIF_CHGHDRS | SMFIF_ADDRCPT | SMFIF_DELRCPT, /* flags */ mlfi_connect, /* connection info filter */ mlfi_helo, /* SMTP HELO command filter */ mlfi_envfrom, /* envelope sender filter */ mlfi_envrcpt, /* envelope recipient filter */ mlfi_header, /* header filter */ mlfi_eoh, /* end of header */ mlfi_body, /* body block filter */ mlfi_eom, /* end of message */ mlfi_abort, /* message aborted */ mlfi_close, /* connection cleanup */#if (SMFI_PROT_VERSION >= 4) NULL, /* unknown situation */ mlfi_data, /* SMTP DATA callback */ NULL /* Negotiation callback */#endif};
然后根据不同的事件调用不同的callback进行处理。
- Postfix邮件过滤spam和virus函数
- postfix邮件病毒过滤
- Postfix(三):扩展postfix邮件功能---Webmail和SMTP认证
- Postfix邮件队列介绍和常用命令
- postfix和dovecot简单的邮件服务器
- 不依赖sendmail和postfix发邮件
- linux运维-dovecot+postfix和空壳邮件
- nutch怎样过滤spam信息。
- POSTFIX+MARIADB postfix空壳邮件
- php mail函数发送html邮件不解析,linux+postfix
- Postfix过滤垃圾邮件
- CentOS 5.5 下Postfix和Dovecot 配置邮件服务器
- 在centos6上postfix 和 dovecot配置发邮件
- postfix和dovecot的邮件认证及加密
- postfix收发邮件大小和webmail空间大小设定
- [centos]linux搭建PostFIX和dovecot收发邮件
- SEO和SPAM
- postfix邮件服务器维护
- SQL数据库中数据类型ntext和text的区别
- Jquery中阻止默认冒泡事件
- [Windows service crash分析]一次编码转换导致的堆破坏
- VMware 12和宿主机网络互通
- B. Dima and To-do List----暴力
- Postfix邮件过滤spam和virus函数
- js、jquery 图像载入效果 Image Loading Effect
- dySE:一个 Java 搜索引擎的实现
- JSON开发笔记(三)—— JSON Schema实战(中)
- 关注国情民情,从身边做起
- 达内课程-各种监听器
- 聚集索引与非聚集索引的区别
- centos7 配置 php mysql appche 环境
- zk