1、概述
qxj监测软件项目实施了半年了,因为检测到有警告和错误,都会发给一个邮箱,而且监测软件只能设置发给一个邮箱。试想全国34个省,每省4台机器,时不时有一台网络不稳定的就发一封邮件,一天能收到百十来封邮件,管理员根本看不过来,所以提出新的需求:哪个省的邮件发给哪个省的管理员。
监测软件没有这个功能,只能在系统上想办法实现了。
最简单的方法就是:从该邮箱中把所有邮件收下来,然后根据邮件内容判断是哪个省的,就发给哪个省的管理员。
收邮件可以使用getmail(),getmail是一个基于GPL协议的开源软件,可以自动从多个邮箱中收取邮件到本地,支持pop3和IMAP。可以接合procmail实现邮件过滤,对不同的邮件做不同的操作。
邮件过滤使用procmail(),procmail 是一个强大得惊人的过滤进入邮件的应用程序。它允许用户定义 “规则”, 并用这些规则来匹配进入的邮件, 进而执行某些特定的功能,或将这些邮件转发到其他信箱和/或邮件地址。
邮件发送可以使用postfix或者senmail,缺点是只能使用本机的mail域名发送给用户。这里采用msmtp(),msmtp是一个简单灵活的MTA,并且设置极为方便,可以从特定的邮箱发送邮件。
系统为:RedFlag DC Server 5.0 SP2 ia32
2、配置
因为测试发现用root实现全部功能有问题,具体哪步出问题忘记了,所以整个配置是在work用户下面操作。
2.1、getmail配置
从getmail网站下载最新getmail-4.16版本,直接编译成rpm包即可安装。
rpmbuild -tb getmail-4.16.0.tar.gz
rpm -ivh getmail-4.16.0-1.noarch.rpm
|
注意:编译完可不在当前目录下,在哪里?自己找。
默认getmail的配置文件是~/.getmail/getmailrc,需要手工建立.getmail目录
mkdir .getmail
mkdir .getmail/mail
|
创建~/.getmail/getmailrc文件,添加内容如下(可以通过/usr/share/doc/getmail-4.16.0/faq.txt中的例子修改):
[options]
read_all = false
delete = false #在服务器上保存附件
message_log = ~/.getmail/getmail.log #记录日志
[retriever]
type = SimplePOP3Retriever
server = mail.redflag-linux.com
username = dffan
password = secret
[destination]
type = MDA_external
path = /usr/bin/procmail #使用procmail过滤邮件
#type = Maildir #只是收到本机
#path = ~/.getmail/mail/
|
如果只是将邮件收到本机,可以将
type = MDA_external
path = /usr/bin/procmail
修改为
type = Maildir
path = ~/.getmail/mail/
|
这样就可以直接将邮件收取到~/.getmail/mail/目录下
在保证机器可以正确上网并解析域名的前提下,执行getmail可以将邮件收取到本机
2.2、配置procmail
getmail掉用procmail过滤邮件,那么procmail需要相应的配置。系统默认自带procmail可以使用,直接配置即可。
procmail默认配置文件~/.procmailrc,创建此文件并添加如下内容(参考/usr/share/doc/procmail-3.22/examples/2procmailrc):
PATH=/bin:/sbin:/usr/bin:/usr/sbin
SHELL=/bin/bash
MAILDIR=~/.getmail/mail/ #邮件存放目录
DEFAULT=$MAILDIR
LOGFILE="~/.getmail/procmail.log" #日志文件
#:0 B #后面的B是对邮件正文过滤
#* ^From.*@redflag-linux.com
#beijing.txt #来自redflag-linux.com的邮件保存到beijing.txt中
:0 B
* ^Beijing #邮件内容如果有以Beijing开头行,则取Subject和NOTE开头的行之间的内容,保存到monitor.log文件并且发送到 redflag_linux@163.com
|sed -n '/Subject/,/NOTE/p'|tee -a /home/work/.getmail/mail/monitor.log|mail -s "Limon Notification Message" redflag_linux@163.com
#-----------------------------------------------------------------------------------------
:0 B
* ^Hebei
|sed -n '/Subject/,/NOTE/p'|tee -a /home/work/.getmail/mail/monitor.log|mail -s "Limon Notification Message" redflag-linux@163.com
#-----------------------------------------------------------------------------------------
:0 B
* ^Tianjin
|sed -n '/Subject/,/NOTE/p'|tee -a /home/work/.getmail/mail/monitor.log|mail -s "Limon Notification Message" fan3838@tom.com
#-----------------------------------------------------------------------------------------
#:0
#*
#/home/work/.getmail/mail/ #其他全部放到指定目录下
|
2.3、msmtp配置
前面procmail过滤出邮件之后转发到特定邮件,使用的是mail命令,mail命令默认是sendmail,既然要使用msmtp,就需要重定义。
编辑~/.mailrc文件,添加如下一行:
set sendmail="/usr/local/bin/msmtp" #根据实际情况而定
|
系统使用msmtp转发邮件,系统默认没带,需要安装msmtp。从msmtp网站下载最新的1.4.20版本。
包中没有spac文件,解压后直接编译安装即可(可以从网上下载spac文件编译成rpm包)。
tar xvfj msmtp-1.4.20.tar.bz2
cd msmtp-1.4.20
./configure
make
make install
|
安装完毕之后,创建~/.msmtprc文件(参考man msmtp),其中定义使用哪个邮箱转发邮件:
account main
logfile ~/.getmail/msmtp.log
host mail.redflag-linux.com
from dffan@redflag-linux.com
auth login
user dffan
password secret
account default : main
|
2.4、计划任务配置
上述的配置完毕之后,如果配置无误已经可以正确收取邮件,并且将特定的邮件转发到特定邮箱了。
为了实现自动化,需要在计划任务crond中添加
*/15 * * * * /usr/bin/getmail
|
3、问题分析
即使保证上述配置无误的情况下,也无法避免一些意想不到的错误,比如有人会提出疑问:你没开postfix或者sendmail难道能转发出去?
postfix我确实已经启动了,不过是为监测软件发邮件用的。
如果出现问题,可以查看的日志有哪些?
~/.getmail/msmtp.log
~/.getmail/procmail.log
~/.getmail/getmail.log
这三个是主要的日志,如果没有达到上述结果,这三个文件中某一个或者两个会看出来原因。
当然不要忘记/var/log/maillog和/var/log/messages,还有/var/log/cron。
另外推荐一个mutt的介绍
阅读(923) | 评论(0) | 转发(0) |