Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在windows上使用php和pear发送邮件_Php_Email_Smtp_Pear - Fatal编程技术网

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

在windows上使用php和pear发送邮件,php,email,smtp,pear,Php,Email,Smtp,Pear,我正在尝试使用php脚本发送电子邮件,但出现错误。这是我的代码。我正在使用xampp netbeans和windows。我在php.ini文件中包含了pear,但是仍然有这些错误,有什么想法吗 require_once "Mail.php"; $from = "onlinebookstorb@gmail.com";

我正在尝试使用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>");
                            }
require_once“Mail.php”;
$from=”onlinebookstorb@gmail.com";
$to=“$email'”;
$subject=“在线书店信息”;
$body=“这是您的Id'$userID'单击以更改以转到网站”//todo更改URL以使其在联机时工作
$host=”ssl://smtp.gmail.com";
$port=“993”;
$host=“smtp.gmail.com”;
$username=”onlinebookstoreb@gmail.com";
$password=“”;
$headers=数组('From'=>$From,
'至'=>$至,
“主题”=>$Subject);
$smtp=Mail::工厂('smtp',阵列('host'=>$host,
“端口”=>$port,
“auth”=>正确,
“用户名”=>$username,
“密码”=>$password));
$mail=$smtp->send($to、$headers、$body);
if(PEAR::isError($mail)){
echo(“”$mail->getMessage()”

”; }否则{ echo(消息已成功发送!

); }
这就是我得到的错误:

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

严格标准:不应静态调用非静态方法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中不兼容的上下文


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

@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/邮件调用预先添加了一个
@


与更改常规错误消息设置相比,我更喜欢此解决方案,因为我不希望看到pear/mail警告,但我确实希望看到适用于我自己代码的警告。

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

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

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

static function &factory($driver, $params = array())
出现此错误的原因是,PEAR Mail尚未更新为PHP5标准,并且仍然使用PHP4,因此随着服务器逐渐与PHP5兼容,这将变得更加频繁。与其隐藏,不如修复


希望这有帮助

如果您尝试,第一个警告是否消失:
$smtp=&Mail::factory(…)
也可以看到这篇文章中关于no的评论,它仍然是相同的错误列表,我检查了php.ini和E_STRICT,这是所有更改错误报告到
E_ALL^E_STRICT
应该修复警告。您可以使用
错误报告(E\u ALL ^E\u STRICT)在该脚本的开头,仅更改该特定代码的错误报告。只是PEAR邮件类没有针对PHP5 OOP进行完全更新。它应该是
public static function factory()
而不是
function&factory(
,如Mail.phpcan中所定义),您可以指定我应该在php.ini中具体更改什么吗?我应该更改它;使用当前错误报告求值表达式().php.ini中设置为true或其他内容时,可以将错误报告设置为
error\u reporting=E\u ALL^E\u STRICT
,或者保持php.ini不变,并在Register.php顶部添加
error\u reporting(E\u ALL^E\u STRICT);