qmail總結筆記(1)

2021-04-02 19:12:04 字數 3314 閱讀 4932

1.qmail實用程式

bouncesaying: 允許使用者將訊息**給程式或程式不可用時**訊息。

condredirect: 允許使用者將訊息**給程式,然後**給另乙個位址。

qmail-qread:產生乙個顯示當前郵件佇列裡訊息的報告。

qmail-qstat:產生乙個報告來顯示當前處在qmail投送狀態下等待傳送的訊息數目。

qmail-showctl:顯示當前的qmail系統的配置情況。

qmail-**tpd:顯示來自遠端主機的**tp連線請求。

qmail-start:初始化qmail的啟動指令碼。

qmail-tcpok:用來清空qmail-remote中用到的tcp超時紀錄表。

qmail-tcpto:顯示當前的tcp超時紀錄表。

splogger:將訊息插入到系統登入程式中。

2.後台程序:

1.qmail-send2.splogger 3.qmail 4. qmail-lspawn 5.qmail-rspawn 6.qmail-clean

qmail-**tpd程序由tcpserver監視到25埠的連線後啟動。

mua: 例如pop3d (郵件使用者**) mua:例如**tpd(郵件傳輸**)

3.qmail-queue與qmail-send處理郵件的方法,深入qmail郵件訊息佇列的內部:

1)訊息插入在pid子目錄下做臨時存放

2)後拷貝至mess子目錄裡,檔名便是在pid子目錄裡建立的臨時檔案的inode編號,如果系統在這個時候崩潰了,qmail-queue能夠通過檢查mess子目錄來判斷是否有儲存的訊息等待著被處理。任何來自本地或遠端使用者的訊息被傳送到郵件佇列後,都會被放在mess子目錄下。在intd下建立檔案,檔名與mess子目錄下的檔名相同。

3)掃瞄mess,相應的頭資訊被複製到intd目錄中的檔案中時,訊息完成了它的第三個狀態進入4

4)將intd子目錄下產生的檔案鏈結到todo子目錄下的同名檔案(todo 與 intd在相同的檔案系統中。鏈結成功後,qmail-queue完成了他的工作,就由qmail-send來預處理。

qmail-send 首先檢查info(f加上發件人位址)、local(本地t加上收件人位址)和remote(本地r加上收件人位址)子目錄來判斷是否存在與訊息檔案同名的檔案,如果有,他們將被自動刪除。

檢查完後,qmail-send讀取todo檔案並在info目錄下建立乙個檔案,他包含了訊息傳送方的頭資訊,傳送完info資訊後,qmail-send決定接收方並根據訊息中所列的接收方在local和remote子目錄下建立乙個新檔案。所有訊息中的本地位址都在local下,所有訊息中的遠端位址都在remote下。

5)訊息分發:qmail-send讀取每乙個接收方位址,並試圖將mess目錄下的訊息正文投送給指定的接收方,qmail-send將檔案中的每乙個接收方根據投送請求的狀態標以完成(done,在remote目錄下的檔案裡的收件位址前標以d代替原來的t,如把[email protected]^@改為[email protected])或未完成(undone).done的則刪除相應的頭資訊(info中),undone的則仍然保留著,當所有的接收方已經成功的收到訊息,該訊息檔案會從子目錄中刪除。如果qmail-send嘗試將乙個訊息投送給接收方而收到乙個臨時投送錯誤,它會標記上not done,即在local或remote下的收件位址中t保留,這樣會被再次處理,如果投送請求收到了乙個永久失敗的訊號,qmail-send將接收方標以done並在bounce子目錄的檔案中新增一行紀錄。如果bounce子目錄下沒有該訊息的紀錄檔案存在,那麼就建立乙個新檔案。

bouce 子目錄下的訊息:bouce子目錄下的訊息作為新訊息來對待,bouce檔案和mess檔案合併起來產生乙個新的訊息,該訊息將被重新加入qmail-queue程序並被傳送給原始的訊息傳送方。一旦新的訊息建立了,bounce子目錄中的檔案將被刪除。

