【发布时间】:2020-01-17 14:06:09
【问题描述】:
我在尝试使用 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://? -
连接拒绝某些东西主动拒绝允许连接。可能是谷歌,也可能是沿线某处的防火墙——但确实有东西发回了一个数据包,上面写着“没办法,何塞”。它不太可能是您的代码。可能您的 ISP 不允许连接到他们自己网络之外的邮件服务器(宽带 ISP 倾向于这样做作为反垃圾邮件措施)。