PHP邮件正在发送到本地电子邮件服务器

时间:2016-05-23 14:22:28

标签: php email dns

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

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

联系表格应该将所有电子邮件发送到服务器B的info@domainname.com。但是,这些电子邮件不会被发送到服务器B的外部电子邮箱,但是他们会在服务器B上发送电子邮件。重新发送到服务器A上的本地电子邮箱。

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

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

1 个答案:

答案 0 :(得分:1)

我建议SMTP是要走的路,我发现无论如何在垃圾邮件过滤器等方面都能得到更好的结果。

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

我已经构建了一个辅助函数,以便我更容易实现它

**功能 - 文件名:smtp.function **

android -v

在PHP中调用

<?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';
            }



}


?>