【问题标题】:Sending email from localhost in php在php中从localhost发送电子邮件
【发布时间】:2012-03-07 14:52:45
【问题描述】:

好的,我只是被使用 php 脚本从本地主机发送电子邮件的方式和工具的数量所淹没。

你们能帮我清理一些东西吗?

这些是我的操作类型:

  1. 我在 php.ini 中启用了 gmail smtp,将端口设置为 465。
  2. 我已经下载了phpmailer,按照说明测试没有成功。
  3. 我有远程服务器邮件配置(我的网站之前托管的地方)。
  4. 另外,我有一个从互联网上下载的 php 脚本,它应该可以发送电子邮件。

使用 php 脚本从 localhost 发送电子邮件到底需要什么?

【问题讨论】:

  • Gmail 需要加密连接,除非您在安装 PHP 时包含 OpenSSL 扩展,否则不会发生这种情况(假设是 Windows,因为您已在 php.ini 中进行了配置)。这是你做的吗?
  • php.ini 中的邮件选项仅适用于 Windows 主机。 Unix/Linux 系统有自己的本地邮件系统,PHP 将直接使用它们。

标签: php smtp gmail joomla1.5 phpmailer


【解决方案1】:

您需要一个本地 SMTP 服务器,例如 this one。或者,为了让您的生活无限轻松,请下载 WAMP,其中包含本地 PHP 项目所需的一切。

【讨论】:

    【解决方案2】:

    如我所见,您使用 gmail 作为 smtp 那么你需要配置 php mailer 脚本......如果你编辑你的答案并将代码放在那里会很好。

    之后需要检查权限,文件权限/服务器权限/gmail权限

    【讨论】:

      【解决方案3】:

      您需要从要发送电子邮件的域的 dns mx 主机名中获取 (email@boo.xx -> 域名 boo.xx):

      function getMX($hostname = "boo.xx", $show = 0){
          if(dns_get_mx($hostname, $mxhosts, $weights)) {
              $i = 0;
              $mxList = NULL;
              foreach($mxhosts as $key => $host) {
                  if($show == 1) echo "Hostname: $host (Weight: {$weights[$key]}) <br>";
                  $ip = gethostbyname($host);
                  if($show == 1) echo "IP " . $ip . "\n<br>";
                  if($show == 1) echo "IP " . gethostbyaddr($ip) . "\n<br>";
                  $mxList[$i]['host'] = $host;
                  $mxList[$i]['ip'] = $ip;
                  $mxList[$i]['weight'] = $weights[$key];
                  $i++;
              }
              return $mxList;
          } else {
              echo "Could not find any MX records for $hostname\n";
          }
      }
      

      现在您有了 mx 主机列表,那么您需要:

      使用 phpmailer 或套接字客户端(带有 ssl/tls 支持和身份验证的示例)将电子邮件发送到端口 25(始终为端口 25 且无需身份验证):

      <?php
      // Send with smtp ssl
      // ini_set("SMTP","ssl://smtp.gmail.com");
      // ini_set("smtp_port","465");
      
      // Login email and password
      $login = "your-email@cool.xx";
      $pass = "123456";
      
      ini_set('display_errors', 1);
      ini_set('display_startup_errors', 1);
      error_reporting(E_ALL);
      
      $ctx = stream_context_create();
      stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
      stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
      try{
          // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
          echo $socket = stream_socket_client('tcp://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
          if (!$socket) {
              print "Failed to connect $err $errstr\n";
              return;
          }else{
              // Http
              // fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
              // Smtp
              echo fread($socket,8192);
              echo fwrite($socket, "EHLO cool.xx\r\n");
              echo fread($socket,8192);
      
              // Start tls connection
              echo fwrite($socket, "STARTTLS\r\n");
              echo fread($socket,8192);
      
              echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
      
              // Send ehlo
              echo fwrite($socket, "EHLO cool.xx\r\n");
              echo fread($socket,8192);
      
              // echo fwrite($socket, "MAIL FROM: <hello@cool.com>\r\n");
              // echo fread($socket,8192);
      
              echo fwrite($socket, "AUTH LOGIN\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, base64_encode($login)."\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, base64_encode($pass)."\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "rcpt to: <to-email@boome.com>\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "DATA\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "Date: ".time()."\r\nTo: <to-email@boome.com>\r\nFrom:<zour-email@cool.xx\r\nSubject:Hello from php socket tls\r\n.\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "quit \n");
              echo fread($socket,8192);
      
              /* Turn off encryption for the rest */
              // stream_socket_enable_crypto($fp, false);
      
              fclose($socket);
          }
      }catch(Exception $e){
          echo $e;
      }
      

      并且没有身份验证

      ini_set('display_errors', 1);
      ini_set('display_startup_errors', 1);
      error_reporting(E_ALL);
      
      $ctx = stream_context_create();
      stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
      stream_context_set_option($ctx, 'ssl', 'verify_peer_name', false);
      try{
          // echo $socket = stream_socket_client('ssl://smtp.gmail.com:587', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
          echo $socket = stream_socket_client('tcp://mxhost.boo.xx:25', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
          if (!$socket) {
              print "Failed to connect $err $errstr\n";
              return;
          }else{
              // Http
              // fwrite($socket, "GET / HTTP/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n");
              // Smtp
              echo fread($socket,8192);
              echo fwrite($socket, "EHLO cool.xx\r\n");
              echo fread($socket,8192);
      
              // Start tls connection
              echo fwrite($socket, "STARTTLS\r\n");
              echo fread($socket,8192);
      
              echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);
      
              // Send ehlo
              echo fwrite($socket, "EHLO cool.xx\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "MAIL FROM: <hello@cool.com>\r\n");
              echo fread($socket,8192);
      
              //echo fwrite($socket, "AUTH LOGIN\r\n");
              //echo fread($socket,8192);
      
              //echo fwrite($socket, base64_encode($login)."\r\n");
              //echo fread($socket,8192);
      
              //echo fwrite($socket, base64_encode($pass)."\r\n");
              //echo fread($socket,8192);
      
              echo fwrite($socket, "rcpt to: <to-email@boome.com>\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "DATA\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "Date: ".time()."\r\nTo: <to-email@boome.com>\r\nFrom:<zour-email@cool.xx\r\nSubject:Hello from php socket tls\r\n.\r\n");
              echo fread($socket,8192);
      
              echo fwrite($socket, "quit \n");
              echo fread($socket,8192);
      
              /* Turn off encryption for the rest */
              // stream_socket_enable_crypto($fp, false);
      
              fclose($socket);
          }
      }catch(Exception $e){
          echo $e;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-03-06
        • 1970-01-01
        • 1970-01-01
        • 2017-06-19
        • 2012-07-03
        • 2012-12-03
        • 1970-01-01
        • 2018-11-27
        • 2018-12-12
        相关资源
        最近更新 更多