2010-08-11 5 views
13

Я пытаюсь отправить по электронной почте с ZendMail (этот простой скрипт подытоживает)Проблема при отправке почты с 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(); 
?> 

Однако я получаю эту трассировку стека:

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 Я не пытаюсь использовать SMTP для отправки своего сообщения электронной почты, и у меня есть менее ужасная проблема, но все еще проблема.

<?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); 
?> 

этого Throw в эту ошибку, я не понимаю, почему:

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

EDIT 2:

Это мой последний рабочий код

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

Обновленный Goles ответ нужно добавить ** «SSL» => «», TLS ** в верхней части, чтобы избежать ошибки увидеть мой ответ –

+0

это невероятно; Спасибо за обновление; Я собираюсь сделать это и для своих вопросов в будущем. – Ahdee

ответ

15

Как вы можете см. в трассировке стека Zend_Mail использует Zend_Mail_Transport_Sendmail как транспортный адаптер.
Итак, убедитесь, что в вашей системе работает sendmail-совместимый MTA (например, Postfix).

В качестве альтернативы вы можете использовать транспортный адаптер Zend_Mail_Transport_Smtp и использовать внешний SMTP-сервер, как так

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

Edit: Для вашей 2 Проблемы:

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

должен помочь ,

+0

Я тоже пытаюсь использовать SMTP, (отредактировал мой пост), и я получаю менее ужасную ошибку, но все же ошибку. – Goles

+0

Спасибо !, также GMAIL ожидает SSL, поэтому я добавил свой последний рабочий код :-) – Goles

2

Еще одна интересная вещь на Zend_Mail является то, что это в цепочке, так что вы можете сделать это:

$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(); 

Не знаю наверняка, если «цепной» это правильное слово, но я надеюсь, что вы получили точку. Это просто бесплатный совет. Ответ дан (справа) Бенджамином

+1

См. MethodChaining/Fluent Interface для получения дополнительной информации http://martinfowler.com/dslwip/MethodChaining.html –

0

Обновленный Goles ответ нужно добавить «Ssl» => «TLS», сверху, чтобы избежать ошибок

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

Кроме того, если вы хотите seand почту в Magento с приложением посмотрим на следующий фрагмент кода

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