I'm using the phpmailer class to send emails. Currently gmail and yahoo do not mark emails as spam, but hotmail always does. How can I prevent this? My code is below.
require_once('../PHPMailer/class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "mail.example.com"; // specify main and backup server
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = "xxx"; // SMTP username -- CHANGE --
$mail->Password = "xxx"; // SMTP password -- CHANGE --
$mail->Port = "25"; // SMTP Port
$mail->From = "[email protected]"; //From Address -- CHANGE --
$mail->FromName = "xxx"; //From Name -- CHANGE --
$mail->AddAddress($email, $passerusername); //To Address -- CHANGE --
$mail->AddReplyTo("[email protected]", "xxx"); //Reply-To Address -- CHANGE --
$mail->WordWrap = 50; // set word wrap to 50 characters
$mail->IsHTML(false); // set email format to HTML
$mail->Subject = "AuthSMTP Test";
$mail->Body = "AuthSMTP Test Message!";
if(!$mail->Send())
{
echo "Message could not be sent. <p>";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
echo "Message has been sent";
This involves setting a few mail headers to beat the filters.
I have added the following to the very start of php mailers CreateHeader method...
$result = '';
$result .= $this->HeaderLine("Organization" , SITE);
$result .= $this->HeaderLine("Content-Transfer-encoding" , "8bit");
$result .= $this->HeaderLine("Message-ID" , "<".md5(uniqid(time()))."@{$_SERVER['SERVER_NAME']}>");
$result .= $this->HeaderLine("X-MSmail-Priority" , "Normal");
$result .= $this->HeaderLine("X-Mailer" , "Microsoft Office Outlook, Build 11.0.5510");
$result .= $this->HeaderLine("X-MimeOLE" , "Produced By Microsoft MimeOLE V6.00.2800.1441");
$result .= $this->HeaderLine("X-Sender" , $this->Sender);
$result .= $this->HeaderLine("X-AntiAbuse" , "This is a solicited email for - ".SITE." mailing list.");
$result .= $this->HeaderLine("X-AntiAbuse" , "Servername - {$_SERVER['SERVER_NAME']}");
$result .= $this->HeaderLine("X-AntiAbuse" , $this->Sender);
that was done some time ago - I haven't revisited for about a year I think! Try it and come back if you still have problems.