至于sentmail和postfix的配置有多麼麻煩學生在這裡就不多廢話了...反正是配置了N個小時,最終弄的頭暈眼花也沒弄好...
下面的方法可以讓你完全擺脫這兩個工具...當然,你要是想做郵件伺服器的話就令當别論了...你要是隻想讓伺服器自動發個郵件什麼的,用下面的就行了
通常的做法都是,關閉本機的sendmail服務或者postfix服務,
#執行下面的指令,各位大俠都對号入座吧
#sendmial
service sendmail stop
chkconfig sendmail off
#postfix
service postfix stop
chkconfig postfix off
#再狠一點就直接解除安裝吧..
yum remove sendmail
yum remove postfix
然後修改/etc/mail.rc,增加一下類似N行,指定外部的smtp伺服器位址、帳号密碼等。
# vi /etc/mail.rc
set [email protected]
set smtp=smtp.qq.com
set smtp-auth-user=123456
set smtp-auth-password=sbsbsbsb
set smtp-auth=login
然後通過指令來發送郵件,echo hello word | mail -s " title" [email protected]
可是發現在RHEL6運作是沒有問題,在RHEL5下,mail指令始終是調用本地的sendmail服務來發送郵件的。
到底RHEL6和RHEL5下的mail和mailx又有着什麼關系呢?
RHEL6下,mail 連結到 mailx 指令,mailx版本為12.4
# rpm -qa|grep mailx
mailx-12.4-6.el6.x86_64
# ll /bin/mail*
lrwxrwxrwx. 1 root root 5 7月 22 2011 /bin/mail -> mailx
-rwxr-xr-x. 1 root root 390424 2月 16 2010 /bin/mailx
# mail -V
12.4 7/29/08
RHEL5下,則發現了一些不同,mailx 連結到 mail 指令,mailx版本為8.1
# rpm -qa|grep mailx
mailx-8.1.1-44.2.2
# ll /bin/mail*
-rwxr-xr-x 1 root mail 84856 Jun 6 2007 /bin/mail
lrwxrwxrwx 1 root root 4 Apr 12 18:03 /bin/mailx -> mail
# mail -V 此處運作就會出錯,沒有-V這個參數
也就是說,在RHEL6\5下,運作mail 和mailx,實際上都是一個指令,而mail版本不同,導緻了RHEL5下mail指令無法調用外部SMTP伺服器。
安裝mailx新版本可解決此問題。
下載下傳位址:http://www.filewatcher.com/m/mailx-12.4.tar.bz2.271482.0.0.html
下載下傳後,# tar jxvf mailx-12.4.tar.bz2 9# cd mailx-12.4# make# make install UCBINSTALL=/usr/bin/install
檢視mailx程式預設安裝位置、及版本
# whereis mailx mailx: /usr/local/bin/mailx /usr/share/man/man1p/mailx.1p.gz # mailx-V 12.4 7/29/08
安裝後的mailx使用的是 /etc/nail.rc 配置,不是 /etc/mail.rc 這個需要注意下。vi編輯,按下G ,然後在行尾添加如下N行
# vi /etc/nail.rc (看出亮點了嗎?)
set [email protected]
set smtp=smtp.qq.com
set smtp-auth-user=123456 5 set smtp-auth-password=sbsbsbsb
set smtp-auth=login
然後通過指令來發送郵件
echo hello word | mailx -v -s " title" [email protected]
伺服器狀态監控腳本郵件發送問題探究:
伺服器狀态檔案生成伺服器語言:
[root@VM_174_31 /data/home/report]# echo $LANG
en_US
伺服器狀态處理伺服器語言:
[root@localhost forilen]# echo $LANG
en_US.UTF-8
郵件發送核心腳本:
check(){
srvid=$1
srvname=$2
grpname=$3
root=`cat server_$srvid.txt | awk \'{print $9}\' | awk -F% \'{print $1}\' `
data=`cat server_$srvid.txt | awk \'{print $10}\' | awk -F% \'{print $1}\' `
mysql -uroot -p1234 -e "load data infile \'$path/server_$srvid.txt\' into table serverdb.server_status;" &>/dev/null
if [ $root -gt $deadline -o $data -gt $deadline ]
then
echo >>mail.log
# cat server_$srvid.txt >>mail.log
# cat server_$srvid.txt >>mail.txt
echo -e "$grpname" >./srv_head.txt
echo -e "$srvname" >>./srv_head.txt
cat srv_head.txt server_$srvid.txt >>mail.log
cat server_$srvid.txt |/bin/mail -s "DISKWARMING_$ts_$grpname_$srvname" [email protected]
# cat server_$srvid.txt >>./srv_head.txt
# echo "1" >>./srv_head.txt
# cat srv_head.txt | /bin/mail -s "DISKWARMING_$ts" [email protected]
fi
rm server_$srvid.txt* -f
}
由于兩個伺服器的編碼格式不同,導緻檔案在後面追加的時候出現編碼異常,mail無法解析,導緻發送異常附件(tcmime.744.744.888.bin)。
grpname所存資料庫編碼:
mysql> show variables like \'%char%\';
+--------------------------+-----------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /data/mysql/share/mysql/charsets/ |
+--------------------------+-----------------------------------+
| ser_group | CREATE TABLE `ser_group` (
`group_id` tinyint(4) NOT NULL auto_increment,
`group_name` varchar(100) default \'0\',
`group_status` tinyint(4) NOT NULL,
`appid` varchar(20) default NULL,
PRIMARY KEY (`group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 |
解決方案:
在shell腳本前面加上:export LANG="en_US.UTF-8"