我刚刚发布了我的一位客户的网站,但我遇到了让联系表格正常运作的问题。
他们的网站托管在服务器A上(使用DirectAdmin)。 他们的电子邮件使用其DNS中的其他MX条目托管在外部公司('服务器B')。
联系表格应该将所有电子邮件发送到服务器B的info@domainname.com。但是,这些电子邮件不会被发送到服务器B的外部电子邮箱,但是他们会在服务器B上发送电子邮件。重新发送到服务器A上的本地电子邮箱。
看起来服务器/ PHP认为电子邮件是本地的,因为电子邮件域与DirectAdmin中的域匹配,对吗?
有什么方法可以避免这种情况吗?就像让PHP电子邮件的未来知道电子邮件不是本地邮件一样?或者是使用SMTP的唯一选择?
答案 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';
}
}
?>