【问题标题】:sending mail using php and pear on windows在 Windows 上使用 php 和 pear 发送邮件
【发布时间】:2012-01-07 00:37:16
【问题描述】:

我正在尝试使用 php 脚本发送电子邮件,但我收到错误这是我的代码。我正在使用 xampp netbeans 和 windows。我在 php.ini 文件中包含了 pear,但仍然有错误任何想法

 require_once "Mail.php";
                            
                            $from = "onlinebookstorb@gmail.com";
                            $to = "'$email'";
                            $subject = "Online book store information";
                            $body = "This is your Id '$userID' click <a href =../index.php > here </a> to change to go to the website "; //todo change URL to make it work when it is online

                            $host = "ssl://smtp.gmail.com";
                            $port = "993";
                            $host = "smtp.gmail.com";
                            $username = "onlinebookstoreb@gmail.com";
                            $password = "";

                            $headers = array('From' => $from,
                                'To' => $to,
                                'Subject' => $subject);
                            $smtp = Mail::factory('smtp', array('host' => $host,
                                        'port' => $port,
                                        '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>");
                            }

这是我得到的错误:

严格标准:非静态方法 Mail::factory() 不应在第 85 行的 C:\xampp\htdocs\OnlineBookStore\Store\Register.php 中静态调用

严格标准:不应静态调用非静态方法 PEAR::isError(),假设 $this 来自第 365 行 C:\xampp\php\PEAR\Mail\smtp.php 中的不兼容上下文

严格标准:不应静态调用非静态方法 PEAR::isError(),假设 $this 来自第 450 行 C:\xampp\php\PEAR\Net\SMTP.php 中的不兼容上下文

严格标准:不应静态调用非静态方法 PEAR::isError(),假设 $this 来自第 467 行 C:\xampp\php\PEAR\Net\SMTP.php 中的不兼容上下文

【问题讨论】:

  • 如果您尝试,第一个警告是否会消失:$smtp =&amp; Mail::factory(...); 另请参阅此帖子中有关 PEAR mail help 的 cmets
  • 不,它仍然是相同的错误列表,我检查了 php.ini 和 E_STRICT,它适用于所有人
  • 将 error_reporting 更改为 E_ALL ^ E_STRICT 应该可以修复警告。您可以在该脚本的开头使用error_reporting(E_ALL ^ E_STRICT); 来仅更改该特定代码的错误报告。只是 PEAR 邮件类没有针对 PHP5 OOP 完全更新。它应该是 public static function factory() 而不是 Mail.php 中定义的 function &amp;factory(
  • 你能具体说明我应该在 php.ini 中更改什么吗?使用当前的 error_reporting() 评估表达式。如果需要,请设置为 true 或其他内容
  • 在 php.ini 中,您可以将错误报告设置为 error_reporting = E_ALL ^ E_STRICT 或直接保留 php.ini 并在 Register.php 的顶部添加 error_reporting(E_ALL ^ E_STRICT);

标签: php email smtp pear


【解决方案1】:

我刚刚遇到了同样的问题并使用以下方法解决了它:

@require_once "Mail.php";
...
$smtp = @Mail::factory('smtp', array('host' => $host,
                                        'port' => $port,
                                        'auth' => true,
                                        'username' => $username,
                                        'password' => $password));
$mail = @$smtp->send($to, $headers, $body);
if (@PEAR::isError($mail)) {

请注意,我在所有梨 / 邮件呼叫前添加了 @

我更喜欢这种解决方案而不是更改一般错误消息设置,因为我不想看到 pear / mail 警告,但我确实希望看到适用于我自己代码的那些。

【讨论】:

    【解决方案2】:

    是的 jeroens 方法不显示警告消息,但它真的解决了问题吗?理解 @ 只是隐藏与之相关的警告。

    要修复Mail.php中的问题,请修改以下内容

    function &factory($driver, $params = array())
    

    改成

    static function &factory($driver, $params = array())
    

    出现此错误的原因是因为 PEAR Mail 尚未更新到 PHP5 标准并且仍然使用 PHP4,所以随着服务器逐渐符合 PHP5 标准,这将变得更加频繁。与其隐藏,不如修复。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 2011-04-10
      • 2015-04-09
      • 2010-12-05
      • 1970-01-01
      • 2020-08-24
      • 2014-01-05
      • 1970-01-01
      相关资源
      最近更新 更多