歡迎您光臨本站 註冊首頁

轉載:ezmlm/ezmlm-idx的協同工作機制

←手機掃碼閱讀     火星人 @ 2014-03-05 , reply:0

轉載:ezmlm/ezmlm-idx的協同工作機制

最近因為公司要用到ezmlm,於是在網上查找相關資料,發現這方面的資料比較欠缺。於是,將找到的資料整理了一下,供大家參考;小弟水平有限,如有錯誤,敬請大家指出。

____________________________________________________________________________
    Ezmlm是easy mailing list management的縮寫,是基於qmail的一個高效、易用的郵件列表管理器,用戶可以使用它創建自己的郵件列表。ezmlm 非常可靠,即使面臨系統突然斷電的嚴重問題,它也不會丟失信件。ezmlm可以處理超大規模的郵件列表而不會受系統資源的限制。

    ezmlm-idx是對ezmlm的擴展,它修訂了ezmlm的部分功能並提供了擴展的其他豐富功能,使得管理和創建郵件列表更加簡單、有效。特別是,它提供了MySQL和pgSQL的支持,使得更加容易同其他應用共享郵件列表的信息。

ezmlm的工作機制:

    ezmlm在qmail-local中介入qmail郵件處理,通過設置特定的dot-qmail文件,從而實現郵件列表的功能,下面通過實例介紹ezmlm創建的dot-qmail文件及其處理流程。

    假定我們在虛擬域mail.test.com上使用ezmlm新建了郵件列表list-all@mail.test.com,ezmlm會在~vpopmail/domains/mail.test.com目錄下創建dot-qmail符號鏈接文件:

ls –la /home/vpopmail/domains/mail.test.com
________________________________________
.qmail-list-all@ -> /home/vpopmail/domains/mail.test.com/list-all/editor
.qmail-list-all-default@ -> /home/vpopmail/domains/mail.test.com/list-all/manager
.qmail-list-all-owner@ -> /home/vpopmail/domains/mail.test.com/list-all/owner
.qmail-list-all-return-default@ -> /home/vpopmail/domains/mail.test.com/list-all/bouncer
________________________________________

這四個dot-qmail文件分別負責郵件向郵件列表投遞(list-all)、遠程郵件管理(list-all-default)、向郵件管理者投遞(list-all-owner)和郵件反彈處理(list-all-return-default)。

    下面通過分析.qmail-list-all文件,來剖析ezmlm的工作機制:

cat .qmail-list-all
________________________________________
|/usr/local/bin/ezmlm/ezmlm-reject '/home/vpopmail/domains/mail.test.com/list-all'
|/usr/local/bin/ezmlm/ezmlm-issubn '/home/vpopmail/domains/mail.test.com/list-all' '/home/vpopmail/domains/mail.test.com/list-all/digest' '/home/vpopmail/domains/mail.test.com/list-all/allow' '/home/vpopmail/domains/mail.test.com/list-all/mod' || { echo "Sorry, only subscribers may post. If you are a subscriber, please forward this message to list-all-owner@mail.test.com to get your new address included (#5.7.2)"; exit 100 ; }
|/usr/local/bin/ezmlm/ezmlm-send '/home/vpopmail/domains/mail.test.com/list-all'
|/usr/local/bin/ezmlm/ezmlm-warn '/home/vpopmail/domains/mail.test.com/list-all' || exit 0
________________________________________

       由本文第一部分對dot-qmail文件的介紹,可見.qmail-list-all文件中每行都以 | 符號開始,後面跟隨的為投遞程序。下面這個介紹這四個程序:

l         ezmlm-reject dir
       該程序用來拒絕垃圾郵件,具體辦法是檢查郵件頭中是否包含Precedence:junk;後面所跟的參數dir用來讀取dir/msgsize中的郵件體最大值/最小值;ezmlm-reject還可以拒絕郵件體中特定的mime parts,拒絕規則在dir/mimerejects文件中定義(注意,ezmlm-reject只對要拒絕的mimeparts做標記,具體的剝離過程在ezmlm-send中進行)。

l         ezmlm-issubn
       該程序用來檢查郵件投遞人是否屬於該郵件列表,包括digest,allow,mod。如果ezmlm-issubn檢查結果為失敗,則返回錯誤提示消息給投遞者,錯誤推出碼為100。

l         ezmlm-send dir
       ezmlm-send的具體工作是將郵件投遞到郵件列表,並對投遞的郵件做其它相應處理。如果dir/archived文件存在,則ezmlm-send會為該投遞郵件保留一個備份;如果dir/indexed文件存在,會為郵件建立索引;另外,dir/charset文件會定義郵件的字元編碼處理;dir/maillinglist文件中定義了在郵件頭處添加的Mailling-List欄位;dir/listid文件將定義如何為郵件添加list-ID,這也是可選的。

    在經過上面這些處理后,ezmlm-send在郵件中添加dir/headeradd中的新欄位,並將標籤<#h#>、<#l#>和<#n#>替換為list-host-name、list-local-name和message number,然後輸出合適的Delivered-To行。接下來,ezmlm-send去除在dir/mimeremove中明確的MIME part;如果dir/prefix文件存在且不為空,則按該文件的內容為郵件主題加前綴。另外,如果前綴中包含#符號,最後一個#號將會被替換為郵件編號。

    注意,前綴的添加是違反Internet Mail Standards的,ezmlm提供這一功能是因為用戶的習慣和需求。

    最後,ezmlm-send不投遞反彈郵件至郵件列表。

l         ezmlm-warn
      ezmlm-warn檢查該郵件列表是否有合適的反彈消息需要發送,如果有則發送反彈消息,沒有則自動退出。

    遠程郵件管理(list-all-default)、向郵件管理者投遞(list-all-owner)和郵件反彈處理(list-all-return-default)的工作機制則同郵件列表投遞類似。

[ 本帖最後由 leo4364088 於 2006-12-5 10:49 編輯 ]
《解決方案》

不錯不錯.頂

[火星人 ] 轉載:ezmlm/ezmlm-idx的協同工作機制已經有369次圍觀

http://coctec.com/docs/service/show-post-43531.html