首頁  >  文章  >  後端開發  >  smartupload.jar php下使用SMTP發送郵件的程式碼

smartupload.jar php下使用SMTP發送郵件的程式碼

WBOY
WBOY原創
2016-07-29 08:37:22851瀏覽

最近一個專案要用到SMTP發送郵件,之前的函式庫類不存在了,又不喜歡安裝pear或使用pear的net/smtp類,感覺太複雜了。就直接從discuz中抽取出核心稍微修改了一下。
   從協定分析網路上,查找到SMTP協定的命令與應答,SMTP協定在發送SMTP和接收SMTP之間的會話是靠發送SMTP的SMTP指令和接收SMTP回饋的應答來完成的。常用的指令如下:
   HELLO<domain><CRLF>辨識發送方到接收SMTP的一個HELLO指令
   MAIL FROM:<reverse-path><CRLFLF><此指令告訴接收方一個新郵件發送的開始,並對所有的狀態和緩衝區進行初始化。此命令開始一個郵件傳輸處理,最終完成將郵件資料傳送到一個或多個郵箱中。
   RCPT TO:<forward-path><CRLF><forward-path>標識各個郵件接收者的地址  
   DATA< ,以<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. 220 Welcome to coremail System(With Anti-Spam) 2.1 for 263(040326) 
HELO weiqiong@cctk.net.com
250 Ok 
rcpt to:g2_t1@263.net 
250 Ok 
data 
354 End data with . 🎜>250 Ok: queued as B9E452FF3E 
quit 
221 Bye 
Connection closed by foreign Bye 
Connection closed by foreign Bye 
Connection closed by foreign 
 
class stmp{ 
    private $mailcfg=array(); 
    私人       $this->mailcfg =$mailcfg; 
    } 
    公用函數 send($mail){ 
        ockopen($mailcfg['server'], $cfcfg['port'], $errno, $errstr, 30)) { 
           return $this->error("( $mail)[SM]:$mail 連接到伺服器連接埠連接埠請檢查您的「mail_config.php」。 512); 
        if(substr($ lastmessage, 0, 3) !='220') { 
            return $this->error("$mailcfg[]:$mailcfg[   } 
        fputs ($fp, ($mailcfg['auth'] ? 'EHLO' : 'HELO')." ".$mailcfg['auth_username']."rn"); 
   ); 
        if(substr($lastmessage, 0, 3) != 220 && substr($lastmes turn $this->error("($mailcfg[server ]) :$mailcfg[埠]) HELO/EHLO - $lastmessage"); 
        } 
       $lastmessage, 3, 1) != '-' | empty($lastmessage)) { 
                 break; 
}   $lastmessage = fgets($fp, 512); 
        } 
        ($$cf. 🎜>            fputs($fp, "AUTH LOGINrn"); 
               if(substr($lastmessage, 0, 3) != 334) { 
                        $this->error("($mailcfg[server]:$mailcfg[port]) AUTH LOGIN - $lastmessage" ); 
          64_encode($mailcfg['auth_username']) ."rn"); 
            $lastmessage = fgets($fp, 512); 
        
                return $this->error(" ($mailcfg[server]:$mailcfg[port]) USERNAME - $lastmessage") ; 
            } 
            fputs($fp, base64_encode($mailcfg['auth_password'])."rn"); 
            $lastmessage = fgets($fp, 512); 
            if(substr($lastmessage, 0, 3) != 235) { $mailcfg[port]) PASSWORD - $lastmessage") ; 
            , 
            $email_from = $mail]; 
        } 
        fputs($fp, "郵件來自: . ); 
        $lastmessage = fgets($fp, 512); 
        if(substr($lastmessage, 0, 3) != 250) { 
        .*/ ", "\1", $email_from).">rn"); 
            $lastmessage = fgets($fp, 512); 
            if(substr($lastmessage, 0, 3) != 250) { $mailcfg[port]) MAIL FROM - $lastmessage" ) ; 
            } 
         } 
 each(explode(',', $email_to) as $touser) { 
            $touser = 修剪( $touser); 
            if($touser) { 
                        $lastmessage = fgets($fp, 512 ); 
if(substr($lastmessage, 0, 3) != 250) { 
                                 $lastmessage = fgets($fp, 5) 12 );
                    return $this->error("($mailcfg[server]:$mail        } 
            } 
        ($ fp, "DATArn"); 
        $lastmessage = fgets($fp, 512); 
                 返回$this-> error( "($mailcfg[伺服器]:$mailcfg[連接埠]) 資料 - $lastmessage") ; 
        }
        $str="收件人:$email_tornFrom:$email_fromrnSubject:".$mail['subject']."rnrn".$ $fp, $str); 
        fputs($fp, "QUITrn"); 
        
        return $this->error_msg; 
    } 
    來自私有函數 error($msg){ 
        $   } 

? > 
    簡單的呼叫範例:
 
$mailcfg['伺服器'] = 'smtp.163.com'; 
     mail         $mailcfg['auth'] = 1; 
        $mailcfg['from'] = 'test username. ] = 'test'; 
        $mailcfg['auth_password'] = '密碼';     
        $stmp gmail.com','subject' =>'測試標題','content'=>'郵件內容PHP物件導向'); 
        if(!$stmp- >send($mail)){ 
            echo $stmp->get_error(); 
     成功! '; 
        } 
? > 
  如果發送成功,你就可以去郵箱查看郵件了。 ^_^
以上就介紹了smartupload.jar php下使用SMTP發郵件的程式碼,包含了smartupload.jar方面的內容,希望對PHP教學有興趣的朋友有幫助。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn