Shell脚本编程(三), Linux配置收发邮件功能,并使用Shell编写邮件报警脚本

一、安装postfix

0.关于Postfix
postfix的产生是为了替代传统的sendmail.相较于sendmail,postfix在速度。性能和稳定性上都更胜一筹。如今眼下许多的主流邮件服务事实上都在採用postfix. 当我们须要一个轻量级的的邮件server是,postfix不失为一种选择。

  1. postfix是免费的:
    postfix想要作用的范围是广大的Internet用户。试图影响大多数的Internet上的电子邮件系统,因此它是免费的。
  2. 更快:
    postfix在性能上大约比sendmail快三倍。一部执行postfix的台式PC每天能够收发上百万封邮件。
  3. 兼容性好:
    postfix是sendmail兼容的,从而使sendmail用户能够非常方便地迁移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。

    1. 更健壮:
      postfix被设计成在重负荷之下仍然能够正常工作。当系统执行超出了可用的内存或磁盘空间时,postfix会自己主动降低执行进程的数目。当处理的邮件数目增长时,postfix执行的进程不会跟着添加。
  4. 更灵活:
    postfix是由超过一打的小程序组成的,每一个程序完毕特定的功能。

你能够
通过配置文件设置每一个程序的执行參数。

  1. 安全性
    postfix具有多层防御结构,能够有效地抵御恶意入侵者。如大多数的postfix程序能够执行在较低的权限之下,不能够通过网络訪问安全性相关的本地投递程序等等。
    以下来介绍linux上怎样搭建和配置postfix服务:

1.关掉sendmail相关的全部服务,最好是直接卸载sendmail.

service sendmail stop

chkconfig sendmail off

#rpm -qa | grep sendmail | xargs rpm -e

2.安装postfix.
redhat6.0以上版本号应该是默认集成了postfix服务的,假如没有安装的话,能够手动安装。

rpm -qa | grep postifx (查看是否安装)

yum install postfix

3.安装完毕后。改动配置文件:/etc/postfix/main.cfg

vi /etc/postfix/main.cf

myhostname = sample.test.com  ← 设置系统的主机名

mydomain = test.com  ← 设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分)

myorigin = $mydomain  ← 将发信地址“@”后面的部分设置为域名(非系统主机名)

inet_interfaces = all  ← 接受来自全部网络的请求

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  ← 指定发给本地邮件的域名

home_mailbox = Maildir/  ← 指定用户邮箱文件夹

<保存退出。>

4.为本机加入DNS server.
为什DNS Server?由于在邮件发送过程中。须要把邮件地址的domain地址转化成IP地址,再去发送给相应的收件人,这里涉及到DNS中的A记录和MX记录相关的知识,不熟悉的同学能够google或者百度 脑补一下 :-)

怎样加入DNS server呢,DNS server去哪里寻找?

vim /etc/resolv.conf
加入例如以下行:

nameserver 8.8.8.8

nameserver 8.8.4.4

上面用的8.8.8.8/8.8.4.4是Google Free DNS server,当然还有非常多免费的DNS server供大家使用,能够google一下:-)

5.測试一下邮件是否可以发送成功:
命令行输入$: > echo “Mail Content” | mail -s “Mail Subject” xxxx@xxx.com

Note:if you see below warings after you run above command.

send-mail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
send-mail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only
that means you don’t have IPv6 configured in your OS’s network stack, but your mailer (presumably postfix) is configured to use IPv6. Since there is no IPv6 for your mailer to use, it’s warning you that it’s only going to use IPv4.

To disable the waring messsage, go to /etc/postfix/main.cf and change from:

inet_protocols = all
to:

inet_protocols = ipv4
This will only use ipv4 and the warning message will go away.

You will have to issue a stop and start for postfix to register the change.

service postfix restart

6.查看log,确认邮件发送状态:
Postfix邮件的log位置是:/var/log/maillog

发送成功的话。会返回250和OK,也能够去自己的邮件client查收。

一切OK的话,那Postfix mail service应该就搭建成功了。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

另外一些实用的postfix维护命令。一遍日常的检測和维护:

mailq :会列出当前在postfix发送队列中的全部邮件

postsuper -d ALL:删除当前等待发送队列的全部邮件,包含发送失败的退信

