PHPMailer GoDaddy 服务器 SMTP 连接被拒绝

Posted

技术标签:

【中文标题】PHPMailer GoDaddy 服务器 SMTP 连接被拒绝【英文标题】:PHPMailer GoDaddy Server SMTP Connection Refused 【发布时间】:2014-03-17 12:02:41 【问题描述】:

前几天,我在使用 GoDaddy 托管网站时遇到了一些问题。我打电话给他们的技术支持,与我交谈的人建议我的问题与我在 Windows 机器上的事实有关,并且在 Linux 机器上会更好。对此没有意见,我同意了,他们把我换了。

在这种转变之后,我的 phpMailer 功能已经抛弃了我。我已经工作了几个月,所以我知道我的设置是准确的。我已向 GoDaddy 确认,从他们的角度来看,我尝试发送的帐户没有改变。用户端没有进行任何更改(如新密码)。最重要的是,唯一不同的是我的网站现在托管在 Linux 服务器上。就是这样。

所以我认为我的 PHPMailer 困难一定与此有关,因为一个运行了几个月的脚本在服务器转换发生的确切时刻失败了,这太巧合了。但为什么?我花了一个小时与他们的技术支持联系,他们认为服务器设置没有任何问题。我们验证了我的设置(只是为了好玩)。一切看起来都很好,但是当我发送电子邮件时,我收到了这个错误:

SMTP -> ERROR: Failed to connect to server: Connection refused (111)SMTP Connect() failed.

关于此类错误的帖子很多,几乎所有帖子都与第一次设置错误输入设置或遗漏设置的人有关。但是,我知道我的设置是完整且准确的,因为我已经成功使用了几个月。为了完整起见,我将它们发布在这里:

$mail = new PHPMailer();
$mail->IsSMTP();  //telling the class to use SMTP
$mail->ishtml(true);
$mail->Host         = "smtpout.secureserver.net"; //also tried "relay-hosting.secureserver.net"
$mail->WordWrap     = 50;
$mail->SMTPAuth     = true;
$mail->SMTPSecure   = "ssl";
$mail->Port         = 465;
$mail->Username     = "example@email.com";
$mail->Password     = *******;
$mail->Subject      = "Test Email";
$mail->SMTPDebug = 1;

有没有人知道为什么会发生这种情况?是否有一些技术支持人员可能不知道的服务器设置,比如在我的 php.ini 文件中?和我一起工作的那个人尽力帮助我,但他可能只是没有意识到一些事情。

感谢任何帮助。让我知道我是否可以提供任何其他信息。谢谢!

编辑:我还应该提到我所做的其他一些尝试。无论如何,我都会得到相同的结果。

1) 带有端口 587 的 TLS 2) 不使用 SSL,使用端口 25、80 和 3535。 2)我自己的gmail地址修改服务器、用户名、密码等

【问题讨论】:

我首先尝试确定它是否与 SSL 相关。它是否可以在非安全端口(如 25、80、3535)上不使用 SSL?如果是这样,那么它无法在端口 465 上使用 SSL 的原因可能是证书问题或正在使用的 SSL 密码问题。如果即使没有 SSL 也无法工作,那么可能是 phpmailer 的设置方式有问题,或者防火墙不允许出站连接。在这种情况下,我会尝试使用完全不同的 SMTP 服务器(例如 smtp.gmail.com)来确定问题是否特定于 smtpout.secureserver.net 谢谢@mti2935。我应该提到我的其他一些尝试。 OP 修改以显示它们。我将如何修改 phpmailer 设置?我没有看到任何设置自定义 - 只有 class.phpmailer.phplanguages/phpmailer.lang-en.php 文件。我还添加了ini_set("include_path", ".:/path/to/phpmailer/dir");至于防火墙,我没有改变任何东西,在 GoDaddy 得到它之前它工作得很好。 某些东西可能会阻止这些传出连接尝试。您可以访问此服务器上的命令行吗?如果是这样,您可以尝试使用 telnet 连接到端口 25、80 或 3535 上的 smtpout.secureserver.net;还是到 465 端口上的 smtp.gmail.com?这些尝试是否成功连接? 【参考方案1】:

