1

我一直在尝试使用 pear 和 php 脚本发送邮件。我已经搜索了一天多,还没有找到我的问题。当我在网站上运行此代码时,没有任何反应。它快速加载然后停止。我运行了一些 echo 命令,发现代码特别停在:

$mail = $smtp->send($to, $headers, $body);

就是这样。没有其他事情发生。我没有收到任何错误输入或任何东西,我只是看到我的回声发生在此之前,而在它之后没有回声。我已经安装了梨,以及梨邮件。我“认为”我正确安装了它们,因为我可以在任何地方的命令行中输入“pear”,它会调出菜单。我已经通过路由器和防火墙打开了端口 465,tcp。我在一台windows xp机器上。我不知道错误日志将在哪里查看是否发生了任何不良情况。我的服务器是 apache 2.2,托管在这个 windows 盒子上。

 <?php

 require_once "Mail.php";

 $from = "user1@gmail.com";
 $to = "user2@yahoo.com";
 $subject = "Hi!";
 $body = "Hi,\n\nHow are you?";

 $server = "ssl://smtp.gmail.com";
 $username = "user1@gmail.com";
 $password = "pass";

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

2 回答 2

1

真喜欢这些问题如何花费 10 个小时的工作,而且如此简单。

因此,当我配置 PEAR 时,我做得正确。我安装了包 mail、mail_mime 和 net_socket。我试图安装 net_smtp,但它给了我一个随机错误“没有可用于包 pear 的版本......”。我认为这意味着该软件包已安装,我无法用它做任何其他事情。我不知道这个东西到底是怎么被窃听的,但实际上我的“C:\Documents and Settings\user\Local Settings\Temp”文件夹中生成了一个 pear 文件夹。我删除了这个名为 pear 的文件夹,然后成功运行了“pear install net_smtp”。之后,我运行了我的 php 代码,一切都像魅力一样运行(能够通过 gmail smtp 服务器成功发送我的电子邮件)。

感谢您的帮助,我很欣慰知道这一点!:)

于 2012-06-24T04:22:13.437 回答
0

您不需要端口转发,因为连接是出站的。可能您的 ISP 阻止了连接。在出站端口 25 上很常见,在 465 上不是很多,但它确实发生了。
无论如何,您的代码看起来不错。

于 2012-06-23T17:43:05.297 回答