php phpmailer共享托管替代默认DNS服务器



我有DNS问题在新的CPANEL共享托管计划上与register365.com。

我的代码多年来一直在与同一提供商的较旧的共享托管计划上工作。它在测试Windows IIS系统和与另一个提供商共享的托管计划上正常工作。因此,问题是register365.com

独有的

我在300秒后遇到连接错误:连接失败。错误#2:stream_socket_client((:php_network_getaddresses:getAddrinfo失败:名称分辨率的临时故障

phpmailer中的标准故障排除信息使我感到怀疑DNS。所以我联系了提供商register365.com,这告诉我:

感谢您与我们联系DNS。

首先,我们的名称服务器是非递归的,因此他们只会返回托管在它们上的域的结果,因此,如果您尝试在我们的名字服务器上查询smtp.office365.com,则不会因为它与我们托管而无法使用。因此,如果您的phpmail脚本正在查询我们的服务器以找到此地址,它将无法正常工作,并且会带回您看到的错误。

您将需要设置PHP脚本来查询一般DN,例如Google,这将解决该问题。

不幸的是,在这种情况下,我们无能为力解决这个问题。

首先,他们的回应有意义吗?如果是这样,我该如何进行?因此,我希望能够强迫phpmailer使用Saes,Google的8.8.8.8 DNS服务器试图解析SMTP.Office365.com进行初始连接,或者以某种方式强制PHP本身更改其默认的DNS服务器。我不想将IP地址对$邮递的主机字段进行用硬代码,因为Microsoft可能会随着时间的推移而更改它们。

我正在寻找有关如何进行的建议。(您可以说"使用其他托管提供商","但对于各种财务!(

(
<!DOCTYPE html>
<html>
<html lang="en">
<meta charset="utf-8" />
<title>Test Office365 in  Microsoft from Register365.com</title>
<link rel="stylesheet" href="/styles/trekkersfluid.css" type ="text/css" />
</head>
<body class="blank">
<?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    require('../PHPMailer/PHPMailerAutoload.php');
    $mail = new PHPMailer;
    $mail->LE = "rn";
    $mail->CharSet = 'UTF-8';
    $mail->SMTPDebug = 4;                                   
    $mail->Debugoutput = 'html';
    $mail->isSMTP();
    $mail->Host = "smtp.office365.com";                         // Specify main Office 365 SMTP server
    $mail->SMTPAuth = true;                                 // Enable SMTP authentication
    $mail->Username = 'trekkersend@trekkers.ie';            // SMTP username
    $mail->Password = 'mypassword';                          // SMTP password 
    $mail->SMTPSecure = 'tls';                              // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                      // TCP port to connect to. TLS = 587 SSL = 465
    
    //Set the FROM address
    $FromName = "Joe Murray";
    $mail->setFrom("trekkersend@trekkers.ie"); 
    $mail->addReplyTo("rubbish@jma.ie", "Rubbish Name");
    $mail->addAddress("joseph@jma.ie", "Joseph Murray");
    
    $mail->WordWrap = 70;                                 // Set word wrap to 70 characters
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = "Testing Microsoft Exchange Online Service";
    $mail->Body    = "This is a test";
        
    if(!$mail->send()) {
        echo '<p class="error_msg">Message could not be sent.</p>';
        echo '<p class="error_msg">Mailer Error: ' . $mail->ErrorInfo."</p>";
        exit();
    } else {
        echo '<p class="green">'."Email sent</p>";
    }
     
    ?>

要验证提供商的语句,您可以尝试解决smtp.office365.com以外的其他名称,例如google.com。然后,您将确定您的提供商的DNS服务器是否真的是非收回的。不过,我必须说,对我来说,您的网络主机正在运行的物理或虚拟机对我来说听起来很奇怪,而不是配置为使用实际上是有用的DNS服务器。


作为解决方法,我建议使用Google的公共DNS-over-HTTP API查询其DNS服务器(8.8.8.8和8.8.4.4(:

https://dns.google.com/resolve?name=smtp.office365.com

,但具有讽刺意味的是,您在这里面临着同样的问题,那就是您无法解决dns.google.com


目前我唯一可以看到的其他解决方案是通过TCP或UDP直接查询公共DNS服务器(例如8.8.8.8(。

如果您的寄养者提供对外壳的访问,则可以使用nslookup之类的工具(有关详细信息,请参见此SU问题(。

如果您无法访问外壳,那么这个问题可能会很有帮助,以便使用PHP。

解决名称。

最新更新