What is wrong with this PHP script to send mail us

2019-02-13 13:38发布

I have this script:

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>");
  }

I am coming up with this error:

Non-static method Mail::factory() should not be called statically 

Any idea how to fix this? Pear Mail is installed on the server.

3条回答
\"骚年 ilove
2楼-- · 2019-02-13 14:16

prepended an @ to all pear / mail calls. sometime you may end up with Mail::factory() should not be called statically error

查看更多
太酷不给撩
3楼-- · 2019-02-13 14:17

Non-static method Mail::factory() should not be called statically

This is a non-fatal notice coming from PHP because PEAR Mail is prehistoric and hasn't been updated to use the static keyword introduced five years ago in PHP5.

After reviewing the documentation, your call to Mail::factory looks completely correct and normal.

You failed to tell us if if the call to send succeeds or fails. If it's succeeding, but the mail is never being delivered, please check the SMTP server logs. If it's failing, what's the actual error message? The Mail::send documentation includes a comprehensive list of errors.

You might want to consider using a more modern mail sending library, like Swiftmailer.

查看更多
再贱就再见
4楼-- · 2019-02-13 14:22

perhaps it has to do with a missing ampersand?

I notice in documentation examples, the usage of factory looks like this:

// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory('sendmail', $params);

Note the assigment using =&

查看更多
登录 后发表回答