#1 2008-05-15 00:14:10
輕巧的 Mail Agent (esmtp)
轉自: http://abintech.azhai.org/search/label/WL-500g%20HACK
輕巧的 Mail Agent (esmtp)
作者: Abin Taipei, Taiwan
Asus WL-500g 的運算能力不是很強,架設了那麼多服務或程式,如果出了問題,並沒有任何回報機制。一般我們想到的是透過 mail,如果出什麼狀況 e-mail 出來通知就好,但不可能在WL-500g 上裝一套 mail server 吧?!我們要的只是有個 Agent 程式幫我們寄信,達到通知的目的就好。一般 ISP 都有提供他們的 SMTP server 給他們的用戶做 mail relay (信件轉寄),所以我們只要把信件的目的地和內容轉交給它,就可以達到代發寄信的目的(很多垃圾廣告信也是用這個原理寄出來的)。我們需要安裝一隻程式:esmtp,它能模擬成 Liunx 的 sendmail,幫我們把信交給 SMTP server,請它代發。安裝如下:
ipkg install esmtp
這個動作就可以把這個 agent 程式裝好了,我裝的版本是 0.5.1,跟著會安裝 library libesmtp (1.0.4)。但是只有這樣好像是不夠的,因為我執行時會發生 sendmail: can't load library 'libssl.so.0.9.7' 這樣的錯誤,看來連 openssl 的套件有相關性也要一併裝上,因為要用到其中的一些 library(這好像蠻重要的,這邊不裝其他地方也要裝,這也是為什麼很多文件會漏掉的原因,所以還是先補上去吧!我裝的版本是 0.9.7d):
ipkg install openssl
最後只要設定幫你做 mail relay 的 SMTP server 在哪裡,信件就可以寄了!原來預設是沒有設定檔的,我們手動建立:
nano /opt/etc/esmtprc
然後填入關於你的 SMTP 設定(hostname 後面最好把 port 25 加上,如果沒有帳號密碼,則第二和第三行可以不要。假設和我一樣用 Hinet ,設定為 'msa.hinet.net:25'):
hostname = your.smtp.server:25
username = "user"
password = "password"
存檔後就搞定啦!如果你不想用自己的 ISP 提供的服務,想用別人免費(如GMail)的 SMTP,有些要求用 SSL 認證,你還要搞定憑證的相關設定,可以到這邊參考怎麼弄。如果要先測試 mail relay 用的 SMTP 設定和伺服器能不能用,可以 telnet port 25 過去,用下面的幾個命令測試:
HELO <你要寄去的對方郵件伺服器>
MAIL FROM: <寄件人,有些 SMTP 會檢查寄件人以杜絕廣告信,亂打會有問題>
RCPT TO: <收件人,要打完整的 user@domain>
DATA
<接下來就是郵件內容,完整的 mail header 要自己做>
Subject: This is a test mail
To: user@domain.com
This is the text of my test mail.
. <"." 是用來作為內容結束提示的,按下 enter 以後就寄出了>
QUIT
esmtp 設定檔搞定好,接下來要測試一下,寄一封出來看看(esmtp 的執行檔也叫做 sendmail):
echo "Test Message" | sendmail receiver@domain.com -f sender@domain.com
其中 -f 後面帶的是寄信人的電子郵件,只要信箱 receiver@domain.com 有收到,這樣就大功告成啦(如果執行後等了很久 hang 住,代表你設定檔內容可能有誤)。不過這樣寄出來的信很醜,標題沒有內容,所以建議可以先產生一個信件檔,再把檔案內容透過 esmtp 寄出會比較漂亮。而內容至少要有三個欄位,然後再帶入郵件內容:
To: receiver@domain.com
From: sender@domain.com
Subject: <郵件主旨>
信件內容
假設這個郵件檔檔名叫 mail.txt,那麼把這封信寄出去的語法為:(-f 後面可以省略,還是會寄到)
cat mail.txt | sendmail receiver@domain.com -f sender@domain.com
寄信需要花一點時間。如果最後跳出一些其他的訊息,裡面還有 (null) 之類的字樣,代表是你的 SMTP server 有回錯誤出來,可能是伺服器、帳號密碼錯誤,也有可能是寄件人或收件人錯誤,要確定所有的資料都是對的才行。上面的辦法還要做一個檔案,下面我寫了一隻程式程式,是一個 shell 執行檔,可以在一行內把所需的資料都填入,方便做系統自動回報使用。你可以在 /opt/sbin 產生一個 shell 檔(我把執行檔檔名就叫做 "mail"):
nano /opt/sbin/mail
填入以下內容:
#!/bin/sh
#path to sendmail
SENDMAIL='/opt/sbin/sendmail'
while [ -n "$(echo $1 | grep '-')" ];
do
case $1 in
-s) SUBJECT=$2
shift;;
-r) RECEIVER=$2
shift;;
-m) MESSAGE=$2
shift;;
-f) FROM=$2
shift;;
esac
shift
done
# You must at least have mail subject and receiver
if [ -z "$SUBJECT" ] || [ -z "$RECEIVER" ]
then
echo "Usage: `basename $0` -s -r [-f ] [-m ]"
exit
fi
if [ ! -z "$FROM" ]
then
SENDMAIL="$SENDMAIL $RECEIVER -f $FROM"
else
SENDMAIL="$SENDMAIL $RECEIVER"
fi
(
echo "To: <$RECEIVER>"
if [ ! -z "$FROM" ]
then
echo "From: <$FROM>"
fi
echo "Subject: $SUBJECT"
echo ""
echo "$MESSAGE"
) | (eval $SENDMAIL)
最後存檔,記得變更檔案屬性成可執行:
chmod 755 /opt/sbin/mail
這個執行檔可以用參數的形式用一行命令列寄信出去,用法如下:
Usage: mail -s -r [-f ] [-m ]
-s 後面帶的是郵件標題,-r 帶的是收件者,-f 可以指定你寄出去的寄件者,-m 則是郵件的內容了。使用的範例:
mail -s "這是郵件主旨" -r receiver@domain.com -f sender@domain.com -m "信件的內容"
這個 mail 工具很好用,當系統出錯時可以指定執行寄發通知給你,也可以設在 crontab 裡面向你定期回報系統狀態,不需要架設郵件伺服器就可以做到了喔!(其實如果機器整個當掉,mail 也別想寄出去了~)
參考文章:
esmtp Turorial
最後修改: lubyhung (2008-05-15 00:15:28)
離線
相關討論主題
主題 | 回覆 | 點閱 | 最後發表 |
---|---|---|---|
Mail Agent - msmtp 作者 a00403a
|
0 | 5128 | 2016-08-14 02:15:56 作者 a00403a |
Baresip, SIP user agent 作者 hippo
|
0 | 7431 | 2014-01-12 21:00:53 作者 hippo |
如何設定DHCP Relay Agent? 作者 tsengleoo
|
0 | 6892 | 2013-08-28 16:33:18 作者 tsengleoo |
[Optware] ESMTP MTA + Gmail 測試 作者 hippo
|
0 | 9723 | 2011-05-16 23:40:32 作者 hippo |
安裝 Mail Agent - esmtp 作者 Aven
|
2 | 18874 | 2008-12-28 06:16:55 作者 kav |