2017-04-14 3 views
1

Ich habe DNS-Probleme mit PHPMailer Zugriff auf smtp.office365.com auf einem neuen cPanel Shared Hosting-Plan mit register365.com.php PHPMailer shared Hosting überschreiben Standard DNS-Server

Mein Code hat seit Jahren auf einem älteren Shared-Hosting-Plan mit dem gleichen Anbieter gearbeitet. Und es funktioniert gut auf einem Test Windows IIS-System und einem Shared-Hosting-Plan mit einem anderen Anbieter. Also das Problem ist einzigartig für register365.com

Ich bekomme einen Verbindungsfehler nach 300 Sekunden: Verbindung fehlgeschlagen. Fehler # 2: stream_socket_client(): php_network_getaddresses: getaddrinfo fehlgeschlagen: Temporärer Fehler in der Namensauflösung

Die Standard-Troubleshooter-Info in PHPMailer führte mich zu DNS verdächtigen. Also kontaktierte ich den Anbieter register365.com und das sagte mir:

Vielen Dank für Ihren Kontakt mit uns über DNS.

Erstens sind unsere Nameserver nicht rekursiv, so dass sie nur Ergebnisse für Domains liefern, die auf ihnen gehostet werden. Wenn Sie also smtp.office365.com auf unseren Nameservern abfragen, funktioniert das nicht, da es nicht bei uns gehostet wird. Wenn also Ihr phpmail-Skript unsere Server abfragt, um diese Adresse zu finden, funktioniert es nicht und bringt den Fehler zurück, den Sie sehen.

Sie müssen Ihr PHP-Skript einstellen, um einen allgemeinen DNS wie Google zu fragen, und das wird das Problem lösen.

Leider können wir in dieser Situation nichts tun, um das Problem zu lösen.

Erstens macht ihre Antwort Sinn? Wenn ja, wie kann ich fortfahren? Also, ich möchte in der Lage sein, PHPMailer zu zwingen, sagen Sie sagen, Google 8.8.8.8 DNS-Server, wenn es versucht, smtp.office365.com für die erste Verbindung zu lösen ODER irgendwie zwingen PHP selbst seine Standard-DNS-Server zu ändern. Ich möchte eine IP-Adresse nicht fest in das Feld $ mail-> Host schreiben, da Microsoft sie wahrscheinlich im Laufe der Zeit ändern wird.

Ich bin auf der Suche nach Rat für das weitere Vorgehen. (Sie sagen kann „einen anderen Hosting-Provider verwenden“, sondern für verschiedene Finanz Ich kann nicht!)

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

    } 

    ?> 

Antwort

1

Ihres Providers Aussage zu bestätigen, könnten Sie versuchen, andere Namen als smtp.office365.com Lösung, z.B. google.com. Dann werden Sie sicher wissen, ob der DNS-Server Ihres Providers wirklich rekursiv ist. Ich muss jedoch sagen, dass es sehr seltsam für mich klingt, dass die physische oder virtuelle Maschine, auf der Ihr Webhost ausgeführt wird, nicht für die Verwendung eines DNS-Servers konfiguriert ist, der tatsächlich nützlich ist.


Als Abhilfe können, würde ich Googles öffentlichen DNS-over-HTTP-API empfehlen die Verwendung von DNS-Server abzufragen (8.8.8.8 und 8.8.4.4):

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

Aber ironisch, Sie stehen vor dem gleichen Problem, das Sie dns.google.com nicht lösen können.


Die einzige andere Lösung, die ich im Moment sehen kann, ist direkt einen öffentlichen DNS-Server (wie 8.8.8.8) über TCP oder UDP abzufragen.

Wenn Ihr Hoster Zugriff auf eine Shell bietet, können Sie ein Tool wie nslookup verwenden (Details siehe this SU question). Wenn Sie keinen Zugriff auf eine Shell haben, kann this SO question hilfreich sein, um Namen mit PHP aufzulösen.