请问各大侠我要实现以下功能因该如何做。
1.当有用户从服务器发邮件出去时,让这封邮件也发给管理员一份。监控所有发出的邮件。
2.不接受一些地址来的邮件。
3.发出的邮件址做限定。
不知以上的功能能否实现。
microroad 回复于:2003-08-13 20:10:44 |
2和3可以实现的。用rcpthosts和/var/qmail/control/badmailfrom |
vincentzpf 回复于:2003-08-13 20:25:17 |
那第一和第二可以实现吗! |
xuezs 回复于:2003-08-14 09:22:22 |
第二、三条一般的MTA应该都可以做到,象QMAIL、SENDMAIL,但第一条就不行了。
我也有类似你的需求,后来,我用另一个MTA:Exim搞定了。Exim的配置非常灵活,可以实现无限的效果。 |
vincentzpf 回复于:2003-08-15 14:43:52 |
我是新手!!!
那我应该怎样做呀!! 只要有这样的功能也可以,就是把发出去和收下来的邮件全部备份。 |
lightwiter 回复于:2003-08-15 18:59:40 |
第一条也可以呀,用户不多的话,在别名里添加用户试试 |
vincentzpf 回复于:2003-08-18 08:07:07 |
请教各位,如何做。 |
melonm 回复于:2003-08-18 11:28:19 |
:P
实现复制每刲收到的邮件,可以用PROCMAILF来做。要复制发出的邮件,用sendmail比较困难。可以试着用libmilter来做. 看看 ~/libmilter/Readme. 另外,用别名的方法是不行的,只能对本地用户在收件时有效(大概就是在/etc/aliases里对用户定义几个收件人吧) |
vincentzpf 回复于:2003-08-18 15:46:22 |
能不能说的详细一点。 |
melonm 回复于:2003-08-19 11:21:23 |
melonm 回复于:2003-08-19 11:23:26 |
要建立自动复制邮件服务器收到的全部邮件,可以照如下配置:
前提:服务器必须安装procmail并设之为本地传递方式,这在redhat里是缺省设置。安装procmail一般不是问题。 1. 设置/etc/procmailrc,如下: PMDIR=/etc/procmail LOGFILE=/var/log/pmlog VERBOSE=yes # Set to yes when debugging; default is no INCLUDERC=$PMDIR/rc.localcopy 2. 建立必要的目录和权限,如下: chmod 400 /etc/procmailrc mkdir /etc/procmail chmod 700 /etc/procmail chmod 600 /etc/procmail/* touch /var/log/pmlog chmod 600 /var/log/pmlog 3. 建立$PMDIR/rc.localcopy文件如下: :0c ! postmaster@mydomain.com # That's exclamation mark, address to forward to. 之后每一发到本服务嚣的邮件都会转发一备份到postmaster。postmaster也可以是非本域的邮件地址。 详细的日志信息可以/var/log/pmlog里查到,也可以在/etc/procmailrc里将VERBOSE设为no以减少日志大小。 |
vincentzpf 回复于:2003-08-22 11:05:14 |
请教那这样可否对发出的邮件也可以这样做吗! |
vincentzpf 回复于:2003-08-22 19:13:11 |
各位帮忙呀!!我顶!!! |
melonm 回复于:2003-08-23 01:24:44 |
发出的邮件不行,因为邮件发出时并不使用procmail,可以修改sendmail配置文件使sendmail先发给procmail,处理后再传给sendmail发出去。具体的方法可以看昨天的精华区。 |
vincentzpf 回复于:2003-08-23 08:09:30 |
谢谢!!
不过我主要是对外面邮件。 |
vincentzpf 回复于:2003-08-25 11:36:12 |
顶 |
sunshine217 回复于:2004-05-22 22:34:52 |
经我这么多天来的研究,发现在sendmail下对outbound的信件作监控是不可能的, 真可惜啊,
inbound 的信件是可以用procmail转发给一个特定帐户作监控, outbound的信件则不可能作监控, 最可能的一种方案是修改sendmail 的源代码, 但是很可惜,有 一个B,写了这样的一份东西,说是可以从此将信件转发给XXX@XXX.XXX, 可惜,它那份修改源代码的方案里(具体是修改srvrsmpt.c这个文件,)跟本就没有写到这个监控帐户XXX@XXX.XXX, 教人以错误的方法以致不能解决问题,反而绕乱视听,浪费大家的时间,我认为这种B是最可恶的,应该枪毙!!!! 另几种方案是所谓的修改sendmail.cf这个文件,可惜,这些B也全是瞎扯蛋,没有一个能够成功,这些烂B,难道就不能在正式发文之前先作一下测试,以免浪费大家的时间吗?不成熟的方案比没有方案更糟.后者不能怎样,前者却会害人啊!!!!!! 若真想监控,那么推荐是用postfix ,它只要修改一个参数就可以对inbound及outbound的邮件作监控了,即使这些邮件都转发到一个监控帐号上去,具体来说,是 在main.cf里加上: always_bcc = spy@localhost 即可(email地址填写你的监视邮箱) 即可.很方便啊. 我写下这些话,希望大家可以少走弯路.!!!!!!!! |
lovesong 回复于:2004-09-03 21:15:25 |
环境
FreeBSD 4.3 Release + sendmail 8.11.5,从www.sendmail.org下载源代码包sendmail-8.11.5.tar.gz,运行: # tar zxvf sendmail-8.11.5.tar.gz 在当前目录下生成sendmail-8.11.5目录 三、步骤 先让我们来看一个SMTP通信的例子:(参考:rfc821.txt) This SMTP example shows mail sent by Smith at host Alpha.ARPA, to Jones, Green, and Brown at host Beta.ARPA. Here we assume that host Alpha contacts host Beta directly. S: MAIL FROM: R: 250 OK S: RCPT TO: R: 250 OK S: RCPT TO: R: 550 No such user here S: RCPT TO: R: 250 OK S: DATA R: 354 Start mail input; end with . S: Blah blah blah... S: ...etc. etc. etc. S: . R: 250 OK 虽然在一个SMTP过程中可能还有很多其他命令的交互,但核心的就这么三步:MAIL FROM、RCPT TO、DATA。在./sendmail-8.11.5/sendmail下有一个文件srvrsmtp.c,有一个大函数smtp(),它里面的switch循环就是专门处理SMTP通信,即上面例子中R响应。任何一个SMTP 过来的邮件 —— 不论是来自outlook express这样的邮件客户端软件,还是Inte.net上的一台MAIL HOST,smtp()依次处理对方发送过来的MAIL FROM、RCPT TO、DATA命令,从中获得send、recipient list、message,统统存入一个struct ENVELOPE变量中,最后调用sendall()再将邮件转给recipient list。因此,我们只需要在smtp()处理RCPT TO时将我们的监控E-mail Address加进去就可以了。 1、首先在smtp()变量声明处加入一个变量: int spydone = 0; 2、打开srvrsmtp.c,搜索关键字:case CMDRCPT,从这行开始往下的201行是处理recipient list代码。在该case段的最后一行 ,即break;前,我们插入如下代码: if(!spydone) { a = parseaddr("", NULLADDR, RF_COPYALL, ' ', &delimptr, e); /* 将xxx@xxx.xxx换成监控e-mail */ a = recipient(a, &e->e_sendqueue, 0, e); e->e_to = a->q_paddr; nrcpts++; spydone = 1; } 保存退出,在./sendmail-8.11.5下运行:make; make install 编译、安装。经过修改的sendmail,对于用户接收发送的邮件,都会发送一份到xxx@xxx.xxx里。 |
lovesong 回复于:2004-09-03 21:16:42 |
环境
FreeBSD 4.3 Release + sendmail 8.11.5,从www.sendmail.org下载源代码包sendmail-8.11.5.tar.gz,运行: # tar zxvf sendmail-8.11.5.tar.gz 在当前目录下生成sendmail-8.11.5目录 三、步骤 先让我们来看一个SMTP通信的例子:(参考:rfc821.txt) This SMTP example shows mail sent by Smith at host Alpha.ARPA, to Jones, Green, and Brown at host Beta.ARPA. Here we assume that host Alpha contacts host Beta directly. S: MAIL FROM: R: 250 OK S: RCPT TO: R: 250 OK S: RCPT TO: R: 550 No such user here S: RCPT TO: R: 250 OK S: DATA R: 354 Start mail input; end with . S: Blah blah blah... S: ...etc. etc. etc. S: . R: 250 OK 虽然在一个SMTP过程中可能还有很多其他命令的交互,但核心的就这么三步:MAIL FROM、RCPT TO、DATA。在./sendmail-8.11.5/sendmail下有一个文件srvrsmtp.c,有一个大函数smtp(),它里面的switch循环就是专门处理SMTP通信,即上面例子中R响应。任何一个SMTP 过来的邮件 —— 不论是来自outlook express这样的邮件客户端软件,还是Internet上的一台MAIL HOST,smtp()依次处理对方发送过来的MAIL FROM、RCPT TO、DATA命令,从中获得send、recipient list、message,统统存入一个struct ENVELOPE变量中,最后调用sendall()再将邮件转给recipient list。因此,我们只需要在smtp()处理RCPT TO时将我们的监控E-mail Address加进去就可以了。 1、首先在smtp()变量声明处加入一个变量: int spydone = 0; 2、打开srvrsmtp.c,搜索关键字:case CMDRCPT,从这行开始往下的201行是处理recipient list代码。在该case段的最后一行 ,即break;前,我们插入如下代码: if(!spydone) { a = parseaddr("", NULLADDR, RF_COPYALL, ' ', &delimptr, e); /* 将xxx@xxx.xxx换成监控e-mail */ a = recipient(a, &e->e_sendqueue, 0, e); e->e_to = a->q_paddr; nrcpts++; spydone = 1; } 保存退出,在./sendmail-8.11.5下运行:make; make install 编译、安装。经过修改的sendmail,对于用户接收发送的邮件,都会发送一份到xxx@xxx.xxx里。 |
lovesong 回复于:2004-09-03 21:35:52 |
想让所有的mail都监控起来,但又不是把所有用户发送和接收的mail都复制一份发给管理者!而是按一定的规则,比方只有在USER发特定内容或者附件的情况下才把MAIL送给管理者审查!比如有检查文件头的功能,这样修改扩展名和压缩文件也逃不过检查!不知那位大侠有过类似的经历!指点一下方向!在下感激不尽!!!我用的是linux9.0+sendmail8.12.2+imap+sasl认证 |
lovegqin 回复于:2005-01-19 10:06:48 |
不是sendmail的FAQ吗?怎么议论起qmail了,你们有没有素质啊? |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/
领测软件测试网最新更新
关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073