PHPmailer 无法在使用带有 cakePHP 3 的 gmail smtp 的实时服务器上工作

PHPmailer is not working on live server using gmail smtp with cakePHP 3

我使用 cakePHP 3,当我将我的应用程序移动到服务器时,它停止发送电子邮件, 我正在使用 gmail smtp 服务器。我尝试使用 SSL 连接到端口 465 上的 smtp.gmail.com,但仍然无法正常工作。变量 $mail->SMTPDebug = on; 也造成了一些麻烦。

我的发送函数是这样的:

  public function send($to, $subject, $message) {
    $sender = "me@me.com"; // this will be overwritten by GMail

    $header = "X-Mailer: PHP/".phpversion() . "Return-Path: $sender";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: text/html; charset=UTF-8\r\n";

    $mail = new \PHPMailer();

    $mail->IsSMTP();
    $mail->Host = "aspmx.l.google.com";
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = "ssl";
    $mail->Port = 25;
    $mail->SMTPDebug  = on; // turn it off in production
    $mail->Username   = "........";
    $mail->Password   = "........";

    $mail->From = $sender;
    $mail->FromName = "From Me";

    $mail->AddAddress($to);

    $mail->IsHTML(true);
    $mail->CreateHeader($header);

    $mail->Subject = $subject;
    $mail->Body    = nl2br($message);
    $mail->AltBody = nl2br($message);

    // return an array with two keys: error & message
    if(!$mail->Send()) {
        return array('error' => true, 'message' => 'Mailer Error: ' . $mail->ErrorInfo);
    } else {
        return array('error' => false, 'message' =>  "Message sent!");
    }
}
}

我的错误是这样的:

Use of undefined constant on - assumed 'on' [APP/Controller/Component/EmailComponent.php, line 30]

Undefined variable: errno [ROOT/vendor/phpmailer/class.smtp.php, line 182]

Undefined variable: errstr [ROOT/vendor/phpmailer/class.smtp.php, line 183]

有没有可能是我所在页面的虚拟主机阻止了它?

谢谢

像下面这样编辑你的行:

$mail->Host = "smtp.gmail.com";
$mail->Port = 587;

现在应该可以了。

符合$mail->SMTPDebug = on; // turn it off in production

on 必须在引号中:'on'

更新:

class.phpmailer.php(从第 315 行开始)中有对 SMTPDebug 值的描述:它是从 0 到 4 的整数。

 // 0 - No output
 // 1 - Commands
 // 2 - Data and commands
 // 3 - As 2 plus connection status
 // 4 - Low-level data output

此处存在对基本 PHP 语法的一些误解。你试过了吗reading the manual

在这种情况下,on(以及完全无效的 PHP)不是 SMTPDebug 的有效值,即使您将其设为字符串也是如此。尝试将其设置为 2,如 the docs suggest.

你的代码有点乱 - 你试图破坏 PHPMailer 的位(不要试图自己设置 headers 那样,让 PHPMailer正确地做);您的代码基于一个过时的示例,并且使用的是旧版本的 PHPMailer;您正在与错误的地址通话以通过 gmail 发送 - 它应该是 smtp.gmail.com;您正在尝试在 non-SSL 端口上使用 SSL;您将 HTML 标签放入纯文本版本。

这里有太多错误值得修正,所以我建议你重新开始clean, working example, and update to the latest PHPMailer

就连接到 gmail 的问题而言,故障排除指南和 SO 上的许多其他问题也很好地涵盖了这一点。