zoukankan      html  css  js  c++  java
  • php 简单实现 邮件发送

    初中目的是为了学习 WEBSOCKET ,所以写了一个简单发送邮件的例子,为后面打下基础。代码如下:

     class Mail
     {
         private $host;
         private $port;
         private $user;
         private $password;
         private $socket;
         
        public function __construct()
        {

            //所使用邮件服务器
            $this->host = 'smtp.outlook.com';  

           // 端口号  这里是SSL加密方式,所以使用 465
            $this->port = 465;

           //邮件地址
            $this->user = base64_encode('**********@163.com');

           //邮件密码
            $this->password = base64_encode('*******');
            

            /**

             * 连接服务器

             *

             **/
            $this->socket = stream_socket_client("tcp://{$this->host}:{$this->port}",$errno,$errstr,30);

            /**

             * 将通讯管道设置为加密模式   SSL加密方式

             **/
            stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
            // 获取服务器的状态码
            $response = fgets($this->socket);

            // 服务器返回状态码不是220 则连接失败
            if(strstr($response,'220') === false){
                echo "连接失败";
            }    

        }    
        

       /**

        *  执行服务器操作

        **/
        public function do_command($cmd,$return_code)
        {
            $result = fwrite($this->socket,$cmd);
            if(!$result){
                echo "发送 {$cmd} 失败.";
            }
            

            // 获取服务器的状态码
            $response = fgets($this->socket);
            print_r($response);
            if(strstr($response,"{$return_code}") === false){
                echo $response;
            }
        }
        

        /**

         *   组合命令发送邮件

         *  @param $from  来源邮箱地址

         *  @param $to  目标邮箱地址

         *  @param $subject  邮件主题

         *  @param $body   邮件内容

         **/
        public function send_mail($from,$to,$subject,$body)
        {
            $detail = "From:{$from} ";
            $detail .= "To:{$to} ";
            $detail .= "Subject:$subject ";
            $detail .= "Content-Type:text/plain; ";
            $detail .= "charset=gb2312 ";
            $detail .= $body;
            $this->do_command("HELO {$this->host} ",250);
            $this->do_command("AUTH LOGIN ",334);
            $this->do_command("{$this->user} ",334);
            $this->do_command("{$this->password} ",235);
            $this->do_command("MAIL FROM: <{$from}> ",250);
            $this->do_command("RCPT TO: <{$to}> ",250);
            $this->do_command("DATA ",354);
            $this->do_command($detail." . ",250);
            $this->do_command("QUIT ",221);
        }
        

        /**

         * 关闭通讯管道设置为加密模式,套接子

         **/
        public function close()
        {
            stream_socket_enable_crypto($this->socket, false);

            fclose($this->socket);
        }
     }

    测试

     $mail = new Mail();
     $body = "hello world";
     $mail->send_mail("********@163.com","********@qq.com","testsubject",$body);
     $mail->close();

    还有邮箱地址的验证功能,这里没实现,因为只是为了如何实现SOCKET通信。 

  • 相关阅读:
    HDU1720 A+B Coming
    HDU1390 ZOJ1383 Binary Numbers
    HDU1390 ZOJ1383 Binary Numbers
    HDU2504 又见GCD
    HDU2504 又见GCD
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1335 POJ1546 UVA389 UVALive5306 ZOJ1334 Basically Speaking
    HDU1020 ZOJ2478 Encoding
    HDU1020 ZOJ2478 Encoding
    HDU2097 Sky数
  • 原文地址:https://www.cnblogs.com/LXJ416/p/5627632.html
Copyright © 2011-2022 走看看