你好,用這個(gè)郵件類,需要在調(diào)用時(shí),填寫一個(gè)smtp服務(wù)器和你的用戶名密碼。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),泰順企業(yè)網(wǎng)站建設(shè),泰順品牌網(wǎng)站建設(shè),網(wǎng)站定制,泰順網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,泰順網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
?php
set_time_limit(600);
/*
* 郵件發(fā)送類
*/
class smail {
//您的SMTP 服務(wù)器供應(yīng)商,可以是域名或IP地址
var $smtp = "";
//SMTP需要要身份驗(yàn)證設(shè)值為 1 不需要身份驗(yàn)證值為 0,現(xiàn)在大多數(shù)的SMTP服務(wù)商都要驗(yàn)證,如不清楚請與你的smtp 服務(wù)商聯(lián)系。
var $check = 1;
//您的email帳號名稱
var $username = "";
//您的email密碼
var $password = "";
//此email 必需是發(fā)信服務(wù)器上的email
var $s_from = "";
/*
* 功能:發(fā)信初始化設(shè)置
* $from 你的發(fā)信服務(wù)器上的郵箱
* $password 你的郵箱密碼
* $smtp 您的SMTP 服務(wù)器供應(yīng)商,可以是域名或IP地址
* $check SMTP需要要身份驗(yàn)證設(shè)值為 1 不需要身份驗(yàn)證值為 0,現(xiàn)在大多數(shù)的SMTP服務(wù)商都要驗(yàn)證
*/
function smail ( $from, $password, $smtp, $check = 1 ) {
if( preg_match("/^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]+[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{2,3}/", $from ) ) {
$this-username = substr( $from, 0, strpos( $from , "@" ) );
$this-password = $password;
$this-smtp = $smtp ? $smtp : $this-smtp;
$this-check = $check;
$this-s_from = $from;
}
}
/*
* 功能:發(fā)送郵件
* $to 目標(biāo)郵箱
* $from 來源郵箱
* $subject 郵件標(biāo)題
* $message 郵件內(nèi)容
*/
function send ( $to, $from, $subject, $message ) {
//連接服務(wù)器
$fp = fsockopen ( $this-smtp, 25, $errno, $errstr, 60);
if (!$fp ) return "聯(lián)接服務(wù)器失敗".__LINE__;
set_socket_blocking($fp, true );
$lastmessage=fgets($fp,512);
if ( substr($lastmessage,0,3) != 220 ) return "錯(cuò)誤信息1:$lastmessage".__LINE__;
//HELO
$yourname = "YOURNAME";
if($this-check == "1") $lastact="EHLO ".$yourname."\r\n";
else $lastact="HELO ".$yourname."\r\n";
fputs($fp, $lastact);
$lastmessage == fgets($fp,512);
if (substr($lastmessage,0,3) != 220 ) return "錯(cuò)誤信息2:$lastmessage".__LINE__;
while (true) {
$lastmessage = fgets($fp,512);
if ( (substr($lastmessage,3,1) != "-") or (empty($lastmessage)) )
break;
}
//身份驗(yàn)證
if ($this-check=="1") {
//驗(yàn)證開始
$lastact="AUTH LOGIN"."\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 334) return "錯(cuò)誤信息3:$lastmessage".__LINE__;
//用戶姓名
$lastact=base64_encode($this-username)."\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 334) return "錯(cuò)誤信息4:$lastmessage".__LINE__;
//用戶密碼
$lastact=base64_encode($this-password)."\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != "235") return "錯(cuò)誤信息5:$lastmessage".__LINE__;
}
//FROM:
$lastact="MAIL FROM: ". $this-s_from . "\r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 250) return "錯(cuò)誤信息6:$lastmessage".__LINE__;
//TO:
$lastact="RCPT TO: ". $to ." \r\n";
fputs( $fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 250) return "錯(cuò)誤信息7:$lastmessage".__LINE__;
//DATA
$lastact="DATA\r\n";
fputs($fp, $lastact);
$lastmessage = fgets ($fp,512);
if (substr($lastmessage,0,3) != 354) return "錯(cuò)誤信息8:$lastmessage".__LINE__;
//處理Subject頭
$head="Subject: $subject\r\n";
$message = $head."\r\n".$message;
//處理From頭
$head="From: $from\r\n";
$message = $head.$message;
//處理To頭
$head="To: $to\r\n";
$message = $head.$message;
//加上結(jié)束串
$message .= "\r\n.\r\n";
//發(fā)送信息
fputs($fp, $message);
$lastact="QUIT\r\n";
fputs($fp,$lastace);
fclose($fp);
return 0;
}
}
// 發(fā)送示例
// 只需要把這部分改成你的信息就行
$sm = new smail( "用戶名", "密碼", "發(fā)件smtp服務(wù)器" );
$end = $sm-send( "收件人", "發(fā)件人(可以偽造哦)", "標(biāo)題", "內(nèi)容" );
if( $end ) echo $end;
else echo "發(fā)送成功!$x";
?
本文以QQ郵箱為案例
1.配置QQ郵箱,獲取SMTP 密碼
3.開啟PHP模塊(php.ini)
PHPMailer 需要 PHP 的 sockets 擴(kuò)展支持,而登錄 QQ 郵箱 SMTP 服務(wù)器則必須通過 SSL 加密,故 PHP 還得包含 openssl 的支持。
4.composer 安裝最新版發(fā)送郵件類庫
composer require phpmailer/phpmailer:6.1.5
TP5.1類庫封裝
首先,我們需要去Github(網(wǎng)頁鏈接)下載完整的SwiftMailer
這里主要使用到的是下載解壓后lib文件夾里的內(nèi)容,然后需要一些配置項(xiàng),為方便管理和修改,此處我們寫一個(gè)配置文件config.php,來進(jìn)行配置,此處以QQ郵箱為例,配置項(xiàng)如下:
然后自定義一個(gè)函數(shù)sendMail(函數(shù)里的C是thinkphp里獲取配置文件的方法,自己在不是tp里的話使用直接require就可以了)
然后在相關(guān)代碼里使用調(diào)用sendMail發(fā)送郵件,這里以ThinkPHP里的controller為例子,使用方法如下:
發(fā)送成功后顯示 ‘Done!’:
然后就可以去郵箱查看是否收取到郵件咯。
就是這么簡單。
參考:網(wǎng)頁鏈接
send_mail($_POST['test_email'],?"",?"測試配置是否正確",?"這是一封測試郵件,如果收到了說明配置沒有問題",?"",?$_POST);
關(guān)于發(fā)送郵件函數(shù)網(wǎng)上多得很找一個(gè)send_mail函數(shù)就行了
PHP發(fā)送郵件函數(shù)的應(yīng)用代碼示例:
#echo?send_mail($_POST["email"],$tosubject,$_POST["errortext"]);??
echo?send_mail('someone@126.com','only?a?test?mail?for?test?php?mail?function','一封垃圾郵件');??
echo?time();??
function?send_mail($to,?$subject?=?'No?subject',?$body)?{??
$loc_host?=?"mail.server";?//發(fā)信計(jì)算機(jī)名,可隨意??
$smtp_acc?=?"smp@163.com";?//Smtp認(rèn)證的用戶名??
$smtp_pass="pwdpwd";?//Smtp認(rèn)證的密碼,一般等同pop3密碼??
$smtp_host="smtp.163.com";?//SMTP服務(wù)器地址,類似?smtp.tom.com??
$from="smp@163.com";?//發(fā)信人Email地址,你的發(fā)信信箱地址??
$deliver=$smtp_acc;?//回復(fù)到指定郵箱??
$headers?=?"Content-Type:?text/plain;?charset="gb2312"rnContent-Transfer-Encoding:?base64";??
$lb="rn";?//linebreak???
$hdr?=?explode($lb,$headers);?//解析后的hdr??
if($body)?{$bdy?=?preg_replace("/^./","..",explode($lb,$body));}//解析后的Body??
$smtp?=?array(??
//1、EHLO,期待返回220或者250??
array("EHLO?".$loc_host.$lb,"220,250","HELO?error:?"),??
//2、發(fā)送Auth?Login,期待返回334??
array("AUTH?LOGIN".$lb,"334","AUTH?error:"),??
//3、發(fā)送經(jīng)過Base64編碼的用戶名,期待返回334??
array(base64_encode($smtp_acc).$lb,"334","AUTHENTIFICATION?error?:?"),??
//4、發(fā)送經(jīng)過Base64編碼的密碼,期待返回235??
array(base64_encode($smtp_pass).$lb,"235","AUTHENTIFICATION?error?:?"));??
//5、發(fā)送Mail?From,期待返回250??
$smtp[]?=?array("MAIL?FROM:?".$from."".$lb,"250","MAIL?FROM?error:?");??
//6、發(fā)送Rcpt?To。期待返回250??
$smtp[]?=?array("RCPT?TO:?".$to."".$lb,"250","RCPT?TO?error:?");??
//7、發(fā)送DATA,期待返回354??
$smtp[]?=?array("DATA".$lb,"354","DATA?error:?");??
//8.0、發(fā)送From??
$smtp[]?=?array("From:?".$deliver.$lb,"","");??
//8.2、發(fā)送To??
$smtp[]?=?array("To:?".$to.$lb,"","");??
//8.1、發(fā)送標(biāo)題??
$smtp[]?=?array("Subject:?".$subject.$lb,"","");??
//8.3、發(fā)送其他Header內(nèi)容??
foreach($hdr?as?$h)?{$smtp[]?=?array($h.$lb,"","");}??
//8.4、發(fā)送一個(gè)空行,結(jié)束Header發(fā)送??
$smtp[]?=?array($lb,"","");??
//8.5、發(fā)送信件主體??
if($bdy)?{foreach($bdy?as?$b)?{$smtp[]?=?array(base64_encode($b.$lb).$lb,"","");}}??
//9、發(fā)送“.”表示信件結(jié)束,期待返回250??
$smtp[]?=?array(".".$lb,"250","DATA(end)error:?");??
//10、發(fā)送Quit,退出,期待返回221??
$smtp[]?=?array("QUIT".$lb,"221","QUIT?error:?");??
//打開smtp服務(wù)器端口??
$fp?=?@fsockopen($smtp_host,?25);??
if?(!$fp)?echo?"bError:/b?Cannot?conect?to?".$smtp_host."br";??
while($result?=?@fgets($fp,?1024)){if(substr($result,3,1)?==?"?")?{?break;?}}??
$result_str="";??
//發(fā)送smtp數(shù)組中的命令/數(shù)據(jù)??
foreach($smtp?as?$req){??
//發(fā)送信息??
@fputs($fp,?$req[0]);??
//如果需要接收服務(wù)器返回信息,則??
if($req[1]){??
//接收信息??
while($result?=?@fgets($fp,?1024)){??
if(substr($result,3,1)?==?"?")?{?break;?}??
};??
if?(!strstr($req[1],substr($result,0,3))){??
$result_str.=$req[2].$result."br";??
}??
}??
}??
//關(guān)閉連接??
@fclose($fp);??
return?$result_str;??
}??
希望上面這段代碼示例能讓大家充分掌握PHP發(fā)送郵件函數(shù)的運(yùn)用。