SMTP Connect() 失败。邮件未发送。邮件程序错误:SMTP Connect() 失败

Posted

技术标签:

【中文标题】SMTP Connect() 失败。邮件未发送。邮件程序错误:SMTP Connect() 失败【英文标题】:SMTP Connect() failed. Message was not sent.Mailer error: SMTP Connect() failed 【发布时间】:2013-09-01 01:02:03 【问题描述】:

我正在尝试向 gmail 地址发送邮件,但它不断收到此错误“SMTP -> 错误:无法连接到服务器:连接超时 (110)SMTP Connect() 失败。邮件未发送。邮件程序错误: SMTP Connect() 失败。”可能是什么问题?

        require 'class.phpmailer.php'; // path to the PHPMailer class
        require 'class.smtp.php';

            $mail = new PHPMailer();


            $mail->IsSMTP();  // telling the class to use SMTP
            $mail->SMTPDebug = 2;
            $mail->Mailer = "smtp";
            $mail->Host = "ssl://smtp.gmail.com";
            $mail->Port = 587;
            $mail->SMTPAuth = true; // turn on SMTP authentication
            $mail->Username = "myemail@gmail.com"; // SMTP username
            $mail->Password = "mypasswword"; // SMTP password 
            $Mail->Priority = 1;

            $mail->AddAddress("myemail@gmail.com","Name");
            $mail->SetFrom($visitor_email, $name);
            $mail->AddReplyTo($visitor_email,$name);

            $mail->Subject  = "Message from  Contact form";
            $mail->Body     = $user_message;
            $mail->WordWrap = 50;  

            if(!$mail->Send()) 
            echo 'Message was not sent.';
            echo 'Mailer error: ' . $mail->ErrorInfo;
             else 
            echo 'Message has been sent.';
            

【问题讨论】:

可能同样的问题 > ***.com/questions/6168882/… ? 或***.com/questions/16048347/… 某些网络主机不允许您连接到外部 smtp 服务器。您可以从localhost 连接吗? @matic : 你是怎么解决这个错误的??我也面临同样的错误 【参考方案1】:
        <?php
    require 'PHPMailer/PHPMailerAutoload.php';
    
    $mail = new PHPMailer();
    
    $mail->SMTPDebug = 0;                               // Enable verbose debug output
    
    
    $mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
    $mail->IsSMTP();
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'mail@gmail.com';                 // SMTP username
    $mail->Password = 'your pass';                           // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to
    $mail->setFrom('mail@gmail.com');
    $mail->addAddress('mail@gmail.com');               // Name is optional
    
    
    $mail->ishtml(true);                                  // Set email format to HTML
    
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    
    if(!$mail->send()) 
        echo 'Message could not be sent.';
        echo 'Mailer Error: ' . $mail->ErrorInfo;
     else 
        echo 'Message has been sent';
    
    
  ?>

当你想测试时,这对我有用 不要使用 IDE 进行测试,因为如果您在本地主机中使用 localhost/yourfile.php 可能无法正常工作

【讨论】:

【参考方案2】:

Mailjet

SMTP 设置

端口:25 或 587(一些提供商阻止端口 25)

我在将应用部署到服务器后更改端口来工作。

在调试中它对我有用:$mail-&gt;Port = 25; 在发布时它对我有用:$mail-&gt;Port = 587;

GL

【讨论】:

【参考方案3】:

如果它在您的本地主机上运行,​​但在您的网络主机上运行:

一些托管网站block certain outbound SMTP ports。如已接受的答案中所述,注释掉 $mail-&gt;IsSMTP(); 行可能会使其工作,但它只是禁用您的 SMTP 配置,并使用托管站点的电子邮件配置。

如果您使用 GoDaddy,则无法使用其他 SMTP 发送邮件。我使用的是 SiteGround,发现他们只允许使用 SSL 加密类型从端口 25 和 465 进行 SMTP 访问,所以我会查找您的主机的文档并从那里开始。