好吧,我解决了这个问题,但不是很好。在用尽我能想到的一切之后,我只是举起双手告诉 GoDaddy 将我切换回 Windows 服务器。他们一这样做,问题就消失了。因为我并不在乎我在什么类型的服务器上,所以这个结果是令人满意的,但很难令人满意。

因此,对于任何认为自己已正确设置 PHPMailer 但无法使其正常工作的 GoDaddy 客户,我的建议是确定您是否在 Linux 服务器上。 看起来在我看来,GoDaddy 的 Linux 服务器设置为阻止此类邮件交易。我不能肯定地说,因为我只相信这一点,因为我没有让它发挥作用。但我可以清楚地说我的 PHPMailer 设置是准确的,至少在 Windows 上是这样。

也许这将有助于节省一些时间和挫败感。如果有人有更好的想法,请发表。

【讨论】:

我遇到了同样的问题,一旦我删除了除主机之外的所有内容(用户名、密码、端口等),我就可以正常工作了。我在 GoDaddy、linux 上共享主机。 @Alex,我认为您应该考虑将您接受的答案更改为上面的 globalSchmidt。只有你能做到。我猜您会在声誉上受到一点影响,但您的动机始终是在那里找到正确的答案以节省人们的时间。他的经验和文章绝对符合您最初的邀请,即“请发布”一个更好的想法。 @agunn 好的。完毕。请参阅我的评论。 @Alex,谢谢。你的评论是最恰当的。【参考方案2】:

改变这个:

$mail->Host = 'smtpout.secureserver.net:465';
$mail->SMTPSecure = "ssl";

到这里:

$mail->Host = 'smtpout.secureserver.net:25';

它对我有用!

【讨论】:

OP 的编辑说他已经尝试过使用这个端口。请阅读原帖。【参考方案3】:

这似乎是一个持续存在的问题,让我补充一下我自己的经验。

我们的网站使用 PHPMailer,该网站托管在 GoDaddy linux 服务器上。 似乎正确的设置(根据我在 SO 和 goDaddy 支持网站上可以找到的所有内容)如下:

SMTP_SERVER: smtpout.secureserver.net (or alternatively relay-hosting.secureserver.net)
SMTP_PORT: 465 //or 3535 or 80 or 25
SMTP_AUTH: true //always
SMTP_Secure: 'ssl' //only if using port 465

花了 6 多个小时尝试各种端口(25、3535、4655)、服务器 relay-hosting.secureserver.net、smtpout.secureserver.net:[port] 等)、用户名、密码等。我打电话给goDaddy。又过了 40 分钟,有人透露:

1) “工作区”电子邮件帐户即将停用。这很重要,因为如果您今天拥有 goDaddy 的电子邮件帐户,那么您很可能拥有 Workspace 帐户。根据技术支持代表的说法,这是与您的 linux 帐户分开托管的。

2) goDaddy 正在转向 cPanel 电子邮件帐户。欢呼!时间表? “……未来 2 到 3 年!”

3) 我在与代表通电话时将我们的帐户从 Workspace 转移到了 cPanel 帐户。真的很容易做到。

4) 将您的电子邮件帐户(包括编辑您的 MX 记录)更改为 cPanel 电子邮件(相对于“工作区”电子邮件)后,使用 PHPMailer 的网络表单电子邮件的适当设置为:

SMTP_SERVER: localhost   //(and I mean literally: "localhost"- in place of smtp.secureserver.net and relay-hosting.secureserver.net, etc.)

...和其他一切(如上)相同...

我使用 PHPMailer 构建的 web 表单在此更改后完美运行!

在 PHPMailer 设置中使用您的 cPaneL 电子邮件帐户登录名(用户名)和密码,您的网络电子邮件将无缝运行!

