国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

如何用PHP發(fā)電子郵件(1)

2024-05-04 23:02:18
字體:
供稿:網(wǎng)友

 

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

要使mail()能夠運行,你必須有一個smtp服務(wù)器以便php能夠連接上去.不管這個服務(wù)器對郵件程序多么重要,大多數(shù)人對它如何運轉(zhuǎn)沒有一星半點的概念.在本教程中,我們將揭示smtp的秘密并解決一些使用php發(fā)送郵件的常見問題.而本文中的另一些主題將包括循環(huán)遍歷一個地址列表的方法以及同時以文本和html格式向接收者發(fā)送一個郵件的方法.

smtp
是簡單郵件傳輸協(xié)議(simple mail transfer protocol)的縮寫,而一個smtp服務(wù)器是一臺運行這種協(xié)議并發(fā)出郵件的計算機.運行這種協(xié)議實際上指的是運行諸如sendmailqmail的程序--如果你使用的是一臺非windows計算機的話.windows平臺上,作為windows nt service pack一部分或是內(nèi)建于windows 2000內(nèi)部的smtp服務(wù)程序就是典型的這種程序.

我并不是說smtp軟件包就只有那些,但是它們是最普通的.如果你的web站點使用了互聯(lián)網(wǎng)服務(wù)提供者的主機軟件包(internet service provider's virtual hosting package)的一部分,那么smtp服務(wù)程序就應(yīng)該已經(jīng)在這臺計算機上安裝了.如果你是一臺位于isp或是室內(nèi)的計算機的系統(tǒng)管理員,那么你很有可能已經(jīng)在這臺計算機上安裝了某種smtp軟件,用來處理從web服務(wù)器發(fā)送郵件的過程.

但是,如果你是一個個人用戶并只有一個開發(fā)用的web服務(wù)程序運行在你的個人電腦上,你可能沒有在自己的機器上運行smtp軟件.下面是一個非常簡單但是準(zhǔn)確的拇指定律:如果你是一個windows用戶而從沒有看見smtp服務(wù)器這樣的字眼,那么你就沒有運行這個程序.如果你確實沒有,那么你有兩種選擇:安裝,配置,和維護(hù)一個smtp服務(wù)程序(如果你不知道那是怎么一回事的話就不推薦你使用這種方法)或是使用一個現(xiàn)存的smtp服務(wù)器.

"
如果一個服務(wù)器現(xiàn)在沒有運行的話,我又怎么使用它呢?"你可能要問.如果你的計算機是通過撥號連接(或是dsl或電纜)連到互聯(lián)網(wǎng)的話,你可以使用你isp的外發(fā)郵件服務(wù)器.例如,如果你開發(fā)用的 計算機是一個windows98的系統(tǒng)并使用56kbps modem通過earthlink連接到互聯(lián)網(wǎng),那么你就可以使用mail.earthlink.net作為你的smtp服務(wù)器.不論你對你的外發(fā)郵件服務(wù)器使用什么樣的郵件客戶端(eudora, outlook, netscape mail等等),它們都將和你的php代碼使用你的smtp服務(wù)器的過程一樣.技巧就是使php知道一點點事實.

php.ini管理配置文件里,有幾個條目需要被設(shè)置以便mail()函數(shù)能夠正常運行.在改變它們以前,搞清楚它們都是做什么用的.你可以使用phpinfo()函數(shù)通過創(chuàng)建一個文件來顯示系統(tǒng)當(dāng)前的配置情況,這個文件包括:

<? phpinfo() ?>

保存這個文件,將它放置到你的web服務(wù)程序的文件根目錄,然后通過你的瀏覽器訪問它.你應(yīng)該可以看到一個被優(yōu)美的格式化了的信息,顯示你的配置情況.你要查看的條目如下:

smtp
sendmail_from
sendmail_path
如果你沒有使用windows,那么sendmail_path指令就是你唯一要擔(dān)心的東西.如果你正在使用windows,你就需要看看最后兩個指令.

如果你使用的是linux或是一個unix變種,sendmail_path看起來應(yīng)該這樣:

sendmail_path = /usr/sbin/sendmail

或者如果你使用qmail:

sendmail_path = /var/qmail/bin/sendmail

在這條指令里,你還可以設(shè)置配置參數(shù)來指明隊列緩沖選項或是顯示的設(shè)置return-path,如下所示:

sendmail_path = /usr/sbin/sendmail -t [email protected]

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

在你的phpinfo()顯示的結(jié)果里,看看smtpsendmail_from的缺省值--它們要么是空白,要么包含了胡亂的值.你應(yīng)該把它們改成有意義的值.

如果你決心在這臺電腦上運行一個smtp服務(wù)程序,你在php.ini文件中的條目就應(yīng)該如下:

smtp = localhost

但是,如果你要使用你isp(在這個例子中是earthlink)的外發(fā)郵件服務(wù)器,那么php.ini中的郵件看起來應(yīng)該如下:

smtp = mail.earthlink.net

你也可以使用ip地址而不是域名,因為計算機不區(qū)分這兩種條目.

第二條配置指令是sendmail_from,它應(yīng)該被設(shè)置成from頭中的電子郵件地址.它可以在腳本里被修改但是通常作為缺省值使用.下面就是這個配置指令的示例[email protected]指的是你自己的郵件地址.

sendmail_from = [email protected]

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

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

接收方地址
主題
信件內(nèi)容
其它文件信息頭(可選)
smtp
服務(wù)程序的其它配置選項(可選)

附加的頭參數(shù)控制了諸如cc, bcc, reply-to之類的郵件功能,或者其它遵循smtp協(xié)議的功能.在這個例子中,我只使用from reply-to信息頭.

如果你想給我發(fā)郵件但你使用的是一個非windows系統(tǒng), 程序代碼就應(yīng)該如下:

<?
$to = "[email protected]";
$subject = "zdnet developer article";
$msg = "i completely understand smtp servers now!";
$headers = "from: [email protected]/nreply-to: [email protected]";
$config = "[email protected]";
mail("$to", "$subject", "$msg", "$headers", "$config");
echo "finished!";
?>

如果你使用的是一個基于windowssmtp服務(wù),那么你有可能不需要使用第五個參數(shù),而且在附加的頭信息參數(shù)中(也就是第四個參數(shù)),你需要將它們分開寫--使用/r/n而不是/n.所以,同樣的一個郵件通過基于windowssmtp服務(wù)發(fā)送的代碼如下:

<?
$to = "[email protected]";
$subject = "zdnet developer article";
$msg = "i completely understand smtp servers now!";
$headers = "from: [email protected]/r/nreply-to: [email protected]";
mail("$to", "$subject", "$msg", "$headers");
echo "finished!";
?>

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

只要能夠連接到指定的smtp服務(wù)器mail()函數(shù)就會返回真值.但是這并不意味著郵件成功的到達(dá)了接收方那里.mail()函數(shù)不會等待或報告smtp服務(wù)器發(fā)來的成功/錯誤代碼.

mail()
函數(shù)有可能返回假值,然后給你警告"無法連接,在第x"或是"未知的錯誤,在第x."如果這兩條信息中的任何一條出現(xiàn)了,你就應(yīng)該檢查php.ini中的smtp.引起這些消息有兩種可能:smtp服務(wù)器癱瘓了,或者php無法連接到它.無論是這兩種情況中的哪一種,你的郵件都無法被發(fā)送出去.

這個腳本對這些參數(shù)使用硬編碼的值.使用一個簡單的html表單,你就可以在這些參數(shù)中插入一些值并擁有一個良好的反饋表單.

一旦你知道了如何給一個人發(fā)送郵件,你可能按奈不住要把同一個郵件發(fā)送給許多接收者--新聞信件一樣.所有這些牽涉到一個漂亮輕巧的循環(huán)來遍歷一個接收者的列表并將郵件發(fā)送給他們.mail函數(shù)的形式還是相同的:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 东莞市| 瓦房店市| 长顺县| 如皋市| 克山县| 盈江县| 阿瓦提县| 崇左市| 静乐县| 和龙市| 冕宁县| 邵东县| 湘潭市| 泰宁县| 固安县| 堆龙德庆县| 宁国市| 叶城县| 黑水县| 沂南县| 镇赉县| 衡阳县| 三都| 南宁市| 隆尧县| 武陟县| 繁峙县| 吕梁市| 黄山市| 景德镇市| 岐山县| 峨眉山市| 宁明县| 聊城市| 鹤岗市| 昌宁县| 宿迁市| 库车县| 康乐县| 黑龙江省| 临湘市|