Search code examples
phpemailmultipart-alternative

PHP mail() Multipart/Alternative for HTML & Plain Text Emails


I am using the following code to send out a Multipart/Alternative HTML and Plain Text email. The emails are sending fine content wise, however some of them are getting caught in spam filters. This is the code I am using.

$notice_text = "This is a multi-part message in MIME format.";
$plain_text = "Some Plain Text Here\n\n";
$html_text = '<html><head><title>Sample HTML Email</title></head><body>';
$html_text .= '<p>Some text will go here.</p>';
$html_text .= '<p><img src="http://www.mydomain.com/img/offers.jpg" /></p>';
$html_text .= '<p>Can\'t see the images? <a href="http://www.mydomain.com/print_offer.php?promo=' . $promo_code . '">Click here</a></p>';
$html_text .= '</body></html>';

$semi_rand = md5(time());
$mime_boundary = "==MULTIPART_BOUNDARY_$semi_rand";
$mime_boundary_header = chr(34) . $mime_boundary . chr(34);

$from = "Test Email <[email protected]>";
$subject = "Get Your Offers Here";

$body = "$notice_text

--$mime_boundary
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

$plain_text

--$mime_boundary
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit

$html_text

--$mime_boundary--";

mail($email, $subject, $body,
    "From: " . $from . "\n" .
    "bcc: " . $bcc . "\n" .
    "MIME-Version: 1.0\n" .
    "Content-Type: multipart/alternative;\n" .
    "     boundary=" . $mime_boundary_header);

What is causing it to go into spam filters? When I send the email as a plain text they go through just fine, it is only when I send the HTML email that they are getting caught. Any help would be appreciated. Is there more I can add to the headers to help with spam filter prevention?


Solution

  • Many spam filters use a cumulative scoring system to decide whether an incoming message is spam. Individual "spammy" problems may slide through, but if several of them are present in a particular email, a threshold reached and the message is dumped.

    In your message, I see a few things that may increase your score:

    Subject: "Get Your Offers Here"

    Solution: Try including specific text about the contents of your email and consider including your company name

    and

    From: "Test Email: [email protected]";

    Solution: Use a real email address. Also, make sure the server you are sending email from is configured properly (see SPF)

    and

    Content: Unknown

    Solution: Make sure your content is specific and relevant. Make sure any links point to the domain from which the email originated. Avoid using too many "spammy" keywords ("offer," "free," "l@@k", etc.).

    You can perform a smell test on your own emails. Remove all references to your company and products and enter generic terms. Consider the result to see if you would delete the message if it arrived in your mail box.