麻辣家族討論版版's Archiver

小誌 發表於 2010-5-25 22:59

使用 SMTP 來傳送外送訊息

[color=Green][size=4][b]簡介[/b][/size][/color]
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 的運作方式。

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

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

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

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

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

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

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

安裝 SMTP 服務

[color=Green][size=4][b]安裝 SMTP 服務的步驟 [/b][/size][/color]

[list]
[*]從 [開始] 功能表指向 [設定] 的 [控制台],然後按兩下 [新增/移除程式],再按一下 [新增/移除 Windows 元件],然後再按一下 [元件] 按鈕。
[*]在「Windows 元件精靈」中選取 Internet Information Services (IIS),然後按一下 [詳細資料],選取[SMTP 服務] 元件,然後再按一下 [確定]。
[/list]
[color=Red]請注意 [/color]您得安裝好幾種 IIS 元件,才能使用 SMTP 服務,包括:Internet Information Services 嵌入式管理單元、World Wide Web 伺服器以及 Common Files 元件。這些元件都會自動選取,與 SMTP 服務元件一起安裝。

[color=Green][b][size=4]設定 SMTP 服務[/size][/b][/color]

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

[color=Green][size=4][b]啟動 IIS 管理主控台的步驟 [/b][/size][/color]

[list]
[*]從 [開始] 功能表指向 [程式集] \ [系統管理工具]。
[*]按一下 [Internet 服務管理員],啟動管理主控台
[/list]。

[color=Green][size=4][b]設定伺服器記錄的步驟[/b][/size][/color]

[list=1]
[*]自 Internet Information Services 對話方塊的左窗格展開樹狀目錄,在 [預設 SMTP 虛擬伺服器] 按一下滑鼠右鍵,然後選取 [內容]。
[*]在 [內容] 對話方塊中按一下 [一般] 標籤,勾選該核取方塊,針對伺服器來啟用記錄。這項內容並不是預設在啟用狀態的。
[*]選取您喜歡的記錄檔格式。預設的設定是W3C 擴充日誌檔格式。
[*]按一下記錄檔格式下拉式功能表旁邊的 [內容] 按鈕。
[*]必要的話,調整排程和檔名以進行記錄檔案換用。
[*]按一下 [擴充內容] 標籤。
[*]選取感興趣的項目,然後按一下 [確定]。
[/list]
[color=Red]請注意 [/color]如果要限制記錄檔的大小,就不能選取太多項目。下面幾個都是建議您選取的項目:「日期」、「時間」、「用戶端 IP 位址」、「使用者名稱」、「服務名程」、「方法」、「送出的位元組」以及「接收到的位元組」。

[color=Green][size=4][b]設定存取控制的步驟[/b][/size][/color]

[list]
[*]在 [內容] 對話方塊中按一下 [存取] 標籤,再按一下 [轉接] 按鈕,控制哪一部 (哪幾部) 電腦可以轉接電子郵件訊息到 SMTP 伺服器。
[*]在 [轉接限制] 對話方塊中按一下 [新增]。
[*]在 [電腦] 對話方塊中,輸入可以透過 SMTP 伺服器來轉接電子郵件之電腦的 IP 位址。接著再按一下 [確定],套用剛剛所做的更改。
[*]請注意 如果外送訊息是從同一部機器送到 SMTP 伺服器,那麼只要採用「轉接」許可權的預設設定就可以了。不過,如果訊息是從另一部電腦傳送的話,您就得在許可權清單當中,加上那一部電腦的 IP 位址或網域名稱,才能執行「轉接」功能。
[/list]

[color=Green][size=4][b]指定轉接用的智慧主機[/b][/size][/color]

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

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

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

[color=Green][size=4][b]設定 SMTP 伺服器的步驟[/b][/size][/color]

[list=1]
[*]在 [內容] 對話方塊中,按一下 [傳送] 標籤,然後再按一下 [進階] 按鈕,開啟 [進階傳送] 對話方塊。
[*]在智慧主機欄位中,輸入該智慧主機的完整網域名稱 (FQDN)。您也可以輸入該智慧主機的 IP 位址,IP 位址兩邊各以 [ 和 ] 括住,如"[10.10.10.1]"。 [ ] 的目的是加快 DNS 查閱處理的速度。
[*]按一下 [確定] 完成剛剛所做的更動。
[/list]


驗證 SMTP 服務

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

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

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

以 Pickup 目錄加以測試

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

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

有關將訊息妥善格式化的 RFC 822 規格,請參閱 [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/f12ea64a-5275-4a8d-a9d1-23fd8aef05ce.asp[/url] 下的 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 的文章,網址為 [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/ecdb51f4-5ba0-46d8-9c7c-7e4154a18f50.asp[/url]

下面這個 VBScript 範例所示範的是,如何使用 CDO,透過 SMTP 服務來傳遞訊息:[code]set msg = WScript.CreateObject("CDO.Message")
msg.From = "myname@mydomain.com"
msg.To = "someone@somedomain.com"
msg.Subject = "testing"
msg.TextBody = "This is a test message body."

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

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

msg.Configuration.Fields.Update
msg.Send[/code]這個程式碼範例在前五行建立了 CDO 物件,並指定訊息的基本資訊。

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

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

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

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

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

指出傳遞失敗

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

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

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供