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


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

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

    邮件发送处理

      下面是真正的秘密了,可要看仔细了。:)


    1    function send( $to,$from,$subject,$message)
    2    {
    3
    4        //连接服务器
    5        $this->lastact=\"connect\";
    6
    7        $this->show_debug(\"Connect to SMTP server : \".$this->smtp, \"out\");
    8        $this->fp = fsockopen ( $this->smtp, $this->port );
    9        if ( $this->fp )
    10        {
    11
    12            set_socket_blocking( $this->fp, true );
    13            $this->lastmessage=fgets($this->fp,512);
    14            $this->show_debug($this->lastmessage, \"in\");
    15
    16            if (! ereg ( \"^220\", $this->lastmessage ) )
    17            {
    18                return false;
    19            }
    20            else
    21            {
    22                $this->lastact=\"HELO \" . $this->welcome . \"\n\";
    23                if(!$this->do_command($this->lastact, \"250\"))
    24                {
    25                    fclose($this->fp);
    26                    return false;
    27                }
    28
    29                $this->lastact=\"MAIL FROM: $from\" . \"\n\";
    30                if(!$this->do_command($this->lastact, \"250\"))
    31                {
    32                    fclose($this->fp);
    33                    return false;
    34                }
    35
    36                $this->lastact=\"RCPT TO: $to\" . \"\n\";
    37                if(!$this->do_command($this->lastact, \"250\"))
    38                {
    39                    fclose($this->fp);
    40                    return false;
    41                }
    42               
    43                //发送正文
    44                $this->lastact=\"DATA\n\";
    45                if(!$this->do_command($this->lastact, \"354\"))
    46                {
    47                    fclose($this->fp);
    48                    return false;
    49                }
    50
    51                //处理Subject头
    52                $head=\"Subject: $subject\n\";
    53                if(!empty($subject) && !ereg($head, $message))
    54                {
    55                    $message = $head.$message;
    56                }
    57               
    58                //处理From头
    59                $head=\"From: $from\n\";
    60                if(!empty($from) && !ereg($head, $message))
    61                {
    62                    $message = $head.$message;
    63                }
    64
    65                //处理To头
    66                $head=\"To: $to\n\";
    67                if(!empty($to) && !ereg($head, $message))
    68                {
    69                    $message = $head.$message;
    70                }
    71
    72                //加上结束串
    73                if(!ereg(\"\n\.\n\", $message))
    74                    $message .= \"\n.\n\";
    75                $this->show_debug($message, \"out\");
    76                fputs($this->fp, $message);
    77
    78                $this->lastact=\"QUIT\n\";
    79                if(!$this->do_command($this->lastact, \"250\"))
    80                {
    81                    fclose($this->fp);
    82                    return false;
    83                }
    84            }
    85            return true;
    86        }
    87        else
    88        {
    89            $this->show_debug(\"Connect failed!\", \"in\");
    90            return false;
    91        }
    92    }
    --------------------------------------------------------------------------------  有些意思很清楚的我就不说了。

      这个函数一共有四个参数,分别是$to表示收信人,$from表示发信人,$subject表求邮件主题和$message表示邮件体。如果处理成功则返回true,失败则返回false。

    第8行,连接邮件服务器,如果成功响应码应为220。
    第12行,设置阻塞模式,表示信息必须返回才能继续。详细说明看手册吧。
    第16行,判断响应码是否为220,如果是,则继续处理,否则出错返回。
    第22-27行,处理HELO指令,期望响应码为250。
    第29-34行,处理MAIL FROM指令,期望响应码为250。
    第36-41行,处理RCPT TO指令,期望响应码为250。
    第44-49行,处理DATA指令,期望响应码为354。
    第51-76行,生成邮件体,并发送。
    第52-56行,如果$subject不为空,则查找邮件体中是否有主题部分,如果没有,则加上主题部分。
    第59-63行,如果$from不为空,则查找邮件体中是否有发信人部分,如果没有,则加上发信人部分。
    第66-70行,如果$to不为空,则查找邮件体中是否有收信人部分,如果没有,则加上收信人部分。
    第73-74行,查找邮件体是否有了结束行,如果没有则加上邮件体的结束行(以\".\"作为单独的一行的特殊行)。
    第76行,发送邮件体。
    第78-83行,执行QUIT结否与服务器的连接,期望响应码为250。
    第85行,返回处理成功标志(true)。
    第81-91行,与服务器连接失败的处理。
     以上为整个send_mail类的实现,应该不是很难的。

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

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

    http://biancheng.dnbcw.info/php/327698.html pageNo:12
  • 相关阅读:
    CAS 认证
    最近邻规则分类(k-Nearest Neighbor )机器学习算法python实现
    scikit-learn决策树的python实现以及作图
    module object has no attribute dumps的解决方法
    最新Flume1.7 自定义 MongodbSink 结合TAILDIR Sources的使用
    数据探索中的贡献度分析
    python logging模块按天滚动简单程序
    Flume性能测试报告(翻译Flume官方wiki报告)
    python apsheduler cron 参数解析
    python pyspark入门篇
  • 原文地址:https://www.cnblogs.com/ooooo/p/2250818.html
Copyright © 2020-2023  润新知