Konfigurace SmtpMailer přes Neon
- RiZe
- Člen | 13
Nedařilo se mi nastavit Nette\Mail\SmtpMailer přes Neon konfiguraci v Nette 2.0.1 ani 2.0.3 podle stránek konfigurace frameworku a pár topiců (např. tento) na fóru.
nette:
mailer:
smtp:
host: smtp.***.cz
port: 587
username: ***
password: ***
secure: tsl
Při získání instance služby maileru z kontextu přes
$this->context->nette->mailer
jsem sice získal
SmtpMailer namísto SendmailMailer, ale konfigurace vůbec
nebyla zohledněna:
Nette\Mail\SmtpMailer(7) {
connection private => NULL
host private => "localhost" (9)
port private => 25
username private => ""
password private => ""
secure private => ""
timeout private => 20
}
Po několikahodinovém zkoumání, kde jsem mohl udělat chybu, jsem začal hledat jinde a našel jsem následující v Nette\Config\Extensions\NetteExtension:
// (pozn. řádek 198 ve stabilní verzi 2.0.3 ze 4. 4. 2012)
// mailer
if (empty($config['mailer']['smtp'])) {
$container->addDefinition($this->prefix('mailer'))
->setClass('Nette\Mail\SendmailMailer');
} else {
Validators::assertField($config, 'mailer', 'array');
$container->addDefinition($this->prefix('mailer'))
->setClass('Nette\Mail\SmtpMailer', array($config['mailer']));
}
Důležitý je především následující řádek v else:
$container->addDefinition($this->prefix('mailer'))
->setClass('Nette\Mail\SmtpMailer', array($config['mailer']));
Samotné pole s konfigurací podle syntaxe výše je uloženo v
$config['mailer']['smtp']
a nikoliv $config['mailer']
,
takže pokud jsem dosud nedělal nic špatně, tak s následující úpravou
vše funguje jak má:
// mailer
if (empty($config['mailer']['smtp'])) {
$container->addDefinition($this->prefix('mailer'))
->setClass('Nette\Mail\SendmailMailer');
} else {
Validators::assertField($config, 'mailer', 'array');
$container->addDefinition($this->prefix('mailer'))
->setClass('Nette\Mail\SmtpMailer', array($config['mailer']['smtp']));
}
Jelikož si nejsem jistý tím, zda dělám něco špatně, nebo je to opravdu chyba, postuji na fórum. Nekamenovat prosím :-).