PHP PEAR邮件的问题

PHP PEAR邮件的问题,php,pear,Php,Pear,我正在尝试使用PEAR邮件通过外部smtp服务器发送。它似乎挂了一段时间,然后脚本结束。它输出我所有的“echo”语句,直到发送后的一个。没有任何内容输出超过显示“发送前”的回音。有人能告诉我这里可能出了什么问题吗?(用伪值代替smtp值)。邮件未被发送。谢谢你的帮助 echo "start"; $n = $_POST['txtName']; $e = $_POST['txtEmail']; $t = 'Kenny <email@host.com>'; $f = 'Kenny <

我正在尝试使用PEAR邮件通过外部smtp服务器发送。它似乎挂了一段时间,然后脚本结束。它输出我所有的“echo”语句,直到发送后的一个。没有任何内容输出超过显示“发送前”的回音。有人能告诉我这里可能出了什么问题吗?(用伪值代替smtp值)。邮件未被发送。谢谢你的帮助

echo "start";
$n = $_POST['txtName'];
$e = $_POST['txtEmail'];
$t = 'Kenny <email@host.com>';
$f = 'Kenny <email@host.com>';
$s = 'CPA TEST';
$b = "name: $n email: $e"; 

include("mail.php");
echo "after include";
/* mail setup recipients, subject etc */
$recipients = $t;
$headers["From"] = $f;
$headers["To"] = $t;
$headers["Subject"] = $s;
$mailmsg = $b;
/* SMTP server name, port, user/passwd */
$smtpinfo["host"] = "my_smtp_host";
$smtpinfo["port"] = "25";
$smtpinfo["auth"] = true;
$smtpinfo["username"] = "my_email";
$smtpinfo["password"] = "my_password";
echo "before object";
/* Create the mail object using the Mail::factory method */
$mail_object =& Mail::factory("smtp", $smtpinfo);
echo "before send";
/* Ok send mail */
$send = $mail_object->send($recipients, $headers, $mailmsg);
echo "after send";
if (PEAR::isError($send)) { print($send->getMessage());}else{print "end";} 
echo "done";
echo“启动”;
$n=$_POST['txtName'];
$e=$_POST['txtEmail'];
$t='Kenny';
$f=肯尼;
$s=‘注册会计师测试’;
$b=“名称:$n电子邮件:$e”;
包括(“mail.php”);
回声“后包括”;
/*邮件设置收件人、主题等*/
$recipients=$t;
$headers[“From”]=$f;
$headers[“到”]=$t;
$headers[“主题”]=$s;
$mailmsg=$b;
/*SMTP服务器名称、端口、用户/passwd*/
$smtpinfo[“主机”]=“我的smtp主机”;
$smtpinfo[“端口”]=“25”;
$smtpinfo[“auth”]=true;
$smtpinfo[“用户名”]=“我的电子邮件”;
$smtpinfo[“密码”]=“我的密码”;
回声“在物体之前”;
/*使用mail::factory方法创建邮件对象*/
$mail_object=&mail::factory(“smtp”、$smtpinfo);
回音“发送前”;
/*好的,发送邮件*/
$send=$mail\u object->send($recipients,$headers,$mailmsg);
回音“发送后”;
if(PEAR::isError($send)){print($send->getMessage());}else{print“end”;}
回应“完成”;

尝试以下方法以确保邮件正常工作:

<?php
require_once "Mail.php";

$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <recipient@example.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "mail.example.com";
$username = "smtp_username";
$password = "smtp_password";

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

如果这不起作用,那么您需要检查您的PHP配置


有关详细信息,请参阅。

Todd的脚本非常出色,但无法解决您的问题,即您的浏览器在SMTP超时之前超时。这就是为什么您只看到一半的页面,而没有看到任何可用于调试SMTP设置的错误消息

解决方案是直接运行PHP脚本。没有超时


如果因为ISP不允许您访问shell而无法执行此操作,请创建一个cron作业,以便每分钟运行一次。Cron将通过电子邮件将输出发送给您,其中包含完整的调试详细信息。

我遇到了相同的问题,它挂起了send命令。我的第一步是从命令行运行以查看完整的错误消息(如上面Rap建议的)

它吐出了以下内容

Warning:  include_once(Net/SMTP.php): failed to open stream: No such file or directory in mail/Mail/smtp.php on line 348
PHP Warning:  include_once(): Failed opening 'Net/SMTP.php' for inclusion (include_path='.:/usr/lib/php') in mail/Mail/smtp.php on line 348
PHP Fatal error:  Class 'Net_SMTP' not found inmail/Mail/smtp.php on line 349
我下载了以下内容,并将它们放在/Net中


我必须调整SMTP和套接字库的权限,以便Apache能够读取它们


瞧,成功了

我实际上遇到了同样的问题。一个生产脚本出现故障,我最难排除故障。主要是因为有太多的代码阻止了错误的出现。最终,我使用了Kenny Ray的代码,对其进行了修改以适应我的环境,并运行了一个测试。结果网孔不知怎么不见了。我卸载并重新安装了它,一切又开始工作了。我希望这对您有所帮助。

如果有人在linux上运行并且遇到与Jayme相同的问题。下面是另一个安装缺少的“Net/”类的简单解决方案。这些缺少的类会导致脚本中断


sudo pear install Net\u SMTP

的重新安装channel://pear.php.net/Mail-1.2.0 不适合我。(Ubuntu 12.04)

只需在新建之前删除字符“&”

sudo vi /usr/share/php/Mail/smtp.php
    349         /*$this->_smtp = &new Net_SMTP($this->host, */
    350         $this->_smtp = new Net_SMTP($this->host,

对于Php版本7,您需要安装Php net smtp:

sudo apt-get update
sudo apt-get install php-net-smtp

你好。我测试了你的脚本,它与“真实”代码具有相同的效果。它挂起,没有警告,没有错误。我的php配置包含error_reporting=E_ALL | E_STRICT和display_errors=On。还有其他建议吗?按照Rap和Jayme Dunlap的建议,在命令行上运行它来查看错误。或者只要运行
sudo pear install Net\u SMTP
if can run pear from command line:)这就是我解决问题的方法。这是我的解决方案。谢谢;)在windows上,它只是
pear安装Net\u SMTP
,但这仍然帮助了我!
sudo apt-get update
sudo apt-get install php-net-smtp