【发布时间】:2019-01-08 13:10:11
【问题描述】:
我有以下邮件发送功能:
function SendMailUtf8($to, $subject, $message) {
require_once "Mail.php";
$from = "mydomain <myuser@mydomain.com>";
$host = "mydomain.com";
$username = "myuser";
$password = "mypassword";
$headers = array ('From' => $from, 'To' => $to, 'Content-Type' => 'text/html; charset=UTF-8', 'X-Mailer' => 'PHP/'.phpversion(), 'Reply-To' => 'myuser@mydomain.com', 'Subject' => '=?UTF-8?B?'.base64_encode($subject).'?=');
//this line is where the error is thrown
$smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password));
$mail = $smtp->send($to, $headers, $message);
if (PEAR::isError($mail)) {
return "Error: Mail not sent. Message: " . $mail->getMessage();
} else {
return "OK";
}
}
除了我设置了自己的错误处理函数的页面之外,该函数在任何地方都能正确调用,没有任何错误:
function Func_ErrorHandler($errno, $errstr, $errfile, $errline, array $errcontext) {
if (error_reporting() == 0) {
return false;
}
if ($errno > 0) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
}
带有以下错误消息:
不应该静态调用消息“非静态方法 Mail::factory()”的未捕获异常“ErrorException”
失败的示例代码:
set_error_handler("Func_ErrorHandler");
$MAILto = "info@mydomain.com";
$MAILsubject = "subject";
$MAILmessage = "message";
$sRet = SendMailUtf8($MAILto, $MAILsubject, $MAILmessage);
如果我注释掉set_error_handler("Func_ErrorHandler"); 行,就没有问题。为什么会发生这种情况,我该如何解决?
提前谢谢你。
编辑:Mail.php https://paste.ee/p/LOyBf
【问题讨论】:
-
这与错误处理程序无关,它的这一行
$smtp = Mail::factory(.... -
如果你不总结错误信息,错误的行号是什么?
-
实例化一个 MAIL 类的对象,然后调用它为
$mail->factory(... -
“如果我注释掉 set_error_hanlder() 行,就没有问题。” - 这仅表示您有 default 错误报告设置为忽略警告。
-
专业提示:不要在
error_reporting设置为零的情况下进行开发。错误报告可以帮助您不犯错误
标签: php