2016-05-23 9 views
1

Ich habe gerade die Website eines meiner Kunden veröffentlicht, aber es gibt Probleme mit dem Kontaktformular richtig funktionieren.PHP-Mail sendet an lokalen E-Mail-Server

Ihre Website ist auf Server A gehostet (verwendet DirectAdmin). Ihre E-Mail wird bei einer externen Firma ("Server B") gehostet, die andere MX-Einträge in ihrem DNS verwendet.

Das Kontaktformular soll alle E-Mails an Server B an [email protected] senden. Die E-Mails werden jedoch nicht an die externe E-Mail-Box auf Server B gesendet, aber sie sind gesendet an die lokale E-Mail-Box auf Server A.

Sieht aus wie der Server/PHP denkt, dass die E-Mail sowieso lokal ist, weil die E-Mail-Domäne mit der Domäne in DirectAdmin übereinstimmt, richtig?

Kann ich das irgendwie vermeiden? Wie die PHP-E-Mail-Zukunft wissen, dass die E-Mail nicht lokal ist? Oder ist die einzige Option, SMTP zu verwenden?

+0

gut, könnte es andere Gründe, beispielsweise der Domain-Name in dem lokalen binden erstellt oder was auch immer das DNS-Resolver ist (dieser Option, wenn Sie eigene DNS-Dienst haben gehostet) oder Auf dem Server A ist ein E-Mail-Konto angelegt, das den gleichen Namen hat. Die Lösung wäre, alle Verweise auf "Server A" auf die Domänen- und/oder E-Mail-Konten zu entfernen. Ich glaube nicht, dass ein einfacher Webhost Probleme verursachen könnte – rsz

+1

Ich hatte genau dieses Problem mit einem Hosting-Service. Der lokale DNS-Server wurde für meine Domäne konfiguriert, aber ich habe DNS anderswo gehostet. Es wurde nur gelöst, wenn Support meine Domain manuell von ihrem DNS entfernte. –

+0

Eigentlich habe ich gerade bemerkt, dass DirectAdmin eine Funktion hat, lokale E-Mail-Server zu deaktivieren und MX-Records zu ändern. Vielleicht wird das den Job machen, klingt so. – Jason

Antwort

1

Ich würde SMTP vorschlagen, ist der Weg zu gehen, den ich gefunden habe ich mit ihm viel bessere Ergebnisse ohnehin in Bezug auf Spam-Filter usw.

Meine bevorzugte Lösung ist die Verwendung: https://github.com/PHPMailer/PHPMailer

ich habe eine Hilfsfunktion gebaut, um es für mich zu machen einfacher zu implementieren

** Funktion - Dateiname: smtp.function **

<?php 


//SMTP controller FUNCTION for PHPMailer script 
//source of script: https://github.com/PHPMailer/PHPMailer 
require ('PHPMailer-master/PHPMailerAutoload.php'); 

function SMTP 
($to, $subject,$html, $text='') 
{ 

    //UPDATE SETTINGS TO MATCH PROJECT SETTINGS 
    $settings = array('host'=>'XXXXXX','username'=>'XXXXXX','password'=>'XXXXXX','fromEmail'=>'XXXXXX', 'fromName'=>'XXXXXX','replyEmail'=>'XXXXXX', 'replyName'=>'XXXXXX'); 


     $mail = new PHPMailer; 

      //$mail->SMTPDebug = 3;        // Enable verbose debug output 
      $mail->isSMTP();          // Set mailer to use SMTP 
      $mail->Host = $settings['host']; // Specify main and backup SMTP servers 
      $mail->SMTPAuth = true;        // Enable SMTP authentication 
      $mail->Username = $settings['username'];     // SMTP username 
      $mail->Password = $settings['password'];       // SMTP password 
      $mail->SMTPSecure = 'tls';       // Enable TLS encryption, `ssl` also accepted 
      $mail->Port = 587;         // TCP port to connect to 
      $mail->From = $settings['fromEmail']; 
      $mail->FromName = $settings['fromName']; 
      //$mail->addAddress('[email protected]', 'Joe User');  // Add a recipient 
      $mail->addAddress($to);    // Name is optional 
      $mail->addReplyTo($settings['replyEmail'], $settings['replyName']); 
      $mail->isHTML(true);         // Set email format to HTML 
      $mail->Subject = $subject; 
      $mail->Body = $html; 
      $mail->AltBody = $text; 



//WHAT TO DO IF EMAIL SENDS OR NOT 
      if(!$mail->send()) { 
       echo 'Message could not be sent.'; 
       echo 'Mailer Error: ' . $mail->ErrorInfo; 
      } 

      else { 
       echo 'Message has been sent'; 
      } 



} 


?> 

Nennt es in PHP

<?php 
require('smtp.function'); 

SMTP('[email protected]',' This is a test of the SMTP class by Alex','<strong>This test</strong> is <a href="http://www.google.co.uk">HTML CODE</a>'); 




?> 
+0

Ich habe es gerade funktioniert, indem ich die MX-Datensätze auf Server A geändert habe. Ich werde jedoch definitiv in diesem Punkt schauen. Dies ist natürlich ein viel besserer Weg in Bezug auf Spam-Filter sicher. Danke vielmals! – Jason

+1

Wenn DNS-Einträge durcheinander sind, funktioniert diese Lösung nicht, es sei denn, Sie finden einen E-Mail-Anbieter eines Drittanbieters - "Wechsel zu SMTP" ist ein sehr verwirrender Hinweis. –

Verwandte Themen