我有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。