2017-04-14 14 views
1

私は、PHP36a.comで新しいcPanel共有ホスティングプランでsmtp.office365.comにアクセスしているPHPMailerを実行しているDNSに問題があります。php PHPMailer共有ホスティングがデフォルトのDNSサーバをオーバーライド

私のコードは、同じプロバイダーの古い共有ホスティングプランで長年働いています。また、テスト用のWindows IISシステムと、別のプロバイダとの共有ホスティングプランで正常に動作します。したがって、問題はregister365.com固有のものです

300秒後に接続エラーが発生します。 接続に失敗しました。エラー番号2:stream_socket_client():php_network_getaddresses:getaddrinfo failed:名前解決の一時的な失敗

PHPMailerの標準的なトラブルシューティング情報により、DNSが疑われました。だから私はプロバイダのregister365.comに連絡して、それは私に言った:

私たちとDNSについて知っていただきありがとうございます。

まず、私たちのネームサーバーは再帰的なものではないため、ホストされているドメインの結果のみを返すので、ネームサーバーでsmtp.office365.comを試してみると、これはホストされていないため動作しません。だからあなたのphpmailスクリプトがこのアドレスを見つけるために私たちのサーバに問い合わせているのであれば、それはうまく動作せず、見ているエラーを返すでしょう。

Googleのような一般的なDNSにクエリするようにPHPスクリプトを設定する必要があります。これにより問題が解決されます。

残念ながら、問題を解決するためにこの状況で行うことはできません。

まず、レスポンスは意味がありますか? どうすればいいですか? それで、私はPHPMailerに、最初の接続のためにsmtp.office365.comを解決しようとすると、Googleの8.8.8.8 DNSサーバを使用するように強制するか、あるいは何とかPHP自身がデフォルトのDNSサーバを変更するよう強制します。私は、おそらくマイクロソフトが時間の経過とともにそれらを変更するので、$ mail-> HostフィールドにIPアドレスをハードコードしたくない。

私は進め方について助言を求めています。 (あなたが「別のホスティングプロバイダを使用する」と言うが、様々な金融、私はできないためにも!)

<!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>"; 

    } 

    ?> 

答えて

1

プロバイダの声明を検証するために、あなたは、例えば、smtp.office365.com以外の名前の解決を試みることができますgoogle.com。次に、プロバイダのDNSサーバが本当に非再帰的であるかどうかを確認します。私はあなたのウェブホストが稼働している物理マシンまたは仮想マシンが、実際にはという便利なDNSサーバーを使用するように構成されていないことを私には非常に奇妙に聞こえると言わなければなりません。回避策として


、私は彼らのDNSサーバー(8.8.8.8と8.8.4.4)照会するGoogleのパブリックDNS-over-HTTPのAPIを使用することをお勧めします:、

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

しかし、皮肉なことにここでも同じ問題に直面しています。つまり、dns.google.comを解決できません。


私が今見ることのできる唯一の解決策は、TCPまたはUDP経由でパブリックDNSサーバー(8.8.8.8など)に直接問い合わせることです。

ホストにシェルへのアクセス権がある場合は、nslookupのようなツールを使用できます(詳細はthis SU questionを参照)。

シェルにアクセスできない場合は、this SO questionがPHPで名前を解決するために役立つことがあります。

関連する問題