Server : Apache
System : Linux iZ2vcgyutqttsd1p850kl8Z 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64
User : www ( 1000)
PHP Version : 5.6.40
Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/saimikebio.com/mobile/include/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/saimikebio.com/mobile/include/cls_smtp.php
<?php



/**

 * ECSHOP SMTP 邮件类

 * ============================================================================

 * * 版权所有 2005-2012 上海商派网络科技有限公司,并保留所有权利。

 * 网站地址: http://www.ecshop.com;

 * ----------------------------------------------------------------------------

 * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和

 * 使用;不允许对程序代码以任何形式任何目的的再发布。

 * ============================================================================

 * $Author: liubo $

 * $Id: cls_smtp.php 17217 2011-01-19 06:29:08Z liubo $

*/



if (!defined('IN_ECTOUCH'))

{

    die('Hacking attempt');

}



define('SMTP_STATUS_NOT_CONNECTED', 1, true);

define('SMTP_STATUS_CONNECTED',     2, true);



class smtp

{

    var $connection;

    var $recipients;

    var $headers;

    var $timeout;

    var $errors;

    var $status;

    var $body;

    var $from;

    var $host;

    var $port;

    var $helo;

    var $auth;

    var $user;

    var $pass;



    /**

     *  参数为一个数组

     *  host        SMTP 服务器的主机       默认:localhost

     *  port        SMTP 服务器的端口       默认:25

     *  helo        发送HELO命令的名称      默认:localhost

     *  user        SMTP 服务器的用户名     默认:空值

     *  pass        SMTP 服务器的登陆密码   默认:空值

     *  timeout     连接超时的时间          默认:5

     *  @return  bool

     */

    function smtp($params = array())

    {

        if (!defined('CRLF'))

        {

            define('CRLF', "\r\n", true);

        }



        $this->timeout  = 10;

        $this->status   = SMTP_STATUS_NOT_CONNECTED;

        $this->host     = 'localhost';

        $this->port     = 25;

        $this->auth     = false;

        $this->user     = '';

        $this->pass     = '';

        $this->errors   = array();



        foreach ($params AS $key => $value)

        {

            $this->$key = $value;

        }



        $this->helo     = $this->host;



        //  如果没有设置用户名则不验证

        $this->auth = ('' == $this->user) ? false : true;

    }



    function connect($params = array())

    {

        if (!isset($this->status))

        {

            $obj = new smtp($params);



            if ($obj->connect())

            {

                $obj->status = SMTP_STATUS_CONNECTED;

            }



            return $obj;

        }

        else

        {

            if (!empty($GLOBALS['_CFG']['smtp_ssl']))

            {

                $this->host = "ssl://" . $this->host;

            }

            $this->connection = @fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);



            if ($this->connection === false)

            {

                $this->errors[] = 'Access is denied.';



                return false;

            }



            @socket_set_timeout($this->connection, 0, 250000);



            $greeting = $this->get_data();



            if (is_resource($this->connection))

            {

                $this->status = 2;



                return $this->auth ? $this->ehlo() : $this->helo();

            }

            else

            {

                log_write($errstr, __FILE__, __LINE__);

                $this->errors[] = 'Failed to connect to server: ' . $errstr;



                return false;

            }

        }

    }



    /**

     * 参数为数组

     * recipients      接收人的数组

     * from            发件人的地址,也将作为回复地址

     * headers         头部信息的数组

     * body            邮件的主体

     */



    function send($params = array())

    {

        foreach ($params AS $key => $value)

        {

            $this->$key = $value;

        }



        if ($this->is_connected())

        {

            //  服务器是否需要验证

            if ($this->auth)

            {

                if (!$this->auth())

                {

                    return false;

                }

            }



            $this->mail($this->from);



            if (is_array($this->recipients))

            {

                foreach ($this->recipients AS $value)

                {

                    $this->rcpt($value);

                }

            }

            else

            {

                $this->rcpt($this->recipients);

            }



            if (!$this->data())

            {

                return false;

            }



            $headers = str_replace(CRLF . '.', CRLF . '..', trim(implode(CRLF, $this->headers)));

            $body    = str_replace(CRLF . '.', CRLF . '..', $this->body);

            $body    = substr($body, 0, 1) == '.' ? '.' . $body : $body;



            $this->send_data($headers);

            $this->send_data('');

            $this->send_data($body);

            $this->send_data('.');



            return (substr($this->get_data(), 0, 3) === '250');

        }

        else

        {

            $this->errors[] = 'Not connected!';



            return false;

        }

    }



    function helo()

    {

        if (is_resource($this->connection)

                AND $this->send_data('HELO ' . $this->helo)

                AND substr($error = $this->get_data(), 0, 3) === '250' )

        {

            return true;

        }

        else

        {

            $this->errors[] = 'HELO command failed, output: ' . trim(substr($error, 3));



            return false;

        }

    }



    function ehlo()

    {

        if (is_resource($this->connection)

                AND $this->send_data('EHLO ' . $this->helo)

                AND substr($error = $this->get_data(), 0, 3) === '250' )

        {

            return true;

        }

        else

        {

            $this->errors[] = 'EHLO command failed, output: ' . trim(substr($error, 3));



            return false;

        }

    }



    function auth()

    {

        if (is_resource($this->connection)

                AND $this->send_data('AUTH LOGIN')

                AND substr($error = $this->get_data(), 0, 3) === '334'

                AND $this->send_data(base64_encode($this->user))            // Send username

                AND substr($error = $this->get_data(),0,3) === '334'

                AND $this->send_data(base64_encode($this->pass))            // Send password

                AND substr($error = $this->get_data(),0,3) === '235' )

        {

            return true;

        }

        else

        {

            $this->errors[] = 'AUTH command failed: ' . trim(substr($error, 3));



            return false;

        }

    }



    function mail($from)

    {

        if ($this->is_connected()

            AND $this->send_data('MAIL FROM:<' . $from . '>')

            AND substr($this->get_data(), 0, 2) === '250' )

        {

            return true;

        }

        else

        {

            return false;

        }

    }



    function rcpt($to)

    {

        if ($this->is_connected()

            AND $this->send_data('RCPT TO:<' . $to . '>')

            AND substr($error = $this->get_data(), 0, 2) === '25')

        {

            return true;

        }

        else

        {

            $this->errors[] = trim(substr($error, 3));



            return false;

        }

    }



    function data()

    {

        if ($this->is_connected()

            AND $this->send_data('DATA')

            AND substr($error = $this->get_data(), 0, 3) === '354' )

        {

            return true;

        }

        else

        {

            $this->errors[] = trim(substr($error, 3));



            return false;

        }

    }



    function is_connected()

    {

        return (is_resource($this->connection) AND ($this->status === SMTP_STATUS_CONNECTED));

    }



    function send_data($data)

    {

        if (is_resource($this->connection))

        {

            return fwrite($this->connection, $data . CRLF, strlen($data) + 2);

        }

        else

        {

            return false;

        }

    }



    function get_data()

    {

        $return = '';

        $line   = '';



        if (is_resource($this->connection))

        {

            while (strpos($return, CRLF) === false OR $line{3} !== ' ')

            {

                $line    = fgets($this->connection, 512);

                $return .= $line;

            }



            return trim($return);

        }

        else

        {

            return '';

        }

    }



    /**

     * 获得最后一个错误信息

     *

     * @access  public

     * @return  string

     */

    function error_msg()

    {

        if (!empty($this->errors))

        {

            $len = count($this->errors) - 1;

            return $this->errors[$len];

        }

        else

        {

            return '';

        }

    }

}



?>