Chinaunix首页 | 论坛 | 博客
  • 博客访问: 595071
  • 博文数量: 248
  • 博客积分: 52
  • 博客等级: 民兵
  • 技术积分: 1028
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-23 12:05
文章分类

全部博文(248)

文章存档

2016年(7)

2013年(241)

分类: LINUX

2013-04-09 04:56:50

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) |
给主人留下些什么吧!~~