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

一、使用PHP內(nèi)置的mail()函數(shù)
看了一下手冊,就直接開始寫代碼了,如下
<?php
$to = "test@163.com"; /pic/p>
$subject = "Test"; /pic/p>
$message = "This is a test mail!"; /pic/p>
mail($to,$subject,$message);
?>
結(jié)果就直接報錯,如下:
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() inD:/www/Zend/email/email.php on line 10
看來本地需要有SMTP服務(wù)器,那就使用別人的試試吧,又改了下代碼:
<?php
$to = "test@163.com";/pic/p>
$subject = "Test";/pic/p>
$message = "This is a test mail!";/pic/p>
ini_set('SMTP','smtp.163.com');/pic/p>
ini_set('smtp_port',25);/pic/p>
ini_set('sendmail_from',"admin@163.com");/pic/p>
mail($to,$subject,$message);
結(jié)果還是錯誤:
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9
看來是需要驗證信息,怎么寫驗證信息呢?在哪里配置呢?上網(wǎng)找了半天也沒找出個所以然,最后看了別人一些技術(shù)文章后得出結(jié)論(由于對SMTP郵件什么的不是非常了解,所以也不知道這個結(jié)論是否是正確的):使用mail()函數(shù)發(fā)送郵件就必須要有一臺無需SMTP驗證就可以發(fā)信的郵件服務(wù)器。但現(xiàn)在的SMTP郵件服務(wù)器基本上都是需要驗證的,所以要想使用它發(fā)郵件就只能自己在本地搭一個不需要驗證的SMTP服務(wù)器。這就比較麻煩了,有興趣的同學(xué)可以自己試試搭一個,用windows自帶的IIS就可以,或者從網(wǎng)上下載其他的SMTP服務(wù)器軟件。
結(jié)論:使用mail()函數(shù)發(fā)送郵件,就必須要有一臺不需要驗證的SMTP服務(wù)器。這樣的話配置工作會多一點(diǎn),但是使用的時候就比較省事了,幾行代碼就可以。
二、使用封裝SMTP協(xié)議的郵件類
這種方法就比較常見了,尤其對于廣大自己沒有服務(wù)器,從網(wǎng)上購買虛擬主機(jī)的同學(xué),
第一種方法不現(xiàn)實(shí),所以還是自己使用SMTP協(xié)議來發(fā)送郵件吧。
不過要完成這項工作的話,就需要你對SMTP協(xié)議有一定的了解,喜歡事必躬親的同學(xué)可以自己動手寫一個,喜歡拿來主義的同學(xué)就可以從網(wǎng)上下載了,有很多。
不過我比較推薦使用PEAR擴(kuò)展中的Mail類,功能強(qiáng)大:可以支持純文本、HTML格式的郵件;各字段都可設(shè)置編碼,正確配置不會出現(xiàn)中文亂碼情況;可以支持附件等等。
在服務(wù)器可以使用 pear install Mail 命令快速安裝,沒有足夠服務(wù)器權(quán)限的同學(xué)也可以直接下載類的PHP源碼包含進(jìn)來就可以了。
注:Mail類依賴 Net/SMTP.php 和 Mail/mime.php ,要一塊下載,使用時一塊包含進(jìn)來。
詳細(xì)安裝方法可以在官網(wǎng)查看,/pic/package/Mail
下面我舉例說明一下在Mail類發(fā)送郵件的方法吧,網(wǎng)上其他SMTP郵件類使用方法一塊也類似,可以參考:
<?php
/pic/p>
require_once('Mail.php');
require_once('Mail/mime.php');
require_once('Net/SMTP.php');
$smtpinfo = array();
$smtpinfo["host"] = "smtp.163.com";/pic/p>
$smtpinfo["port"] = "25"; /pic/p>
$smtpinfo["username"] = "username@163.com"; /pic/p>
$smtpinfo["password"] = "password";/pic/p>
$smtpinfo["timeout"] = 10;/pic/p>
$smtpinfo["auth"] = true;/pic/p>
/pic/pic/p>
/pic/p>
$mailAddr = array('receiver@163.com');
/pic/p>
$from = "Name <username@163.com>";
/pic/p>
$to = implode(',',$mailAddr);
/pic/p>
$subject = "這是一封測試郵件";
/pic/p>
$content = "<h3>隨便寫點(diǎn)什么</h3>";
/pic/p>
$contentType = "text/html; charset=utf-8";
/pic/p>
$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)) {
/pic/p>
echo 'Email sending failed: ' . $mail->getMessage()." ";
}
else{
/pic/p>
echo "success! ";
}
?>
如果從網(wǎng)上找的SMTP類都是高度封裝的,所以使用起來比上面會更簡單,但使用方法都是比較相似的。
結(jié)論:這種方式發(fā)送郵件無需裝任何軟件,只需要包含進(jìn)來一個PHP類,然后多寫幾行配置代碼,就可以了。并且網(wǎng)上有很多示例的代碼,很多時候只要復(fù)制過來然后修改個別的幾個參數(shù)就可以用了,所以會很方便,推薦使用此方法.
【使用PHP發(fā)送郵件的兩種方法】相關(guān)文章:
PHP郵件發(fā)送驗證03-16
如何使用JSP來發(fā)送郵件11-17
Java 發(fā)送郵件12-06
php使用curl發(fā)送json格式數(shù)據(jù)實(shí)例11-25
PHP如何使用curl發(fā)送GET和POST請求03-02
使用php偽造referer的方法12-15
PHP中魔術(shù)方法的使用方法07-06
- 相關(guān)推薦