在Windows上使用php和pear发送邮件

时间:2011-11-26 19:01:36

标签: php email smtp pear

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

这是我得到的错误:

  

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

     

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

     

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

     

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

2 个答案:

答案 0 :(得分:14)

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

@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)) {

请注意,我在所有梨/邮件电话上添加了@

我更喜欢这个解决方案来更改常规错误消息设置,因为我不想看到梨/邮件警告,但我确实希望看到适用于我自己代码的那些。

答案 1 :(得分:0)

是的jeroens方法没有显示警告消息,但是它实际上是否解决了问题?理解@只是隐藏了与之相关的警告。

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

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

将其更改为

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

此错误的原因是因为PEAR Mail尚未更新为PHP5标准,并且仍然逐渐使用PHP4,因为服务器变得符合PHP5标准,这将变得更加频繁。它更好地修复而不是隐藏。

希望这有帮助

相关问题