Nette/Mail nepošle mail
- Kenn
- Člen | 110
Už hodinu se tady babrám s problémem neposílání e-mailu pomocí Nette/Mail. Na webu posílám 3 e-maily, ale nefunkční je jenom jeden a to mě dost zaráží.
Kód vypadá nějak takto
<?php
$template = new Template;
$template->registerFilter('Nette\Templates\LatteFilter::invoke');
$template->setFile(APP_DIR. '/templates/Admin/mail.phtml');
$mail = new Mail;
$mail->setFrom('Potvrzení <objednavka@domena.cz>');
$mail->setSubject('Potvrzení platby');
$mail->addTo($this->getParam('mail'));
$mail->setHtmlBody($template);
$mail->send();
?>
Laděnka hlásí „Unable to send email.“ na řádku $mail->send(). Předávaná e-mailová adresa je v pořádku. Zkoušel jsem na dvou hostinzích a nikde to nefunguje. Na localhostu nemám nastavený e-mail, takže nemůžu odzkoušet.
Předchozí dva e-maily posílám přímo v actione presenteru, tento e-mail je v handle. Nemůže to být tím? Popřípadě co by mohlo být špatně? Předem díky za tipy.
- HonzaMac
- Člen | 40
$mail->setFrom(‚Potvrzení <objednavka@domena.cz>‘);
Nemělo by být
$mail->setFrom('"Potvrzení" <objednavka@domena.cz>');
nebo
$mail->setFrom('objednavka@domena.cz', 'Potvrzení');
Podle API dokumentace ano
Edit: Tak by to mělo brat i bez uvozovek, podle implemtace. Tak teda at rekne nekdo zkušený :-/
Editoval HonzaMac (10. 11. 2009 17:50)
- falkon
- Člen | 17
Len doplnim trochu informacii, mozno sa niekomu budu v buducnosti hodit, az bude podobnu chybu hladat to na fore…
S chybou „Unable to send email.“ som sa nedavno stretol a bola sposobena ‚specialnymi‘ znakmi v adrese odosielatela (potencialne je na chybu asi nachylna kazda adresa). V mojom pripade hostingu vadili dvojbodky „::“, ale email sa nepodaril odoslat ani s dalsimi specialnymi znakmi v adrese odosielatela (len v rychlosti som skusal „# $ % & ! ( ) [ ]“, takze niektore z toho :) ).
Prazvlastne na tom je to, ze na inom serveri mi to fungovalo normalne, z coho usudzujem, ze ide o nejake problematicke nastavenie/implementaciu sendmail-u na tom-ktorom systeme. V logu sa ale ziadne hlasky od PHP neobjavovali, takze netusim presne, co mu vadilo.
Prva otazka ktora sa naskyta je, ci Nette korektne escapuje pouzite znaky v adrese (v jej „name“ casti), ale ja som toto zatial neskumal. (?mozno by sa na to mohol niekto pozriet, ci nahodou nie je nejaka chybka v Nette?).
Ako potencialny workaroung ma napada na „postihnutych hostingoch“ pouzivat priamo nejaky SMTP transport, ktory by obchadzal sendmail – bohuzial ale Nette nic okrem Sendmail-u v zaklade nepodporuje – bolo by treba pouzit (a „ohnut“) napr. Zend_Mail_Transport_Smtp. Osobne som toto riesenie este neskusal, takze to berte cisto ako ‚proposal‘… :)