查看完整版本: Sendmail 下對所有寄出與寄進的信件存檔備份


adj 2007-11-30 11:47

Sendmail 下對所有寄出與寄進的信件存檔備份

Question?
Sendmail 有沒有辦法這樣做,例如業務發一封信出去,sendmail會自動送給我的帳號呢?就是檢查mail的意思,我知寄進來的可以轉送多個人,但是user寄mail出去我該如何設才能收到他寄給誰呢?

此篇文章是參考自[url=http://www.rtfiber.com.tw/~changyj/linuxtips/html/sendmail_backup_RH72.html]龍門少尉的窩[/url]
這邊以 RH 7.3 and sendmail 8.11.6 來說明...實做之後確實跟 Postfix 的功能差不多...只是比較麻煩而以...

[color=#ff0004]
步驟一:
產生負責備份的程式
[/color]
1.如果你的系統上已經安裝好了 gcc 等相關套件(安裝 Linux 時已選擇了 Kernel 或 Software Developement 時會自動安裝),也可以把 milter.tbz2 取回, 在你所習慣的工作目錄下解開,執行 make install 即會把 filter 程式檔安裝在 /usr/sbin 下。
Download:[url=http://www.rtfiber.com.tw/~changyj/linuxtips/html/milter.tbz2]milter.tbz2[/url]

註: 有關 milter.tgz 的說明
取自於 sendmail 的原始程式碼套件。
filter.c 取自於 原始程式碼套件中 libmilter/README 檔所附的範例。 唯原範例把信件備份於 /tmp,筆者修改路徑為 /var/spool/mail.backup。

2.修改 /etc/mail/sendmail.mc,(在檔尾)加入[code]define(`_FFR_MILTER')dnl
INPUT_MAIL_FILTER(`sample',`S=local:/var/run/filter.sock')dnl[/code]3.在 /etc/mail 下執行
#m4 sendmail.mc > /etc/sendmail.cf

4.先將 /etc/init.d/sendmail 備份,再修改該檔...
  a. vi /etc/init.d/sendmail 先找到以下這一段..[code]start() {
        # Start daemons.

        echo -n $"Starting $prog: "[/code]在其後加上[code]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[/code]b. 再先找到以下這一段...[code]stop() {
       # Stop daemons.
       echo -n $"Shutting down $prog: "
       killproc sendmail
       RETVAL=$?
       echo
       [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail[/code]在其後加上[code] [ -f /var/run/filter.pid ] && {
        kill -KILL `cat /var/run/filter.pid`
        rm -f /var/run/filter.sock
       }[/code]5.執行
  # mkdir /var/spool/mail.backup
以建立 /var/spool/mail.backup 這個目錄。

6.執行 service sendmail restart 重新啟動 sendmail...

[color=#ff0004]
步驟二:
把 sendmail 備份起來的信件按日期儲存在對應的目錄內[/color]

只要每天定期執行以下的 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 內容如下:[code]#!/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} \;[/code]2.執行
# chmod 700 /usr/sbin/move_backup_mail
設定適當權限。

3.可以以 root 身份執行 crontab,加入以下內容,以 設定每日零時五分自動執行...[code]5 0 * * * /usr/sbin/move_backup_mail[/code][color=#ff0004]
步驟三:
如何閱讀備份的郵件[/color]

若要閱讀一份檔名為 msg.XXYYZZ 的備份郵件,請利用以下的步驟,把該信件寄到你的 e-mail 信箱(如 adj , 或 [email=adj@adj.xxx.www]adj@adj.xxx.www[/email] 等):[code]sendmail adj < msg.XXYYZZ[/code]如果要一次把目錄內所有的備份信件(檔名為 msg 為首者)寄到 adj 這個帳號,則可用(在 bash 下):[code]for file in /var/spool/mail.backup/msg.*
do /usr/sbin/sendmail adj < $file
done[/code]那如果你想要信件寄出來之後就砍掉的話...可以在最後面加上一行...[code]for file in /var/spool/mail.backup/msg.*
do /usr/sbin/sendmail adj < $file
done
/bin/rm -f /var/spool/mail.backup/msg.*[/code]這樣就可以不保留信件囉...

整個步驟做完之後...就可以達到 Sendmail 下對所有寄出與寄進的信件存檔備份...現在才知道可以這樣做...如果不考慮道德面的情況下...有興趣的人倒是可以Try 看看啦...
頁: [1]
查看完整版本: Sendmail 下對所有寄出與寄進的信件存檔備份