我有一个DNS问题运行PHPMailer访问smtp.office365.com在一个新的cPanel共享主机计划register365.com。php PHPMailer共享主机覆盖默认DNS服务器
我的代码已经在同一提供程序的旧共享主机计划上工作了多年。它可以在测试的Windows IIS系统和另一个提供商的共享托管计划中正常工作。所以这个问题是唯一的register365.com
我在300秒后出现连接错误: 连接失败。错误#2:stream_socket_client():php_network_getaddresses:getaddrinfo失败:名称解析中的临时失败
PHPMailer中的标准疑难解答信息导致我怀疑DNS。所以我联系了提供商register365.com,并告诉我:
感谢您与我们联系有关DNS。
首先,我们的域名服务器是非递归的,所以他们只会返回托管在他们的域名的结果,所以如果您尝试在我们的域名服务器上查询smtp.office365.com,这将无法正常工作,因为它不与我们托管。所以如果你的phpmail脚本查询我们的服务器来找到这个地址,它不会工作,并会带回你看到的错误。
您将需要设置您的PHP脚本来查询一般的DNS,例如Google,这将解决问题。
不幸的是,在这种情况下我们无能为力来解决这个问题。
首先,他们的反应是否有意义? 如果有,我该怎么办? 因此,我希望能够强制PHPMailer在尝试解析smtp.office365.com进行初始连接时使用Google的8.8.8.8 DNS服务器,或者以某种方式强制PHP本身更改其默认DNS服务器。我不想将IP地址硬编码到$ mail-> Host字段中,因为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 = "\r\n";
$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 = '[email protected]'; // 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("[email protected]");
$mail->addReplyTo("[email protected]", "Rubbish Name");
$mail->addAddress("[email protected]", "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>";
}
?>