28

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

        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.';
            }
4

15 回答 15

82

删除或注释掉该行-

$mail->IsSMTP();

它会为你工作。

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

于 2015-08-10T12:51:24.933 回答
10

您必须已经安装了 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启用“不太安全的访问应用程序”选项

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

于 2014-10-08T02:03:54.600 回答
4

你在本地主机上运行吗?你有编辑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。

祝你好运 ;)

于 2014-01-11T04:03:01.947 回答
4

您没有 SMTPSecure 设置来定义正在使用的身份验证类型,并且您正在使用不必要的 'ssl://' 运行主机设置(PS - ssl 在端口 465 上,如果您需要运行它ssl 相反,请参阅此处接受的答案。这是添加/更改的行:

+ $mail->SMTPSecure = 'tls';

- $mail->Host = "ssl://smtp.gmail.com";
+ $mail->Host = "smtp.gmail.com";
于 2013-08-29T20:58:30.197 回答
3

我知道这个问题已经有一段时间了,但我遇到了确切的问题并通过禁用 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"
于 2016-01-23T20:32:13.007 回答
3

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

于 2016-07-16T12:59:02.917 回答
3

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

于 2016-12-27T22:07:34.397 回答
2

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

  1. 通过在 PHP.ini 中取消注释extension=php_openssl.dll来启用 openSSL
  2. 使用$mail->SMTPSecure = 'tls';$mail->Port = 587;
  3. 如果您在其他地方出错,例如不正确的用户名和密码等,请启用调试。
于 2015-05-14T07:02:34.667 回答
1

邮递

SMTP 设置

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

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

  • 在调试中它对我有用:$mail->Port = 25;
  • 在 Release 它对我有用:$mail->Port = 587;

总帐

于 2018-12-19T02:13:50.743 回答
1

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

于 2017-03-07T13:59:07.127 回答
0

如果它适用于您的本地主机但不适用于您的网络主机:

一些托管站点会阻止某些出站 SMTP 端口。按照接受的答案注释掉该行$mail->IsSMTP();可能会使其工作,但它只是禁用您的 SMTP 配置,并使用托管站点的电子邮件配置。

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

于 2018-04-06T22:06:14.737 回答
0
        <?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,可能无法正常工作

于 2021-03-17T16:56:49.063 回答
0

为了让它工作,我必须去 myaccount.google.com ->“连接的应用程序和网站”,然后将“允许不太安全的应用程序”设置为“开启”(靠近页面底部)。

于 2017-08-01T09:19:21.607 回答
-2

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

于 2016-06-06T03:12:25.053 回答
-3

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

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

于 2017-02-16T15:01:51.237 回答