Sending email using Zend Framework and PHP

24,096

Solution 1

I recommend you use Zend_Mail instead of mail(). It handles a lot of stuff automatically and just works great.

Do you have a SMTP server? Trying to send mail without your own SMTP server could be causing the mail to not be sent.

This is what I use for sending mails using Zend_Mail and Gmail:

In Bootstrap.php, I configure a default mail transport:

protected function _initMail()
{
    try {
        $config = array(
            'auth' => 'login',
            'username' => '[email protected]',
            'password' => 'password',
            'ssl' => 'tls',
            'port' => 587
        );

        $mailTransport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config);
        Zend_Mail::setDefaultTransport($mailTransport);
    } catch (Zend_Exception $e){
        //Do something with exception
    }
}

Then to send an email I use the following code:

//Prepare email
$mail = new Zend_Mail();
$mail->addTo($email);
$mail->setSubject($subject);
$mail->setBody($message);
$mail->setFrom('[email protected]', 'User Name');

//Send it!
$sent = true;
try {
    $mail->send();
} catch (Exception $e){
    $sent = false;
}

//Do stuff (display error message, log it, redirect user, etc)
if($sent){
    //Mail was sent successfully.
} else {
    //Mail failed to send.
}

Solution 2

There's a very useful screencast covering Zend_Mail available on ZendCasts http://www.zendcasts.com/introduction-to-zend_mail/2010/02/

Solution 3

In line $mail->setBody($message);, change it to $mail->setBodyText($message);

Solution 4

First of all i would switch to using Zend_Mail. Second i would use a real mail account on an smtp server somewhere and send from that. A lot of times there are restrictions on sending from the server itself, but using an actual mail server usually fixes this.

Share:
24,096
Ryan
Author by

Ryan

Updated on July 09, 2022

Comments

  • Ryan
    Ryan almost 2 years

    I working on a form whereby when the user enter in their email account and click on send, an email will be sent to their email account.

    I have everything worked out. Just that it doesnt send the email to my account. Anyone have any ideas? Is there a configuration that I left out or something?

    This is the sample from my controller:

    public function retrieveemailAction(){
    
        $users = new Users();
        $email = $_POST['email'];                
        $view = Zend_Registry::get('view'); 
    
        if($users->checkEmail($_POST['email'])) {
    
            // The Subject
            $subject = "Email Test";
    
            // The message
            $message = "this is a test";            
    
            // Send email
            // Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.
            // Use if command to display email message status
            if(mail($email, $subject, $message, $headers)) {
                $view->operation = 'true';
            }            
        } else {
             $view->operation = 'false';
        }
    
        $view->render('retrieve.tpl');
    }