【问题标题】:PEAR Mail script seems to hang and cannot debug itPEAR Mail 脚本似乎挂起并且无法调试它
【发布时间】:2014-04-18 09:52:35
【问题描述】:

我遇到了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 已安装!

要调用 Mail::factory

D:\Parallels\附加\PleskPHP5>

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

更新: 我尝试在 Mail::factory 调用之前添加以下内容:echo(Mail::factory('smtp', $params)); 从梨邮件文档中说它应该返回一个对象或错误消息。 脚本似乎在这一行结束,没有回显任何内容......

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

【问题讨论】:

  • 你确定它挂了?也许它只是在死去。您是否检查过服务器错误日志和/或打开 display_errors/error_reporting?
  • php cli 的输出是:D:\Parallels\Additional\PleskPHP5>php phpmailcheck.php

    PEAR 已安装!

    PEAR Mail 已安装!

    将调用 Mail::factory D:\Parallels\Additional\PleskPHP5> 所以在 mailfactory 似乎被处理后什么都没有我有 error_reporting(E_ALL);设置
  • 抱歉,@halfer 有一个实例我未能将 Mail 的类名大写,尽管感谢您的宝贵意见,它对我很有帮助。
  • 没问题@Dizzy,这个地方有时可以提供火的洗礼!

标签: php email pear


【解决方案1】:

首先,检查退出状态:

$ php mailcheck.php; echo $?

或在窗户上:

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

如果 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

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

【讨论】:

  • 嗨,感谢您的回复,我无法通过 cli 尝试让它在 Windows 机器上运行,我运行了两个单独的命令 php phpmailcheck.php 然后 echo Exit Code is %errorlevel% 返回 exitcode is 255
  • 我猜这是一个致命错误,因为退出代码是 255,我无法在服务器上安装 xdebug,那么我该如何追踪这个错误呢?
  • 我已将显示错误设置为 1,并将错误报告设置为 E_All,但仍然没有报告错误脚本似乎在 mail::factory 调用时终止,我开始认为这是一个问题相反,梨安装,我将看看我是否可以让脚本在共享托管服务器上运行,如果可以,那么它是服务器而不是脚本的问题,感谢您的帮助
  • 似乎我越来越接近问题,我现在收到一个错误:PHP Object of class PHP_Mail could not be converted to string on line 36,这是$mail = Mail::factory('smtp', $params);这一行
  • 我将其标记为正确,因为它帮助我找到了问题的根源,最后我重新安装了梨,这似乎解决了问题。
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多