天天看點

使用PHP發送郵件的兩種方法

使用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伺服器,也不需要寫很多的代碼。