Search code examples
zend-frameworkwebserversendmailpostfix-mtazend-mail

Zend_Mail error 500 > postfix/sendmail fatal: -n option not supported


I'm working on a Zend project in a very specific server configuration, our production environment is made of two dedicated servers, one for the company's email which host a postfix server and an other server for our web-application which is running on Apache2/Zend.

Those servers have two different IPs, but works on the same website domain.

Now when i try to send an email with an email from the mail server as a sender, i get an error 500 from Zend_Mail and the email.err log tells me :

postfix/sendmail[15782]: fatal: -n option not supported

But when i put a local adresse or a blank email as a sender it works, so i guess i get kicked out by the postfix of the webserver because it doesn't manage localy those emails.

So my question is: is there any way to use a domain email as sender from a distant server without merging the two servers?

Edit: i forgot to add: i can't use the distant server SMTP, i only can use a local sendmail.


Solution

  • I haven't find any solution or explanations so i ended up by writing a custom action helper based on the mail command of PHP.

    I hope it can help someone:

    class Zend_Controller_Action_SentEmail extends Zend_Controller_Action_Helper_Abstract{
    
        public function sendEmail($from, array $to, $subject, $message){
    
            //Header set
            $headers  = 'MIME-Version: 1.0' . "\r\n";
            $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
            $headers .= "From: ".$from."<[email protected]>\r\n";
            $headers .= "X-Mailer: PHP/".phpversion();
    
    
            //To
            $stringTo = "";
    
            foreach($to as $k => $v) {
                    $stringTo .= $k." <".$v.">, ";
            }
    
            $stringTo = trim($stringTo, ", ");
    
    
            //Send the email
            if(mail($stringTo, $subject, $message, $headers, "-f [email protected]")){
                return true;
            }
            else{
                //Oh! Noes!
                return false;
            }
        } 
    }