【问题标题】:PHPMailer: "Could not connect to SMTP host"PHPMailer:“无法连接到 SMTP 主机”
【发布时间】:2012-05-24 10:56:02
【问题描述】:
$email_message = "Form details below.\n\n";

function clean_string($string) {
    $bad = array("content-type","bcc:","to:","cc:","href");
    return str_replace($bad,"",$string);
}

$email_message .= "Full Name: ".clean_string($_POST['full_name'])."\n";
$email_message .= "Email: ".clean_string($_POST['email'])."\n";
$email_message .= "Telephone number: ".clean_string($_POST['telephone'])."\n";
$email_message .= "Message: ".clean_string($_POST['comments'])."\n";


$mail             = new PHPMailer();
$body             = $email_message;
$body             = str_replace('\\', '', $body);

$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPAuth   = true;             // enable SMTP authentication
$mail->SMTPSecure = "ssl";            // sets the prefix to the servier
$mail->Host       = "smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port       = 465;              // set the SMTP port for the GMAIL server
$mail->Username   = "xxx@gmail.com";  // GMAIL username
$mail->Password   = "XXXXXX";         // GMAIL password

$mail->SetFrom('from-email@domain.com', 'First Last');

$mail->Subject    = "Imperia";

$mail->AltBody    =                   // optional, comment out and test
    "To view the message, please use an HTML compatible email viewer!";

$mail->MsgHTML($body);

$address = "xxx@gmail.com";
$mail->AddAddress($address, "To Name");

if(!$mail->Send()) {

    echo "<font color='red'> Message error </font>". $mail->ErrorInfo;
} else {
    echo "<font color='red'> Message sent </font>";
} 

我正在使用此代码尝试使用 SMTP 发送电子邮件,但出现错误:

SMTP 错误:无法连接到 SMTP 主机

谁能告诉我这里出了什么问题?我找不到解决此问题的方法。谢谢

【问题讨论】:

  • 激活调试 $mail->SMTPDebug = 1;更多详情

标签: php smtp phpmailer


【解决方案1】:

我也遇到了这个问题,daemoni 的解决方案对我有用。更具体地说,我将代码更改为:

$mail->Host = gethostbyname("smtp.gmail.com"); 

【讨论】:

    【解决方案2】:

    我昨天遇到了类似的问题,原来 smtp.gmail.com 正在解析为 IPv6 地址,然后从那里开始一切都或多或少坏了。

    我的解决方法是输入 IPv4 地址而不是 smtp.gmail.com

    (在我的情况下是 173.194.79.108,我不确定这是否是全球性的,所以可能先 ping 以获取 IP)

    这是一个临时解决方案,但可能会工作很长时间。

    【讨论】:

    • 这也是我最终做的。你的ip用了多久?
    • 感谢您的提醒——我的“临时解决方案”仍在实时代码中。幸运的是,IP 地址仍然是相同的,保持这种状态可能是安全的。
    • 我将网络设置配置为使用 Google 的 DNS 服务器 (8.8.8.8,8.8.4.4),它返回 IPv4 地址,而不是 ISP 的 smtp.gmail.com 的 IPv6。那行得通。所以,我的解决方案是“切换到不同的 dns 服务器”。
    【解决方案3】:
    $mailer->Host = 'ssl://smtp.gmail.com:465';
    

    【讨论】:

    • 如果您的服务器不支持 ipv6 通信,则此方法有效。您可以通过 telnet smtp.gmail.com 587 进行检查 如果它给您提供的不是 220,请执行上述操作以通过 ipv4 连接到 SMTP 服务器。
    【解决方案4】:

    “无法连接到 SMTP 主机”表示您没有从源服务器到目标服务器的连接,在本例中为 smtp.gmail.com。

    可能的原因是

    • 防火墙阻止
    • 不允许 PHP 进行此类连接

    如果您可以在端口 465 上连接到 smtp.gmail.com(从托管您的 PHP 代码的服务器),请使用例如 telnet 进行测试。

    另外,我假设你有enabled required extensions

    【讨论】:

      【解决方案5】:

      遇到类似错误,必须在 gmail 帐户中打开“访问不太安全的应用程序”功能。

      您可以在帐户设置中找到它。

      【讨论】:

        【解决方案6】:

        检查这些东西

        1. 检查 php.ini 行 extension=php_openssl.dll
        2. 关闭防火墙。它可能会阻止 ssl 连接。

        【讨论】:

          【解决方案7】:

          检查 php.ini 行 extension=php_openssl.dll 并关闭防火墙。它可能会阻止 ssl 连接。

          【讨论】:

            【解决方案8】:

            从 whm 禁用 SMTP 限制并尝试

            【讨论】:

            • 你能详细说明一下吗?
            猜你喜欢
            • 2018-09-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-07-03
            相关资源
            最近更新 更多