在 IIS 7 和更新版本中設定 SMTP 電子郵件

作者:Tali Smith

注意

本文提及的 IIS SMTP 虛擬伺服器元件是 IIS 6.0 的一部分,其支援已結束于 Windows Server 2003支援。 若要將電子郵件轉送至 Exchange OnPrem 和/或 Office 365,請使用其中一個支援的 Exchange Server 版本,因為我們不再支援 IIS SMTP。

簡介

若要使用 System.Net.Mail API 從 PHP 應用程式傳送電子郵件,您必須設定 Simple Mail Transfer Protocol (SMTP) 電子郵件。 設定電子郵件服務會告知 System.Net.Mail 應用程式開發介面 (API) 要傳遞應用程式所產生電子郵件的 SMTP 伺服器。 郵件可以立即傳遞,也可以傳遞至磁片上的檔案位置,以供稍後擷取以供傳遞。 例如,公司可以提供傳送意見反應訊息或要求資訊的電子郵件連結。

設定 SMTP 電子郵件的程式可以在 Internet Information Services 7 (IIS 7) 和更新版本中的下列層級執行:

  • 網頁伺服器
  • 網站
  • Application
  • 實體和虛擬目錄
  • 檔案 (URL)

安裝 SMTP

預設不會安裝 SMTP 伺服器。

  1. 以滑鼠右鍵按一下[我的電腦],然後選取 [管理],以開啟伺服器管理員。 (或者,開啟主控台,按一下 [程式和功能],然後選取 [開啟或關閉 Windows 功能]。)

  2. [功能] 底下,選取 [ 新增功能]。

  3. 選取 [ SMTP 伺服器 ] 核取方塊。

  4. 按一下 [新增必要的角色服務]。 如果 SMTP 安裝需要任何遺漏的角色,Windows Server® 2008 R2 或 Windows Server® 2008 會安裝這些角色。 按一下 [下一步] 。

  5. 您必須再次逐步執行整個精靈,即使 IIS 已安裝 (IIS 6 管理相容性,而且必須安裝 IIS 6 管理主控台,SMTP 才能運作) 。

    [新增功能精靈] 的螢幕擷取畫面,其中顯示主要窗格中的 [確認安裝選取專案]。[安裝] 已醒目提示。

    圖 1:確認安裝選項

  6. 安裝完成時按 [關閉 ]。

設定 Web 應用程式的 SMTP 電子郵件

新增 SMTP 之後,您可以為 PHP 應用程式進行設定。 這可以藉由使用使用者介面 (UI) 、從命令提示字元執行Appcmd.exe命令、直接編輯組態檔,或撰寫 Windows® Management Instrumentation (WMI) 腳本來完成。 請注意,您必須先安裝 IIS,才能啟用 SMTP。

使用使用者介面

  1. 開啟 [Internet Information Services (IIS) Manager],然後流覽至您想要管理的層級。

  2. 功能檢視,按兩下 [SMTP 電子郵件]。

  3. 在 [ SMTP 電子郵件 ] 頁面上,于 [電子郵件地址] 文字方塊中輸入寄件者 的電子郵件地址

  4. 在 [ SMTP 電子郵件 ] 頁面上,選取下列其中一個傳遞方法:

    • 將電子郵件傳遞至 SMTP 伺服器: 立即傳遞電子郵件訊息。 這需要使用者具有認證的作業 SMTP 伺服器。
    • 將電子郵件儲存在取貨目錄中: 將電子郵件儲存在磁片上的檔案位置,以供 PHP 應用程式 (或 Microsoft® ASP.NET 應用程式或使用者) 稍後傳遞。
  5. 如果已選取 [將電子郵件傳遞至 SMTP 伺服器 ],請執行下列動作:

    • 在 [ SMTP 伺服器 ] 文字方塊中輸入 SMTP 伺服器的唯一名稱,或選取 [ 使用 localhost ] 核取方塊將名稱設定為 LocalHost。 將名稱設定為 LocalHost 表示 ASP.NET 使用本機電腦上的 SMTP 伺服器。 一般而言,這是預設 SMTP 虛擬伺服器。
    • 在 [埠] 文字方塊中輸入 TCP 。 埠 25 是 SMTP 標準 TCP 埠,而且是預設設定。 如果所有伺服器都使用不同的 IP 位址進行設定,則多個虛擬伺服器可以使用相同的 TCP 埠。
    • 在 [ 驗證設定] 下,如果您的 SMTP 伺服器需要驗證模式和認證,請指定這些驗證模式和認證。
  6. 如果已選取 [在取貨目錄中儲存電子郵件 ],請在 [ 商店電子郵件 取貨目錄] 文字方塊中輸入批次電子郵件位置。

  7. 在 [動作] 窗格中按一下 [套用]

