使用PHP發送郵件的兩種方法
May242013
作者:Jerry Bendy 釋出:2013-05-24 22:25 分類:
PHP閱讀:2,107 views
搶沙發今天研究了一下使用PHP來發送電子郵件,總結了一下,有這麼兩種方法:
一、使用PHP内置的mail()函數
看了一下手冊,就直接開始寫代碼了,如下
$to = "[email protected]";
$subject = "Test";
$message = "This is a test mail!";
mail($to,$subject,$message);
結果就直接報錯,如下:
Warning: mail() [
function.mail]: Failed to connect to mailserver at “localhost” 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 = "[email protected]";
$subject = "Test";
$message = "This is a test mail!";
ini_set('SMTP','smtp.163.com');
ini_set('smtp_port',25);
ini_set('sendmail_from',"[email protected]");
mail($to,$subject,$message);
結果還是錯誤:
]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA–.1171S2 1301220947 in D:/www/Zend/email/email.php on line 9
看來是需要驗證資訊,怎麼寫驗證資訊呢?在哪裡配置呢?上網找了半天也沒找出個是以然,最後看了别人一些技術文章後得出結論(由于對SMTP郵件什麼的不是非常了解,是以也不知道這個結論是否是正确的):使用mail()函數發送郵件就必須要有一台無需SMTP驗證就可以發信的郵件伺服器。但現在的SMTP郵件伺服器基本上都是需要驗證的,是以要想使用它發郵件就隻能自己在本地搭一個不需要驗證的SMTP伺服器。這就比較麻煩了,我是不想整,有興趣的同學可以自己試試搭一個,用windows自帶的IIS就可以,或者從網上下載下傳其他的SMTP伺服器軟體,我就不多說。
結論:使用mail()函數發送郵件,就必須要有一台不需要驗證的SMTP伺服器。
這樣的話配置工作會多一點,但是使用的時候就比較省事了,幾行代碼就可以。
二、使用SMTP郵件類
這種方法就比較常見了,尤其對于廣大自己沒有伺服器,從網上購買虛拟主機的同學,第一種方法不現實,是以還是自己使用SMTP協定來發送郵件吧。不過要完成這項工作的話,就需要你對SMTP協定有一定的了解,喜歡事必躬親的同學可以自己動手寫一個,喜歡拿來主義的同學就可以從網上下載下傳了,有很多,自己找吧。
下面我舉例說明一下在CodeIgniter裡面如何使用它内置的郵件類發送郵件吧
$this->load->library('email');
$to = "[email protected]";
$subject = "test";
$message = "hello!";
$config["protocol"] = "smtp";
$config["smtp_host"] = "smtp.163.com";
$config["smtp_user"] = "[email protected]";
$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('[email protected]', 'xxxx');
$this->email->to($to);
$this->email->subject($subject);
$this->email->message($message);
$this->email->send();
由于這些類都是高度封裝的,是以使用起來也很簡單。
結論:這種方式發送郵件無需裝任何軟體,但是需要你寫更多的代碼,而且要對SMTP比較熟悉。
但是如果你不自己寫,而是直接使用别人寫好的現成的代碼的話,那這種方法無疑是最省事的:
不需要自己搭建SMTP伺服器,也不需要寫很多的代碼。