《PHP實戰(zhàn):php郵件發(fā)送的兩種方式》要點:
本文介紹了PHP實戰(zhàn):php郵件發(fā)送的兩種方式,希望對您有用。如果有疑問,可以聯(lián)系我們。
這篇文章研究的主要內(nèi)容就是使用PHP來發(fā)送電子郵件,總結(jié)為以下兩種辦法:PHP實例
一、使用PHP內(nèi)置的mail()函數(shù)PHP實例
<?php $to = "test@163.com"; //收件人 $subject = "Test"; //主題 $message = "This is a test mail!"; //正文 mail($to,$subject,$message);
結(jié)果就直接報錯,如下:PHP實例
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 10PHP實例
分析原因:本地需要有SMTP服務器,又改了下代碼:PHP實例
<?php $to = "test@163.com";//收件人 $subject = "Test";//郵件主題 $message = "This is a test mail!";//郵件正文 ini_set('SMTP','smtp.163.com');//發(fā)件SMTP服務器 ini_set('smtp_port',25);//發(fā)件SMTP服務器端口 ini_set('sendmail_from',"admin@163.com");//發(fā)件人郵箱 mail($to,$subject,$message);
結(jié)果還是錯誤:PHP實例
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9PHP實例
?PHP實例
分析原因:需要驗證信息,怎么寫驗證信息呢?在哪里配置呢?帶著這些疑問參考一些技術文章后得出結(jié)論,使用mail()函數(shù)發(fā)送郵件就必須要有一臺無需SMTP驗證就可以發(fā)信的郵件服務器.但現(xiàn)在的SMTP郵件服務器基本上都是需要驗證的,所以要想使用它發(fā)郵件就只能自己在本地搭一個不需要驗證的SMTP服務器.搭建辦法:用windows自帶的IIS就可以,或者從網(wǎng)上下載其他的SMTP服務器軟件.PHP實例
結(jié)論:使用mail()函數(shù)發(fā)送郵件,就必須要有一臺不需要驗證的SMTP服務器.這樣的話配置工作會多一點,但是使用的時候就比較省事了,幾行代碼就可以.PHP實例
二、使用封裝SMTP協(xié)議的郵件類PHP實例
這種辦法就比較常見了,尤其對于廣大自己沒有服務器,從網(wǎng)上購買虛擬主機的同學,第一種辦法不現(xiàn)實,所以還是自己使用SMTP協(xié)議來發(fā)送郵件吧.PHP實例
不過要完成這項工作的話,就需要你對SMTP協(xié)議有一定的了解,喜歡事必躬親的同學可以自己動手寫一個,喜歡拿來主義的同學就可以從網(wǎng)上下載了,有很多.PHP實例
不過我比較推薦使用PEAR擴展中的Mail類,功能強大:可以支持純文本、HTML格式的郵件;各字段都可設置編碼,正確配置不會出現(xiàn)中文亂碼情況;可以支持附件等等.PHP實例
在服務器可以使用pear install Mail 命令快速安裝,沒有足夠服務器權(quán)限的同學也可以直接下載類的PHP源碼包含進來就可以了.PHP實例
注:Mail類依賴? Net/SMTP.php? 和 Mail/mime.php ,要一塊下載,使用時一塊包含進來.PHP實例
下面我舉例說明一下在Mail類發(fā)送郵件的辦法吧,網(wǎng)上其他SMTP郵件類使用辦法一塊也類似,可以參考:PHP實例
<?php // Pear Mail 擴展 require_once('Mail.php'); require_once('Mail/mime.php'); require_once('Net/SMTP.php'); $smtpinfo = array(); $smtpinfo["host"] = "smtp.163.com";//SMTP服務器 $smtpinfo["port"] = "25"; //SMTP服務器端口 $smtpinfo["username"] = "username@163.com"; //發(fā)件人郵箱 $smtpinfo["password"] = "password";//發(fā)件人郵箱暗碼 $smtpinfo["timeout"] = 10;//網(wǎng)絡超時時間,秒 $smtpinfo["auth"] = true;//登錄驗證 //$smtpinfo["debug"] = true;//調(diào)試模式 // 收件人列表 $mailAddr = array('receiver@163.com'); // 發(fā)件人顯示信息 $from = "Name <username@163.com>"; // 收件人顯示信息 $to = implode(',',$mailAddr); // 郵件標題 $subject = "這是一封測試郵件"; // 郵件正文 $content = "<h3>隨便寫點什么</h3>"; // 郵件正文類型,格式和編碼 $contentType = "text/html; charset=utf-8"; //換行符號 Linux: \n Windows: \r\n $crlf = "\n"; $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)) { //發(fā)送失敗 echo 'Email sending failed: ' . $mail->getMessage()."\n"; } else{ //發(fā)送成功 echo "success!\n"; }
如果從網(wǎng)上找的SMTP類都是高度封裝的,所以使用起來比上面會更簡單,但使用方法都是比較相似的.PHP實例
結(jié)論:這種方式發(fā)送郵件無需裝任何軟件,只需要包含進來一個PHP類,然后多寫幾行配置代碼,就可以了.并且網(wǎng)上有很多示例的代碼,很多時候只要復制過來然后修改個別的幾個參數(shù)就可以用了,所以會很方便,推薦使用此辦法.PHP實例
以上就是使用PHP發(fā)送郵件的兩種辦法,有自己的思考過程,希望對大家的學習有所幫助.PHP實例
歡迎參與《PHP實戰(zhàn):php郵件發(fā)送的兩種方式》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/8522.html