我有这个脚本:
require_once "Mail.php";
$from = "Stephen <username@nvrforget.com>";//Google apps domain
$to = "username@gmail.com";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
$host = "mail.nvrforget.com";
$username = "username@nvrforget.com";
$password = "password";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
我想出了这个错误:
Non-static method Mail::factory() should not be called statically
知道怎么解决这个问题吗? Pear Mail安装在服务器上。
答案 0 :(得分:11)
不应静态调用非静态方法Mail :: factory()
这是来自PHP的非致命通知,因为PEAR Mail 史前并且尚未更新为使用5年推出的static
关键字以前用PHP5。
在reviewing the documentation之后,您对Mail::factory
的调用看起来完全正确且正常。
您未能告诉我们send
的呼叫是成功还是失败。如果它成功,但邮件永远不会被传递,请检查SMTP服务器日志。如果它失败了,那么实际的错误信息是什么? Mail::send
文档包含一个完整的错误列表。
您可能需要考虑使用更多现代邮件发送库,例如Swiftmailer。
答案 1 :(得分:-2)
也许这与失踪的&符号有关?
我注意到在文档示例中,工厂的使用情况如下:
// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory('sendmail', $params);
请注意使用=&amp;
的分配答案 2 :(得分:-2)
在所有梨/邮件电话上添加@。有时你可能最终得到Mail :: factory()不应该被称为静态错误