SMTP Connect()失败。消息未发送.Mailer错误:SMTP Connect()失败

时间:2013-08-28 19:29:23

标签: php email smtp

我尝试将邮件发送到gmail地址,但它一直收到此错误“SMTP - >错误:无法连接到服务器:连接超时(110)SMTP连接()失败。邮件未发送.Mailer错误: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.';
            }

16 个答案:

答案 0 :(得分:54)

删除或注释掉该行 -

$mail->IsSMTP();

它会对你有用。

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

答案 1 :(得分:9)

你必须安装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

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

答案 2 :(得分:4)

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

+ $mail->SMTPSecure = 'tls';

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

答案 3 :(得分:4)

你在Localhost上运行吗?并且您是否编辑了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。

Goodluck;)

答案 4 :(得分:3)

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

答案 5 :(得分:3)

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

答案 6 :(得分:2)

以下是处理PHPMailer时应该考虑的一个列表:

  1. 通过在PHP.ini
  2. 中取消注释extension=php_openssl.dll来启用openSSL
  3. 使用$mail->SMTPSecure = 'tls';$mail->Port = 587;
  4. 如果您在其他地方出错,例如错误的用户名和密码等,请启用调试。

答案 7 :(得分:2)

我知道自从这个问题已经有一段时间了,但我遇到了确切的问题并通过在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"

答案 8 :(得分:1)

你做得很好。只需要检查不同的SMTP端口,如465和其他可在您的系统上运行的端口。 另外要记住允许通过Google帐户访问less secure apps,否则会引发同样的错误 我已经度过了整整一天,我唯一错误的是端口号,我只是更改了端口号。它有效。

答案 9 :(得分:0)

要让它正常运行,我必须转到myaccount.google.com - > "连接的应用程序&网站",并转向"允许安全性较低的应用"到" ON" (靠近页面底部)。

答案 10 :(得分:0)

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

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

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

答案 11 :(得分:0)

Mailjet

SMTP设置

  

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

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

  • 在Debug中,它为我工作:$mail->Port = 25;
  • 在Release中,它为我工作:$mail->Port = 587;

GL

答案 12 :(得分: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 中使用 localhost/yourfile.php

可能无法正常工作

答案 13 :(得分:-2)

解决方案是配置gmail偏好设置,访问无安全应用程序

答案 14 :(得分:-3)

最近谷歌推出了一款名为App Password的产品。通过为我的邮件程序实例创建应用程序密码解决了我的问题。

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

答案 15 :(得分:-4)

当我评论行$ mail-&gt; IsSMTP();

时,它也帮助了我

虽然不确定如何。