亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

php基于socket實現SMTP發送郵件的方法

2024-05-04 23:31:56
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了php基于socket實現SMTP發送郵件的方法,實例分析了php采用socket實現smtp發送郵件的原理與技巧,具有一定參考借鑒價值,需要的朋友可以參考下
 

本文實例講述了php基于socket實現SMTP發送郵件的方法。分享給大家供大家參考。具體分析如下:

php采用socket通過SMTP發送郵件。
用的是php的php-sockets擴展,可以發送純文本和html格式的郵件。代碼如下:

復制代碼代碼如下:

<?php
/**
* 郵件發送類
* 支持發送純文本郵件和HTML格式的郵件
* @example
* $config = array(
*       "from" => "*****",
*       "to" => "***",
*       "subject" => "test",
*       "body" => "<b>test</b>",
*       "username" => "***",
*       "password" => "****",
*       "isHTML" => true
*   );
*
* $mail = new MySendMail();
*
* $mail->setServer("smtp.126.com");
*
* $mail->setMailInfo($config);
* if(!$mail->sendMail()) {
*   echo $mail->error();
*   return 1;
* }
*/
class MySendMail {
    /**
    * @var 郵件傳輸代理用戶名
    * @access private
    */
    private $_userName;
    /**
    * @var 郵件傳輸代理密碼
    * @access private
    */
    private $_password;
    /**
    * @var 郵件傳輸代理服務器地址
    * @access protected
    */
    protected $_sendServer;
    /**
    * @var 郵件傳輸代理服務器端口
    * @access protected
    */
    protected $_port=25;
    /**
    * @var 發件人
    * @access protected
    */
    protected $_from;
    /**
    * @var 收件人
    * @access protected
    */
    protected $_to;
    /**
    * @var 主題
    * @access protected
    */
    protected $_subject;
    /**
    * @var 郵件正文
    * @access protected
    */
    protected $_body;
    /**
    * @var 是否是HTML格式的郵件
    * @access protected
    */
    protected $_isHTML=false;
    /**
    * @var socket資源
    * @access protected
    */
    protected $_socket;
    /**
    * @var 錯誤信息
    * @access protected
    */
    protected $_errorMessage;
    public function __construct($from="", $to="", $subject="", $body="", $server="", $username="", $password="",$isHTML="", $port="") {
        if(!empty($from)){
            $this->_from = $from;
        }
        if(!empty($to)){
            $this->_to = $to;
        }
        if(!empty($subject)){
            $this->_subject = $subject;
        }
        if(!empty($body)){
            $this->_body = $body;
        }
        if(!empty($isHTML)){
            $this->_isHTML = $isHTML;
        }
        if(!empty($server)){
            $this->_sendServer = $server;
        }
        if(!empty($port)){
            $this->_port = $port;
        }
        if(!empty($username)){
            $this->_userName = $username;
        }
        if(!empty($password)){
            $this->_password = $password;
        }
    }
    /**
    * 設置郵件傳輸代理
    * @param string $server 代理服務器的ip或者域名
    * @param int $port 代理服務器的端口,smtp默認25號端口
    * @param int $localPort 本地端口
    * @return boolean
    */
    public function setServer($server, $port=25) {
        if(!isset($server) || empty($server) || !is_string($server)) {
            $this->_errorMessage = "first one is an invalid parameter";
            return false;
        }
        if(!is_numeric($port)){
            $this->_errorMessage = "first two is an invalid parameter";
            return false;
        }
        $this->_sendServer = $server;
        $this->_port = $port;
        return true;
    }
    /**
    * 設置郵件
    * @access public
    * @param array $config 郵件配置信息
    * 包含郵件發送人、接收人、主題、內容、郵件傳輸代理的驗證信息
    * @return boolean
    */
    public function setMailInfo($config) {
        if(!is_array($config) || count($config) < 6){
            $this->_errorMessage = "parameters are required";
            return false;
        }
        $this->_from = $config['from'];
        $this->_to = $config['to'];
        $this->_subject = $config['subject'];
        $this->_body = $config['body'];
        $this->_userName = $config['username'];
        $this->_password = $config['password'];
        if(isset($config['isHTML'])){
            $this->_isHTML = $config['isHTML'];
        }
        return true;
    }
    /**
    * 發送郵件
    * @access public
    * @return boolean
    */
    public function sendMail() {
        $command = $this->getCommand();
        $this->socket();
        foreach ($command as $value) {
            if($this->sendCommand($value[0], $value[1])) {
                continue;
            }
            else{
                return false;
            }
        }
        $this->close(); //其實這里也沒必要關閉,smtp命令:QUIT發出之后,服務器就關閉了連接,本地的socket資源會自動釋放
        echo 'Mail OK!';
        return true;
    }
    /**
    * 返回錯誤信息
    * @return string
    */
    public function error(){
        if(!isset($this->_errorMessage)) {
            $this->_errorMessage = "";
        }
        return $this->_errorMessage;
    }
    /**
    * 返回mail命令
    * @access protected
    * @return array
    */
    protected function getCommand() {
        if($this->_isHTML) {
            $mail = "MIME-Version:1.0/r/n";
            $mail .= "Content-type:text/html;charset=utf-8/r/n";
            $mail .= "FROM:test<" . $this->_from . ">/r/n";
            $mail .= "TO:<" . $this->_to . ">/r/n";
            $mail .= "Subject:" . $this->_subject ."/r/n/r/n";
            $mail .= $this->_body . "/r/n./r/n";
        }
        else{
            $mail = "FROM:test<" . $this->_from . ">/r/n";
            $mail .= "TO:<" . $this->_to . ">/r/n";
            $mail .= "Subject:" . $this->_subject ."/r/n/r/n";
            $mail .= $this->_body . "/r/n./r/n";
        }
        $command = array(
                array("HELO sendmail/r/n", 250),
                array("AUTH LOGIN/r/n", 334),
                array(base64_encode($this->_userName) . "/r/n", 334),
                array(base64_encode($this->_password) . "/r/n", 235),
                array("MAIL FROM:<" . $this->_from . ">/r/n", 250),
                array("RCPT TO:<" . $this->_to . ">/r/n", 250),
                array("DATA/r/n", 354),
                array($mail, 250),
                array("QUIT/r/n", 221)
        );
        return $command;
    }
    /**
    * @access protected
    * @param string $command 發送到服務器的smtp命令
    * @param int $code 期望服務器返回的響應嗎
    * @param boolean
    */
    protected function sendCommand($command, $code) {
        echo 'Send command:' . $command . ',expected code:' . $code . '<br />';
        //發送命令給服務器
        try{
            if(socket_write($this->_socket, $command, strlen($command))){
                //讀取服務器返回
                $data = trim(socket_read($this->_socket, 1024));
                echo 'response:' . $data . '<br /><br />';
                if($data) {
                    $pattern = "/^".$code."/";
                    if(preg_match($pattern, $data)) {
                        return true;
                    }
                    else{
                        $this->_errorMessage = "Error:" . $data . "|**| command:";
                        return false;
                    }
                }
                else{
                    $this->_errorMessage = "Error:" . socket_strerror(socket_last_error());
                    return false;
                }
            }
            else{
                $this->_errorMessage = "Error:" . socket_strerror(socket_last_error());
                return false;
            }
        }catch(Exception $e) {
            $this->_errorMessage = "Error:" . $e->getMessage();
        }
    }
    /**
    * 建立到服務器的網絡連接
    * @access private
    * @return boolean
    */
    private function socket() {
        if(!function_exists("socket_create")) {
            $this->_errorMessage = "extension php-sockets must be enabled";
            return false;
        }
        //創建socket資源
        $this->_socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
        if(!$this->_socket) {
            $this->_errorMessage = socket_strerror(socket_last_error());
            return false;
        }
        //連接服務器
        if(!socket_connect($this->_socket, $this->_sendServer, $this->_port)) {
            $this->_errorMessage = socket_strerror(socket_last_error());
            return false;
        }
        socket_read($this->_socket, 1024);
        return true;
    }
    /**
    * 關閉socket
    * @access private
    * @return boolean
    */
    private function close() {
        if(isset($this->_socket) && is_object($this->_socket)) {
            $this->_socket->close();
            return true;
        }
        $this->_errorMessage = "no resource can to be close";
        return false;
    }
}
/**************************** Test ***********************************/
$config = array(
        "from" => "XXXXX",
        "to" => "XXXXX",
        "subject" => "test",
        "body" => "<b>test</b>",
        "username" => "XXXXX",
        "password" => "******",
        //"isHTML" => true
    );
