J'essaye d'envoyer un e-mail avec ZendMail (ce script simple résume bien ça)
<?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();
?>
Cependant, j'obtiens cette trace de pile:
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
MODIFIER:
Je n'essaie pas d'utiliser SMTP pour envoyer mes courriels et j'ai un problème moins horrible, mais toujours un problème.
<?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);
?>
Ce lancer est cette erreur, je ne comprends pas vraiment pourquoi:
Fatal error: Class 'Zend_Mail_Transport_Smtp' not found in /var/www/hexreaction/mail/index3.php on line 7
EDIT 2:
Ceci est mon code de travail 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);
Comme vous pouvez le constater dans la trace de pile, Zend_Mail
utilise Zend_Mail_Transport_Sendmail
comme adaptateur de transport.
Assurez-vous qu'un MTA (par exemple, Postfix) compatible avec sendmail est en cours d'exécution sur votre système.
Vous pouvez également utiliser l’adaptateur de transport Zend_Mail_Transport_Smtp transport et utiliser un serveur SMTP externe comme
$tr = new Zend_Mail_Transport_Smtp('mail.example.com', array(
'auth' => 'login',
'username' => $username,
'password' => $password,
'port' => $port,
));
Zend_Mail::setDefaultTransport($tr);
Edit: Pour votre 2ème problème: a
require_once('Zend/Mail/Transport/Smtp.php');
devrait aider.
Une autre grande chose sur Zend_Mail est que c'est chaînable, vous pouvez donc faire ceci:
$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();
Je ne sais pas vraiment si «chaînable» est la bonne parole, mais j'espère que vous avez compris. Ceci est juste un conseil gratuit. La réponse est donnée (à droite) par Benjamin
Si vous souhaitez également envoyer des messages dans magento avec pièce jointe, consultez l'extrait de code suivant.
$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;
}
Les Goles mis à jour répondent qu'il faut ajouter 'ssl' => 'tls', au sommet pour éviter les erreurs
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);