PEAR Mail连接拒绝smtp.gmail.com

时间:2011-08-29 21:31:42

标签: php gmail pear

尝试使用pear mail包发送邮件时遇到了无穷无尽的麻烦:

我在本地计算机上使用xampp进行测试,以下代码完美运行:

//PEAR

    require_once('../PEAR/Mail.php');


    $from = "<sender@domain.com>";
    $to = "<receiver@domain.com>";
    $subject = "Hi";
    $body = "Testing message";

    $host = "ssl://smtp.gmail.com"; //ssl://
    $port = "465";
    $username = "my_account@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);

    function &factory($driver, $params = array())
{
    $driver = strtolower($driver);
    @include_once 'Mail/' . $driver . '.php';
    $class = 'Mail_' . $driver;
    if (class_exists($class)) {
        $mailer = new $class($params);
        return $mailer;
    } else {
        return PEAR::raiseError('Unable to find class for driver ' . $driver);
    }
}


   if (PEAR::isError($mail)) {
      echo("<p>" . $mail->getMessage() . "</p>");
     } else {
      echo("<p>Message successfully sent!</p>");
     }

    //end of php tag

但是,当我将文件上传到在线Web服务器并运行完全相同的脚本时,我收到以下错误:

“无法连接到ssl://smtp.gmail.com:465 [SMTP:无法连接套接字:连接被拒绝(代码:-1,响应:)]”

我也试过端口587和443无济于事。我猜这个问题必须与socket.php,smtp.php,mail.php或甚至服务器配置文件有关,因为上面的代码似乎没有任何问题。如果有人能指出我正确的方向,我将非常感激!

2 个答案:

答案 0 :(得分:0)

Ya,因为您的主机可能不支持ssl连接。

向您的主机询问php_openssl支持。或者您可以手动尝试以下操作来加载DLL。

如果(DL(php_openssl.so)) 要么 如果(DL(php_openssl.dll))

这是一般错误,因为扩展名= php_openssl.dll文件未在服务器上取消注释。

答案 1 :(得分:0)

Google拒绝连接,因为您需要在“ Mail :: factory”调用中指定“ localhost”参数,如以下代码所示:

$host = "ssl://smtp.gmail.com"; //ssl://
$port = "465";
$username = "my_account@gmail.com";
$password = "**********";
$localhostname = gethostname();
$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'port' => $port,
    'auth' => true,
    'localhost' => $localhostname,
    'username' => $username,
    'password' => $password));

然后,电子邮件应该可以正常通过!我曾遇到过托管服务提供商,在这些提供商中不必提供“ localhost”参数,但与其他服务提供商相比,尽管官方的PEAR文档将其列为可选参数,但似乎还是必需的。