【讨论】:

【参考方案4】:

要使其正常工作,我必须转到 myaccount.google.com ->“连接的应用和网站”,然后将“允许不太安全的应用”设置为“开启”(靠近页面底部)。

【讨论】:

【参考方案5】:

你做得很好。只是您必须检查不同的 SMTP 端口,例如 465 和其他在您的系统上工作的端口。 要记住的另一件事是允许通过 google 帐户访问 less secure apps,否则会引发相同的错误。 我已经经历了一整天,唯一做错的是端口号,我只是更改了端口号。并且有效。

【讨论】:

【参考方案6】:

最近谷歌推出了一个叫做应用密码的东西。通过为我的邮件实例创建一个应用密码,为我解决了这个问题。

https://support.google.com/accounts/answer/185833?p=InvalidSecondFactor&visit_id=1-636228492770322608-2743677043&rd=1

【讨论】:

您能否添加更多细节或提出您认为这是问题的原因?【参考方案7】:

在 myaccount.google.com/security 登录您的 Google 帐户,转到“登录”,然后转到“安全”,滚动到底部,然后启用“允许安全性较低的应用”选项。

【讨论】:

【参考方案8】:

我遇到了这个问题,告诉我从谷歌收到一封电子邮件,告诉我有人试图登录你的帐户是你吗,我回答是,然后它开始工作,所以如果你是这种情况,请查看你的电子邮件并允许服务器

【讨论】:

抱歉我的英语不好,好吧,我说的是我试图使用 phpmailer 发送电子邮件,但我一直收到相同的错误“SMTP -> 错误:无法连接到服务器:连接计时out (110)..." 1 分钟后,谷歌向我发送了一个电子邮件收件箱(与我在 phpmailer 中使用的电子邮件相同),他们说有人试图从不知道的设备访问我的电子邮件,并问我如果是我,我回答是并且问题已解决,其他可能有用的信息在您的 gmail 中使用像 Pa$wword 这样的硬密码 您可以编辑您的原始帖子。你的英语很好,但你的标点符号不行:-)【参考方案9】:

解决方案是配置 gmail 首选项,访问不安全的应用程序

【讨论】:

【参考方案10】:

我知道这个问题已经有一段时间了,但我遇到了确切的问题并通过禁用 csf.conf 上的 SMTP_BLOCK 解决了它(我们使用 CSF 作为防火墙)。

要禁用,只需编辑 csf.conf 并禁用 SMTP_BLOCK,如下所示:

###############################################################################
# SECTION:SMTP Settings
###############################################################################
# Block outgoing SMTP except for root, exim and mailman (forces scripts/users
# to use the exim/sendmail binary instead of sockets access). This replaces the
# protection as WHM > Tweak Settings > SMTP Tweaks
#
# This option uses the iptables ipt_owner/xt_owner module and must be loaded
# for it to work. It may not be available on some VPS platforms
#
# Note: Run /etc/csf/csftest.pl to check whether this option will function on
# this server
# SMTP_BLOCK = "1" --> this will cause phpmailer Connection timed out (110)
SMTP_BLOCK = "0"

【讨论】:

谢谢。原来这是我的 cPanel 安装中的真正罪魁祸首,而不是 WHM 中“SMTP 限制”配置页面上的开关。【参考方案11】:

删除或注释掉该行-

$mail->IsSMTP();

它会为你工作。

我已经检查并尝试了来自不同站点的许多答案,但除了上述解决方案之外没有任何解决方案。

【讨论】:

这对我有用,因为它在本地工作,但不适用于我的主机,我尝试了这个,它出于某种奇怪的原因工作。还是不知道为什么 不知道为什么会这样,但它适用于某些服务器设置。谢谢 这通过不尝试连接到gmail来“解决”无法连接到gmail的问题。它可能只是解决了问题 - 而不是立即收到错误,您很可能稍后会收到反弹,您可能从未听说过,但您的脚本将“成功”。 这对我有用 +10。请接受它作为答案 如果我删除该行,我会收到另一个错误:邮件程序错误:无法实例化邮件功能。【参考方案12】:

