Ako pouzit SMTP v komponente ked mam definovane info v neone?
- duskohu
- Člen | 778
Caute viete mi poradit? Chcel by som si zadefinovat info pre SMTP mail
v neone a potom v komponente uz len nadefinovat telo, komu .. a odoslat, viete
mi poradit ako?
mam neon:
mailer:
smtp:
host: 'smtp.example.com'
username: 'username'
password: 'heslo'
secure: 'ssl'
services:
nette.mailer:
class: Nette\Mail\SmtpMailer
a v komponente mam klasicky mail :
$template = new Nette\Templating\FileTemplate('email.phtml');
$template->registerFilter(new Nette\Latte\Engine);
$template->orderId = 123;
$mail = new Message;
$mail->setFrom('Franta <franta@example.com>')
->addTo('petr@example.com')
->setHtmlBody($template)
->send();
ako toto poslem cez SMTP MAILER?
- pidiclovek
- Člen | 91
V první řadě musíš nějak dostat do komponenty službu nette.mailer. Doporučuju přečíst toto a toto. U komponenty si dej bacha, pokud budeš závisost předávat přes konstruktor, abys dodržel předávané parametry a nezapomněl zavolat konstruktor na předkovi.
Samotný mailer přidáš, pokud sis ho dodal do komponenty, takto:
$mail = new Message;
$mail->setMailer($this->mailer)
$mail->setFrom('Franta <franta@example.com>')
->addTo('petr@example.com')
->setHtmlBody($template)
->send();
- h4kuna
- Backer | 740
duskohu napsal(a):
mam neon:mailer: smtp: host: 'smtp.example.com' username: 'username' password: 'heslo' secure: 'ssl' services: nette.mailer: class: Nette\Mail\SmtpMailer
Já to mám takto:
mailer:
smtp: true
host: 'smtp.example.com'
username: 'username'
password: 'heslo'
secure: 'ssl'
# services:
# nette.mailer:
# class: Nette\Mail\SmtpMailer
Editoval h4kuna (1. 10. 2012 9:58)
- duskohu
- Člen | 778
No skusal som si to poslat do modelu, ale jde mi to, ked su dam dumpnut triedu tak mi vrati:
Nette\Mail\SmtpMailer(7) ▼ {
connection private => NULL
host private => "localhost" (9)
port private => 25
username private => ""
password private => ""
secure private => ""
timeout private => 20
vrati mi :
Doslo k pokusu o pristup k soketu sposobom zakazanym jeho pristupovimi
pravami.,
ale ked si to nastavim manualne tak to ide, v com moze bit este problem?
$mailer = new Nette\Mail\SmtpMailer(array(
'host' => 'host',
'username' => 'username',
'password' => 'heslo',
'secure' => 'ssl',
));
$mail = new Nette\Mail\Message;
$mail->setMailer($this->mailer);
......
- duskohu
- Člen | 778
No mam tam toto:
/**
* @return Nette\Mail\Message
*/
public function createNette__mail()
{
$service = new Nette\Mail\Message;
$service->setMailer($this->getService('nette.mailer'));
return $service;
}
/**
* @return Nette\Callback
*/
protected function createServiceNette__mailFactory()
{
$service = new Nette\Callback($this, 'createNette__mail');
return $service;
}
/**
* @return Nette\Mail\SmtpMailer
*/
protected function createServiceNette__mailer()
{
$service = new Nette\Mail\SmtpMailer;
return $service;
}
samozrejme v neonu mam toto:
nette:
mailer:
smtp:
smtp: true
host: smtp.test.com
username: 'user'
password: 'pass'
secure: 'ssl'
- h4kuna
- Backer | 740
duskohu napsal(a):
/** * @return Nette\Mail\SmtpMailer */ protected function createServiceNette__mailer() { $service = new Nette\Mail\SmtpMailer; return $service; }
je vidět že se ti sem nepředávaj přihlašovací údaje, uprav na:
nette:
mailer:
smtp: true
host: smtp.test.com
username: 'user'
password: 'pass'
secure: 'ssl'
já to mám totiž v parameters, za nedorozumění se omlouvám
parameters:
smtp:
smtp: true
host: smtp.test.com
username: 'user'
password: 'pass'
secure: 'ssl'
nette:
mailer: %smtp%
- duskohu
- Člen | 778
Dakujem, ale aj po zmene nerozumiem preco to nejde v: temp/cache/_Nette.Configurator/„soubor.php“ mam uz v parametroch to spravne nastavenie, ale stale mi to nepredava parametre ake ma, cache som premazal
**
* @return Nette\Mail\SmtpMailer
*/
protected function createServiceNette__mailer()
{
$service = new Nette\Mail\SmtpMailer;
return $service;
}
v modelu mam:
public function __construct(Nette\Mail\SmtpMailer $mailer)
{
$this->mailer = $mailer;
\Nette\Diagnostics\Debugger::barDump($mailer);
}
a ten debug mi vrati toto:
Nette\Mail\SmtpMailer(7) ▼ {
connection private => NULL
host private => "localhost" (9)
port private => 25
username private => ""
password private => ""
secure private => ""
timeout private => 20
proste uplne ine nastavenia ako som dal do neonu, a ake mam v cache, nevies co by som mohol robit este zle?
- h4kuna
- Backer | 740
Zkus ještě ten druhý způsob, všechno přesunout do sekce parameters a pak to vytáhnout pomocí %smtp%.
Mělo by to generovat něco takového, první parametr vložit jako pole
/**
* @return Nette\Mail\SmtpMailer
*/
protected function createServiceNette__mailer()
{
$service = new Nette\Mail\SmtpMailer(array(
'smtp' => TRUE,
'username' => 'login',
'password' => 'heslo',
'host' => 'server',
'port' => 465,
'secure' => 'ssl',
));
return $service;
}
Editoval h4kuna (1. 10. 2012 10:27)
- duskohu
- Člen | 778
pave ze tak to uz mam, ci je aj nejaka ina moznost?
neon:
common:
parameters:
smtp:
smtp: true
host: smtp.test.com
username: 'user'
password: 'pass'
secure: 'ssl'
nette:
mailer: %smtp%
services:
nette.mailer:
class: Nette\Mail\SmtpMailer
cache:
/**
* @return Nette\Mail\Message
*/
public function createNette__mail()
{
$service = new Nette\Mail\Message;
$service->setMailer($this->getService('nette.mailer'));
return $service;
}
/**
* @return Nette\Callback
*/
protected function createServiceNette__mailFactory()
{
$service = new Nette\Callback($this, 'createNette__mail');
return $service;
}
/**
* @return Nette\Mail\SmtpMailer
*/
protected function createServiceNette__mailer()
{
$service = new Nette\Mail\SmtpMailer;
return $service;
}
tuto variantu si myslel?