【问题标题】:Fatal error: Call to a member function send() on a non-object致命错误:在非对象上调用成员函数 send()
【发布时间】:2016-09-20 18:25:52
【问题描述】:

我正在尝试使用 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>");
  }

【问题讨论】:

    标签: php email pear


    【解决方案1】:

    致命错误:在非对象上调用成员函数 send()

    差不多就是它所说的意思。

    send() 被调用了一个不是对象的东西。看代码; send() 是对存储在 $smtp 变量中的对象调用的方法。 PHP 告诉你它期望 $smtp 是一个对象,但它实际上是别的东西,可能是 NULL

    如果您查看 PEAR Mail 的 PEAR 文档,它会告诉您如果一切正常(一个对象),Mail::factory() 应该返回什么,如果没有,它会返回什么(可能是 NULL )。所以如果你var_dump($smtp); die;你看到了什么?

    我会仔细查看 PEAR 文档,看看在什么情况下它不会返回预期的对象,然后检查您的输入以查看其中是否有任何可疑的关于什么Mail::factory() 期待。

    【讨论】:

      【解决方案2】:

      我太累了,我不记得我是怎么想出来的,但我是这样解决的。在 Applications>Mamp>bin>php>php5.5.10>lib>php 中,我添加了一个名为 Net 的目录,其中包含 SMTP.php (Net_SMTP-1.7.1) 和Socket.php (Net_Socket 1.0.14),我从 PEAR 网站下载的。不记得我是怎么知道我想念他们的。从 Google 收到服务器错误,所以我将端口更改为 587,它终于工作了。还必须修复文件和目录的权限。所以,就是这样。

      【讨论】:

      • Net_SMTPMail 包的可选依赖项,如果您想使用Mail 通过SMTP 发送邮件,则需要安装它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2012-05-30
      • 2016-08-30
      • 2015-02-06
      • 2012-05-14
      • 2013-11-19
      • 2017-04-30
      相关资源
      最近更新 更多