【问题标题】:PHP mail is sending to local e-mail serverPHP 邮件正在发送到本地电子邮件服务器
【发布时间】:2016-05-23 14:22:28
【问题描述】:

我刚刚发布了我的一位客户的网站,但在让联系表正常工作方面遇到了问题。

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

联系表单应该将所有电子邮件发送到服务器 B 上的 info@domainname.com。但是,电子邮件不会发送到服务器 B 上的外部电子邮件箱,而是发送到服务器 A 上的本地电子邮箱。

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

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

【问题讨论】:

  • 好吧,可能还有其他原因,例如,域名是在本地绑定中创建的,或者任何 dns 解析器(如果您有自己的 dns 服务托管)或者有一些电子邮件帐户在server A 上创建,它与相同的名称匹配。解决方案是删除server A 上对域和/或电子邮件帐户的任何引用。我不认为一个简单的虚拟主机会导致问题
  • 我在托管服务中遇到了这个确切的问题。为我的域配置了本地 DNS 服务器,但我在其他地方托管 DNS。只有当支持人员从他们的 DNS 中手动删除我的域时,它才得到解决。
  • 其实我只是注意到 DirectAdmin 有一个功能可以取消选中本地电子邮件服务器并更改使用的 MX 记录。也许这样就可以了,听起来是这样。

标签: php email dns


【解决方案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('joe@example.net', '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('to@domain.com',' 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>');




?>

【讨论】:

  • 我刚刚通过更改服务器 A 上的 MX 记录让它工作。不过,我肯定会对此进行研究。就垃圾邮件过滤器而言,这显然是一种更好的方法。非常感谢!
  • 如果 DNS 记录被弄乱了,除非您找到第三方电子邮件提供商,否则此解决方案将根本不起作用——“切换到 SMTP”是一个最令人困惑的建议。
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2017-06-30
  • 2011-01-22
  • 2017-05-19
  • 2017-01-30
  • 2012-02-12
  • 2014-09-04
相关资源
最近更新 更多