PHPmailer不使用gmail smtp和cakePHP 3在实时服务器上工作

时间:2016-05-11 08:26:43

标签: php email smtp phpmailer

我使用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]

我有网页的网站主机是否有可能阻止它?

谢谢

3 个答案:

答案 0 :(得分:0)

编辑您的行,如下所示:

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

现在应该可以了。

答案 1 :(得分:0)

排队$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

答案 2 :(得分:0)

这里发生了一些基本PHP语法的误解。你试过reading the manual吗?

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

你的代码有点混乱 - 你试图打破PHPMailer的一些东西(不要试图像那样自己设置头文件,让PHPMailer正确地执行它);您已经将代码基于一个过时的示例,并使用旧版本的PHPMailer;你正在通过gmail发送错误的地址 - 它应该是smtp.gmail.com;您正尝试在非SSL端口上使用SSL;您将HTML标记放入纯文本版本。

这里有太多错误值得修复,所以我建议您重新开始使用clean, working example,然后更新为the latest PHPMailer

就连接到gmail的问题而言,故障排除指南以及SO上的许多其他问题也非常清楚。