四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

php下使用SMTP發(fā)郵件的代碼

最近一個(gè)項(xiàng)目需要用到SMTP發(fā)送郵件,之前的庫(kù)類(lèi)不存在了,又不喜歡安裝pear或者使用pear的NET/smtp類(lèi),感覺(jué)太復(fù)雜了。就直接從discuz中抽取出核心稍微修改了下。
   從協(xié)議分析網(wǎng)上,查找到SMTP協(xié)議的命令和應(yīng)答,SMTP協(xié)議在發(fā)送SMTP和接收SMTP之間的會(huì)話是靠發(fā)送SMTP的SMTP命令和接收SMTP反饋的應(yīng)答來(lái)完成的。常用的命令如下:
   HELLO<domain><CRLF>識(shí)別發(fā)送方到接收SMTP的一個(gè)HELLO命令
   MAIL FROM:<reverse-path><CRLF><reverse-path>為發(fā)送者地址。此命令告訴接收方一個(gè)新郵件發(fā)送的開(kāi)始,并對(duì)所有的狀態(tài)和緩沖區(qū)進(jìn)行初始化。此命令開(kāi)始一個(gè)郵件傳輸處理,最終完成將郵件數(shù)據(jù)傳送到一個(gè)或多個(gè)郵箱中。
   RCPT TO:<forward-path><CRLF><forward-path>標(biāo)識(shí)各個(gè)郵件接收者的地址  
   DATA<CRLF>
       接收SMTP將把其后的行為看作郵件數(shù)據(jù)去處理,以<CRLF>.<CRLF>標(biāo)識(shí)數(shù)據(jù)的結(jié)尾。
   REST<CRLF>退出/復(fù)位當(dāng)前的郵件傳輸
   NOOP<CRLF>要求接收SMTP僅做OK應(yīng)答。(用于測(cè)試)
   QUIT<CRLF>要求接收SMTP返回一個(gè)OK應(yīng)答并關(guān)閉傳輸。
   VRFY<string><CRLF>驗(yàn)證指定的郵箱是否存在,由于安全因素,服務(wù)器多禁止此命令。
   EXPN<string><CRLF>驗(yàn)證給定的郵箱列表是否存在,擴(kuò)充郵箱列表,也常禁止使用。
   HELP<CRLF>查詢(xún)服務(wù)器支持什么命令

   注:<CRLF>為回車(chē)、換行,ASCII碼分別為13、10(十進(jìn)制)。

   另外,可以在command下,使用telNET來(lái)進(jìn)行簡(jiǎn)單的手工使用SMTP。
  比如:


telNET smtp.263.NET 25 
Trying 211.150.96.25... 
Connected to smtp.263.NET
Escape character is '^]'. 
220 Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326) 
HELO weiqiong@cctk.NET 
250 smtp.263.NET 
mail from:weiqiong@cctk.NET 
250 Ok 
rcpt to:g2_t1@263.NET 
250 Ok 
data 
354 End data with <CR><LF>.<CR><LF> 
haha 

250 Ok: queued as B9E452FF3E 
quit 
221 Bye 
Connection closed by foreign host. 



   在此基礎(chǔ)上就可以寫(xiě)出一個(gè)簡(jiǎn)單的SMTP類(lèi)了。

<? 
class stmp{ 

    private $mailcfg=array(); 
    private $error_msg=''; 

    function __construct($mailcfg){ 

        $this->mailcfg=$mailcfg; 

    } 

