echo -e "subject: a subject\n\nmessage text" | sendmail -f my@address recipient@address
你同時也可以cat 1.txt | sendmail -f my@address recipient@address
sed -i 1isubject\:test 1.txt
附帶一些資料,以後研究
關於sendmail/qmail/postfix孰優孰劣,以及部署郵件系統的時候該選哪乙個的討論已經重複了千百次了。但事實往往並不是a好b壞,或b好a壞,必須根據場合和應用的要求來定。但雖然如此,大多數人還是需要乙個相對公平的評價,以引導郵件系統的部署。
自己一直很慎重於回答這類問題,以免引發不必要的爭論甚至矛盾,但還是必須面對這個問題做一定的分析和比較的,否則很多朋友經常會問「到底用哪個好?」,卻拿不出完整的答案。
首先看看三個mta的歷史...
mtas的發展歷史
sendmail
毫無疑問,sendmail是最古老的mta之一。它比qmail和postfix要古老得多。最早它誕生的時候,internet還沒有被標準化,當時主機之間使用的是uucp技術來交換郵件。
它被設計得比較靈活,便於配置和執行於各種型別的機器。
qmail
qmail 是新生一代的mta代表,它以速度快、體積小、易配置安裝等特性而著稱。作者d. j. bernstein(djb)是乙個數學教授,富有傳奇色彩。djb於2023年開發qmail,2023年發布0.70版,並使用了多種當時比較先進的 技術,包括maildir,與sendmail單個binary不同的模組化設計,許可權分離,以及使用了大量由djb編寫的配套工具,如 daemontools,ucsip-tcp等。
qmail迅速成為了internet上最有名的mta,使用者眾。
postfix
postfix作者是wietse venema,一名著名的安全專家。最早postfix起源於2023年,當時venema 在美國ibm研究中心負責研究更安全的郵件系統,當時稱為vmailer。後因為商標問題於2023年11月正式更名為postfix
postfix 以替代sendmail為目的,並提供了乙個更安全、更高效能的靈活的體系。它同樣也採用模組化設計,使用了大量優秀的技術,以達到安全的目的。由於作者 的設計理念獨到,經過7,8年時間,postfix現今已發展成為功能非常豐富,擴充套件性和安全性強的優秀mta。
概括的比較 以下的分析主要基於我在casa上發的乙個小文章,對sendmail/qmail/postfix做了乙個概括性的比較。
sendmail
sendmai功能非常強大,很多先進功能在sendmail上都最先有實現。sendmail裡的milter技術是乙個非常好的框架,目前postfix及qmail仍然沒有官方發布的方案比milter要好。
但 sendmail也有典型的歷史問題,只有乙個binary程式,需要sid許可權,m4配置檔案複雜難懂。這些是是阻礙sendmail更好發展的一些客 觀問題。客觀來說,調教得好的sendmail,其效能也是相當不俗的,據乙個國外的unix雜誌稱,在solaris+記憶體檔案系統+帶電池的raid 系統下,sendmail能達到驚人的287封/秒的注入速度!
目前sendmail比較適合那些老使用者,因為他們習慣了sendmail的應用環境和配置。
qmail
qmail 體積非常小巧,source的gz包大概只有260多k,是三大mta中最小的!模組化設計,避免了sid問題,基本功能齊全。配置相對sendmail 而言,簡單了很多,而且使用者非常廣泛。而且補丁和外掛程式非常多,例如著名的vpopmail,netqmail,以及qmail-ldap等。
但qmail有幾個問題,一是djb已經5,6年沒有繼續開發了,補丁的良莠不齊及版本依賴是非常麻煩的事,這對初學者極為不利。二是功能擴充需要補丁來完成,擴充套件能力不足。
總 體上qmail依然是個非常不錯的選擇。對於希望了解mta原理,或希望修改mta**的愛好者,qmail是值得推薦的。對於需要建立中小型郵件系統的 使用者也同樣適合。而對於需要豐富功能卻不想面對補丁困難,或者需要建立大型的系統,qmail不太合適,需要更豐富的經驗和技術。
postfix
postfix 如今已經獨樹一幟,流水線、模組化的設計,兼顧了效率和功能。靈活的配置和擴充套件,使得配置postfix變得富有趣味。其主要的特點是速度快、穩定,而且 配置/功能非常強大,並和sendmail類似,提供了與外部程式對接的api/protocol。尤其是配置部分,可以說是一掃qmail和 sendmail的各自缺點。
但postfix管理及配置的入門依然需要一定的工夫,必須仔細閱讀官方文件。postfix另乙個優勢是至今依然保持活躍的開發工作,而且穩步發展,適合高流量大負載的系統,擴充能力較強。
大規模應用例子
國內若干個大型email isp(如163.net/tom.com/163.com及sohu等)過去都使用qmail,後來全部更換成postfix。
技術層面的分析 這裡僅**一些典型的技術特點,從這些特點可以看出每個mta設計的異同,主要討論的焦點是qmail和postfix。
磁碟i/o
從 佇列檔案的讀寫來看,qmail處理每一封郵件時,都至少需要建立3個檔案,mess, intd, info等。而postfix使用的是單佇列檔案設計,因此磁碟i/o的開銷要比qmail小得多,如果僅僅從這個方面考慮,postfix的佇列是 qmail的2-4倍那麼快。
從我過去的乙個qmail vs postfix對比測試中,也可以發現這個問題。
資料同步
如 果從mta對待作業系統的檔案是否安全寫入磁碟的策略來看,qmail和postfix也是不同的。postfix使用的是隨機寫,並且需要寫入完成並安 全同步到磁碟後才算完成。而qmail的寫入則是即刻執行的,因此它將等待資料安全寫入磁碟後才返回。對於高流量的系統而言,這將導致效能問題。
此外,postfix的佇列對於freebsd的softupdate是安全的,而qmail則是不安全的,qmail作者明確警告使用者不要使用softupdate,除非是有磁碟後寫電池。
擴充能力
sendmail有著非常好的擴充能力,支援眾多的特性,功能可謂豪華。包括頻率控制到集群支援應有盡有。而milter api則更加使sendmail的靈活性發揮至極,通過milter,使用者可以對郵件幾乎所有的引數進行控制!但是在儲存方面,由於只支援mbox,會有一定的問題。
qmail在系統容量擴充套件上有著獨到的設計,配合qmail-ldap補丁,可以充分利用qmqp及分布儲存的優勢。現今已有各式各樣的qmail擴充套件方案,最著名的是qmail-ldap。但qmail缺乏類似milter的設計,功能擴充套件需要各種補丁,而補丁的設計水平參差不齊,配置能力有限。實施起來相對是最複雜的。
postfix 同樣有著非常好的容量擴充能力,利用lmtp或transport的/alias的方法,可以分布式的儲存郵件,擴充容量。同時postfix的功能擴充套件 也非常強,通過靈活的配置即可實現複雜的功能,這是其最突出的優點之一,是qmail望塵莫及的。此外,類似sendmail的 milter,postfix擁有content_filter和policy 兩個與外部程式/應用對接的介面,但不如milter那樣功能集中和靈活,也沒有完整實現qmail的qmqp及類似qmail-ldap的機制。
可配置性
sendmail 使用m4語法,單一的主配置檔案(sendmail.cf)是三個mta中最難使用的,但是如果熟悉使用的話卻能實現複雜的功能。
qmail使用的是大量小配置文字,格式最簡單,每個配置乙個檔案,存放在/var/qmail/control目錄裡。
postfix也使用單一的主配置檔案(main.cf),同時還有對應master主服務程序的配置檔案master.cf,但使用的是簡明易懂的key = value 格式。
總體而言,qmail的配置檔案較易管理(格式最簡單)但配置檔案多(10個以上),而postfix的格式簡單只有2個配置檔案,並配備強大的postconf工具,sendmail的配置檔案最複雜。
資料庫支援
sendmail通過一些外掛程式/補丁,可以支援mysql/pgsql/oracle等,ldap及小型的dbm/cdb等資料儲存格式。
qmail預設只支援cdb,需通過補丁才可支援ldap,mysql,pgsql及oracle等。
postfix可以支援的資料庫應該是最多的,預設就包括了mysql/pgsql/ldap及dbm/cdb和cidr/nis*/btree等一堆。還支援特殊的tcp_table(僅在snapshot裡支援)
穩定性/負載能力
sendmail, qmail, postfix都比較穩定。在高負載下,配置不佳或沒有打足夠補丁的qmail容易被dos攻擊打跨,而postfix在遇到超過配置的限制時會降低處理能力,但系統依然有一定資源可用。
作者介紹
sendmail - eric allman unix專家、學者
qmail - djb 數學教授,科學家
postfix - wietse venema 安全專家 學者
recommentaion - 建議 我建議在使用postfix mta,無論是小型系統,還是大中型系統,能帶來最高的價效比
busybox中sendmail命令使用
1 busybox 只支援sendmail命令傳送郵件,暫不支援mail命令 mail呼叫sendmail命令傳送郵件 2 sendmail用法 cat mail.txt subject test cc to to 163.com from from 163.com 郵件格式頭和內容之間一定要有空行...
SendMail 傳送測試 使用
extern c declspec dllimport dword setmailinfo char subject,char context,char filename extern c declspec dllimport dword setmaildest char mailname exte...
使用sendmail產生subject亂碼
首先,這個問題頭疼了我好多天,因為我一共使用sendmail同時傳送5封郵件,郵件的subject分別為 xx x總資料,xx part1資料,xx xpart2資料,xx xpart3資料,xx xpart4資料,其中有一些是有英文,有一些是有重複字串,最後導致的結果是一部分的郵件標題不亂嗎,一部...