使用PHP发送邮件的两种方法
使用PHP發(fā)送郵件的兩種方法
May242013 作者:Jerry Bendy ? 發(fā)布:2013-05-24 22:25 ? 分類:PHP?? 閱讀:2,107 views ??搶沙發(fā)??今天研究了一下使用PHP來發(fā)送電子郵件,總結了一下,有這么兩種方法:
一、使用PHP內(nèi)置的mail()函數(shù)
看了一下手冊,就直接開始寫代碼了,如下
$to = "test@163.com"; $subject = "Test"; $message = "This is a test mail!"; mail($to,$subject,$message);結果就直接報錯,如下:
Warning: mail() [function.mail]: Failed to connect to mailserver at “l(fā)ocalhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in?D:/www/Zend/email/email.php?on line?10
看來本地需要有SMTP服務器,那就使用別人的試試吧,又改了下代碼
$to = "test@163.com"; $subject = "Test"; $message = "This is a test mail!"; ini_set('SMTP','smtp.163.com'); ini_set('smtp_port',25); ini_set('sendmail_from',"admin@163.com"); mail($to,$subject,$message);結果還是錯誤:
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA–.1171S2 1301220947 in?D:/www/Zend/email/email.php?on line?9
看來是需要驗證信息,怎么寫驗證信息呢?在哪里配置呢?上網(wǎng)找了半天也沒找出個所以然,最后看了別人一些技術文章后得出結論(由于對SMTP郵件什么的不是非常了解,所以也不知道這個結論是否是正確的):使用mail()函數(shù)發(fā)送郵件就必須要有一臺無需SMTP驗證就可以發(fā)信的郵件服務器。但現(xiàn)在的SMTP郵件服務器基本上都是需要驗證的,所以要想使用它發(fā)郵件就只能自己在本地搭一個不需要驗證的SMTP服務器。這就比較麻煩了,我是不想整,有興趣的同學可以自己試試搭一個,用windows自帶的IIS就可以,或者從網(wǎng)上下載其他的SMTP服務器軟件,我就不多說。
結論:使用mail()函數(shù)發(fā)送郵件,就必須要有一臺不需要驗證的SMTP服務器。
這樣的話配置工作會多一點,但是使用的時候就比較省事了,幾行代碼就可以。
?
二、使用SMTP郵件類
這種方法就比較常見了,尤其對于廣大自己沒有服務器,從網(wǎng)上購買虛擬主機的同學,第一種方法不現(xiàn)實,所以還是自己使用SMTP協(xié)議來發(fā)送郵件吧。不過要完成這項工作的話,就需要你對SMTP協(xié)議有一定的了解,喜歡事必躬親的同學可以自己動手寫一個,喜歡拿來主義的同學就可以從網(wǎng)上下載了,有很多,自己找吧。
下面我舉例說明一下在CodeIgniter里面如何使用它內(nèi)置的郵件類發(fā)送郵件吧
$this->load->library('email');$to = "aa@bb.cc";$subject = "test";$message = "hello!";$config["protocol"] = "smtp";$config["smtp_host"] = "smtp.163.com";$config["smtp_user"] = "username@163.com";$config["smtp_pass"] = "password";$config["mailtype"] = "html";$config["validate"] = true;$config["priority"] = 3;$config["crlf"] = "/r/n";$config["smtp_port"] = 25;$config["charset"] = "utf-8";$config["wordwrap"] = TRUE;$this->email->initialize($config);$this->email->from('xxxx@163.com', 'xxxx');$this->email->to($to); $this->email->subject($subject);$this->email->message($message); $this->email->send();由于這些類都是高度封裝的,所以使用起來也很簡單。
結論:這種方式發(fā)送郵件無需裝任何軟件,但是需要你寫更多的代碼,而且要對SMTP比較熟悉。
但是如果你不自己寫,而是直接使用別人寫好的現(xiàn)成的代碼的話,那這種方法無疑是最省事的:
不需要自己搭建SMTP服務器,也不需要寫很多的代碼。
轉載于:https://www.cnblogs.com/u0mo5/p/4902606.html
總結
以上是生活随笔為你收集整理的使用PHP发送邮件的两种方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R语言中strptime返回值永远为NA
- 下一篇: 转: 关于流量控制与令牌桶介绍