    public function send($mail){ 
        $mailcfg=$this->mailcfg; 
        if(!$fp = fsockopen($mailcfg['server'], $mailcfg['port'], $errno, $errstr, 30)) { 
            return $this->error("($mailcfg[server]:$mailcfg[port]) CONNECT - Unable to connect to the SMTP server, please check your /"mail_config.php/"."); 
        } 
         stream_set_blocking($fp, true); 
         $lastmessage = fgets($fp, 512); 
        if(substr($lastmessage, 0, 3) != '220') { 
            return $this->error("$mailcfg[server]:$mailcfg[port] CONNECT - $lastmessage"); 
        } 
        fputs($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." ".$mailcfg['auth_username']."/r/n"); 
        $lastmessage = fgets($fp, 512); 
        if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) { 
            return $this->error("($mailcfg[server]:$mailcfg[port]) HELO/EHLO - $lastmessage"); 
        } 
        while(1) { 
            if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) { 
                 break; 
             } 
             $lastmessage = fgets($fp, 512); 
        } 
        if($mailcfg['auth']) { 
            fputs($fp, "AUTH LOGIN/r/n"); 
            $lastmessage = fgets($fp, 512); 
            if(substr($lastmessage, 0, 3) != 334) { 
                return $this->error("($mailcfg[server]:$mailcfg[port]) AUTH LOGIN - $lastmessage"); 
            } 
            fputs($fp, base64_encode($mailcfg['auth_username'])."/r/n"); 
            $lastmessage = fgets($fp, 512); 
            if(substr($lastmessage, 0, 3) != 334) { 
                return $this->error("($mailcfg[server]:$mailcfg[port]) USERNAME - $lastmessage"); 
            } 

            fputs($fp, base64_encode($mailcfg['auth_password'])."/r/n"); 
            $lastmessage = fgets($fp, 512); 
            if(substr($lastmessage, 0, 3) != 235) { 
                return $this->error("($mailcfg[server]:$mailcfg[port]) PASSWORD - $lastmessage"); 
            } 

            $email_from = $mailcfg['from']; 
        } 
        fputs($fp, "MAIL FROM: <".preg_replace("/.*/<(.+?)/>.*/", "http://1", $email_from).">/r/n"); 
        $lastmessage = fgets($fp, 512); 
        if(substr($lastmessage, 0, 3) != 250) { 
            fputs($fp, "MAIL FROM: <".preg_replace("/.*/<(.+?)/>.*/", "http://1", $email_from).">/r/n"); 
            $lastmessage = fgets($fp, 512); 
            if(substr($lastmessage, 0, 3) != 250) { 
                return $this->error("($mailcfg[server]:$mailcfg[port]) MAIL FROM - $lastmessage"); 
            } 
        } 

        $email_to=$mail['to']; 
        foreach(explode(',', $email_to) as $touser) { 
            $touser = trim($touser); 
            if($touser) { 
                fputs($fp, "RCPT TO: <$touser>/r/n"); 
                $lastmessage = fgets($fp, 512); 
                if(substr($lastmessage, 0, 3) != 250) { 
                    fputs($fp, "RCPT TO: <$touser>/r/n"); 
                    $lastmessage = fgets($fp, 512); 
                    return $this->error("($mailcfg[server]:$mailcfg[port]) RCPT TO - $lastmessage"); 
                } 
            } 
        } 
        fputs($fp, "DATA/r/n"); 
        $lastmessage = fgets($fp, 512); 
        if(substr($lastmessage, 0, 3) != 354) { 
            return $this->error("($mailcfg[server]:$mailcfg[port]) DATA - $lastmessage"); 
        } 
        $str="To: $email_to/r/nFrom: $email_from/r/nSubject: ".$mail['subject']."/r/n/r/n".$mail['content']."/r/n./r/n"; 
        fputs($fp, $str); 
        fputs($fp, "QUIT/r/n"); 
        return true; 
    } 

    public function get_error(){ 
        return $this->error_msg; 
    } 

    private function error($msg){ 
        $this->error_msg.=$msg; 
        return false; 
    } 


?> 

    簡(jiǎn)單的調(diào)用例子:

<? 
$mailcfg['server'] = 'smtp.163.com'; 

        $mailcfg['port'] = '25'; 

        $mailcfg['auth'] = 1; 
        $mailcfg['from'] = 'test <test@163.com>'; 

        $mailcfg['auth_username'] = 'test'; 

        $mailcfg['auth_password'] = 'password';     
        $stmp=new stmp($mailcfg); 
        $mail=array('to'=>'test@gmail.com','subject'=>'測(cè)試標(biāo)題','content'=>'郵件內(nèi)容<a href="http://www.phpobject.NET">php面向?qū)ο?lt;/a>'); 
        if(!$stmp->send($mail)){ 
            echo $stmp->get_error(); 
        }else{ 
            echo 'mail succ!'; 
        } 
?> 

  如果發(fā)送成功,你就可以去郵箱查看郵件了。^_^

php技術(shù)php下使用SMTP發(fā)郵件的代碼,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 迷夜电影| 处女巫| 黑龙江省地图高清全图| 吴承轩主演的电视剧| 假男假女| 红电视剧演员表| 2024年暑假师德师风心得体会| 六级词汇电子版| 黄色网址在线免费播放| 邓为个人简历| 电影《村小的孩子》完整版| hello小姐 电视剧| 笔仙2大尺度床戏| 生死搏斗| 二年级写玩具的作文| 雪山飞狐之塞北宝藏演员表| 刘蕾| 豆包简历个人资料| 王宝强最新电影叫什么| 黄电影在线观看| 南来北往电视剧剧情| 建设工程价款结算暂行办法| 当爱已成往事张国荣| 李高| 《与凤行》演员表| 故都的秋ppt| 电影网免费观看高清完整| 大尺度激情床戏视频| 烽火流金电视剧免费观看| 韩国电影《我是谁》演员表介绍| 台湾李丽萍十部必看电影| 燕子门| 黎小军| 小丑2双重疯狂免费播放在线观看| 香港之夜在线观看免费观看| 马可个人资料简介| 陈浩宇女演员| 暗黑破坏神2毁灭之王| cctv16体育节目表今天目表| 杨英格| 十八岁免费看的电视剧|