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

首頁 > 開發 > PHP > 正文

如何使用PHP通過SMTP發送電子郵件

2024-05-04 23:04:06
字體:
來源:轉載
供稿:網友

  由于php沒有提供現成的smtp函數,卻提供了一個功能不甚靈活的mail()函數,這個函數需要服務器配置上的支持,并且不支持smtp驗證,在很多場合無法正常的工作,因此不建議使用。本文的目的在于為新手指明方向,并沒有涉及那些高級的內容,一來本身水平有限,二來也擔心不能準確的講述相關的概念,進而對各位造成誤導,還請自行深入學習。

  “使用php發送mail”最近已經成為繼“register_globals”以后本版第二個新手陷阱,今天特地寫這篇文章為新手解惑,希望可以為迷茫的人指明方向。

  讓我們先從以下這個例子開始說起:

  引用:

[[email protected]~/]# telnet localhost 25
trying 127.0.0.1...
connected to localhost.
escape character is '^]'.
220 server.domain.com.br esmtp postfix (2.1.0)
mail from: [email protected]
250 ok
rcpt to: [email protected]
250 ok
data
354 end data with <cr><lf>.<cr><lf>
teste
.
250 ok: queued as 7b41f4665a
quit
221 bye
connection closed by foreign host.

  注:以上來自netkiller的postfix文檔,偷懶,直接用現成的。

  首先是使用telnet來連接本地的25端口,稍微熟悉點網絡的人都知道smtp協議使用25端口,這也就是說,現在在連接本地的smtp服務器。

  引用:

trying 127.0.0.1...
connected to localhost.
escape character is '^]'.
220 server.domain.com.br esmtp postfix (2.1.0)

  這些東西是系統輸出信息,說明已經連接上了,而且這個smtp服務器是postfix做的。

  “mail from: [email protected]”這個命令指明了發件地址是[email protected],“250 ok”說明這條命令被服務器接受并正確執行,這類似http協議的200、404、500等狀態代碼。接下來的“rcpt to: [email protected]”指明了收件地址是[email protected]

  引用:

data
354 end data with <cr><lf>.<cr><lf>
teste
.

  這一段是輸入郵件正文,輸入“data”以后系統提示使用“<回車>.<回車>”來結束輸入,正文內容是“teste”。

  最后使用“quit”退出。

  以上就是最簡單的一次發送mail的過程,從這個例子我們可以看出,發送mail其實是很簡單的事情,實質上也就是建立一個對smtp服務器的連接,然后發送一些簡單的命令給它,一封內容簡單的郵件就發送出去了,至于更加復雜內容的郵件或者操作,其實也就是在此基礎上稍加擴展而已。

  把這個過程用php來實現,其實就是利用php的socket functions、network functions等等操作socket的函數來和smtp服務器建立一個連接,然后發送文本的命令給服務器,如果你親自去看看那些寫好的利用smtp協議發送郵件的類或者函數,相信可以印證我的說法。

由于已經存在很多現成的封裝得很好的類或者函數替我們完成底層的socket級操作,我們只需要直接拿來用就好,而我也不會費時費神的在本文里去討論底層的代碼,有精神去研究的話,自己找代碼來研究吧。現在繼續跟我走,我們來點實際的代碼來說明如何使用php發送郵件,采用的類是pear::mail。

  代碼:

<?php
 require_once 'mail.php';

 $conf['mail'] = array(
   'host' => 'xx.xx.xx.xx', //smtp服務器地址,可以用ip地址或者域名
   'auth' => true, //true表示smtp服務器需要驗證,false代碼不需要
   'username' => 'tester', //用戶名
   'password' => 'retset' //密碼
 );

 /***
 * 使用$headers數組,可以定義郵件頭的內容,比如使用$headers['reply-to']可以定義回復地址
 * 通過這種方式,可以很方便的定制待發送郵件的郵件頭
 ***/
 $headers['from'] = '[email protected]'; //發信地址
 $headers['to'] = '[email protected]'; //收信地址
 $headers['subject'] = 'test mail send by php'; //郵件標題
 $mail_object = &mail::factory('smtp', $conf['mail']);

 $body = <<< msg //郵件正文
 hello world!!!
 msg;

 $mail_res = $mail_object->send($headers['to'], $headers, $body); //發送

 if( mail::iserror($mail_res) ){ //檢測錯誤
  die($mail_res->getmessage());
 }
?>


  以上的代碼非常的簡單,配合注釋應該不難看懂,關于pear和pear::mail的更多信息,可以自己去翻閱pear manual得到進一步的信息。

  現在你依葫蘆畫瓢已經可以開始工作了,不過如果你還想做得更好、做得更多的話,我在這里提供一些更多的指南。

  1、smtp協議

  熟悉并了解smtp協議的內容,這樣你可以進行更多的高級操作,甚至自己寫一個滿足自己特別需求的發郵件程序。以上的代碼雖然簡單,但是肯定還是有很多人不了解注釋里提到的郵件頭是什么東西,它到底對發出的郵件有什么樣的影響。

  比如“發送html郵件為什么對方看到的是亂碼”等等問題都可能和郵件頭相關,如果對smtp協議比較了解的話,可以很快的知道問題所在。

  2、mime規范

  如果想要發送html郵件甚至多媒體郵件,一定是需要對mime有一定了解的,有了這方面的知識你就可以發送內容更加精彩的郵件。

  3、pear

  pear并非唯一的發送郵件的工具,但是pear包含了mail、mail_mime等等已經封裝好了的類,可以讓我們的開發事半功倍,并且除了mail方面的東西以外,它還提供了很多其他方面的現成的工具,非常值得花時間學一學。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保德县| 台南市| 龙南县| 永仁县| 石楼县| 高邑县| 永宁县| 合水县| 襄汾县| 夏河县| 江达县| 安新县| 玉门市| 蕉岭县| 静海县| 华池县| 长岭县| 金昌市| 铁力市| 丰宁| 鱼台县| 定南县| 瑞安市| 通山县| 察雅县| 兰州市| 将乐县| 昌宁县| 夏津县| 汤阴县| 石渠县| 新乡市| 集贤县| 柳林县| 龙川县| 灵台县| 宜君县| 左权县| 阜新市| 紫云| 师宗县|