2016-05-23 159 views
1

我刚刚发布了我的一位客户的网站,但是在正常使用联系表单时遇到问题。PHP邮件正在发送到本地电子邮件服务器

他们的网站托管在服务器A上(使用DirectAdmin)。 他们的电子邮件托管在外部公司('服务器B')使用其DNS中的其他MX条目。

联系表格应该发送所有电子邮件到服务器B的[email protected]。但是,电子邮件并没有被发送到服务器B的外部电子邮箱,但他们是发送到服务器A上的本地电子邮箱。

看起来服务器/ PHP认为电子邮件是本地邮件,因为电子邮件域与DirectAdmin中的域匹配,对吧?

有什么办法可以避免这种情况?就像使未来的PHP电子邮件知道电子邮件不是本地的一样?或者是使用SMTP的唯一选择?

+0

好,可能有其他原因,例如,在本地绑定或任何DNS解析器(这个,如果你有自己的DNS服务托管)或创建域名在'服务器A'上创建了一些电子邮件帐户,该帐户的名称相同。解决办法是,将“服务器A”上的任何引用移除到域和/或电子邮件帐户。我不认为一个简单的网络主机可能会导致问题 – rsz

+1

我有一个托管服务的确切问题。本地DNS服务器是为我的域配置的,但我在其他地方托管DNS。它只有在支持手动从他们的DNS中删除我的域时才得到解决。 –

+0

其实我只注意到DirectAdmin有一个函数可以取消选中本地电子邮件服务器并更改使用的MX记录。也许这样做会奏效,听起来就像是这样。 – Jason

回答

1

我建议SMTP是去,我发现我在垃圾邮件过滤器等方面得到更好的结果与它反正

我首选的方案是使用方法:https://github.com/PHPMailer/PHPMailer

我有内置的辅助功能,使我更容易实现它

**功能 - 文件名: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'; 
      } 



} 


?> 

在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

我刚刚通过更改服务器A上的MX记录来实现它。 但是我肯定会研究这一点。对于垃圾邮件过滤器来说,这显然是一个更好的方法。非常感谢! – Jason

+1

如果DNS记录搞砸了,这个解决方案根本无法工作,除非你找到第三方电子邮件提供商 - “切换到SMTP”是一个最令人困惑的建议。 –