Home » Php » phpmailer – sending email via php mail function goes to spam

phpmailer – sending email via php mail function goes to spam

Posted by: admin April 23, 2020 Leave a comment


I am facing problem in sending mail to my inbox (gmail account) but everytime it goes to spam folder.
Here is the code snippet

     //$ticketDetail is array which contain required information to send.
       sendOwnershipEmail('[email protected]', $ticketDetail);

       function sendOwnershipEmail($email, $ticketDetail) {
            $param = new stdClass();

$param->content = "<div>
    <div><img src='".$ticketDetail[0]['image_path']."'/></div><br/>
    <div>Ticket with ticket number ".$ticketDetail[0]['ticket_number']." has been requested for tranfer from <div/>
    <div>".$ticketDetail[0]['oldDepartment']." to ".$ticketDetail[0]['newDepartment']." Department <div/>

            $param->sendTo = $email;
            $param->subject = "Request for Department transfer";


    function sendMailFunction($param) {
            $to = $param->sendTo;
            $subject = $param->subject;
            $headers = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headers .= 'From: [email protected]' . "\r\n";
            $message = "<html><head>" .
                   "<meta http-equiv='Content-Language' content='en-us'>" .
                   "<meta http-equiv='Content-Type' content='text/html; charset=windows-1252'>" .
                   "</head><body>" .$param->content.        
          mail($to, $subject, $message, $headers);

And I have tried a lot like setting headers as Reply-To, Return-Path etc but every time it goes to spam.
Can u please figure out whats the problem?

How to&Answers:

The problem is simple that the PHP-Mail function is not using a well configured SMTP Server.

Nowadays Email-Clients and Servers perform massive checks on the emails sending server, like Reverse-DNS-Lookups, Graylisting and whatevs. All this tests will fail with the php mail() function. If you are using a dynamic ip, its even worse.

Use the PHPMailer-Class and configure it to use smtp-auth along with a well configured, dedicated SMTP Server (either a local one, or a remote one) and your problems are gone.



Try changing your headers to this:

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: [email protected]" . "\r\n" .
"Reply-To: [email protected]" . "\r\n" .
"X-Mailer: PHP/" . phpversion();

For a few reasons.

  • One of which is the need of a Reply-To and,

  • The use of apostrophes instead of double-quotes. Those two things in my experience with forms, is usually what triggers a message ending up in the Spam box.

You could also try changing the $from to:

$from = "[email protected]";


See these links I found on the subject https://stackoverflow.com/a/9988544/1415724 and https://stackoverflow.com/a/16717647/1415724 and https://stackoverflow.com/a/9899837/1415724

https://stackoverflow.com/a/5944155/1415724 and https://stackoverflow.com/a/6532320/1415724

  • Try using the SMTP server of your ISP.

    Using this apparently worked for many: X-MSMail-Priority: High


“My host helped me to enable DomainKeys and SPF Records on my domain and now when I send a test message to my Hotmail address it doesn’t end up in Junk.
It was actually really easy to enable these settings in cPanel under Email Authentication. I can’t believe I never saw that before.
It only works with sending through SMTP using phpmailer by the way. Any other way it still is marked as spam.”

PHPmailer sending mail to spam in hotmail. how to fix


If you are sending this through your own mail server you might need to add a “Sender” header which will contain an email address of from your own domain. Gmail will probably be spamming the email because the FROM address is a gmail address but has not been sent from their own server.


What we usually do with e-mail, preventing spam-folders as the end destination, is using either Gmail as the smtp server or Mandrill as the smtp server.


One thing that I have observed is likely the email address you’re providing is not a valid email address at the domain. like [email protected] The email should be existing at Google Domain. I had alot of issues before figuring that out myself… Hope it helps.


Be careful with your tests. If you in your form you put the same email as the email address which must receive it will be directly in spam 🙂