搜尋
首頁後端開發php教程php中mail()函數用法與SMTP運作原理詳解

  一個發送E-MAIL的腳本也許是你能夠在Web 站點上找到的最普通的腳本之一了,雖然它很簡單,一個郵件腳本有時會令程序員非常沮喪.PHP中有一個叫做mail ()的函數,它只需要知道接收方的地址和信件主體就可以發送郵件,但是要讓mail()按你的意思運行你還需要解決一些棘手的問題.

  要使mail ()能夠運作,你必須有一個SMTP伺服器以便PHP能夠連接上去.不管這個伺服器對郵件程式多麼重要,大多數人對它如何運轉沒有一星半點的概念.在本教程中,我們將揭示SMTP 的秘密並解決一些使用PHP發送郵件的常見問題.而本文中的另一些主題將包括循環遍歷一個地址列表的方法以及同時以文本和HTML格式向接收者發送一個郵件的方法.

  SMTP 是簡單郵件傳輸協定(Simple Mail TransferProtocol)的縮寫,而一個SMTP伺服器是一台運行這種協定並發出郵件的電腦.運行這種協定實際上指的是運行諸如Sendmail和Qmail的程式--如果你使用的是非Windows電腦的話.在Windows平台上,作為Windows NT ServicePack一部分或是內建於Windows 2000內部的SMTP服務程式就是典型的這種程式.

#我並不是說SMTP軟體包就只有那些,但是它們是最普通的.如果你的Web站點使用了互聯網服務提供者的主機軟體包(Internet ServiceProvider's virtual hostingpackage)的一部分,那麼SMTP服務程序就應該已經在這台電腦上安裝了.如果你是一台位於ISP或是室內的電腦的系統管理員, 那麼你很有可能已經在這台電腦上安裝了某種SMTP軟體,用來處理從Web伺服器發送郵件的過程.

  但是,如果你是一個個人用戶並只有一個開發用的Web服務程式運行在你的個人電腦上,你可能沒有在自己的機器上運行SMTP軟體.下面是一個非常簡單但是準確的拇指定律:如果你是一個Windows用戶而從沒有看見SMTP伺服器這樣的字眼,那麼你就沒有運行這個程式.如果你確實沒有,那麼你有兩種選擇:安裝,配置,和維護一個SMTP服務程序(如果你不知道那是怎麼一回事的話就不推薦你使用這種方法)或者使用一個現存的SMTP伺服器.

  "如果一個伺服器現在沒有運作的話,我又怎麼使用它呢?"你可能要問.如果你的電腦是透過撥號連接(或是DSL或電纜)連到互聯網的話,你可以使用你ISP的外發郵件伺服器. 例如,如果你開發用的電腦是一個Windows98的系統並使用56kbpsmodem透過EarthLink連接到互聯網,那麼你就可以使用mail.earthlink.net作為你的SMTP伺服器.不論你對你的外發郵件伺服器使用什麼樣的郵件客戶端(Eudora, Outlook, NetscapeMail等等),它們都會和你的PHP程式碼使用你的SMTP伺服器的過程一樣.技巧就是讓PHP知道一點點事實.

#在php.ini管理設定檔裡,有幾個條目需要被設定以便mail()函數能夠正常運作.在改變它們以前,搞清楚它們都是做什麼用的.你可以使用phpinfo()函數透過建立一個檔案來顯示系統目前的設定狀況,這個檔案包含:

  儲存這個檔案,將它放置到你的網路服務程式的檔案根目錄,然後透過你的瀏覽器存取它.你應該可以看到一個被優美的格式化了的信息,顯示你的配置情況.你要查看的條目如下:

  SMTP

  sendmail_from

  sendmail_path

  如果你沒有使用windows,那麼sendmail_path指令就是你唯一要擔心的東西.如果你正在使用Windows,你就需要看看最後兩個指令.

  如果你使用的是Linux或是一個Unix變種,sendmail_path看起來應該像這樣:

  sendmail_path = /usr/sbin/sendmail

  或如果你使用Qmail:

  sendmail_path = /var/qmail/bin/sendmail

  在這條指令裡,你還可以設定配置參數來指明隊列緩衝選項或是顯示的設定Return-Path頭,如下所示:

  sendmail_path = /usr/sbin/sendmail -t-fyou@yourdomain.com

  作為一個非Windows用戶,這就是你要做的一切了.如果你使用的是Windows,你有更多的事情要做.你還需要看一看SMTP和sendmail_from的值.不要被sendmail_from指令名字中的sendmail弄迷糊了.雖然你沒有在Windows上使用名叫Sendmail的程式,但那隻是指令的名字.不要被它嚇到了.

  在你的phpinfo()顯示的結果裡,看看SMTP和sendmail_from的缺省值--它們要么是空白,要么包含了胡亂的值.你應該把它們改成有意義的值.

  如果你決心在這台電腦上運行一個SMTP服務程序,你在php.ini文件中的條目就應該如下:

  SMTP = localhost

  但是,如果你要使用你ISP(在這個範例中是EarthLink)的外寄郵件伺服器,那麼php.ini中的郵件看起來應該如下:

  SMTP = mail.earthlink.net

