Mailer smtp nastavení přes config.neon
- Pepiik
- Člen | 10
Zdravím
podle dokumentace https://doc.nette.org/cs/configuring#…
jsem v config.neon vyplnil
<?php
mail:
smtp: true # zapne SmtpMailer místo SendmailMailer
host: xxx
username: xxx
password: xxx
# dále lze uvést host, port, username, password, secure, timeout
?>
v presenteru pak používám
<?php
$email = new Nette\Mail\Message;
...
...
$emailer = new \Nette\Mail\SendmailMailer;
$emailer->send($email)
?>
Podle té dokumentace očekávám, že by se měl automaticky použít ten smtpMailer.
emaily se mi pořád neposílají přes smtp. Jak na to prosím?
- Unlink
- Člen | 298
Ten mailer si musíš v presentery vyžiadať pomocou DI
https://doc.nette.org/…introduction
- David Matějka
- Moderator | 6445
Pomoci DI si vyzadej Nette\Mail\IMailer – coz je interface, ktery implementuji vsechny mailery. Nette DI kontejner ti pak doda implementaci, kterou mas nastavenou – v tvem pripade tedy SmtpMailer.
- Šaman
- Člen | 2666
Tohle je naprosto zásadní nepochopení toho, jak DI pracuje. Ano,
v aplikaci se připraví SmtpMailer, ale ty si pak ručně vytvoříš
SendmailMailer a nad ním provedeš odeslání. Takže nikoliv Nette,
ale ty ten SmtpMailer nepoužíváš.
Ten SmtpMailer si normálně injectuj jako službu, viz dokumentace.
- Pepiik
- Člen | 10
Super děkuji za nakopnutí.
Vyřešil jsem a funguje. Tedy jestli ještě dovolíte zkontrolovat.
v config.neon jsem tedy nastavil
<?php
services:
- Nette\Mail\SmtpMailer
mail:
smtp: true # zapne SmtpMailer místo SendmailMailer
host: xxx
username: xxx
password: xxx
?>
a v presenteru
<?php
/** @var \Nette\Mail\SmtpMailer @inject */
public $mailer;
?>
Editoval Pepiik (29. 4. 2015 23:30)
- David Matějka
- Moderator | 6445
@Pepiik
- neregistruj tu sluzbu rucne. Tou konfiguraci to nette registruje samo
- nevyzaduj
\Nette\Mail\SmtpMailer
ale jak jsem psal –\Nette\Mail\IMailer
- Šaman
- Člen | 2666
David Matějka napsal(a):
@Pepiik
1. neregistruj tu sluzbu rucne. Tou konfiguraci to nette registruje samo
Jinak řečeno smaž to v sekci services
a nech jen sekci
mail
. Kdybys to chtěl registrovat v services, tak bys tomu musel
předat všechny údaje ručně.
Editoval Šaman (29. 4. 2015 23:53)
- Croc
- Člen | 270
Jak se dostat v modelu k nastavení mailu z configu?
//Model
/** @var Nette\Database\Context */
private $database;
/** @var Nette\Application\LinkGenerator */
private $linkGenerator;
/** @var Nette\Security\User */
public $user;
/** @var Nette\Mail\IMailer */
public $mailer;
public function __construct(Nette\Database\Context $database, Nette\Application\LinkGenerator $generator, Nette\Security\User $user, Nette\Mail\IMailer $mailer)
{
$this->database = $database;
$this->linkGenerator = $generator;
$this->user = $user;
$this->mailer = $mailer;
}
//......
//......
// *** část obsahu metody ***
$mail = new Message;
$mail->setFrom('PesMánie.cz <info@pesmanie.cz>')
->addTo($user['username'])
->setHtmlBody($template);
// $mailer = new SendmailMailer;
//$mailer = new Nette\Mail\SmtpMailer;
$this->mailer->send($mail);
Config:
mail:
smtp: true # zapne SmtpMailer místo SendmailMailer
host: *******
username: *****
password: *****
Ale dostanu chybu:
Nette\Mail\SmtpException #10061
Nemohlo bt vytvoeno dn pipojen, protoe clov pota je aktivn odmtl.
- Croc
- Člen | 270
Jak se dostat v modelu k nastavení mailu z configu?
//Model
/** @var Nette\Database\Context */
private $database;
/** @var Nette\Application\LinkGenerator */
private $linkGenerator;
/** @var Nette\Security\User */
public $user;
/** @var Nette\Mail\IMailer */
public $mailer;
public function __construct(Nette\Database\Context $database, Nette\Application\LinkGenerator $generator, Nette\Security\User $user, Nette\Mail\IMailer $mailer)
{
$this->database = $database;
$this->linkGenerator = $generator;
$this->user = $user;
$this->mailer = $mailer;
}
//......
//......
// *** část obsahu metody ***
$mail = new Message;
$mail->setFrom('mujweb.cz <info@mujweb.cz>')
->addTo($user['username'])
->setHtmlBody($template);
// $mailer = new SendmailMailer;
//$mailer = new Nette\Mail\SmtpMailer;
$this->mailer->send($mail);
Config:
mail:
smtp: true # zapne SmtpMailer místo SendmailMailer
host: *******
username: *****
password: *****
Ale dostanu chybu:
Nette\Mail\SmtpException #10061
Nemohlo bt vytvoeno dn pipojen, protoe clov pota je aktivn odmtl.
Editoval Croc (1. 5. 2015 15:30)
- Šaman
- Člen | 2666
Croc napsal(a):
Zkusil jsem to nahrát na hosting a tam to chodí. Takže nyní používám toto:
// ---- Settings for localhost ---- // $mailer = new SendmailMailer; // $mailer->send($mail); // ---- Settings for production ---- $this->mailer->send($mail);
Poradím ti něco lepšího – přesuň konfiguraci mailů do
config.local.neon
. Pak můžeš používat na localu jiný, než na
produkci. Přesně proto tenhle soubor existuje. (Já třeba na localu běžně
používám nějaký DumpMailer, který reálně nic neposílá.)