Problem when sending mail with Zend Mail?

匿名 (未验证) 提交于 2019-12-03 02:18:01

问题:

I'm trying to send an e-mail with ZendMail ( this simple script sums it up )

<?php require_once 'Zend/Mail.php';  $mail = new Zend_Mail(); $mail->setBodyText('My Nice Test Text'); $mail->setBodyHtml('My Nice Test Text'); $mail->setFrom('test@example.com', 'Mr Example'); $mail->addTo('contact@mypage.com', 'Mr Test'); $mail->setSubject('TestSubject'); $mail->send(); ?> 

However I get this stack trace:

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'm not trying to use SMTP to send my e-mail and I'm having a less horrible problem, but still a problem.

<?php require_once 'Zend/Mail.php'; $config = array('auth' => 'login',                 'username' => 'contact@mypage.com',                 '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('contact@mypage.com', 'Some Sender'); $mail->addTo('contact@mypage.com', 'Some Recipient'); $mail->setSubject('TestSubject'); $mail->send($transport); ?> 

This throw's this error, I don't really get why:

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

EDIT 2:

This is my final working code

require_once('Zend/Mail/Transport/Smtp.php'); require_once 'Zend/Mail.php'; $config = array('auth' => 'login',                 'username' => 'somemail@mysite.com',                 '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('somemail@mysite.com', 'Some Sender'); $mail->addTo('somemail@mysite.com', 'Some Recipient'); $mail->setSubject('TestSubject'); $mail->send($transport); 

回答1:

As you can see in the Stack trace Zend_Mail uses Zend_Mail_Transport_Sendmail as transport adapter.
So make sure a sendmail-compatible MTA (e.g. Postfix) is running on your system.

As an alternative you could use the Zend_Mail_Transport_Smtp transport adapter and use an external SMTP-Server like so

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

Edit: For your 2nd Problem: a

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

should help.



回答2:

Another great thing on Zend_Mail is that's chainable, so you can do this:

$mail = new Zend_Mail(); $mail->setBodyText('My Nice Test Text')      ->setBodyHtml('My Nice Test Text')      ->setFrom('test@example.com', 'Mr Example')      ->addTo('contact@mypage.com', 'Mr Test')      ->setSubject('TestSubject')      ->send(); 

Don't know for sure if 'chainable' is the right word, but I hope you got the point. This is just a free tip. The answer is given (right) by Benjamin



回答3:

Also if you want to seand mail in magento with attachment have a look on the following snippet

$config = array(                 'ssl' => 'tls',                 'auth' => 'login',                 'username' => 'hassanalishahzad@gmail.com',                 '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('noreply@yourdomain.com','Hassan');         $mail->addTo('xyz@yourdomain.com' );         $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;     } 


回答4:

Updated Goles answer need to add 'ssl' => 'tls', at top to avoid errors

require_once('Zend/Mail/Transport/Smtp.php'); require_once 'Zend/Mail.php'; $config = array(                 'ssl' => 'tls',                 'auth' => 'login',                 'username' => 'somemail@mysite.com',                 '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('somemail@mysite.com', 'Some Sender'); $mail->addTo('somemail@mysite.com', 'Some Recipient'); $mail->setSubject('TestSubject'); $mail->send($transport); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!