PEAR邮件脚本似乎挂起,无法调试它

时间:2014-03-13 14:52:52

标签: php email pear

我遇到了this question提出的非常类似的问题,不幸的是,该帖子中的答案对我没有帮助。

$mail = Mail::factory('smtp', $params);之后似乎没有任何事情发生。

在输出任何内容之后没有任何echo语句或错误检查,就好像当脚本到达脚本刚刚停止的Mail::factory行时。

脚本本身返回HTTP 200,但未发送邮件或返回脚本生成的任何已发送/未发送的响应。

我尝试卸载/重新安装PEAR Mail,Net和Auth库,但问题仍然存在。

我也尝试直接从命令行

在服务器上运行脚本

就好像调用Mail::factory后脚本停止处理一样,没有错误返回,所以我不知道从哪里开始寻找修复。

我还通过PHP CLI在服务器上直接运行脚本: 它输出所有内容,直到Mail::factory调用,之后没有任何内容。

  

D:\ Parallels \ Additional \ PleskPHP5> php phpmailcheck.php

     

安装了PEAR!

     

安装了PEAR邮件!

     

打电话给Mail :: factory

  d:\的Parallels \附加\ PleskPHP5>

我还检查了网站错误日志,并且没有报告错误。

更新: 我在Mail::factory来电之前尝试添加以下内容:echo(Mail::factory('smtp', $params)); 来自pear邮件文档说它应该返回一个对象或错误消息。 脚本似乎在这条线上结束而没有回应任何东西......

<?php
require_once('D:\Parallels\Additional\PleskPHP5\Pear\System.php');
require_once "Mail.php";
if(class_exists('System')===true) {
    echo '<p>PEAR is installed!</p>';
} else {
    echo '<p>PEAR is not installed!</p>';
}
if(class_exists('Mail')===true) {
    echo '<p>PEAR Mail is installed!</p>';
} else {
    echo '<p>PEAR Mail is not installed!</p>';
}

//start mail
$from = "My Website <webmailer@website.co.uk>";
$to = "Website Owner <email@emailaddress.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?<br>This is a test email for pear";

$host = "mail.mailserver.co.uk";
$port = 25;
$username = "website@website.co.uk";
$password = "password";

$params = array('host'=>$host,'port'=>$port,'auth'=>true,'username'=>$username,'password'=>$password);
$headers = array (
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);


echo('going to call Mail::factory'); //echos out correctly
$mail = Mail::factory('smtp', $params);

echo('just called Mail::factory'); // does not echo

$mail->send($to,$headers,$message);
//$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }
?>

1 个答案:

答案 0 :(得分:1)

首先,检查退出状态:

$ php mailcheck.php; echo $?

或在Windows上:

$ php mailcheck.php
$ echo Exit Code is %errorlevel%

将是&gt;如果php代码中有致命错误,则为0。

然后确保您display_errors开启,error_reporting设置为正确的级别。如果不这样做,您将看不到任何输出。如果您安装了xdebug,请启用xdebug.scream


由于您的退出代码为255,因此您的php文件会出现问题。

首先,使用ini_set将display_errors设置为1,将error_reporting设置为E_ALL。再次运行代码。


如果没有,请通过运行

确保代码在语法上正确
$ php -l path/to/file.php

它会告诉您何时出现语法错误。对所有文件执行此操作。