使用命令列

您可以設定 IIS,以便立即傳遞電子郵件或儲存以供稍後傳遞。

立即傳遞電子郵件訊息

若要設定 SMTP 電子郵件立即傳遞電子郵件訊息,請使用下列語法:

C:\%windir%\system32\inetsrv\appcmd set config /commit:WEBROOT /section:smtp /from: string /deliveryMethod:network /network.port: int /network.defaultCredentials:True|False /network.host:string /network.userName:string /network.password:string

字串中的變數是寄件者的電子郵件地址。 變數 /deliveryMethod:network會設定 IIS 立即傳遞電子郵件訊息。 變數 /network.portint會設定 IIS 用來傳遞電子郵件訊息的 TCP 埠。 變數 /network.host字串 會指定用於 SMTP 交易的主機。 變數network.defaultCredentials:True|False會使用預設網路認證啟用或停用驗證。 如果 defaultCredentials 設定為 True,則如果伺服器支援這些通訊協定,則會使用 Kerberos 或 NTLM。 network.userName:string和 network 變數。password:string會設定基本驗證使用者名稱和密碼。

儲存電子郵件以供稍後傳遞

若要將 SMTP 電子郵件設定為將電子郵件儲存在磁片上的檔案位置,以供應用程式稍後傳遞,例如 ASP.NET 應用程式,或由系統管理員之類的使用者,使用下列語法:

C:\%windir%\system32\inetsrv\appcmd set config /commit:WEBROOT /section:smtp /from: string /deliveryMethod:PickupDirectoryFromIis|SpecifiedPickupDirectory /SpecifiedPickupDirectory:string

字串中的變數是寄件者的電子郵件地址。 variable/deliveryMethod:PickupDirectoryFromIis|SpecifiedPickupDirectory 字串會將 IIS 設定為將電子郵件儲存在磁片上的檔案位置,以供稍後傳遞。 變數 /SpecifiedPickupDirectory 字串會設定磁片上的檔案位置,以儲存電子郵件訊息以供稍後傳遞。

請注意,當您使用 Appcmd.exe 在 <mailSettings> IIS 中設定全域層級的專案時,必須在 命令中指定 /commit:WEBROOT ,以便對根Web.config檔案進行組態變更,而不是ApplicationHost.config檔案。

編輯組態檔

  1. 首先,設定Php.ini檔案。 開啟 Php.ini 檔案,然後尋找專案:

    [mail function]
    
  2. 設定下列值:

    SMTP=localhost
    sendmail_from = string
    smtp_port=25
    

    請注意,預設值為 localhost,因此如果已在本機安裝 SMTP,就不需要變更此值。

    • 儲存並關閉 Php.ini 檔案。
  3. 啟用 localhost 的轉寄:

    • 開啟 [Internet Information Services (IIS) 6.0 管理員]。
    • 以滑鼠右鍵按一下 [預設 SMTP 虛擬伺服器]。
  4. 在 [ 屬性] 頁面上,開啟 [ 存取 ] 索引標籤,然後按一下 [ 連線]。 您可以看到允許哪些伺服器或 IP 位址連線到伺服器。

  5. 如果未列出 IP 位址 127.0.0.1,請使用 [ 新增 ] 按鈕加以新增。 您也可以將伺服器 IP 位址新增至清單。

    顯示多個視窗的桌面螢幕擷取畫面。[電腦] 對話方塊位於頂端,其中已醒目提示 I P 位址和 O K。

    圖 2:啟用 localhost 的轉寄

  6. 按一下 [確定 ] 以接受資訊。

  7. 按一下 [存取] 索引標籤上的 [轉寄] 按鈕,並設定伺服器的轉寄選項。 確定 localhost 和 IP 位址 127.0.0.1 已獲授與轉寄郵件的許可權。

  8. 按一下 [確定 ] 接受選項,然後按一下 [ 套用 ] 和 [ 確定 ] 返回 IIS 管理員的主頁面。

  9. 按一下 [重新開機 IIS]。

測試 PHP 的電子郵件

建立測試腳本,以查看您是否可以使用 PHP 傳送電子郵件。 複製下列文字,並將它儲存為 伺服器根目錄中的 email_test.php

<?php
if(mail(‘user@mydomain.com’,’test message’)){
     echo(‘ok’);
     }
else{

mydomain.com/email_test.php執行檔案。