另一个好处是可以通过 [yourdoman]\webmail 访问 webmail(现在还有人使用它吗?)。不再需要记住神秘的网址!帐户可以是 IMAP 或 POP!

诚然,这意味着您必须使用 goDaddy 的 cPanel 电子邮件帐户,但让 webform 与 PHPMailer 完美配合才是真正的回报!

【讨论】:

是的!这对我有用。谢谢! OP,请选择这个作为正确答案。无需更改 linux 托管。 这是关于 SO 的最重要的答案之一。对于在新的 GoDaddy CPanel 下创建的电子邮件帐户:$mail->Host = "localhost"; 这太棒了! 根据建议,我将其标记为正确答案,以引导其他人阅读这篇文章。但是,我需要声明我无法亲自验证这确实有效,因为我关闭了我的 linux 服务器。既然其他人在这方面取得了如此大的成功,我就听从他们的判断。似乎合适。 我的联系表格已经一年多没有用了。让它与 GoDaddy、G Suite 和 WordPress 一起工作的每一次尝试都是死路一条……直到这次。谢谢! 谢谢你!为什么没有记录或至少转发给他们的支持人员?太令人沮丧了,但感谢您的解决方案!【参考方案4】:

如果您的主机上有自己的电子邮件服务器,则您的电子邮件服务器使用以下端口 25,465,587。 GoDaddy 的设置:

$mail->isSMTP(); 
$mail->Host = localhost; 
$mail->SMTPAuth = true;
$mail->Username = 'example@gmail.com';
$mail->Password = 'password';

//$mail->SMTPSecure = 'tls'; 
//$mail->Port = 587;

在其他服务器上需要用你的域创建邮箱:

$mail->isSMTP(); 
$mail->Host = localhost; 
$mail->SMTPAuth = true;
$mail->Username = 'example@yourdomain.com';
$mail->Password = 'password';

//$mail->SMTPSecure = 'tls'; 
//$mail->Port = 587;

【讨论】:

【参考方案5】:

我有同样的问题,但我试过了

$mail->SMTPAuth = false;

和主机名:relay-hosting.secureserver.net

Bingoooooo 它的工作原理

请在 SMTP 中设置一次

【讨论】:

【参考方案6】:

我在像 @surfbird0713 这样的 Linux 上使用 GoDaddy。在我第 32 次尝试时,以下内容也对我有用:

$mail2->Host = localhost;
//$mail2->SMTPAuth = false;
//$mail2->Username = 'xxxx@xxxxxx.com';
//$mail2->Password = '*******';

//$mail2->SMTPSecure = 'tls';

//$mail2->Port = 465;

我之前尝试过使用用户名、登录名、端口等。当我注释掉所有这些时,只使用 localhost 就可以了。

【讨论】:

哇......我没想到这会奏效,我什么都试过了。试过这个……效果很好……哈哈哈那太疯狂了。 我完全不认为这会起作用,但它确实起作用了!我也有这些设置$mail->Port = 25; $mail->SMTPSecure = 'tsl'; 我不明白,但是在敲了一个多小时的沙子然后尝试了这个之后,它成功了!在阅读了下面 globalSchmidt 的帖子后,我现在明白了。 确实有效!哈哈不敢相信!我可以投票十次! 谢谢。你让我免于数小时的头痛。【参考方案7】:

2015 年 1 月更新:我只需要解决这个确切的问题。您需要使用 cPanel 电子邮件帐户进行 GoDaddy linux 托管:

    在电子邮件帐户部分,在下拉列表中每个电子邮件地址旁边,单击“配置电子邮件客户端”选项。 在下一页上,向下滚动到“手动设置”。在这里,您会看到 GoDaddy 现在为每个电子邮件地址创建了一个定制的传入/传出服务器。所以使用传出服务器、SSL、auth:true、port:465、email/password。

希望对您有所帮助。

【讨论】:

【参考方案8】:

