原文:http://www.jbxue.com/php/25502.html
本文介紹了php發送郵件的兩種方法,分別是使用PHP內建的mail()函數發送郵件,使用封裝SMTP協議的郵件類發送郵件,推薦使用smtp協議封裝的郵件類實現郵件發送。
php如何發送郵件呢?方法有很多,但用的最多的還是使用smtp協議來發送郵件,一起來學習下吧。
專題推薦:php發郵件代碼大全
一、使用php內建的mail()函數
複製代碼 程式碼範例:
$to = "test@163.com"; //收件者
$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() inD:/www/Zend/email/email.php on line 10
本地需要有smtp伺服器,代碼修改為:
複製代碼 程式碼範例:
$to = "test@163.com";//收件者
$subject = "Test";//郵件主題
$message = "This is a test mail!";//郵件內文
ini_set('SMTP','smtp.163.com');//發件SMTP伺服器
ini_set('smtp_port',25);//發件SMTP伺服器連接埠
ini_set('sendmail_from',"admin@163.com");//寄件者郵箱
mail($to,$subject,$message);
繼續錯誤:
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9
需要驗證資訊,怎麼寫驗證資訊呢?在哪裡配置呢?
使用mail()函數發送郵件就必須要有一台無需SMTP驗證就可以發信的郵件伺服器。但現在的SMTP郵件伺服器基本上都是需要驗證的,所以要想使用它發郵件就只能自己在本地搭一個不需要驗證的SMTP伺服器。
結論:使用mail()函數發送郵件,就必須要有一台不需要驗證的SMTP伺服器。
二、使用封裝SMTP協議的郵件類
建議使用SMTP協議來發送郵件。
比較推薦使用PEAR擴充中的Mail類,功能強大:可以支援純文字、HTML格式的郵件;各欄位都可設定編碼,正確配置不會出現中文亂碼情況;可以支援附件等等。
在伺服器可以使用 pear install Mail 命令快速安裝,沒有足夠伺服器許可權的同學也可以直接下載類的PHP源碼包含進來就可以了。
註:Mail類依賴 Net/SMTP.php 和 Mail/mime.php ,要一塊下載,使用時一塊包含進來。
詳細安裝方法可以在官網查看,http://pear.php.net/package/Mail。
例子,Mail類發送郵件的方法。
複製代碼 程式碼範例:
// 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"; //寄件者郵箱
$smtpinfo["password"] = "password";//寄件者郵箱密碼
$smtpinfo["timeout"] = 10;//網路逾時時間,秒
$smtpinfo["auth"] = true;//登入驗證
//$smtpinfo["debug"] = true;//偵錯模式
// 收件者清單
$mailAddr = array('receiver@163.com');
// 寄件者顯示資訊
$from = "Name ";
// 收件者顯示資訊
$to = implode(',',$mailAddr);
// 郵件標題
$subject = "這是一封測試郵件";
// 郵件內文
$content = "
隨便寫點什麼
";
// 郵件內文類型,格式和編碼
$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)) {
//發送失敗
echo 'Email sending failed: ' . $mail->getMessage()."\n";
}
else{
//發送成功
echo "success!\n";
}
以上就介紹了php發送郵件二種方法 php使用smtp發送郵件,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。