My first inclination would be to check your headers. I know you don't need a To: header since that is taken care of by the mail() function, you are also missing some common headers that may help Google's and other mail server's SMTP server let you pass by. Below is an example of what I use for header and I've never had a problem.
[PHP]$to = "to@domain.com";
$from_name = "John Doe";
$from_email = "jdoe@domain.com";
$subject = "Subject";
$body = "Body";
$headers .= "From: $from_name <$from_email>\n";
$headers .= "X-Sender: <no-reply@yourdomain.com>\n";
$headers .= "X-Mailer: PHP\n"; //mailer
$headers .= "X-Priority: 3\n"; //1 UrgentMessage, 3 Normal
$headers .= "Return-Path: <$from_email>\n";
mail($to, $subject, $body, $headers);[/PHP]
If those don't work, check to see if your web server (the one that is invoking the mail() function, or alternatively the SMTP server it eventually uses to send the mail) are listed on these sites (note most of the time it's by IP address):
CBL -
http://cbl.abuseat.org/
SBL/XBL -
http://www.spamhaus.org/
Those are the two most common sites that spam filtering software will use to blacklist IPs from known spammers. If your server's IP is listed, you can try sending them a request to have it removed, and if that doens't work contact your server administrator and ask them to resolve it by a) putting pressure on the above sites to remove it, or b) putting you on a different IP.