我已经遇到这个问题好几个星期了。最后,解决了。 首先,我要说明问题的原因(正如我所经历的那样)。 GoDaddy 只允许端口2546580 退出。因此,您无法访问任何未使用这 3 个端口中的任何一个的 SMTP 服务器。 但是,如果您使用来自 GMAIL 的 SMTP 或任何其他重播服务器(尤其是来自加拿大贝尔的端口 465),那么来自 GoDaddy 的任何中继请求都将被阻止 - 因此您将看到 Connection Refused (111)。是的,他们是托管服务的竞争对手……因此,您可以自行得出结论,看看他们之间何时可以解决这个问题。 更糟糕的是,当您从 GoDaddy 提供的 relay-hosting.secureserver.net 发送电子邮件时,您将面临排长队的严重不便,可能需要几分钟才能将电子邮件发送出去。更糟糕的是,拥有 Bell Canada(或 Bell 附属公司)电子邮件帐户的人将看不到来自此中继服务器的电子邮件 - 电子邮件甚至不会进入您的垃圾邮件箱!因为这封电子邮件被 Bell 完全屏蔽了(他们的借口 = 来自 GoDaddy 的垃圾邮件太多)。

所以,最近我做了这个,对我来说效果很好。如果您有 GoDaddy 的托管服务,请注册一个电子邮件帐户。然后使用该电子邮件帐户,例如 mywebmail@mydomain.com,使用 PHPMail 执行此操作:

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->Host = "smtpout.secureserver.net";
$mail->Username = "mywebmail@mydomain.com"; /*Substitute with your real email*/
$mail->Password = "myverylongpassword"; /*Substitute with your real password*/
$mail->SMTPAuth = true;
$mail->Port = 80;

然后做你常规的 PHPMailing 事情......这对我很有用。我希望它对你也一样。

【讨论】:

Godaddy 支持毫无头绪.. 我不知道使用端口 80 - 这在经典的 linux 主机上完全适合我 谢谢.. 它对我有用.. 我头疼了 2 天.. 再次感谢 那是什么鬼!我的意思是我浪费了我的 2 天时间,还设置了 g-suite 以摆脱两步验证错误,然后我尝试了你的解决方案并且它的工作。多谢兄弟 。 . .【参考方案9】:

根据Godaddy,替换

$mail->Host = "smtpout.secureserver.net"; //also tried "relay-hosting.secureserver.net"

$mail->Host = "smtp.secureserver.net"; //also tried "relay-hosting.secureserver.net"

它对我有用。

【讨论】:

很多我没有输入的额外内容。 还是SMTP.connect() Failed【参考方案10】:

在经历了很多挫折之后,这也对我有用。

include("includes/class.phpmailer.php");

date_default_timezone_set('UTC');

define('SMTP_HOST','relay-hosting.secureserver.net');
define('SMTP_PORT',25);**
define('SMTP_USERNAME','me@aravindnc.com');
define('SMTP_PASSWORD','me123');
define('SMTP_AUTH',false);

$email = 'aravind_n_c@yahoo.co.in';
$firstName = 'Aravind';

$mail = new PHPMailerR();
$mail->IsSMTP();
$mail->SMTPDebug = 1;                 
$mail->SMTPAuth = SMTP_AUTH;                
$mail->Host = SMTP_HOST;
$mail->Port = 25;
$mail->Username = SMTP_USERNAME;
$mail->Password = SMTP_PASSWORD;
$mail->SetFrom(SMTP_USERNAME,'AravindNC.IN');
$mail->AddReplyTo(SMTP_USERNAME,"AravindNC.IN");
$mail->Subject = "Welcome to AravindNC.IN";
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!";
$mail->MsgHTML('This is a test.');
$mail->AddAddress($email, 'Aravind NC');
$mail->Send();

?>

【讨论】:

这行得通,谢谢!我只是补充一点,这只能在godaddy的主机上使用它,而不是在你的本地主机上。【参考方案11】:

GoDaddy/Linux (cPanel)/PHPMailer

