我使用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]
我有网页的网站主机是否有可能阻止它?
谢谢
答案 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
的有效值,即使您将其设为字符串也是如此。尝试将其设为2
,the docs suggest。
你的代码有点混乱 - 你试图打破PHPMailer的一些东西(不要试图像那样自己设置头文件,让PHPMailer正确地执行它);您已经将代码基于一个过时的示例,并使用旧版本的PHPMailer;你正在通过gmail发送错误的地址 - 它应该是smtp.gmail.com
;您正尝试在非SSL端口上使用SSL;您将HTML标记放入纯文本版本。
这里有太多错误值得修复,所以我建议您重新开始使用clean, working example,然后更新为the latest PHPMailer。
就连接到gmail的问题而言,故障排除指南以及SO上的许多其他问题也非常清楚。