一旦接收方完成了並且local和remote中的檔案被刪除,訊息分發就完成了。如果存在乙個bounce訊息,它會如前所述的那樣被處理刪除。接下來,info子目錄下的檔案被刪除,暫時將訊息放回到訊息狀態2。最後,mess子目錄下的檔案被刪除,將訊息返回到訊息狀態1並完成訊息處理。投送完成。

6)訊息清除:如果由於某種無法解釋的原因,乙個訊息被終止了36個小時,qmail會認為乙個災難性的錯誤發生了,並試圖刪除該訊息。首先刪除intd,然後是mess.如果pid子目錄下的檔案36小時沒有被處理,也被刪除。

dnscache是dan bernstein嘗試開發的乙個dns伺服器和客戶端程式,允許更為簡單的dns伺服器的配置,使用了簡單的命令列程式來向dns資料庫中新增記錄,可以作為本地快取dns伺服器來提高qmail的網域名稱查詢效率。

4.

**tp解析

在使用者收到的最終檔案文字裡的deliverd-to:與return-path:是qmail-send加上去的,根據的是使用者在進行25埠鏈結時所發的mail to:rcpt to:命令最後的投遞使用者是根據rcpt to:裡面的資訊來的。

其餘部分是基本遵循rfc822郵件格式的。

一對received與received from 都是每次經過乙個中繼加上去的,received一般表示本地接收程序的資訊,received from 是對方傳送程序的資訊。

在rfc822裡,也定義了mime,用來在郵件中傳送二進位制資料,分為mime頭資訊與mime body資訊,在頭資訊裡包含乙個比較重要的選項便是content-transfer-encoding頭欄位,頭字段中指明了嵌入到訊息中的二進位制資料是如何被編譯成ascii碼的,最為常用的是base64型,即把六位的資料塊對映成可列印的ascii文字字元塊。

rfc1869定義了一種擴充套件**tp的方法,稱之為**tp擴充套件。既保持了原有檔案的規範,又添入了許多新的特性。使用了ehlo來取代原始的**tp問候命令(helo)。當乙個**tp伺服器接收到這個命令時,他應該意識到客戶端將有能力傳送擴充套件的**tp命令。

5.qmtp(用在兩個郵件伺服器之間進行郵件**)

與**tp不同,qmtp並不是用一串ascii命令來控制郵件傳輸的。它假定客戶端能夠傳送郵件包,而伺服器也能夠接收郵件包。乙個qmtp郵件包由訊息體,傳送方和乙個或多個接收方組成。伺服器必須返回乙個資訊來響應整個訊息包,但客戶在傳送下乙個包之前,不必等待前乙個包的響應。

使用209埠監聽。

伺服器響應

k-----接收到的訊息ok並接收投送

z-----暫時失敗

d-----永久失敗

客戶端接收到乙個z響應,可能會試圖重新提交該包,如果客戶端接收到乙個d響應,它會向本地的mta系統返回乙個出錯**來指明發生了乙個永久的投送錯誤。

qmail總結筆記(2)

1 qmail 文件 man 文件 var qmail man 你可能需要自己手動增加這個手冊目錄路徑到你的環境變數manpath裡面.shell 直譯器 命令列 bourne bin sh manpath manpath var qmail man export manpath qmail發行版包...

Servlet總結筆記1

一.servlet生命週期 1.載入,通常在web伺服器啟動時載入該類 2,例項化 與一般普通物件無異 3.初始化,呼叫init 方法 4.呼叫service方法,處理post or get 請求 5.結束 destory 二.servlet不同於一般物件 每個servlet擁有乙個servletc...

深度學習筆記總結 1

針對深度學習基礎部分,有必要惡補一些吳恩達的深度學習課程,其實晚上有很多總結和筆記,本系列文章是針對黃海廣大佬整理的 深度學習課程筆記 v5.47 的總結和自己的理解,以便加深印象和複習。下面是邏輯回歸的輸出函式 損失函式又叫做誤差函式,用來衡量演算法的運 況,loss function 通過這個?...