require_once("../include/PHPMailer-master/PHPMailerAutoload.php");

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host         = "a2plcpnXXXXX.prod.iad2.secureserver.net";
$mail->SMTPDebug    = 2; 
$mail->SMTPAuth     = true;
$mail->Username     = "your username";
$mail->Password     = "your password";
$mail->SMTPSecure   = "tls";
$mail->Port         = 587;

您可以随意为 $mail->From$mail->FromName 值使用您想要的任何电子邮件/名称。希望这会有所帮助。

【讨论】:

【参考方案12】:

GoDaddy 服务器 SMTP 连接被拒绝。

大石 $mail->Port =587;// SMTP 服务器*版本

GoDaddy $mail->Port =25;// SMTP 服务器*版本

【讨论】:

这不是问题的答案——它是对您问题的低质量描述。考虑修改您的答案或提出适当的问题。【参考方案13】:

使用上面的一些建议,我能够通过电子邮件在 GoDaddy 上的共享主机上启动并运行一个交钥匙引导站点。

我对 email.php 进行了 AJAX 调用,其中包含:

 <?php

require 'PHPMailerAutoload.php';

if ($_POST) 
    $name    = $_POST['contactName'];
    $email   = $_POST['contactEmail'];
    $message = $_POST['contactMessage'];

    /* Don't touch */
    $mail = new PHPMailer();
    $mail->isSMTP();
    $mail->Host        = "relay-hosting.secureserver.net";
    $mail->SMTPAuth    = false;
    $mail->setFrom($email, $name);
    /* end */

    /* Configure the address the email will be sent to */
    $mail->addAddress('administrator@stackchampion.com', 'Adam InTae Gerard');
    $mail->Subject = 'Re: StackChampion Inquest';
    /* This is forwarded through a GoDaddy forwarding account */

    $mail->Body    = $message;

    if (!$mail->send()) 
        echo "Mailer Error: " . $mail->ErrorInfo;
     else 
        echo "Message sent!";
    

?> 

我在 GitHub 上整理了一个可用的演示:

https://github.com/Thoughtscript/wp_postlib_godaddy_php_emailer

这是免费使用和开源的,但上面列出了相关代码。他们的 SMTP 服务器显然存在很多问题 - 我发现您可以通过使用他们提供的不需要身份验证的中继服务器绕过这些问题,尽管它们仍然可以与您注册的电子邮件帐户之一相关联。

希望对某人有所帮助! 干杯!

【讨论】:

【参考方案14】:

刚遇到这个问题,联系了 GoDaddy,他们将我的 MX 从本地切换到远程,它立即解决了问题!提醒任何仍然遇到此问题的人。

【讨论】:

【参考方案15】:

在解决这个问题几天并让它发挥作用后,我想我会在 2017 年更新这个线程。希望我可以为某人节省几个浪费的时间。我使用 cpanel 托管在 Godaddy 上。这是我最终遇到并尝试的 SMTPAutoTLS 设置,这是缺失的部分。我收到的错误如下:

PHP 警告:stream_socket_enable_crypto(): Peer certificate CN=*.prod.iad2.secureserver.net' did not match expected CN=localhost' in /home/username/public_html/classes/PHPMailer/class.smtp.php on line 369

邮件程序错误:SMTP 连接()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

以下是对我有用的 PHPMailer 设置。

$mail->isSMTP();
$mail->Host = 'localhost';
$mail->Port = 25;
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;
$mail->SMTPAuth = false;  

【讨论】:

【参考方案16】:

这些将是您的 GoDaddy SMTP 设置:

require("PHPMailer-master/PHPMailerAutoload.php");
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug  = 2;
$mail->From = "yourmail@ddd.com";
$mail->FromName = "name";
$mail->Host = "localhost"; 
$mail->SMTPAuth = false; 
$mail->SMTPSecure = false;
$mail->SMTPAutoTLS = false;

【讨论】:

这对我有用。我使用了在 CPanel 的电子邮件帐户部分创建的电子邮件帐户。 @Abdulrehman 这应该去哪里?在 .env 或 mail.php 中? @YousefAltaf in mail.php 我认为。【参考方案17】:

