當前位置:才華齋>計算機>php語言>

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

php語言 閱讀(2.06W)

如何使用使用PHP傳送郵件呢?想要知道的朋友,以下是為大家分享的使用PHP傳送郵件的兩種方法,供大家參考借鑑,歡迎瀏覽!

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

 一、使用PHP內建的mail()函式

看了一下手冊,就直接開始寫程式碼了,如下

<?php

$to = "; //收件人

$subject = "Test"; //主題

$message = "This is a test mail!"; //正文

mail($to,$subject,$message);

?>

結果就直接報錯,如下:

Warning: mail() []: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in or use ini_set() inD:/www/Zend/email/ on line 10

看來本地需要有SMTP伺服器,那就使用別人的試試吧,又改了下程式碼:

<?php

$to = ";//收件人

$subject = "Test";//郵件主題

$message = "This is a test mail!";//郵件正文

ini_set('SMTP','');//發件SMTP伺服器

ini_set('smtp_port',25);//發件SMTP伺服器埠

ini_set('sendmail_from&#");//發件人郵箱

mail($to,$subject,$message);

結果還是錯誤:

Warning: mail() []: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/ on line 9

看來是需要驗證資訊,怎麼寫驗證資訊呢?在哪裡配置呢?上網找了半天也沒找出個所以然,最後看了別人一些技術文章後得出結論(由於對SMTP郵件什麼的不是非常瞭解,所以也不知道這個結論是否是正確的):使用mail()函式傳送郵件就必須要有一臺無需SMTP驗證就可以發信的郵件伺服器。但現在的SMTP郵件伺服器基本上都是需要驗證的,所以要想使用它發郵件就只能自己在本地搭一個不需要驗證的SMTP伺服器。這就比較麻煩了,有興趣的同學可以自己試試搭一個,用windows自帶的IIS就可以,或者從網上下載其他的SMTP伺服器軟體。

結論:使用mail()函式傳送郵件,就必須要有一臺不需要驗證的`SMTP伺服器。這樣的話配置工作會多一點,但是使用的時候就比較省事了,幾行程式碼就可以。

 二、使用封裝SMTP協議的郵件類

這種方法就比較常見了,尤其對於廣大自己沒有伺服器,從網上購買虛擬主機的同學,

第一種方法不現實,所以還是自己使用SMTP協議來發送郵件吧。

不過要完成這項工作的話,就需要你對SMTP協議有一定的瞭解,喜歡事必躬親的同學可以自己動手寫一個,喜歡拿來主義的同學就可以從網上下載了,有很多。

不過我比較推薦使用PEAR擴充套件中的Mail類,功能強大:可以支援純文字、HTML格式的郵件;各欄位都可設定編碼,正確配置不會出現中文亂碼情況;可以支援附件等等。

在伺服器可以使用 pear install Mail 命令快速安裝,沒有足夠伺服器許可權的同學也可以直接下載類的PHP原始碼包含進來就可以了。

注:Mail類依賴 Net/ 和 Mail/ ,要一塊下載,使用時一塊包含進來。

詳細安裝方法可以在官網檢視,

下面我舉例說明一下在Mail類傳送郵件的方法吧,網上其他SMTP郵件類使用方法一塊也類似,可以參考:

<?php

// Pear Mail 擴充套件

require_once('');

require_once('Mail/');

require_once('Net/');

$smtpinfo = array();

$smtpinfo["host"] = "";//SMTP伺服器

$smtpinfo["port"] = "25"; //SMTP伺服器埠

$smtpinfo["username"] = "; //發件人郵箱

$smtpinfo["password"] = "password";//發件人郵箱密碼

$smtpinfo["timeout"] = 10;//網路超時時間,秒

$smtpinfo["auth"] = true;//登入驗證

//$smtpinfo["debug"] = true;//除錯模式

// 收件人列表

$mailAddr = array(&#');

// 發件人顯示資訊

$from = "Name >";

// 收件人顯示資訊

$to = implode(',',$mailAddr);

// 郵件標題

$subject = "這是一封測試郵件";

// 郵件正文

$content = "<h3>隨便寫點什麼</h3>";

// 郵件正文型別,格式和編碼

$contentType = "text/html; charset=utf-8";

//換行符號 Linux:Windows:

$crlf = "";

$mime = new Mail_mime($crlf);

$mime->setHTMLBody($content);

$param['text_charset'] = 'utf-8';

$param['html_charset'] = 'utf-8';

$param['head_charset'] = 'utf-8';

$body = $mime->get($param);

$headers = array();

$headers["From"] = $from;

$headers["To"] = $to;

$headers["Subject"] = $subject;

$headers["Content-Type"] = $contentType;

$headers = $mime->headers($headers);

$smtp =& Mail::factory("smtp", $smtpinfo);

$mail = $smtp->send($mailAddr, $headers, $body);

$smtp->disconnect();

if (PEAR::isError($mail)) {

//傳送失敗

echo 'Email sending failed: ' . $mail->getMessage()."";

}

else{

//傳送成功

echo "success!";

}

?>

如果從網上找的SMTP類都是高度封裝的,所以使用起來比上面會更簡單,但使用方法都是比較相似的。

結論:這種方式傳送郵件無需裝任何軟體,只需要包含進來一個PHP類,然後多寫幾行配置程式碼,就可以了。並且網上有很多示例的程式碼,很多時候只要複製過來然後修改個別的幾個引數就可以用了,所以會很方便,推薦使用此方法.