PEAR Mail无法连接到smtp.gmail.com

3

我在使用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

然而,当我将文件上传到在线网站并运行完全相同的脚本时,我收到以下错误信息:
“连接ssl://smtp.gmail.com:465失败[SMTP:连接套接字失败:拒绝连接(代码:-1,响应:)]”
我还尝试了端口587和443,但都没有成功。 我猜问题必须出在socket.php、smtp.php、mail.php甚至服务器配置文件中,因为上述代码似乎没有问题。 如果有人能指点我正确的方向,我将非常感激!

为什么在主机URL上有ssl:// - Treffynnon
2
连接被拒绝,表示某个主动拒绝了连接。可能是谷歌,也可能是沿途的防火墙 - 但肯定有东西发送了一个数据包,说“不行,乔斯”。这很可能不是你的代码问题。可能是你的ISP不允许连接到其网络之外的邮件服务器(宽带ISP倾向于采取此措施来防止垃圾邮件)。 - Marc B
可能是重复的问题:从PHP页面使用GMail SMTP服务器发送电子邮件 - Treffynnon
2个回答

0

可能是因为您的主机不支持 SSL 连接。

请向您的主机提供商请求 php_openssl 支持。或者您可以手动尝试以下加载 dll 的方法。

if(dl(php_openssl.so)) or if(dl(php_openssl.dll))

这是一般性错误,因为服务器上的 extension=php_openssl.dll 文件未被取消注释。


0

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

$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 文档将其列为可选项...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接