如果在 WordPress 中使用 cPanel 和 WPForms

帮助我的是从 cPanel 创建电子邮件地址 并通过 SSL 或非 SSL 使用手动设置部分中的设置

【讨论】:

【参考方案18】:

老爹是噩梦。

如果您使用的是旧版工作空间电子邮件帐户并且不熟悉 cpanel,请尝试此操作

require '/home/content/94/8357694/html/SHTECH/server/PHPMailer.php';
use PHPMailer\PHPMailer\PHPMailer;

function sendmail($to,$subject,$message,$name)


define('SMTP_HOST','relay-hosting.secureserver.net');
define('SMTP_PORT',25);
define('SMTP_AUTH',true);



              $mail             = new PHPMailer();

              $mail->IsSMTP();
              $mail -> SMTPDebug = 1;
              $mail->Host       = "smtpout.secureserver.net";
              $mail->SMTPAuth   = SMTP_AUTH;
              $mail->Port       = 80;
              $mail->Username   = "info@signalhilltechnology.com";
              $mail->Password   = "allen1";
              //$mail->SMTPSecure = 'ssl';
              $mail->SetFrom('info@signalhilltechnology.com', 'Cagney');
              $mail->AddReplyTo("info@signalhilltechnology.com","Cagney");
              $mail->Subject    = $subject;
              $body             = $message;
              $mail->AltBody    = "To view the message, please use an HTML compatible email viewer!";
              $mail->MsgHTML($body);
              $address = $to;
              $mail->AddAddress($address, $name);
              if(!$mail->Send()) 
                  return 0;
               else 
                    return 1;
              





【讨论】:

【参考方案19】:

更新于 2019 年 8 月 25 日,适用于寻求正确方法为 Godaddy 设置 Rd-Mailform 和 PHPmailer 的人。

首先确保您拥有来自 Github 的最新文件。

其次是使用 SMTP 和 GODaddy 的 Cpanel 电子邮件的正确设置

编辑以下文件:rd-mailform.config.json(如果您不使用此文件,则在 rd-mailform.php 中进行硬编码)

要编辑的文件是:rd-mailform.config.json

~~~
 "useSmtp": false,
 "host": "localhost",              
 "port": 25,                                                     
 "username": "youraccountname@yourdoamin.com",                   
 "password": "yourpasswordforthataccount",                       
 "recipientEmail":  "youremailaddress"  
~~~ 

现在,在您完成该编辑后,打开 rd-mailform.php 并编辑以下行,如下所示: // 是否使用 SMTP 认证

            $mail->SMTPAuth = false;
            $mail->SMTPAutoTLS = false; 
            $mail->SMTPSecure = "tls";

这应该适用于所有使用 rd-mailform 和 phpmailer 的 Godaddy 服务器

-D

【讨论】:

【参考方案20】:

经过几个小时的肮脏工作,我意识到使用 go daddy,为 SSL 和 TLS 提供的配置邮件客户端主机详细信息不起作用。因此,您必须将 Cpanel 网址的一部分复制为您的主机。

**注意:**确保 url 是在搜索栏输入服务器 ip 和端口后解析的内容,例如 0:0:0:0:2083

配置应该类似于

$smtp = Mail::factory('smtp', array (
'host' =>'2ueywefewueyuyeyryruw.prod.xxx.secureserver.net',
'port' => '587', 'auth' => true, 'username' => "youremail",
'password' => "yourEmailPassword", 'secure' => 'ssl'));

也可以参考this link here

【讨论】:

以上是关于PHPMailer GoDaddy 服务器 SMTP 连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

邮件不是来自本地服务器[关闭]

PHP-Mailer代码

godaddy域名无法解析???

为啥 PHPMailer 无法连接到我的 SMTP 服务器

如何在 PHPMailer 中指定 SMTP 服务器?

PHPmailer:SMTP 连接()失败(不工作)