Mailer smtp nastavení přes config.neon

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

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
+
+1
-

Ten mailer si musíš v presentery vyžiadať pomocou DI
https://doc.nette.org/…introduction

one-two
Člen | 80
+
+1
-

Ten ručně vytvořený SendmailMailer se nemá jak dozvědět o konfiguraci SMTP, musíš si injectnout Nette\Mail\IMailer a poslat přes něj

David Matějka
Moderator | 6445
+
+1
-

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
+
0
-

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
+
0
-

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
+
+2
-

@Pepiik

  1. neregistruj tu sluzbu rucne. Tou konfiguraci to nette registruje samo
  2. nevyzaduj \Nette\Mail\SmtpMailer ale jak jsem psal – \Nette\Mail\IMailer
Šaman
Člen | 2666
+
0
-

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
+
0
-

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
+
0
-

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)

Croc
Člen | 270
+
0
-

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);

Editoval Croc (1. 5. 2015 18:32)

Šaman
Člen | 2666
+
+1
-

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