php郵件發(fā)送的兩種方式
這篇文章研究的主要內(nèi)容就是使用PHP來發(fā)送電子郵件,總結(jié)為以下兩種方法:
一、使用PHP內(nèi)置的mail()函數(shù)
<?php $to = "test@163.com"; //收件人 $subject = "Test"; //主題 $message = "This is a test mail!"; //正文 mail($to,$subject,$message);
結(jié)果就直接報(bào)錯(cuò),如下:
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";//收件人
$subject = "Test";//郵件主題
$message = "This is a test mail!";//郵件正文
ini_set('SMTP','smtp.163.com');//發(fā)件SMTP服務(wù)器
ini_set('smtp_port',25);//發(fā)件SMTP服務(wù)器端口
ini_set('sendmail_from',"admin@163.com");//發(fā)件人郵箱
mail($to,$subject,$message);
結(jié)果還是錯(cuò)誤:
Warning: mail() [function.mail]: SMTP server response: 553 authentication is required,smtp2,DNGowKD7v5BTDo9NnplVBA--.1171S2 1301220947 inD:/www/Zend/email/email.php on line 9
分析原因:需要驗(yàn)證信息,怎么寫驗(yàn)證信息呢?在哪里配置呢?帶著這些疑問參考一些技術(shù)文章后得出結(jié)論,使用mail()函數(shù)發(fā)送郵件就必須要有一臺(tái)無需SMTP驗(yàn)證就可以發(fā)信的郵件服務(wù)器。但現(xiàn)在的SMTP郵件服務(wù)器基本上都是需要驗(yàn)證的,所以要想使用它發(fā)郵件就只能自己在本地搭一個(gè)不需要驗(yàn)證的SMTP服務(wù)器。搭建方法:用windows自帶的IIS就可以,或者從網(wǎng)上下載其他的SMTP服務(wù)器軟件。
結(jié)論:使用mail()函數(shù)發(fā)送郵件,就必須要有一臺(tái)不需要驗(yàn)證的SMTP服務(wù)器。這樣的話配置工作會(huì)多一點(diǎn),但是使用的時(shí)候就比較省事了,幾行代碼就可以。
二、使用封裝SMTP協(xié)議的郵件類
這種方法就比較常見了,尤其對(duì)于廣大自己沒有服務(wù)器,從網(wǎng)上購買虛擬主機(jī)的同學(xué),第一種方法不現(xiàn)實(shí),所以還是自己使用SMTP協(xié)議來發(fā)送郵件吧。
不過要完成這項(xiàng)工作的話,就需要你對(duì)SMTP協(xié)議有一定的了解,喜歡事必躬親的同學(xué)可以自己動(dòng)手寫一個(gè),喜歡拿來主義的同學(xué)就可以從網(wǎng)上下載了,有很多。
不過我比較推薦使用PEAR擴(kuò)展中的Mail類,功能強(qiáng)大:可以支持純文本、HTML格式的郵件;各字段都可設(shè)置編碼,正確配置不會(huì)出現(xiàn)中文亂碼情況;可以支持附件等等。
在服務(wù)器可以使用pear install Mail 命令快速安裝,沒有足夠服務(wù)器權(quán)限的同學(xué)也可以直接下載類的PHP源碼包含進(jìn)來就可以了。
注:Mail類依賴 Net/SMTP.php 和 Mail/mime.php ,要一塊下載,使用時(shí)一塊包含進(jìn)來。
下面我舉例說明一下在Mail類發(fā)送郵件的方法吧,網(wǎng)上其他SMTP郵件類使用方法一塊也類似,可以參考:
<?php
// Pear Mail 擴(kuò)展
require_once('Mail.php');
require_once('Mail/mime.php');
require_once('Net/SMTP.php');
$smtpinfo = array();
$smtpinfo["host"] = "smtp.163.com";//SMTP服務(wù)器
$smtpinfo["port"] = "25"; //SMTP服務(wù)器端口
$smtpinfo["username"] = "username@163.com"; //發(fā)件人郵箱
$smtpinfo["password"] = "password";//發(fā)件人郵箱密碼
$smtpinfo["timeout"] = 10;//網(wǎng)絡(luò)超時(shí)時(shí)間,秒
$smtpinfo["auth"] = true;//登錄驗(yàn)證
//$smtpinfo["debug"] = true;//調(diào)試模式
// 收件人列表
$mailAddr = array('receiver@163.com');
// 發(fā)件人顯示信息
$from = "Name <username@163.com>";
// 收件人顯示信息
$to = implode(',',$mailAddr);
// 郵件標(biāo)題
$subject = "這是一封測(cè)試郵件";
// 郵件正文
$content = "<h3>隨便寫點(diǎn)什么</h3>";
// 郵件正文類型,格式和編碼
$contentType = "text/html; charset=utf-8";
//換行符號(hào) 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類都是高度封裝的,所以使用起來比上面會(huì)更簡單,但使用方法都是比較相似的。
結(jié)論:這種方式發(fā)送郵件無需裝任何軟件,只需要包含進(jìn)來一個(gè)PHP類,然后多寫幾行配置代碼,就可以了。并且網(wǎng)上有很多示例的代碼,很多時(shí)候只要復(fù)制過來然后修改個(gè)別的幾個(gè)參數(shù)就可以用了,所以會(huì)很方便,推薦使用此方法。
以上就是使用PHP發(fā)送郵件的兩種方法,有自己的思考過程,希望對(duì)大家的學(xué)習(xí)有所幫助。
- PHPMailer使用教程(PHPMailer發(fā)送郵件實(shí)例分析)
- 功能齊全的PHP發(fā)送郵件類代碼附詳細(xì)說明
- php中通過smtp發(fā)郵件的類,測(cè)試通過
- php郵件發(fā)送,php發(fā)送郵件的類
- PHPMailer郵件類利用smtp.163.com發(fā)送郵件方法
- phpmailer在服務(wù)器上不能正常發(fā)送郵件的解決辦法
- phpmailer簡單發(fā)送郵件的方法(附phpmailer源碼下載)
- php中mail函數(shù)發(fā)送郵件失敗的解決方法
- php下使用SMTP發(fā)郵件的代碼
- PHP receiveMail實(shí)現(xiàn)收郵件功能
相關(guān)文章
PHP遞歸寫入MySQL實(shí)現(xiàn)無限級(jí)分類數(shù)據(jù)操作示例
這篇文章主要介紹了PHP遞歸寫入MySQL實(shí)現(xiàn)無限級(jí)分類數(shù)據(jù)操作,涉及mysql數(shù)據(jù)庫的創(chuàng)建以及php遞歸寫入、讀取數(shù)據(jù)庫分類相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
完美利用Yii2微信后臺(tái)開發(fā)的系列總結(jié)
Yii2是一個(gè)高性能,基于組件的 PHP 框架,這篇文章詳細(xì)的給大家介紹了利用Yii2開發(fā)微信后臺(tái)。我們一起來看看。2016-07-07
php快速導(dǎo)入大量數(shù)據(jù)的實(shí)例方法
在本篇文章里小編給大家分享的是關(guān)于php如何快速導(dǎo)入大量數(shù)據(jù)的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們學(xué)習(xí)下。2019-09-09
php+mysql結(jié)合Ajax實(shí)現(xiàn)點(diǎn)贊功能完整實(shí)例
這篇文章主要介紹了php+mysql結(jié)合Ajax實(shí)現(xiàn)點(diǎn)贊功能,以一個(gè)完整實(shí)例形式詳細(xì)分析了實(shí)現(xiàn)點(diǎn)贊功能中涉及的html頁面、Ajax功能及php方法的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-01
strpos() 函數(shù)判斷字符串中是否包含某字符串的方法
在本篇文章里小編給大家?guī)砹艘黄P(guān)于strpos() 函數(shù)判斷字符串中是否包含某字符串的方法,有興趣的朋友們學(xué)習(xí)下。2019-01-01
PHP實(shí)現(xiàn)的激活用戶注冊(cè)驗(yàn)證郵箱功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的激活用戶注冊(cè)驗(yàn)證郵箱功能,詳細(xì)分析了php郵件激活用戶所涉及的數(shù)據(jù)庫、郵件相關(guān)操作技巧,需要的朋友可以參考下2017-06-06
PHP數(shù)組去重的更快實(shí)現(xiàn)方式分析
這篇文章主要介紹了PHP數(shù)組去重的更快實(shí)現(xiàn)方式,結(jié)合實(shí)例形式對(duì)比分析了php實(shí)現(xiàn)數(shù)組去重的各種常見操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-05-05

