• 发送 email (转)


    <?php
    namespace appcommoncontroller;
    //基类
    class Email
    {

        /* Public Variables */

        var $smtp_port;

        var $time_out;

        var $host_name;

        var $log_file;

        var $relay_host;

        var $debug;

        var $auth;

        var $user;

        var $pass;

       
        var $sock;

        /* Constractor */

        function smtp($relay_host = "", $smtp_port = 25, $auth = false, $user, $pass)

        {

            $this->debug = FALSE;

            $this->smtp_port = $smtp_port;

            $this->relay_host = $relay_host;

            $this->time_out = 30; //is used in fsockopen()
    #

            $this->auth = $auth;//auth

            $this->user = $user;

            $this->pass = $pass;

    #

            $this->host_name = "localhost"; //is used in HELO command
            $this->log_file = "";

            $this->sock = FALSE;

        }

        /* Main Function */

        function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")

        {

            $mail_from = $this->get_address($this->strip_comment($from));

            $body = preg_replace("/(^|( ))(.)/", "1.3", $body);

            $header = "MIME-Version:1.0 ";

            if ($mailtype == "HTML") {

                $header .= "Content-Type:text/html ";

            }

            $header .= "To: " . $to . " ";

            if ($cc != "") {

                $header .= "Cc: " . $cc . " ";

            }

            $header .= "From: $from<" . $from . "> ";

            $header .= "Subject: " . $subject . " ";

            $header .= $additional_headers;

            $header .= "Date: " . date("r") . " ";

            $header .= "X-Mailer:By Redhat (PHP/" . phpversion() . ") ";

            list($msec, $sec) = explode(" ", microtime());

            $header .= "Message-ID: <" . date("YmdHis", $sec) . "." . ($msec * 1000000) . "." . $mail_from . "> ";

            $TO = explode(",", $this->strip_comment($to));

            if ($cc != "") {

                $TO = array_merge($TO, explode(",", $this->strip_comment($cc)));

            }

            if ($bcc != "") {

                $TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));

            }

            $sent = TRUE;

            foreach ($TO as $rcpt_to) {

                $rcpt_to = $this->get_address($rcpt_to);

                if (!$this->smtp_sockopen($rcpt_to)) {

                    $this->log_write("Error: Cannot send email to " . $rcpt_to . " ");

                    $sent = FALSE;

                    continue;

                }

                if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {

                    $this->log_write("E-mail has been sent to <" . $rcpt_to . "> ");

                } else {

                    $this->log_write("Error: Cannot send email to <" . $rcpt_to . "> ");

                    $sent = FALSE;

                }

                fclose($this->sock);

                $this->log_write("Disconnected from remote host ");

            }

            return $sent;

        }

        /* Private Functions */

        function smtp_send($helo, $from, $to, $header, $body = "")

        {

            if (!$this->smtp_putcmd("HELO", $helo)) {

                return $this->smtp_error("sending HELO command");

            }

    #auth

            if ($this->auth) {

                if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {

                    return $this->smtp_error("sending HELO command");

                }

                if (!$this->smtp_putcmd("", base64_encode($this->pass))) {

                    return $this->smtp_error("sending HELO command");

                }

            }

    #

            if (!$this->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) {

                return $this->smtp_error("sending MAIL FROM command");

            }

            if (!$this->smtp_putcmd("RCPT", "TO:<" . $to . ">")) {

                return $this->smtp_error("sending RCPT TO command");

            }

            if (!$this->smtp_putcmd("DATA")) {

                return $this->smtp_error("sending DATA command");

            }

            if (!$this->smtp_message($header, $body)) {

                return $this->smtp_error("sending message");

            }

            if (!$this->smtp_eom()) {

                return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");

            }

            if (!$this->smtp_putcmd("QUIT")) {

                return $this->smtp_error("sending QUIT command");

            }

            return TRUE;

        }

        function smtp_sockopen($address)

        {

            if ($this->relay_host == "") {

                return $this->smtp_sockopen_mx($address);

            } else {

                return $this->smtp_sockopen_relay();

            }

        }

        function smtp_sockopen_relay()

        {

            $this->log_write("Trying to " . $this->relay_host . ":" . $this->smtp_port . " ");

            $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);

            if (!($this->sock && $this->smtp_ok())) {

                $this->log_write("Error: Cannot connenct to relay host " . $this->relay_host . " ");

                $this->log_write("Error: " . $errstr . " (" . $errno . ") ");

                return FALSE;

            }

            $this->log_write("Connected to relay host " . $this->relay_host . " ");

            return TRUE;;

        }

        function smtp_sockopen_mx($address)

        {

            $domain = ereg_replace("^.+@([^@]+)$", "1", $address);

            if (!@getmxrr($domain, $MXHOSTS)) {

                $this->log_write("Error: Cannot resolve MX "" . $domain . "" ");

                return FALSE;

            }
    //专注与php学习 http://www.daixiaorui.com 欢迎您的访问

            foreach ($MXHOSTS as $host) {

                $this->log_write("Trying to " . $host . ":" . $this->smtp_port . " ");

                $this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);

                if (!($this->sock && $this->smtp_ok())) {

                    $this->log_write("Warning: Cannot connect to mx host " . $host . " ");

                    $this->log_write("Error: " . $errstr . " (" . $errno . ") ");

                    continue;

                }

                $this->log_write("Connected to mx host " . $host . " ");

                return TRUE;

            }

            $this->log_write("Error: Cannot connect to any mx hosts (" . implode(", ", $MXHOSTS) . ") ");

            return FALSE;

        }

        function smtp_message($header, $body)

        {

            fputs($this->sock, $header . " " . $body);

            $this->smtp_debug("> " . str_replace(" ", " " . "> ", $header . " > " . $body . " > "));

            return TRUE;

        }

        function smtp_eom()

        {

            fputs($this->sock, " . ");

            $this->smtp_debug(". [EOM] ");

            return $this->smtp_ok();

        }

        function smtp_ok()

        {
            $response = str_replace(" ", "", fgets($this->sock, 512));

            $this->smtp_debug($response . " ");

            if (!preg_match("/^[23]/", $response)) {

                fputs($this->sock, "QUIT ");

                fgets($this->sock, 512);

                $this->log_write("Error: Remote host returned "" . $response . "" ");

                return FALSE;

            }

            return TRUE;

        }

        function smtp_putcmd($cmd, $arg = "")

        {

            if ($arg != "") {

                if ($cmd == "") $cmd = $arg;

                else $cmd = $cmd . " " . $arg;

            }

            fputs($this->sock, $cmd . " ");

            $this->smtp_debug("> " . $cmd . " ");

            return $this->smtp_ok();

        }

        function smtp_error($string)

        {

            $this->log_write("Error: Error occurred while " . $string . ". ");

            return FALSE;

        }

        function log_write($message)

        {

            $this->smtp_debug($message);

            if ($this->log_file == "") {

                return TRUE;

            }

            $message = date("M d H:i:s ") . get_current_user() . "[" . getmypid() . "]: " . $message;

            if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {

                $this->smtp_debug("Warning: Cannot open log file "" . $this->log_file . "" ");

                return FALSE;;

            }

            flock($fp, LOCK_EX);

            fputs($fp, $message);

            fclose($fp);


            return TRUE;

        }


        function strip_comment($address)

        {

            $comment = "/[()]∗[()]∗/";

            while (preg_match($comment, $address)) {

                $address = preg_replace($comment, "", $address);

            }


            return $address;

        }


        function get_address($address)

        {

            $address = preg_replace("/([ ])+/", "", $address);

            $address = preg_replace("/^.*<(.+)>.*$/", "1", $address);

            return $address;

        }

        function smtp_debug($message)

        {

            if ($this->debug) {

                echo $message;

            }

        }

    }

    ?>

    //调用


        function set_email(){
            if(!Validate::is(input('post.emil'),'email')) return json('邮箱不合法');
            $user = Db::name('user')->where([ 'emil'=>input('post.emil') ])->find();
            if($user) return json('该邮箱已认证');

    // 邮件发送部分

            $email          = new  Email;
            $smtpserver     = "smtp.163.com";//smtp服务器
            $smtpserverport = 25;//smtp服务器端口
            $smtpusermail   = "**********@163.com";//smtp的用户邮箱
            $smtpemailto    = input('post.emil');//发送给谁
            $smtpuser       = "************@163.com";//smtp服务器的用户账号,谁发送
            $smtppass       = "***";//
            $smtptitle      = '律界通密码找回';//邮件主题
            $code           = rand(100000,999999);
            $mailcontent    = "尊敬的律界通用户,您正在使用邮箱绑定,验证码为:".$code;//邮件内容
            $mailtype       = "html";//邮件格式(html/txt),txt为文本邮件
            $email->smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);//true表示使用身份验证
            $email->debug=false;//是否显示发送的调试信息
            $state=$email->sendmail($smtpemailto,$smtpusermail,$smtptitle,$mailcontent,$mailtype);
            if($state) return json([ 're'=>1, 'data'=> '发送成功', 'code'=>$code ]);
            return json('发送失败');
        }

    前端逻辑

    $('#yang').click(function(){ // 验证码发送
            $.ajax({
                url     : "{:url('Index/set_email')}",
                type     : "POST",
                data     : { emil : $("input[name='emil']:eq(0)").val() },
                success : function(data){
                    console.log(data);
                    if(data.re == '1'){
                        yang(data.data);
                        $.session.set('code',data.code); //保存返回的验证码
                        return;
                    }
                    yang(data);
                }
            });
        });

    function yang(data){ //提示弹窗
            $('.tan').html(data);
            $('.tan').fadeIn(500);
            setTimeout(function(){
                $('.tan').fadeOut(500);
            },1000);
        }

    $('.console').click(function(){ //提交数据
                var emil    = $("input[name='emil']:eq(0)").val();
                var captcha = $("input[name='captcha']:eq(0)").val();
                if(captcha != $.session.get('code') ){
                    yang('验证码错误'); $.session.remove('code');
                    return;
                }
                $.ajax({
                    type       : "POST",
                    url       : '',
                    data       : { 'emil': emil },
                    beforeSend: function(){
                        $('.aaa').fadeIn(500);
                    },
                    success      : function(rs){
                        console.log(rs);
                        $('.aaa').fadeOut(500);
                        if(rs.re == '1'){
                            yang(rs.data);
                            setTimeout(function(){
                                location.href=document.referrer; //返回上页and 刷新
                            },1000);
                            return;
                        }
                        yang(rs);
                    }

                });
            });

     转载自:https://blog.csdn.net/qq_34629975/article/details/54375783

  • 相关阅读:
    虚拟机中硬盘扩展方法
    ubuntu postgresql install
    vim python
    oe7报表的中文乱码
    文件导入 import
    How do I list user defined types in a SQL Server database
    修改表结构
    查询数据库中所有的表和数据库架构
    Dev chartControl添加提示层信息
    最简单的日志
  • 原文地址:https://www.cnblogs.com/myJuly/p/10077777.html
Copyright © 2020-2023  润新知