背景: Sendmail 無法使用外部smtp發郵件,很多程序又標配有sendmail,有些外部smtp比如網易的免費企業郵箱對賬號發信量有限制,所以使用msmtp代替sendmail,既可以不用改動程序,又可以使用外部smtp,而且可以用腳本實現多個賬號隨機發送,增加發信量。
1. 下載安裝msmtp
http://download.chinaunix.net/download.php?id=33752&ResourceID=7048
yum remove openssl 需要opsenssl
tar jxvf msmtp-1.4.26.tar.bz2
cd msmtp-1.4.26
./configure --prefix=/usr/local/msmtp
make && make install
2. 手動建立配置文件,輸入外部smtp地址
mkdir –p /usr/local/msmtp/etc
vi /usr/local/msmtp/etc/msmtprc
添加以下內容
account default
host smtp.qiye.163.com
port 25
from [email protected]
auth login
tls off
user [email protected]
password 111111
logfile /var/log/mmlog
3. 測試郵件
usr/local/msmtp/bin/msmtp [email protected]
hello,test
ctrl d
cat /usr/local/msmtp/msmtp.log 看看有沒有成功。
然後再到QQ郵箱中,看看信收到沒有
4. 測試方法二:
增加環境變量echo set sendmail=\"/usr/local/msmtp/bin/msmtp\" > /root/.mailrc
測試郵件echo "this is a test mail" | mail –v -s "test mail" [email protected]
5. 在PHP程序中使用msmtp
方法1:修改類函數
比如phpmailer中的class.phpmailer.php,下面一行就可以了
//public $Sendmail = '/usr/sbin/sendmail';
public $Sendmail = '/usr/local/msmtp/bin/msmtp';
方法2:對於不能修改類函數的可以使用軟鏈接方式
ln -s /usr/local/msmtp/bin/msmtp /usr/sbin/sendmail
這時sendmail關閉也可以發送郵件
6. 使用多個賬號隨機發送的腳本
vi usr/local/msmtp/etc/randmail.sh
#!/bin/bash
while true;do
A=$[$RANDOM%3]
if [ "$A" -eq 0 ]
then sed -i '4c\from [email protected]' msmtprc && sed -i '7c\user [email protected]' msmtprc
elif [ "$A" -eq 1 ]
then sed -i '4c\from [email protected]' msmtprc && sed -i '7c\user [email protected]' msmtprc
elif [ "$A" -eq 2 ]
then sed -i '4c\from [email protected]' msmtprc && sed -i '7c\user [email protected]' msmtprc
else echo error!!
fi
sleep 5
done
後臺執行,這樣就能實現5秒隨機更換一個賬號發郵件,可以擴展更多用戶
nohup ./randmail.sh > /dev/null 2>&1 &