PHP邮件正在发送到本地电子邮件服务器
我刚刚发布了我的一位客户的网站,但是在正常使用联系表单时遇到问题。PHP邮件正在发送到本地电子邮件服务器
他们的网站托管在服务器A上(使用DirectAdmin)。 他们的电子邮件托管在外部公司('服务器B')使用其DNS中的其他MX条目。
联系表格应该发送所有电子邮件到服务器B的[email protected]。但是,电子邮件并没有被发送到服务器B的外部电子邮箱,但他们是发送到服务器A上的本地电子邮箱。
看起来服务器/ PHP认为电子邮件是本地邮件,因为电子邮件域与DirectAdmin中的域匹配,对吧?
有什么办法可以避免这种情况?就像使未来的PHP电子邮件知道电子邮件不是本地的一样?或者是使用SMTP的唯一选择?
我建议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>');
?>
我刚刚通过更改服务器A上的MX记录来实现它。 但是我肯定会研究这一点。对于垃圾邮件过滤器来说,这显然是一个更好的方法。非常感谢! – Jason
如果DNS记录搞砸了,这个解决方案根本无法工作,除非你找到第三方电子邮件提供商 - “切换到SMTP”是一个最令人困惑的建议。 –
好,可能有其他原因,例如,在本地绑定或任何DNS解析器(这个,如果你有自己的DNS服务托管)或创建域名在'服务器A'上创建了一些电子邮件帐户,该帐户的名称相同。解决办法是,将“服务器A”上的任何引用移除到域和/或电子邮件帐户。我不认为一个简单的网络主机可能会导致问题 – rsz
我有一个托管服务的确切问题。本地DNS服务器是为我的域配置的,但我在其他地方托管DNS。它只有在支持手动从他们的DNS中删除我的域时才得到解决。 –
其实我只注意到DirectAdmin有一个函数可以取消选中本地电子邮件服务器并更改使用的MX记录。也许这样做会奏效,听起来就像是这样。 – Jason