【问题标题】:PHPMailer not working: Message could not be sentPHPMailer 不工作:无法发送消息
【发布时间】:2012-06-14 11:14:05
【问题描述】:

我正在尝试使用 PHPMailer 在我的网站上创建一个联系表单。我在设置它时遇到了一些麻烦。我正在尝试使用 G-mail 作为我的 smtp 主机。我想知道是否有人可以帮助解决这个问题?

这是我的邮件代码:

<?php
require("class.phpmailer.php");
require("class.smtp.php");

$mail = new PHPMailer();

$mail->IsSMTP();   
$mail->SMTPAuth = true;     // turn on SMTP authentication      
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail        
$mail->Host = 'smtp.gmail.com';
$mail->Port = 467;  

$mail->Username = "validmail@gmail.com";  // SMTP username
$mail->Password = "workingpassword"; // SMTP password

$mail->From = "validmail@gmail.com";
$mail->FromName = "Mailer";
$mail->AddAddress("josh@example.net", "Josh Adams");
$mail->AddAddress("ellen@example.com");                  // name is optional
$mail->AddReplyTo("info@example.com", "Information");

$mail->WordWrap = 50;                                 // set word wrap to 50 characters


// $mail->AddAttachment("/var/tmp/file.tar.gz");         // add attachments
   // $mail->AddAttachment("/tmp/image.jpg", "new.jpg");    // optional name
    $mail->IsHTML(true);                                  // set email format to HTML

$mail->Subject = "Here is the subject";
$mail->Body    = "This is the HTML message body <b>in bold!</b>";
$mail->AltBody = "This is the body in plain text for non-HTML mail clients";

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";
?>

错误信息:

Message could not be sent.
Mailer Error: The following From address failed: validmail@gmail.com

【问题讨论】:

  • 很难说为什么它不起作用。你试过$mail-&gt;SMTPDebug = 1;
  • 是的,我有。这是它显示的错误: SMTP -> 错误:无法连接到服务器:无法找到套接字传输“ssl” - 您在配置 PHP 时是否忘记启用它? (12640394)

标签: php smtp phpmailer contact-form


【解决方案1】:

如果您在 gsuite 中的电子邮件检查两个步骤: https://support.google.com/a/answer/6260879?hl=en https://accounts.google.com/DisplayUnlockCaptcha

PHP 邮件设置; PHPMailer 版本 5.2.22 检查class.phpmailer.php,

  var $Host = 'smtp.gmail.com';
  var $Port = 465;
  var $Helo ='domain.net';
  public $SMTPSecure = 'ssl';
  public $SMTPAutoTLS = true;
  public $SMTPAuth = true;
  public $SMTPOptions = array();
  public $Username = 'gmail-username';//or domain credentials on google mail
  public $Password = 'gmail-password';
  public $Timeout = 10;
  public $SMTPDebug = true;

邮件发送php

<?php
require('PHPMailer/class.phpmailer.php');
require('PHPMailer/class.smtp.php');

$headers = "Content-Type: text/html; charset=UTF-8";    
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet="SET NAMES UTF8";
$mail->SMTPDebug  = 0;
$mail->CharSet="utf8";
$mail->Debugoutput = 'html';
$mail->host       = "smtp.gmail.com";
$mail->port       = 465;
$mail->smtpauth   = true;
$mail->smtpsecure = 'ssl';
$mail->username   = "gmail-username"; //or domain credentials on google mail
$mail->password   = "gmail-password";
$mail->SetFrom('from-email', 'from-name');
$mail->AddAddress('to-address', 'to-address');
$mail->Body = 'your-text'; //emailbody
if(!$mail->Send()) 
        {
            mysql_close();
        echo "<script>alert('Error: " . $mail->ErrorInfo."');</script>";
        } 
        else 
        {
        mysql_close();
        echo "<script>alert('success');</script>";
        }

?>

这对我有用。希望对您有所帮助。

