在GoDaddy Linux共享主机上使用PHP尝试通过GMAIL SMTP发送邮件

9
我尝试了StackOverflow和其他网站上发布的每一个脚本/代码/方法,但都没有成功。我使用GoDaddy进行托管。我设置了Google App账户,并设置了所有需要的MX记录(使用GoDaddy工具完成),甚至尝试从我的站点的GMAIL界面以及通过一台Unix机器上的终端SMTP发送了一些电子邮件,它们都可以正常工作。
然而,当我尝试使用PHP时,它不起作用!这是GoDaddy阻止了它吗?
我总是收到以下信息:
SMTP->ERROR: Failed to connect to server: Connection refused (111) SMTP Error: Could not connect to SMTP host. Mailer Error: SMTP Error: Could not connect to SMTP host.
这是我使用PHPMailer的代码:
<html>
    <head>
        <title>PHPMailer - SMTP (Gmail) advanced test</title>
    </head>
    <body>
    <?php
    require_once('../class.phpmailer.php');
    //include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

    $mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch

    $mail->IsSMTP(); // telling the class to use SMTP

    try {
        $mail->Host       = "smtp.gmail.com"; // SMTP server
        $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
        $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   = "MYFROMADDRESSHERE";  // GMAIL username
        $mail->Password   = "MYFROMPASSWORDHERE";            // GMAIL password
        $mail->AddReplyTo('MYFROMADDRESSHERE', 'Sender Name');
        $mail->AddAddress('TESTTOADDRESSHERE', 'Recipient Name');
        $mail->SetFrom('MYFROMADDRESSHERE', 'Sender Name');
        $mail->AddReplyTo('MYFROMADDRESSHERE', 'Sender Name');
        $mail->Subject = 'PHPMailer Test Subject via mail(), advanced';
        $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; // optional - MsgHTML will create an alternate automatically
        $mail->MsgHTML(file_get_contents('contents.html'));
        $mail->AddAttachment('images/phpmailer.gif');      // attachment
        $mail->AddAttachment('images/phpmailer_mini.gif'); // attachment
        $mail->Send();
        echo "Message Sent OK</p>\n";
    } catch (phpmailerException $e) {
        echo $e->errorMessage(); //Pretty error messages from PHPMailer
    } catch (Exception $e) {
        echo $e->getMessage(); //Boring error messages from anything else!
    }
    ?>
</html>

谢谢!


测试的简单方法,如果您有 shell 访问权限:登录到服务器,然后尝试执行“telnet smtp.gmail.com 465”命令。您无法完成 SSL 步骤,但如果存在防火墙问题,则也会在此处收到“连接被拒绝”的响应。如果它连接后挂起以等待输入,则不是防火墙的问题,而是与您的代码相关的其他问题。 - Marc B
我在这个服务器上没有启用SHELL,并且需要48小时才能激活它;需要在几个小时内解决这个问题。还有其他建议吗? - JoHa
11个回答

25

如之前所讨论的那样,GoDaddy已知会阻止SSL SMTP传输协议以强制其用户使用他们自己的发件服务器。

这只是GoDaddy作为一家公司、注册商和网络主机的可怕表现中冰山一角。建议尽快远离他们。


这是否意味着我要换一个托管服务商,还是就这样无法解决了?GoDaddy的邮件速度非常慢!而且,如果GMAIL使用SSL被屏蔽了,还有其他可用的服务吗?我不在乎是不是GMAIL,只要在我发送的邮件中显示“@mydomain.com”,并且不会被用户放进垃圾邮件文件夹(尽管我为我的域名添加了SPF记录,但是GoDaddy默认的发件人仍然把邮件发送到我的用户的垃圾邮件文件夹)。 - JoHa
1
这意味着你应该找一个好的、信誉良好的主机。虽然有其他的邮件服务可用,但我不知道有哪一个适合你。(我喜欢亚马逊SES,但是使用它发送邮件需要修改代码,因为不能使用SMTP。) - Charles
8
刚通过GoDaddy的客户支持确认了这件事,服务很差。 - JoHa
可以做到这一点。请看下面我的答案。 - ecairol

7
我遇到了同样的问题,在浏览了不同的网站后,我找到了这个并且它真的有效! GoDaddy 允许使用Gmail作为SMTP发送电子邮件,只需要放弃smtp.gmail.com并使用他们的主机即可。这是我的设置:
$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = "relay-hosting.secureserver.net";
$mail->Username = "your-account@gmail.com";
$mail->Password = "yourpassword";
// ...
// send from, send to, body, etc...

参考(请查看前两篇帖子)http://support.godaddy.com/groups/web-hosting/forum/topic/phpmailer-with-godaddy-smtp-email-server-script-working/


