PHPMailer 在 CakeEmail 不具有相同配置的地方工作
PHPMailer works where CakeEmail doesn't with the same configuration
我遇到了以下问题,正如您从标题中所想象的那样,我有一个带有联系表的 CakePHP v2.5.6 应用程序,每次提交时都会给我一个身份验证错误,这让我很惊讶,在尝试使用 PHPMailer 进行简单测试后,它在显然相同的配置下完美运行。
CakePHP 配置(app/Config/email.php)
<?php
class EmailConfig {
public $info = array(
'transport' => 'Smtp',
'host' => 'smtp.foo.com',
'port' => 25,
'username' => 'username',
'password' => 'password'
);
}
CakePHP 发件人代码
CakeEmail::deliver('foo@foo.es', 'Subject', 'Test', 'info');
CakePHP 错误报告
PHPMailer 测试脚本
<?php
require './PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
//$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = 'smtp.foo.com';
$mail->SMTPAuth = true;
$mail->Username = 'username';
$mail->Password = 'password';
$mail->Port = 25;
$mail->setFrom('info@example.es', 'Mailer');
$mail->addAddress('foo@foo.es', 'Mr. foo');
$mail->addReplyTo('info@example.es', 'Information');
$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.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
所以我的问题是,配置之间是否真的存在差异,或者我遗漏了什么?为什么 PHPMailer 可以工作而 CakeEmail 不能?
提前谢谢你:)
我找到的解决方案看起来很虚假,但关于错误原因的调试信息并不完全准确。
东西不见了,PHPMailer 和 CakeEmail 的不同之处在于 from
配置字段。
来自配置的 PHPMailer
$mail->setFrom('info@example.es', 'Mailer');
您可能会注意到 CakeEmail 配置文件缺少该字段,因此只需添加它,错误就会消失。
最终的 CakeEmail 配置文件应如下所示:
<?php
class EmailConfig {
public $info = array(
'transport' => 'Smtp',
'host' => 'smtp.foo.com',
'port' => 25,
'username' => 'username',
'password' => 'password',
'from' => 'info@example.es'
);
}
我希望这对某人有所帮助 :)
我遇到了以下问题,正如您从标题中所想象的那样,我有一个带有联系表的 CakePHP v2.5.6 应用程序,每次提交时都会给我一个身份验证错误,这让我很惊讶,在尝试使用 PHPMailer 进行简单测试后,它在显然相同的配置下完美运行。
CakePHP 配置(app/Config/email.php)
<?php
class EmailConfig {
public $info = array(
'transport' => 'Smtp',
'host' => 'smtp.foo.com',
'port' => 25,
'username' => 'username',
'password' => 'password'
);
}
CakePHP 发件人代码
CakeEmail::deliver('foo@foo.es', 'Subject', 'Test', 'info');
CakePHP 错误报告
PHPMailer 测试脚本
<?php
require './PHPMailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
//$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->Host = 'smtp.foo.com';
$mail->SMTPAuth = true;
$mail->Username = 'username';
$mail->Password = 'password';
$mail->Port = 25;
$mail->setFrom('info@example.es', 'Mailer');
$mail->addAddress('foo@foo.es', 'Mr. foo');
$mail->addReplyTo('info@example.es', 'Information');
$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.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
}
所以我的问题是,配置之间是否真的存在差异,或者我遗漏了什么?为什么 PHPMailer 可以工作而 CakeEmail 不能?
提前谢谢你:)
我找到的解决方案看起来很虚假,但关于错误原因的调试信息并不完全准确。
东西不见了,PHPMailer 和 CakeEmail 的不同之处在于 from
配置字段。
来自配置的 PHPMailer
$mail->setFrom('info@example.es', 'Mailer');
您可能会注意到 CakeEmail 配置文件缺少该字段,因此只需添加它,错误就会消失。
最终的 CakeEmail 配置文件应如下所示:
<?php
class EmailConfig {
public $info = array(
'transport' => 'Smtp',
'host' => 'smtp.foo.com',
'port' => 25,
'username' => 'username',
'password' => 'password',
'from' => 'info@example.es'
);
}
我希望这对某人有所帮助 :)