当然还有非常多,就不一一列举了,大家能够网上搜索扩展。Good Luck!

7.Update Mail From sender

echo “do-not-reply@example.com root@example.com” >> /etc/postfix/generic
echo “smtp_generic_maps = hash:/etc/postfix/generic” >>/etc/postfix/main.cf
postmap /etc/postfix/generic
service postfix restart

8.配置QQ邮箱发邮件:
1、QQ邮箱开启SMTP,生成授权码来设置密码。
2、关闭服务器的sendmail服务,开启postfix服务
service sendmail stop
service postfix stop
如果postfix start失败:
postfix check
rpm -qa|grep mysql
yum install mysql-libs

3、创建证书文件
 root@zydatahadoop001 rundeck]# mkdir -p /root/.certs/
[root@zydatahadoop001 rundeck]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ > ~/.certs/qq.crt
[root@zydatahadoop001 rundeck]# certutil -A -n “GeoTrust SSL CA” -t “C,,” -d ~/.certs -i ~/.certs/qq.crt
[root@zydatahadoop001 rundeck]# certutil -A -n “GeoTrust Global CA” -t “C,,” -d ~/.certs -i ~/.certs/qq.crt
[root@zydatahadoop001 rundeck]# certutil -L -d /root/.certs
[root@zydatahadoop001 rundeck]# cd /root/.certs

4、在/etc/mail.rc 文件末尾添加以下:
set from=自己的qqQQ@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=自己的QQ
#授权码
set smtp-auth-password=(自己的授权码)
set smtp-auth=login
set smtp-use-starttls set ssl-verify=ignore
set nss-config-dir=/root/.certs
注意:等号前后不能有空格

5、命令行验证邮件服务
[root@zydatahadoop001 rundeck]# echo hello word | mail -s ” title” 自己的QQ@qq.com
此时qq会收到一封邮件

6、在所需调度脚本中加入以下内容
发邮件不带附件
EMAIL=qq邮箱1,qq邮箱2
echo -e”date "+%Y-%m-%d%H:%M:%S" : The current running $JOB_NAME job num is$RUNNINGNUM in 192.168.137.201 ……” | mail \
-r”From: alertAdmin 发邮件的QQ@qq.com” \
-s”Warn: Skip the new$JOB_NAME spark job.”${EMAIL}
发邮件带附件
EMAIL=qq邮箱1,qq邮箱2
echo -e”date "+%Y-%m-%d%H:%M:%S" : Please to check the fail sql attachement.” | mailx \
-r”From: alertAdmin 发邮件的QQ@qq.com” \
-a$FAILSQL_MONITOR_CURRENT/merge${CURRENT_TIME_SHORT}.log \
-s”Critical:KSSH fail sql.”${EMAIL}

二、安装disk 4上的dovecot
yum -y install dovecot
完成安装后,键入如下命令,看是否安装完全:
#rpm -qa | grep ‘dovecot’
dovecot-1.2.11-3.fc12.i686
Vi /etc/dovecot.conf
• 1.修改protocols 支持pop3和pop3s
启动dovecot服务并开启110、143端口
service dovecot start

三、编写邮件报警脚本:
1·编写web服务器监控脚本
touch web.sh

#!/bin/bash
#web.sh
nc -w 3 localhost 80 &>/dev/null
if [ $? -eq 0 ]; then
    str="apache web服务器目前处于正常状态!!!"
else
    str="apache web服务器目前处于关闭或无响应状态!!!"
fi

echo $str|mail -s 'apache web server' 1158624818@qq.com &>/dev/null

2·编写mysql数据库监控脚本
touch mysql.sh

#!/bin/bash
#mysql.sh
nc -w 3 localhost 3306 &>/dev/null
if [ $? -eq 0 ]; then
    str="mysql 目前处于正常状态!!!"
else
    str="mysql 目前处于关闭或无响应状态!!!"
fi

echo $str|mail -s 'mysql server' 1158624818@qq.com &>/dev/null

3·编写disk空间使用监控脚本
touch disk.sh
nc -w 3 localhost 80 &>/dev/null

2·编写mem内存空间监控脚本
touch mem.sh
nc -w 3 localhost 80 &>/dev/null

0
如无特殊说明,文章均为本站原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到