Question?
Sendmail 有沒有辦法這樣做,例如業務發一封信出去,sendmail會自動送給我的帳號呢?就是檢查mail的意思,我知寄進來的可以轉送多個人,但是user寄mail出去我該如何設才能收到他寄給誰呢?
原文: http://phorum.study-area.org/viewtopic.php?t=17149
此篇文章是參考自龍門少尉的窩這邊以 RH 7.3 and sendmail 8.11.6 來說明...實做之後確實跟 Postfix 的功能差不多...只是比較麻煩而以...
步驟一:
產生負責備份的程式
1.如果你的系統上已經安裝好了 gcc 等相關套件(安裝 Linux 時已選擇了 Kernel 或 Software Developement 時會自動安裝),也可以把 milter.tbz2 取回, 在你所習慣的工作目錄下解開,執行 make install 即會把 filter 程式檔安裝在 /usr/sbin 下。
Download: milter.tbz2
註: 有關 milter.tgz 的說明
取自於 sendmail 的原始程式碼套件。
filter.c 取自於 原始程式碼套件中 libmilter/README 檔所附的範例。 唯原範例把信件備份於 /tmp,筆者修改路徑為 /var/spool/mail.backup。
2.修改 /etc/mail/sendmail.mc,(在檔尾)加入
代碼: |
define(`_FFR_MILTER')dnl INPUT_MAIL_FILTER(`sample',`S=local:/var/run/filter.sock')dnl |
3.在 /etc/mail 下執行
#m4 sendmail.mc > /etc/sendmail.cf
4.先將 /etc/init.d/sendmail 備份,再修改該檔...
a. vi /etc/init.d/sendmail 先找到以下這一段..
代碼: |
start() { # Start daemons. echo -n $"Starting $prog: " |
在其後加上
代碼: |
rm -f /var/run/filter.sock /usr/sbin/filter -p local:/var/run/filter.sock & echo $! > /var/run/filter.pid sleep 3 chmod go-rwx /var/run/filter.sock |
b. 再先找到以下這一段...
代碼: |
stop() { # Stop daemons. echo -n $"Shutting down $prog: " killproc sendmail RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail |
在其後加上
代碼: |
[ -f /var/run/filter.pid ] && { kill -KILL `cat /var/run/filter.pid` rm -f /var/run/filter.sock } |
5.執行
# mkdir /var/spool/mail.backup
以建立 /var/spool/mail.backup 這個目錄。
6.執行 service sendmail restart 重新啟動 sendmail...
步驟二:
把 sendmail 備份起來的信件按日期儲存在對應的目錄內
只要每天定期執行以下的 script,筆者把它取名為 move_backup_mail,它會把前一天的信件儲存在 /var/spool/mail.backup 下對應的目錄。例如今天是 2002 年 3 月 12 日,該 script 會先建立 /var/spool/mail.backup/20020311,然後把所有 2002 年 3 月 11 日的信件搬到該目錄內。
1. vi /usr/sbin/move_backup_mail
Script 內容如下:
代碼: |
#!/bin/bash TODAY=`date +%Y%m%d` cd /var/spool/mail.backup touch -t ${TODAY}0000 dummy DATE=`date --date=yesterday '+%Y%m%d'` mkdir ${DATE} find . -name 'msg.*' -type f ! -newer dummy -maxdepth 1 -exec mv {} ${DATE} ; |
2.執行
# chmod 700 /usr/sbin/move_backup_mail
設定適當權限。
3.可以以 root 身份執行 crontab,加入以下內容,以 設定每日零時五分自動執行...
代碼: |
5 0 * * * /usr/sbin/move_backup_mail |
步驟三:
如何閱讀備份的郵件
若要閱讀一份檔名為 msg.XXYYZZ 的備份郵件,請利用以下的步驟,把該信件寄到你的 e-mail 信箱(如 adj , 或 adj@adj.xxx.www 等):
代碼: |
sendmail adj < msg.XXYYZZ |
如果要一次把目錄內所有的備份信件(檔名為 msg 為首者)寄到 adj 這個帳號,則可用(在 bash 下):
代碼: |
for file in /var/spool/mail.backup/msg.* do /usr/sbin/sendmail drop < $file done |
那如果你想要信件寄出來之後就砍掉的話...可以在最後面加上一行...
代碼: |
for file in /var/spool/mail.backup/msg.* do /usr/sbin/sendmail drop < $file done /bin/rm -f /var/spool/mail.backup/msg.* |
這樣就可以不保留信件囉...
整個步驟做完之後...就可以達到 Sendmail 下對所有寄出與寄進的信件存檔備份...現在才知道可以這樣做...如果不考慮道德面的情況下...有興趣的人倒是可以Try 看看啦...
沒有留言:
張貼留言