$mail = new MySendMail();
$mail->setServer("smtp.126.com");
$mail->setMailInfo($config);
if(!$mail->sendMail()) {
    echo $mail->error();
    return 1;
}

 

希望本文所述對大家的php程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产一区二区三区久久狼黑人| 亚洲天堂日韩电影| 久久综合久久美利坚合众国| 中文字幕在线日韩| 91精品久久久久久久久久久久久久| 欧美日韩裸体免费视频| 成人激情电影一区二区| 亚洲福利在线观看| 亚洲成人999| 51久久精品夜色国产麻豆| 国产精品视频在线播放| 欧美一性一乱一交一视频| 久久综合伊人77777| 成人激情视频在线| 色综合视频网站| 精品久久久久久久久久久久久久| 日韩在线视频网| 国产一区二区三区毛片| 国产在线精品一区免费香蕉| 欧美午夜性色大片在线观看| 日韩精品亚洲元码| 久久乐国产精品| 亚洲大胆人体在线| 国产日韩换脸av一区在线观看| 欧美专区在线播放| 一个人www欧美| 久久久极品av| 精品免费在线视频| 中文字幕欧美精品日韩中文字幕| 亚洲免费伊人电影在线观看av| 性欧美在线看片a免费观看| 成人精品一区二区三区电影黑人| 亚洲iv一区二区三区| 日韩av在线直播| 亚洲黄色av网站| 人妖精品videosex性欧美| 91精品国产色综合| 中文字幕一精品亚洲无线一区| 国产精品男人爽免费视频1| 九色精品美女在线| 中文字幕一精品亚洲无线一区| 亚洲丝袜一区在线| 国产午夜精品久久久| 亚洲福利影片在线| 亚洲在线免费视频| 中日韩美女免费视频网站在线观看| 欧美激情在线狂野欧美精品| 97视频在线观看网址| 久久精品夜夜夜夜夜久久| 亚洲精品av在线| 久久伊人91精品综合网站| 中文字幕国产亚洲| 久久夜色精品国产欧美乱| 欧美精品国产精品日韩精品| 欧美一区二区三区免费视| 精品国内亚洲在观看18黄| 4k岛国日韩精品**专区| 欧美性猛交xxxx免费看漫画| 欧美做受高潮1| 亚洲视频在线观看视频| 久久精品视频在线观看| 欧美精品免费在线| 亚洲人成电影网| 亚洲女人被黑人巨大进入| 欧美成人免费视频| www.国产精品一二区| 国产精品久久久久久一区二区| 国产精品成人v| 国产精品久久中文| 国产精品99一区| 久久久久久亚洲精品不卡| 欧美极品少妇全裸体| 欧美电影在线观看完整版| 亚洲第一级黄色片| 国产在线a不卡| 国产日韩换脸av一区在线观看| 国产精品毛片a∨一区二区三区|国| 91成人福利在线| 亚洲一区二区福利| 丰满岳妇乱一区二区三区| 北条麻妃一区二区在线观看| 欧美日韩另类视频| 日韩av免费网站| www.亚洲免费视频| 久久伊人91精品综合网站| 国内外成人免费激情在线视频| 国产精品va在线播放我和闺蜜| 一个人www欧美| 国产午夜精品视频免费不卡69堂| 精品久久久久久亚洲精品| 国产精品视频一| 国产精品扒开腿做爽爽爽视频| 亚洲男人第一网站| 亚洲人成人99网站| 久久综合亚洲社区| 欧美日韩免费区域视频在线观看| 亚洲成人av资源网| 久久九九有精品国产23| 国产在线观看精品一区二区三区| 成人淫片在线看| 亚洲白虎美女被爆操| 国产精品一区二区久久精品| 久久夜色精品国产欧美乱| 亚洲国产精品人久久电影| 91探花福利精品国产自产在线| 国产精品成人久久久久| 国产亚洲人成a一在线v站| 精品毛片网大全| 日韩在线视频观看| 日韩风俗一区 二区| 丝袜美腿精品国产二区| 国产一区二区三区高清在线观看| 91国产美女视频| 日韩在线免费高清视频| 日韩电影中文字幕在线观看| 国产欧亚日韩视频| 91久久在线播放| 庆余年2免费日韩剧观看大牛| 欧美xxxx18国产| 亚洲最大av网| 中文字幕欧美日韩在线| 亚洲va久久久噜噜噜久久天堂| 91精品久久久久久| 日韩在线一区二区三区免费视频| 中文字幕久精品免费视频| 国产精品欧美日韩| 亚洲人永久免费| 成人激情视频在线播放| 国产精品一区二区av影院萌芽| 在线视频中文亚洲| 亚洲欧洲在线看| 国产精品视频中文字幕91| 亚洲精品国精品久久99热一| 日韩一二三在线视频播| 色爱av美腿丝袜综合粉嫩av| 日韩欧美黄色动漫| 亚洲精品成人网| 色偷偷偷综合中文字幕;dd| 国产精品香蕉av| 福利视频导航一区| 在线日韩第一页| 久久国产精品电影| 亚洲色图五月天| 欧美日韩国产精品| 日韩精品在线看| 国产在线精品播放| 欧美性猛交xxxxx水多| 欧美大片网站在线观看| 91久久夜色精品国产网站| 国产成人涩涩涩视频在线观看| 国产精品免费观看在线| 成人黄色免费网站在线观看| 久久久久中文字幕| 91影院在线免费观看视频| 日韩av在线免费观看| 亚洲国产女人aaa毛片在线| 91av在线视频观看| 中文字幕在线看视频国产欧美| 日韩经典中文字幕在线观看| 国产午夜精品麻豆| 色综合久久88色综合天天看泰| 日韩av在线播放资源| 亚洲一区二区三区xxx视频| 欧美成年人视频网站欧美|