Board logo

標題: [分享] 使用 SMTP 來傳送外送訊息 [打印本頁]

作者: 小誌    時間: 2010-5-25 22:59     標題: 使用 SMTP 來傳送外送訊息

簡介
Duwamish Online 應用程式可傳送電子郵件給客戶,告知其順序狀態,也可以傳給工作人員,幫助他們監督應用程式的運作。應用程式則使用由 Internet Information Services (IIS) 在 Microsoft® Windows® 2000 所提供的Simple Mail Transfer Protocol (SMTP) 服務。因為使用由「Internet 服務提供廠商」(ISP)、「Microsoft 資訊技術組」、或電子郵件伺服器所提供之外部電子郵件伺服器,或是使用全功能郵件系統 (如 Microsoft® Exchange Server) 的 SMTP 和使用者保固,在處理應用程式傳訊需求上更能得心應手。

雖然全功能的郵件系統可以提供更完整的服務,來處理內送和外送的電子郵件訊息,但是Windows 2000 中的 SMTP 服務,對於專司外送郵件的站台,卻更能節省成本而又不失效率 (它附送在作業系統當中)。

本文所討論的範圍包括 DuwamishOnline.com. 的 SMTP 服務組態和測試,不過我們得先簡單說明 SMTP 的運作方式。

SMTP 如何運作?
Simple Mail Transfer Protocol 是一種重要的 Internet 通訊協定 (IP),可以有效而穩定的傳送電子郵件。

SMTP 背後的點子相當簡單,使用者或應用程式 (此處是指 Duwamish Online) 撰寫一份訊息,其中除了訊息主旨和內容之外,還附上收件人的電子郵件地址 (例如,"[email protected]")。

接著將訊息傳送給指定的 SMTP 伺服器。SMTP 伺服器會根據收件人電子郵件地址的網域名稱 (例如,"somecompany.com"),與網域名稱系統 (DNS) 伺服器通信,後者則針對該網域,查閱並傳回目的 SMTP 伺服器的主機名稱 (例如,"mail.somecompany.com")。

最後,起始的 SMTP 伺服器再透過 Transmission Control Protocol/Internet Protocol (TCP/IP) 連接埠 25,直接與目的 SMTP 伺服器通信。如果收件人電子郵件地址的使用者名稱,與目的伺服器中的一個授權使用者帳戶相符,原始電子郵件訊息就會傳送到該伺服器,並等候收件人透過用戶端程式來收取訊息。

如果起始 SMTP 伺服器無法直接與目的伺服器通信,SMTP 通訊協定也會提供機制,透過一個以上的中繼轉接 SMTP 伺服器來傳送訊息。轉接伺服器在收到原始訊息後,會將它傳送給目的伺服器,或是重新導向給另一個轉接伺服器。這個程序會一直反覆執行,直到訊息傳送出去,或是超過指定的等候時間為止。

在 Windows 2000 設定 SMTP
自前幾版的 Microsoft Windows NT® 以來,SMTP 服務已經成為 Internet Information Services (IIS) 了。由於 SMTP 服務主要是用在 Duwamish Online,來處理少量確認順序的外送電子郵件訊息,因此一開始並沒有必要特別指定一部電腦來執行這項功能。最後我們決定將 SMTP 服務承載到已經連上外部 Internet 網路區段的順序處理伺服器。

要為 Duwamish Online 網站設定 SMTP 服務,只要遵照步驟執行即可。

安裝 SMTP 服務

安裝 SMTP 服務的步驟


請注意 您得安裝好幾種 IIS 元件,才能使用 SMTP 服務,包括:Internet Information Services 嵌入式管理單元、World Wide Web 伺服器以及 Common Files 元件。這些元件都會自動選取,與 SMTP 服務元件一起安裝。

設定 SMTP 服務

如果 SMTP 服務是安裝在與 Internet 連線的主機上,而面對 Internet 的防火牆也沒有阻隔 連接埠 25 不讓 SMTP 傳送訊息,那麼只要採用 SMTP 服務的預設設定,應該就可以傳遞任何外送的電子郵件訊息。不過,您還是得考慮為SMTP 服務做幾項安全設定,這些設定大部份都可以透過「Internet 服務管理員」管理主控台加以更改。

啟動 IIS 管理主控台的步驟



設定伺服器記錄的步驟


請注意 如果要限制記錄檔的大小,就不能選取太多項目。下面幾個都是建議您選取的項目:「日期」、「時間」、「用戶端 IP 位址」、「使用者名稱」、「服務名程」、「方法」、「送出的位元組」以及「接收到的位元組」。

設定存取控制的步驟



指定轉接用的智慧主機

如果 SMTP 伺服器前面的防火牆,會擋住所有直接的 SMTP 資料傳輸 (透過連接埠 25),您就得在網路上找出是否有可用的智慧主機,可以將所有的 SMTP 訊息傳送到 Internet。

基本上,智慧主機只是另一部有權將外送電子郵件訊息從其他內部 SMTP 伺服器直接轉接到 Internet 的 SMTP 伺服器而已。也就是說,智慧主機必須同時連接內部網路和 Internet,作為電子郵件閘道。

只要在網路上找到智慧主機,就可以設定 SMTP 伺服器。

設定 SMTP 伺服器的步驟




驗證 SMTP 服務

您可以用下列幾種方式來驗證 SMTP 服務是否運作正常。

以電子郵件用戶端加以測試

首先,您可以選用標準的 Internet 電子郵件用戶端程式 (如 Microsoft Outlook® Express) 作快速驗證。請先找出您可以指定外送電子郵件 (SMTP) 伺服器的地方,將它改成新 SMTP 伺服器的網域名稱,再傳送一則測試訊息到您常用的電子郵件地址,來驗證其傳遞作業。

以 Pickup 目錄加以測試

您也可以根據 SMTP 規格 (RFC 822),撰寫一個簡單的電子郵件文字檔。下面就是以「記事本」撰寫的文字檔範例:
  1. From:[email protected]
  2. To:[email protected]
  3. Subject:testing

  4. This is the test message body.
複製代碼
只要將這個文字檔複製或移到安裝 SMTP 的 Pickup 目錄下即可(預設的路徑應該是"root:\Inetpub\mailroot\Pickup")。SMTP 服務會定時檢查這個 Pickup 目錄,並傳遞該目錄下所找到的任何訊息。您可以驗證是否收得到來自目的信箱的測試訊息。

有關將訊息妥善格式化的 RFC 822 規格,請參閱 http://msdn.microsoft.com/librar ... d1-23fd8aef05ce.asp 下的 The RFC 822 Message Format。

以 CDO 加以測試

另一個驗證 SMTP 服務的方法,就是用 Collaboration Data Objects (CDO) for Windows 2000 撰寫簡單的 Microsoft Visual Basic® Scripting Edition (VBScript) 指令檔。

CDO for Windows 2000 (又稱為 CDO 2.0 或 Cdosys.dll) 是一種合作元件的套件,主要是用來簡化 Internet 訊息的建立或操作。開發人員可以使用 CDO,透過 SMTP 通訊協定和本機Pickup 目錄來收送訊息,而不必自已撰寫程式碼來進行 SMTP 通信。其他詳細資訊,請參閱有關 CDO for Windows 2000 的文章,網址為 http://msdn.microsoft.com/librar ... 7c-7e4154a18f50.asp

下面這個 VBScript 範例所示範的是,如何使用 CDO,透過 SMTP 服務來傳遞訊息:
  1. set msg = WScript.CreateObject("CDO.Message")
  2. msg.From = "[email protected]"
  3. msg.To = "[email protected]"
  4. msg.Subject = "testing"
  5. msg.TextBody = "This is a test message body."

  6. msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtpserver.mydomain.com"

  7. msg.Configuration.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

  8. msg.Configuration.Fields.Update
  9. msg.Send
複製代碼
這個程式碼範例在前五行建立了 CDO 物件,並指定訊息的基本資訊。

接下來的兩行則使用 CDO 組態物件來設定各種組態設定的欄位值。每一個欄位都由兩個部份所組成:名稱環境首碼 (如 "http://schemas.microsoft.com/cdo/configuration/") 以及本機名稱 (如 "smtpserver")。

這個機制是以 World Wide Web Consortium (W3C) XML 格式的名稱環境建議 (http://www.w3c.org/TR/REC-xml-names/) 為依據,主要是在其他相關版本的 CDO 元件之間提供一致性和相容性。

"smtpserver" 欄位可指定 SMTP 伺服器的網域名稱 (或 IP 位址),而 "sendusing" 欄位則定義是要使用本機 SMTP 服務放置目錄來傳送訊息,還是直接透過網路傳到 SMTP 伺服器。後者的值設為 2,意思是透過網路,將訊息傳到指定的 SMTP 伺服器。

程式碼的最後兩行則是更新組態設定,並啟動訊息的傳遞作業。

使用 CDO 元件來驗證 SMTP 服務是有點大材小用,不過,指令檔對於其他系統管理作業來說卻是相當有用。舉個例說,指令檔可以用在「效能記錄檔及警示」程式中,當某些系統計數器超過指定的臨界值時,即以電子郵件發出通知。

指出傳遞失敗

如果電子郵件訊息因故無法傳遞 (例如,使用者名稱或電子郵件地址不對),它會重新導向Badmail 目錄。根據預設值,Badmail 目錄的位置應該是在"root:\Inetpub\mailroot\Badmail"。請檢查被退回的電子郵件內容和錯誤訊息,儘可能更正錯誤,然後再透過剛剛所討論的其中一種傳遞方法,將訊息再重新傳送一次。

除了 Badmail 目錄之外,電子郵件訊息也可以放在 Queue 目錄下長達一段指定時間(您可以調整 [預設 SMTP 虛擬伺服器內容] 對話方塊的 [傳送] 標籤中的輸出 [重試間隔],來指定這個設定值)。如果因為網路忙線或當掉,而無法立即傳遞訊息,訊息就會儲存在這個 Queue 目錄下,每隔指定的間隔時間再加以傳送。如果 SMTP 在幾次失敗之後放棄傳遞,那麼訊息最後就會被送到 Badmail 目錄下。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)