2010-02-17 17 views
6

Estoy trabajando en un formulario por el cual cuando el usuario ingrese su cuenta de correo electrónico y haga clic en enviar, se enviará un correo electrónico a su cuenta de correo electrónico.Enviando correo electrónico usando Zend Framework y PHP

Tengo todo resuelto. Solo que no envía el correo electrónico a mi cuenta. ¿Alguien tiene alguna idea? ¿Hay alguna configuración que omití o algo así?

Ésta es la muestra de mi controlador:

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'); 
} 
+1

tendrá que tener configuraciones especiales hechas si está probando su código en localhost. –

+0

¿qué quieres decir con configuraciones especiales? hay un ejemplo o algo? – Ryan

Respuesta

1

En primer lugar me gustaría pasar a utilizar Zend_Mail. En segundo lugar, usaría una cuenta de correo real en un servidor smtp en algún lugar y enviaría desde allí. Muchas veces hay restricciones para enviar desde el servidor, pero el uso de un servidor de correo real generalmente lo soluciona.

26

le recomiendo que utilice Zend_Mail en lugar de mail(). Maneja muchas cosas automáticamente y funciona muy bien.

¿Tiene un servidor SMTP? Intentar enviar correo sin su propio servidor SMTP podría causar que no se envíe el correo.

Esto es lo que yo uso para el envío de correos utilizando Zend_Mail y Gmail:

En Bootstrap.php, puedo configurar un transporte de correo por defecto:

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 
    } 
} 

A continuación, enviar un correo electrónico que utilizo el siguiente código:

//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. 
} 
1

En línea $mail->setBody($message);, cambiarlo a $mail->setBodyText($message);

Cuestiones relacionadas