2010-08-11 25 views
13

Estoy intentando enviar un e-mail con ZendMail (este script sencillo resume todo)¿Problema al enviar correo con Zend Mail?

<?php 
require_once 'Zend/Mail.php'; 

$mail = new Zend_Mail(); 
$mail->setBodyText('My Nice Test Text'); 
$mail->setBodyHtml('My Nice Test Text'); 
$mail->setFrom('[email protected]', 'Mr Example'); 
$mail->addTo('[email protected]', 'Mr Test'); 
$mail->setSubject('TestSubject'); 
$mail->send(); 
?> 

Sin embargo consigo este seguimiento de la pila:

Fatal error: Uncaught exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Sendmail.php:137 Stack trace: #0 /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Sendmail->_sendMail() #1 /usr/share/php/libzend-framework-php/Zend/Mail.php(1178): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail)) #2 /var/www/hexreaction/mail/index2.php(11): Zend_Mail->send() #3 {main} thrown in /usr/share/php/libzend-framework-php/Zend/Mail/Transport/Sendmail.php on line 137 

EDIT:

I No estoy tratando de usar SMTP para enviar mi correo electrónico y estoy teniendo un problema menos horrible, pero sigue siendo un problema.

<?php 
require_once 'Zend/Mail.php'; 
$config = array('auth' => 'login', 
       'username' => '[email protected]', 
       'password' => 'secretpass'); 

$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); 

$mail = new Zend_Mail(); 
$mail->setBodyText('This is the text of the mail.'); 
$mail->setFrom('[email protected]', 'Some Sender'); 
$mail->addTo('[email protected]', 'Some Recipient'); 
$mail->setSubject('TestSubject'); 
$mail->send($transport); 
?> 

de este tiro este error, yo realmente no entiendo por qué:

Fatal error: Class 'Zend_Mail_Transport_Smtp' not found in /var/www/hexreaction/mail/index3.php on line 7 

EDIT 2:

Este es mi código de trabajo final

require_once('Zend/Mail/Transport/Smtp.php'); 
require_once 'Zend/Mail.php'; 
$config = array('auth' => 'login', 
       'username' => '[email protected]', 
       'password' => 'somepass', 
       'ssl' => 'tls'); 

$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); 

$mail = new Zend_Mail(); 
$mail->setBodyText('This is the text of the mail.'); 
$mail->setFrom('[email protected]', 'Some Sender'); 
$mail->addTo('[email protected]', 'Some Recipient'); 
$mail->setSubject('TestSubject'); 
$mail->send($transport); 
+0

Actualizado Goles respuesta necesita añadir ** 'SSL' => 'TLS', ** en la parte superior para evitar errores ver mi respuesta –

+0

esto es increíble; gracias por la actualización; Voy a hacer eso para mis preguntas en el futuro también. – Ahdee

Respuesta

15

Como se puede ver en el rastro de pila Zend_Mail usa Zend_Mail_Transport_Sendmail como adaptador de transporte.
Así que asegúrese de que se ejecute en su sistema un MTA compatible con sendmail (por ejemplo, Postfix).

Como alternativa se puede utilizar el adaptador de transporte Zend_Mail_Transport_Smtp y utilizar un servidor SMTP externo al igual que

$tr = new Zend_Mail_Transport_Smtp('mail.example.com', array(
    'auth'  => 'login', 
    'username' => $username, 
    'password' => $password, 
    'port'  => $port, 
)); 
Zend_Mail::setDefaultTransport($tr); 

Editar: Para su segundo problema: un

require_once('Zend/Mail/Transport/Smtp.php');

debería ayudar .

+0

Estoy tratando de usar SMTP también (edité mi publicación) y recibo un error menos horrible, pero aún así un error. – Goles

+0

¡Gracias !, también GMAIL espera SSL, así que agregué mi código de trabajo final :-) – Goles

2

Otra gran cosa en Zend_Mail es que es chainable, por lo que se puede hacer esto:

$mail = new Zend_Mail(); 
$mail->setBodyText('My Nice Test Text') 
    ->setBodyHtml('My Nice Test Text') 
    ->setFrom('[email protected]', 'Mr Example') 
    ->addTo('[email protected]', 'Mr Test') 
    ->setSubject('TestSubject') 
    ->send(); 

no saben a ciencia cierta si 'chainable' es la palabra correcta, pero espero que tienes el punto. Esto es solo un consejo gratis. Se da la respuesta (a la derecha) por Benjamin

+1

Consulte MethodChaining/Fluent Interface para obtener más información http://martinfowler.com/dslwip/MethodChaining.html –

0

Actualizado respuesta Goles necesita agregar 'SSL' => 'TLS', en la parte superior para evitar errores

require_once('Zend/Mail/Transport/Smtp.php'); 
require_once 'Zend/Mail.php'; 
$config = array(
       'ssl' => 'tls', 
       'auth' => 'login', 
       'username' => '[email protected]', 
       'password' => 'somepass' 
       ); 

$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); 

$mail = new Zend_Mail(); 
$mail->setBodyText('This is the text of the mail.'); 
$mail->setFrom('[email protected]', 'Some Sender'); 
$mail->addTo('[email protected]', 'Some Recipient'); 
$mail->setSubject('TestSubject'); 
$mail->send($transport); 
0

Además, si quieres a seand electrónico en Magento con el accesorio de echar un vistazo en el siguiente fragmento de

$config = array(
       'ssl' => 'tls', 
       'auth' => 'login', 
       'username' => '[email protected]', 
       'password' => 'yourPassword' 
       ); 

     $transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', $config); 


     $bodytext = "Please see attachment for customers detail."; 
     $mail = new Zend_Mail(); 
     $mail->setFrom('[email protected]','Hassan'); 
     $mail->addTo('[email protected]'); 
     $mail->setSubject('Customers info'); 
     $mail->setBodyText($bodytext); 

     $file = $mail->createAttachment(file_get_contents($path.$fileName)); 
     $file ->type  = 'text/csv'; 
     $file ->disposition = Zend_Mime::DISPOSITION_INLINE; 
     $file ->encoding = Zend_Mime::ENCODING_BASE64; 
     $file ->filename = $fileName; 

     if(!$mail->send($transport)) { 
      echo 'Message could not be sent.'; 
      echo 'Mailer Error: ' . $mail->ErrorInfo; 
     } else { 
      echo 'Message has been sent'; 
     } 
     echo "File Completed";exit; 
    } 
Cuestiones relacionadas