天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

php下使用SMTP發郵件的代碼

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

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

   另外,可以在command下,使用telNET來進行簡單的手工使用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. 



   在此基礎上就可以寫出一個簡單的SMTP類了。

<? 
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; 
    } 


?> 

    簡單的調用例子:

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

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

        $mailcfg['auth'] = 1; 
        $mailcfg['from'] = 'test <[email protected]>'; 

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

        $mailcfg['auth_password'] = 'password';     
        $stmp=new stmp($mailcfg); 
        $mail=array('to'=>'[email protected]','subject'=>'測試標題','content'=>'郵件內容<a href="http://www.phpobject.NET">php面向對象</a>'); 
        if(!$stmp->send($mail)){ 
            echo $stmp->get_error(); 
        }else{ 
            echo 'mail succ!'; 
        } 
?> 

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

php技術php下使用SMTP發郵件的代碼,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产成人午夜精品免费视频 | 成人永久免费视频网站在线观看 | 四川少妇大战4黑人 | 青柠电影在线看 | 帅哥操帅哥 | 欧美另类与牲交ZOZOZO | 一个人在线观看的视频 | 美女网站免费久久久久久久 | 亚洲免费福利在线视频 | 脱jk裙的美女露小内内无遮挡 | 日日射夜夜干夜夜插在线播放 | 国产婷婷一区二区在线观看 | 国产精品青青草原app大全 | 免费看片A级毛片免费看 | 一二三四高清中文版视频 | 日韩欧美一区二区三区在线 | 久久国产影院 | 99re久久热在线视频 | 5g天天影院天天看天天爽 | 亚洲AV精品无码国产一区 | 最近2018年手机中文字幕 | 国产激情视频在线播放 | 免费人成网站在线观看10分钟 | 久久怡红院国产精品 | 被老总按在办公桌吸奶头 | 国产精品99久久久久久AV色戒 | 性盈盈剧场 | 99久久国产露脸精品国产吴梦梦 | 亚洲色婷婷久久精品AV蜜桃 | 97人妻中文字幕免费视频 | 亚洲免费三级电影 | 亚洲伊人精品 | 亚洲视频无码中字在线 | 国产亚洲精品在浅麻豆 | 国产精品69人妻无码久久 | 国产精品嫩草久久久久 | 果冻传媒2021一二三区 | 日本阿v在线资源无码免费 日本阿v片在线播放免费 | 欧美人成人亚洲专区中文字幕 | 一本道在线综合久久88 | 张开腿我尝尝你的草莓 |