我正在尝试使用PEAR Mail 1.3(从PEAR站点下载)在客户端站点上启用联系表单。但是,我一直得到:致命错误:在非对象上调用成员函数send()
它挂断的行是:$mail = $smtp->send($recipients, $headers, $body);
看到处理这个问题的其他线程,但我不明白答案。关于返回$ mail对象的事情?我尝试了我认为他们正在谈论但没有运气的事情。这是脚本:
$host = "smtp.gmail.com";
$username = "someAddy@email.com";
$password = "myPassword";
$port = "465";
$recipients = "myAddy@gmail.com";
$headers = array ('From' => $email,
'To' => $recipients,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = new Mail;
$mail = $smtp->send($recipients, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
答案 0 :(得分:1)
致命错误:在非对象上调用成员函数send()
几乎意味着它所说的。
send()
被调用的东西不是一个对象。看代码; send()
是在$smtp
变量中存储的对象上调用的方法。 PHP告诉你它希望$smtp
成为一个对象,但它实际上是其他东西,可能是NULL
。
如果你查看PEAR邮件的PEAR文档,它会告诉你如果一切正常(一个对象),Mail::factory()
应该返回什么,如果它没有,它会返回什么(可能是NULL
)。所以如果你var_dump($smtp); die;
你看到了什么?
我非常仔细地查看PEAR文档以了解它在什么情况下赢得返回预期对象,然后检查您的输入以查看是否有任何可疑项关于Mail::factory()
期望的内容。
答案 1 :(得分:0)
我好累,我不记得我是怎么想出来的,但这就是我如何解决它的问题。在应用程序&gt; Mamp&gt; bin&gt; php&gt; php5.5.10&gt; lib&gt; php 中,我添加了一个名为 Net 的目录,其中包含SMTP.php(Net_SMTP-1.7.1)和Socket.php(Net_Socket 1.0.14),我是从PEAR网站下载的。不记得我怎么想我错过了他们。收到来自Google的服务器错误,因此我将端口更改为587并最终有效。还必须修复文件和目录的权限。那就是它。