Konfigurace SmtpMailer přes Neon

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
RiZe
Člen | 13
+
0
-

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 :-).

Aurielle
Člen | 1281
+
+1
-

Nastavení v configu je myšleno takto:

nette:
	mailer:
		smtp: true
		host: ...
		# dalsi volby
RiZe
Člen | 13
+
0
-

Áha. V tom případě jsem to špatně pochopil a těch pár příspěvků na fóru mi moc nepomohlo, například ten, který jsem linkoval, použil právě tu syntax a z dokumentace to nebylo úplně zřejmé.