• 在PHP中用Socket发送电子邮件(二)


    简介:这是在PHP中用Socket发送电子邮件(二)的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。

    class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=327699' scrolling='no'>

    send_mail类的实现
      现在开始介绍我所编写的发送邮件类。有了上面的预备知识了,下面就是实现了。

    类的成员变量

        var $lastmessage;    //记录最后返回的响应信息
        var $lastact;        //最后的动作,字符串形式
        var $welcome;        //用在HELO后面,欢迎用户
        var $debug;          //是否显示调试信息
        var $smtp;           //smtp服务器
        var $port;           //smtp端口号
        var $fp;             //socket句柄
      其中,$lastmessage和$lastact用于记录最后一次响应信息及执行的命令,当出错时,用户可以使用它们。为了测试需要,我还定义了$debug变量,当其值为true时,会在运行过程中显示一些执行信息,否则无任何输出。$fp用于保存打开后的socket句柄。

    类的构造


    --------------------------------------------------------------------------------
        function send_mail($smtp, $welcome=\"\", $debug=false)
        {
            if(empty($smtp)) die(\"SMTP cannt be NULL!\");
            $this->smtp=$smtp;
            if(empty($welcome))
            {
                $this->welcome=gethostbyaddr(\"localhost\");
            }
            else
                $this->welcome=$welcome;
            $this->debug=$debug;
            $this->lastmessage=\"\";
            $this->lastact=\"\";
            $this->port=\"25\";
        }
    --------------------------------------------------------------------------------  这个构造函数主要完成一些初始值的判定及设置。$welcome用于HELO指令中,告诉服务器用户的名字。HELO指令要求为机器名,但是不用也可以。如果用户没有给出$welcome,则自动查找本地的机器名。

    显示调试信息

    --------------------------------------------------------------------------------
    1    function show_debug($message, $inout)
    2    {
    3        if ($this->debug)
    4        {
    5            if($inout==\"in\")    //响应信息
    6            {
    7                $m=\'<< \';
    8            }
    9            else
    10                $m=\'>> \';
    11            if(!ereg(\"\n$\", $message))
    12                $message .= \"<br>\";
    13            $message=nl2br($message);
    14            echo \"<font color=#999999>${m}${message}</font>\";
    15        }
    16    }
    --------------------------------------------------------------------------------  这个函数用来显示调试信息。可以在$inout中指定是上传的指令还是返回的响应,如果为上传指令,则使用\"out\";如果为返回的响应则使用\"in\"。

    第3行,判断是否要输出调试信息。
    第5行,判断是否为响应信息,如果是,则在第7行将信息的前面加上\"<< \"来区别信息;否则在第10行加上\">> \"来区别上传指令。
    第11-12行,判断信息串最后是否为换行符,如不是则加上HTML换行标记。第13行将所以的换行符转成HTML的换行标记。
    第14行,输出整条信息,同时将信息颜色置为灰色以示区别。执行一个命令

    --------------------------------------------------------------------------------
    1    function do_command($command, $code)
    2    {
    3        $this->lastact=$command;
    4        $this->show_debug($this->lastact, \"out\");
    5        fputs ( $this->fp, $this->lastact );
    6        $this->lastmessage = fgets ( $this->fp, 512 );
    7        $this->show_debug($this->lastmessage, \"in\");
    8        if(!ereg(\"^$code\", $this->lastmessage))
    9        {
    10            return false;
    11        }
    12        else
    13            return true;
    14    }
    --------------------------------------------------------------------------------  在编写socket处理部分发现,一些命令的处理很相似,如HELO,MAIL FROM,RCPT TO,QUIT,DATA命令,都要求根据是否显示调试信息将相关内容显示出来,同时对于返回的响应码,如果是期望的,则应继续处理,如果不是期望的,则应中断出理。所以为了清晰与简化,专门对这些命令的处理编写了一个通用处理函数。函数的参数中$code为期望的响应码,如果响应码与之相同则表示处理成功,否则出错。

    第3行,记录最后执行命令。
    第4行,将上传命令显示出来。
    第5行,则使用fputs真正向服务器传换指令。
    第6行,从服务器接收响应信息将放在最后响应消息变量中。
    第7行,将响应信息显示出来。
    第8行,判断响应信息是否期待的,如果是则第13行返回成功(true),否则在第10行返回失败(false)。

      这样,这个函数一方面完成指令及信息的发送显示功能,别一方面对返回的响应判断是否成功。

    “在PHP中用Socket发送电子邮件(二)”的更多相关文章 》

    爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具

    http://biancheng.dnbcw.info/php/327699.html pageNo:12
  • 相关阅读:
    MySQL GTID复制Slave跳过错误事务Id以及复制排错问题总结
    Git基础命令整理
    原创-公司项目部署交付环境预检查shell脚本
    解决SecureCRT超时自动断开的问题
    Linux设置显示中文和设置字体
    高等代数4 线性方程组
    高等代数3 行列式
    高等代数2 向量组
    高等代数1 矩阵
    离散数学4 组合数学
  • 原文地址:https://www.cnblogs.com/ooooo/p/2250817.html
Copyright © 2020-2023  润新知