以下是您在处理 PHPMailer 时应该查看的列表:

    通过在 PHP.ini 中取消注释 extension=php_openssl.dll 来启用 openSSL 使用$mail-&gt;SMTPSecure = 'tls';$mail-&gt;Port = 587; 如果您在其他地方出错(例如用户名和密码不正确等),请启用调试。

【讨论】:

【参考方案13】:

你必须已经安装了 php_openssl.dll,如果你使用 wampserver 很简单,搜索并应用 PHP 的扩展。

在示例中更改:

    //Set the hostname of the mail server
    $mail->Host = 'smtp.gmail.com';

    //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission 465 ssl
    $mail->Port = 465;

    //Set the encryption system to use - ssl (deprecated) or tls
    $mail->SMTPSecure = 'ssl';

然后您收到一封来自 gmail 的电子邮件,谈到启用“不太安全的访问应用程序”选项 这里https://www.google.com/settings/security/lesssecureapps

我建议你更改密码并不断加密

【讨论】:

谢谢你,这正是我所需要的 非常感谢!您的回答是最有帮助的,不那么令人困惑,而且直截了当!我把头发拉了好几个小时!对我有用的是在这里google.com/settings/u/1/security/lesssecureapps 选择“打开”选项。我正在使用 Mac 和 Xampp。谢谢一百万【参考方案14】:

你在本地主机上运行吗?你有编辑php.ini 吗?

如果还没有,试试这个: 1.打开xampp->php->php.ini 2. 搜索extension=php_openssl.dll 3. 首字母看起来像这样;extension=php_openssl.dll 4.删除';'它看起来像这样extension=php_openssl.dll 5.如果找不到extension=php_openssl.dll,添加此行extension=php_openssl.dll。 6. 然后重启你的 Xampp。

祝你好运;)

【讨论】:

老兄在我的php.init 只有我找到extension=openssl 但不是extension=php_openssl.dll【参考方案15】:

您没有 SMTPSecure 设置来定义正在使用的身份验证类型,并且您正在使用不必要的 'ssl://' 运行主机设置(PS - 如果需要,ssl 位于端口 465 上改为通过 ssl 运行它,请参阅 accepted answer here。这是要添加/更改的行:

+ $mail->SMTPSecure = 'tls';

- $mail->Host = "ssl://smtp.gmail.com";
+ $mail->Host = "smtp.gmail.com";

【讨论】:

仍然无法工作.. 生成的错误是这个“错误:无法连接到服务器:连接超时(110)SMTP Connect()失败。消息未发送。邮件程序错误:SMTP Connect( ) 失败。” 尝试使用您在此之前尝试更改的代码编辑您的原始帖子,这样我们就可以非常清楚地了解它现在的样子?似乎仍然可以在那里修复一些东西...... 我遇到了类似的问题。您需要指定 SMTPSecure 设置。如果您使用 tls,则需要使用 587 端口。如果您使用的是 ssl,则组合为 465。是的,去掉 smtp.gmail.com 前面的 ssl:// Host 设置为tls://smtp.gmail.com 与将Host 设置为smtp.gmail.com 和SMTPSecure 设置为tls 完全相同;它只是同一事物的另一种语法。您也可以附加一个类似:587 的端口来设置Port 属性。

以上是关于SMTP Connect() 失败。邮件未发送。邮件程序错误:SMTP Connect() 失败的主要内容,如果未能解决你的问题,请参考以下文章

发送 AUTH LOGIN 命令失败。错误:无法使用 PHP SMTP 发送电子邮件。您的服务器可能未配置为使用此方法发送邮件

python smtp邮件发送失败怎么办

SMTP:邮件未通过 AWS Glue Python 作业发送

扫描仪通过SMTP中继服务器发送通知邮件失败

Python 邮件发送

MailKit发送邮件