8
使用它们的SMTP服务器,定义上就不是使用Gmail的SMTP服务器。以您的Gmail地址(或Google Apps地址)发送电子邮件可能会出现严重的垃圾邮件问题,因为它们的服务器 并没有 获得SPF或DKIM认证以发送您的Gmail用户帐户。 - Charles
非常感谢 @ecairol,您的回答帮助我使用 Swift Mailer 解决了问题。 - Selvin Ortiz
1
我在使用WordPress时,确认了与GoDaddy的问题。我使用了WP-Mail-SMTP并设置了以下内容:“发件人电子邮件地址”,“发件人姓名”,“通过SMTP发送所有WordPress电子邮件”,“设置退回路径以匹配发件人电子邮件地址”,“SMTP主机:relay-hosting.secureserver.net”,“SMTP端口:25”,“无加密”,“无SMTP身份验证”。 - Mike Averto
你并不是直接联系Gmail,而是使用Godaddy的电子邮件中继服务器。因此,你不需要提供你的Gmail用户名和密码。 - undefined

6
我最终通过在 //$mail->isSMTP(); 行添加注释来解决了这个问题。之后,在Godaddy中我的Gmail帐户开始正常工作了。
require 'PHPMailer/class.phpmailer.php';
require 'PHPMailer/PHPMailerAutoload.php';


$mail = new PHPMailer;


 $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $subject = 'Your subject';

    $body = "From: $name\n E-Mail: $email\n Comments:\n $message";


//$mail->isSMTP();
$mail->Host = 'smtp.gmail.com';
$mail->SMTPAuth = true;
$mail->Username = 'xxxxxxxxxxxx@gmail.com';
$mail->Password = 'xxxxxxxxx';
$mail->SMTPSecure = 'tls';
$mail->Port =587;

4
这不是一种“修复”方法;它通过不使用你的Gmail账户来使你的Gmail账户“工作”。 - Synchro
谢谢,我已经尝试了几天来让phpmailer工作。我不确定这个方法是如何解决的,但它确实有效。 - nomaam
1
今天我在GoDaddy Linux服务器上遇到了这个问题,使用PHPMailer 5.6时出现“无法连接到服务器:连接被拒绝(111)”。尝试了几个其他建议后,这个简单的更改起作用了。我使用G Suite处理我的域名邮件,不使用GoDaddy电子邮件,因此需要使用smtp.gmail.com发送。我不明白为什么它有效,但这仍然是2019年2月这种情况的当前答案。 - BobSnider
这只是我的想法...当启用 $mail->isSMTP() 时,PHPMailer 尝试使用内置于我的本地服务器中的邮件程序。将其注释掉后,就会使用我在脚本中指定的 $mail->Host。这立即解决了我的问题。我无法感谢你们足够了。 - Terry Carter

2

在您的GoDaddy服务器上,将localhost用作主机。使用以下端口:25、465、587。GoDaddy的设置:

答案与此链接相关:PHPMailer GoDaddy服务器SMTP连接被拒绝作者是@Nate Bryam

 $this->mail->Host = 'localhost';  
    //$this->mail->SMTPAuth = true;                               
    //$this->mail->Username = 'xxx@gmail.com';            
    //$this->mail->Password = 'xxx';                      
    //$this->mail->SMTPSecure = 'ssl';                           
    //$this->mail->Port = 465;//25;//587; 

不需要 SMTP 认证,它完美运行!

只有在MX记录中使用GoDaddy邮件设置时才能正常工作(例如,如果您将GSuite MX记录设置为使用外部邮件提供程序,则会静默失败);当它正常工作时,只要您不介意所有发送的邮件都到达用户的垃圾邮件文件夹中,它就是完美的。 - guari
这对我很有效...我不需要任何花哨的东西 - 只需向“联系我们”表单中指定的收件人发送带有消息和主题的电子邮件,然后神奇地,这正是这个程序允许我做的。我没有设置任何MX记录(我认为它们是默认的)。我所做的就是创建一个电子邮件帐户,并将其设置为FROM地址,同时将replyTO设置为用户输入的电子邮件地址。 - Edge D-Vort

1

1

require_once('PHPMailerAutoload.php');

                    $mail = new PHPMailer();
                    $mail->isSMTP();
                    $mail->Host = "relay-hosting.secureserver.net";
                    $mail->Username = 'chandana@gmail.com';
                    $mail->Password = 'fwxnorhqttkxydr';
                    $mail->SetFrom($email);
                    $mail->Subject = 'enquiry from YnRack site';
                    $mail->Body = 'enquiry from YnRack site' . $message . '"From: \"' . $name . $email;
                    $mail->IsHTML(true);
                    $mail->AddAddress('chandana@gmail.com');
                    $mail->Send();

1

非常遗憾,你甚至无法使用像 DYNDNS 这样的出站邮件服务与 GoDaddy 配合,他们仅允许你使用他们的中继服务器。这非常具有限制性。


1
他们唯一的选择是使用该域名并使用其电子邮件服务发送邮件。

0

您可以使用您的Gmail,并让Godaddy在Cpanel中启用远程邮件交换。您必须要求他们这样做,因为您无法在cpanel中访问它。


2
请翻译以下有关编程的内容,从英文到中文。只返回翻译后的文本:您可以使用注释进行建议。 - SagarPPanchal

0

更简单。奇怪的是你需要在注释行“// $mail- > IsSMTP();”上添加代码。是的,好的,它是SMTP,但如果您启用此行,则无法发送邮件。您不需要进行更多配置。只需要使用这个注释行即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接