#  你也可以使用IP位址而不是網域名稱,因為電腦不區分這兩種條目.

  第二條設定指令是sendmail_from,它應該被設定成From頭中的電子郵件地址.它可以在腳本裡被修改但是通常作為缺省值使用.下面就是這個配置指令的範例youraddress@yourdomain.com指的是你自己的郵件地址.

  sendmail_from =youraddress@yourdomain.com

在做了這些配置上的改動以後,重啟Web服務程序然後使用phpinfo()函數來驗證這些修改.在這些工作完成以後,你就可以用PHP來發送電子郵件了.

  mail( )函數是非常簡單的:只有五個參數,而其中的兩個是可選的.這些參數是:

  接收方地址

  主題

#  信件內容

  其它檔案資訊頭(可選)

  SMTP服務程式的其它配置選項(可選)

  附加的頭參數控制了諸如CC, BCC, Reply- To之類的郵件功能,或者其它遵循SMTP協議的功能.在這個例子中,我只使用From 和Reply-To信息頭.

  如果你想給我發郵件但你使用的是一個非Windows系統, 程式碼就應該如下: 

   $to= "julie@thickbook.com";
  $subject = "ZDNet Developer article";
  $msg = "I completely understand SMTP servers now!";
  $headers = "From:me@mycompany.comnReply-To:someoneelse@mycompany.com";
  $config = "-fwebmaster@mycompany.com";
  mail("$to", "$subject", "$msg", "$headers", "$config");
  echo "finished!";

  如果你使用的是一個基於Windows的SMTP服務,那麼你有可能不需要使用第五個參數,而且在附加的頭訊息參數中(也就是第四個參數),你需要將它們分開寫--使用rn而不是n.所以,同樣的一個郵件通過基於Windows的SMTP服務發送的代碼如下: 

   $to = "julie@thickbook.com";
  $subject = "ZDNet Developer article";
  $msg = "I completely understand SMTP servers now!";
  $headers = "From:me@mycompany.comrnReply-To:someoneelse@mycompany.com";
  mail("$to", "$subject", "$msg", "$headers");
  echo "finished!";

  腳本中的echo語句使你的網頁瀏覽器在腳本運行完成的時候向你顯示一條訊息.如果不寫echo語句,你就會得到一個"空文件"的對話框,因為沒有任何輸出能夠發送到瀏覽器端.

  只要能夠連接到指定的SMTP伺服器mail()函數就會返回真值.但是這並不意味著郵件成功的到達了接收方那裡. mail()函數不會等待或報告SMTP伺服器發來的成功/錯誤代碼.

  mail() 函數有可能返回假值,然後給你警告"無法連接,在第x行"或是"未知的錯誤,在第x行."如果這兩個訊息中的任何一條出現了,你就應該檢查php.ini 中的SMTP值.引起這些訊息有兩種可能:SMTP伺服器癱瘓了,或者PHP無法連接到它.無論是這兩種情況中的哪一種,你的郵件都無法被發送出去.

#  這個腳本對這些參數使用硬編碼的值.使用一個簡單的 HTML表單,你就可以在這些參數中插入一些值並擁有一個好的回饋表單.

以上是php中mail()函數用法與SMTP運作原理詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
PHP依賴注入容器:快速啟動PHP依賴注入容器:快速啟動May 13, 2025 am 12:11 AM

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

PHP中的依賴注入與服務定位器PHP中的依賴注入與服務定位器May 13, 2025 am 12:10 AM

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

PHP性能優化策略。PHP性能優化策略。May 13, 2025 am 12:06 AM

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

PHP電子郵件驗證:確保正確發送電子郵件PHP電子郵件驗證:確保正確發送電子郵件May 13, 2025 am 12:06 AM

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)

如何使PHP應用程序更快如何使PHP應用程序更快May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster,關注台詞:1)useopcodeCachingLikeLikeLikeLikeLikePachetoStorePreciledScompiledScriptbyTecode.2)MinimimiedAtabaseSqueriSegrieSqueriSegeriSybysequeryCachingandeffeftExting.3)Leveragephp7 leveragephp7 leveragephp7 leveragephpphp7功能forbettercodeefficy.4)

PHP性能優化清單:立即提高速度PHP性能優化清單:立即提高速度May 12, 2025 am 12:07 AM

到ImprovephPapplicationspeed,關注台詞:1)啟用opcodeCachingwithapCutoredUcescriptexecutiontime.2)實現databasequerycachingingusingpdotominiminimizedatabasehits.3)usehttp/2tomultiplexrequlexrequestsandreduceconnection.4 limitesclection.4.4

PHP依賴注入:提高代碼可檢驗性PHP依賴注入:提高代碼可檢驗性May 12, 2025 am 12:03 AM

依赖注入(DI)通过显式传递依赖关系,显著提升了PHP代码的可测试性。1)DI解耦类与具体实现,使测试和维护更灵活。2)三种类型中,构造函数注入明确表达依赖,保持状态一致。3)使用DI容器管理复杂依赖,提升代码质量和开发效率。

PHP性能優化:數據庫查詢優化PHP性能優化:數據庫查詢優化May 12, 2025 am 12:02 AM

DatabasequeryoptimizationinPHPinvolvesseveralstrategiestoenhanceperformance.1)Selectonlynecessarycolumnstoreducedatatransfer.2)Useindexingtospeedupdataretrieval.3)Implementquerycachingtostoreresultsoffrequentqueries.4)Utilizepreparedstatementsforeffi

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器