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 上的许多其他问题也很好地涵盖了这一点。
我使用 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 上的许多其他问题也很好地涵盖了这一点。