【讨论】:

    【解决方案2】:
    ping smtp.gmail.com
    

    出于某种原因,谷歌将 SMTP 请求重定向到 gmail-smtp-msa.l.google.com

    PING gmail-smtp-msa.l.google.com (74.125.133.108): 56 data bytes
    64 bytes from 74.125.133.108: icmp_seq=0 ttl=43 time=72.636 ms
    64 bytes from 74.125.133.108: icmp_seq=1 ttl=43 time=68.841 ms
    64 bytes from 74.125.133.108: icmp_seq=2 ttl=43 time=68.500 ms
    

    所以你应该把最终目的地放在你的配置中,因为 PHPMailer 不遵循重定向。您也可以尝试通过将该字段保留为空白来发送没有 SMTPSecure 的电子邮件。

    $mail->Host = 'gmail-smtp-msa.l.google.com';  
    $mail->SMTPAuth = true;                            
    $mail->Username = 'email';   
    $mail->Password = 'password';    
    $mail->SMTPSecure = '';   
    $mail->Port = 25;  
    

    【讨论】:

      【解决方案3】:
      <?php
      
      require_once('class.phpmailer.php');
      include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
      
      
          $nameField = $_POST['name'];
          $emailField = $_POST['email'];
          $messageField = $_POST['message'];
          $phoneField = $_POST['contactno'];
          $cityField = $_POST['city'];
      
      $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
      
      $mail->IsSMTP(); // telling the class to use SMTP
      
      $body .= $nameField;
      
      try {
           //$mail->Host       = "mail.gmail.com"; // SMTP server
            $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
            $mail->SMTPAuth   = true;                  // enable SMTP authentication
            $mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
            $mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
            $mail->Port       = 465;   // set the SMTP port for the GMAIL server
            $mail->SMTPKeepAlive = true;
            $mail->Mailer = "smtp";
            $mail->Username   = "xxxxx@gmail.com";  // GMAIL username
            $mail->Password   = "********";            // GMAIL password
            $mail->AddAddress('sendto@gmail.com', 'abc');
            $mail->SetFrom('xxxxxx@gmail.com', 'def');
            $mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
            $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
            $mail->MsgHTML($body);
            $mail->Send();
            echo "Message Sent OK</p>\n";
            header("location: ../test.html");
      } catch (phpmailerException $e) {
            echo $e->errorMessage(); //Pretty error messages from PHPMailer
      } catch (Exception $e) {
            echo $e->getMessage(); //Boring error messages from anything else!
      }
      
      ?>
      

      转到谷歌设置并启用“不太安全”的应用程序。它对我有用。

      【讨论】:

        【解决方案4】:

        遇到了同样的错误,问题是我试图从假装为“girl333@in**”的“boy333@in**”帐户发送电子邮件。我刚换了

        $mail->From = 'girl333@in**'
        

        到我实际连接的用户名。于是我改成了:

        $mail->From = 'boy333@in**'
        

        想法是这两个字段具有相同的用户名。

        $mail->Username   = "boy333";
        $mail->From = 'boy333@in**';
        

        【讨论】:

          【解决方案5】:

          您是否在 Windows 上运行 PHP?那么这可能会有所帮助:

          http://www.devcha.com/2010/01/php-fsockopen-unable-to-connect-ssl.html

          【讨论】:

            【解决方案6】:

            smtp.gmail.com 要求您使用 SSL 和端口 587 或 465。

            查看他们的配置页面:http://support.google.com/mail/bin/answer.py?hl=en&answer=13287

            【讨论】:

            【解决方案7】:

            您是否查看并尝试过此 Q 中的信息?

            PHPMailer: SMTP Error: Could not connect to SMTP host

            特别是,这是否提供任何其他信息?

            $mail->SMTPDebug = 1;
            

            【讨论】:

            • 感谢您的回复,调试确实有所帮助。这是 smtp 调试代码添加到屏幕的错误: SMTP -> 错误:无法连接到服务器:无法找到套接字传输“ssl” - 您在配置 PHP 时是否忘记启用它? (12640394)
            • 根据另一个 Q,听起来您必须启用 extension=php_openssl.dll。
            猜你喜欢
            • 1970-01-01
            • 2014-08-06
            • 1970-01-01
            • 2017-04-09
            • 2016-02-11
            • 1970-01-01
            • 1970-01-01
            • 2021-09-29
            • 1970-01-01
            相关资源
            最近更新 更多