0

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      = 'account@gmail.com';
$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: me@mycompnay.com' . "\r\n" .
'CC: anotherone@mycompany.com' . "\r\n";

$mail_sent = mail($to, $subject, $message, $headers);
if($mail_sent) {
    header("location:newlocation.php");
}
}
Ole Media
  • 1,652
  • 9
  • 25
  • 36
  • Did you check the mail header on the mail you received at your gmail account? Could be that that information could lead you in the correct direction.. – goddva Sep 03 '09 at 20:39

6 Answers6

2

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].

zacharydanger
  • 504
  • 3
  • 18
1

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.

Wade
  • 512
  • 3
  • 10
1

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.

mauris
  • 42,982
  • 15
  • 99
  • 131
0

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.

zombat
  • 92,731
  • 24
  • 156
  • 164
0

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

krdluzni
  • 799
  • 2
  • 9
  • 10
0

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.

Community
  • 1
  • 1
Ole Media
  • 1,652
  • 9
  • 25
  • 36