Ole Media
Ole Media

Reputation: 1642

php mail function not getting the emails

ok, so I put together a very basic mail function and while testing this, I used a couple of email accounts, one my google account and the other my work account. I get all emails at the google account, but not to those pointing at my work. I'm thinking that could be because they have been caught up with the anti-spam software. Any ideas on how can I develop the mail function to avoid being caught on with spam software?

Here is a copy of my mail function

$to      = '[email protected]';
$subject = 'The subject';
$message = 'Hello,'."\n";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers  = 'From: [email protected]' . "\r\n" .
'CC: [email protected]' . "\r\n";

$mail_sent = mail($to, $subject, $message, $headers);
if($mail_sent) {
    header("location:newlocation.php");
}
}

Upvotes: 0

Views: 741

Answers (6)

Ole Media
Ole Media

Reputation: 1642

and thank you very much for all your suggestions. I found the answer on this post

How to change envelope from address using PHP mail?

It worked.

L.

Upvotes: 0

mauris
mauris

Reputation: 43619

you probably need to format your headers and content properly. boundaries are missing.

Here's one simple function with HTML formatting mail:

<?php
function html_mail($i){
  $to = $i['to'];
  $to_name = $i['to-name'];
  $subject = $i['subject'];
  $html_message = $i['message'];
  $from = $i['from'];
  $from_name = $i['from-name'];
  $reply_to = $i['reply-to'];
  $reply_to_name = $i['reply-to-name'];

  if(!$to || !validate::email($to)){return false;}

  $email_message = '';
  $email_subject =  $subject;$email_txt = $html_message;
  $semi_rand = md5(time());
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
  $email_to = ($to_name ? $to_name.'<'.$to.'>':$to);

  $headers = "From: ".($from_name!='' ? $from_name.'<'.$from.'>':$from)."\n";
  if($reply_to){
    $headers .= "Reply-To: ".($reply_to_name ? $reply_to_name.'<'.$reply_to.'>':$reply_to)."\n";
  }
  $headers .= "MIME-Version: 1.0\n" . 
              "Content-Type: multipart/mixed;" . 
              " boundary=\"{$mime_boundary}\""; 
  $email_message .= "This is a multi-part message in MIME format.\n\n";

  $email_message .= "--{$mime_boundary}\n";
  $email_message .= "Content-Type: text/html; charset=utf-8\n";
  $email_message .= "Content-Transfer-Encoding: 8bit\n\n";
  $email_message .= $email_txt;
  $email_message .= "\n\n";

  $email_message .= "--{$mime_boundary}\n";
  $email_message .= "Content-Type: text/plain; charset=utf-8\n";
  $email_message .= "Content-Transfer-Encoding: 8bit\n\n";
  $email_message .= trim(strip_tags(str_replace(array('<br/>','<br />','<br/>'),"\r\n",$email_txt)));
  $email_message .= "\n\n";

  $email_message .= "--{$mime_boundary}--";
  $ok = @mail($email_to, $email_subject, $email_message, $headers); 

  return $ok;
}
?>

when you have a properly formatted mail, you probably will be able to by pass the filters.

Upvotes: 1

krdluzni
krdluzni

Reputation: 797

Adding a valid 'from' header would be the first thing to do, I think.

Upvotes: 0

zombat
zombat

Reputation: 94167

Spam determination is entirely determined by the software that's running the spam heuristics. You would have to look into the anti-spam software that your company uses and see why it's being caught as spam. More often than not it has to do with your mail server set up. A key factor that a lot of software uses is a valid reverse DNS entry, so you could look into that.

You have to realize that if there was an easy way around anti-spam software catching your email as spam just by modifying a few headers, then anti-spam software would be entirely useless, since the spammers would know those methods as well.

Upvotes: 0

zacharydanger
zacharydanger

Reputation: 514

A lot of times this has less to do with PHP's mail() function and much more to do with the configuration of your mail transport agent. A lot of mail servers will bounce messages they assume are from spammers (i.e. unconfigured/misconfigured senders) before they even get passed to a spam filter.

If you check your MTA's logs you'll probably find some bounce messages the likes of, "Mail from this server not allowed, see blacklist info at [insert url].

Upvotes: 2

Wade
Wade

Reputation: 512

Spam filters use a lot of different methods to determine if the mail coming in is actually spam or not.

Here are a few things that I would suggest:

  • Descriptive subject line
  • Descriptive message, careful with HTML and other rich content inside the body as sometimes spam filters will pick up on it as an "advertisement".
  • Full complete headers with realistic information in there as much as possible.

Try experimenting with different combination's and see if you can get one through to your work. The good thing is that your google account got the e-mail so you know its not an server side issue locally.

Upvotes: 1

Related Questions