DI, NEON – SmtpMailer service not found

sjiamnocna
Člen | 16
+
0
-

Dobrý den,

snažím se rozjet SmtpMailer. Samozřejmě bych mohl vyrobit nový a podstrčit mu údaje, ale to nechceš (údaje v GITu), takže jdu cestou configu v local.neon. Databáze (Connection) se rozjela v pohodě (nebo se aspoň nahrála) normálně přes database: ..., horší je to s Mailerem.

Ten mi vždycky háže „Service not found did you add it to config?“. V https://doc.nette.org/…onfiguration je psáno, že při zapnutí SMTP mi bude automaticky vyrábět SmtpMailer. Ten dělá Service not found. Zkoušel jsem taky, zda se nevyrábí jen normální Sendmail, ale ten mi říká to samé…
Service of type Nette\Mail\SmtpMailer required by ... not found

local.neon vypadá nějak takto;

database:
    dsn: ***
    user: ***
    password: ***

mail:
	smtp: true
	host: ***
	port: ***
	username: ***
	password: ***
	secure: ***

a vyžádání probíhá normálně přes __construct;

    private Connection $Con;

    private SmtpMailer $Mailer;
    /**
     * Array of app data
     */
    private array $data = [];

    public function __construct(
      Connection $Con,
      SmtpMailer $Mailer
    ){
        $this->Con = $Con;
        $this->Mailer = $Mailer;
    }

Kaši jsem smazal, žádná změna :/

Můžete mi prosím poradit? Nebo aspoň dát tip, co zkoušet?
Díky

Editoval sjiamnocna (26. 4. 21:36)

Kamil Valenta
Člen | 562
+
0
-

Vyžádej si z DI obecně Nette\Mail\Mailer.
https://doc.nette.org/cs/mail#…

Editoval Kamil Valenta (26. 4. 21:54)

nightfish
Člen | 268
+
0
-

@sjiamnocna Do kontejneru Nette automaticky registruje službu typu Nette\Mail\Mailer, což je typ, který chceš vyžadovat v konstruktoru. Podle konfigurace (mail.smtp) se tam objeví buď SmtpMailer nebo SendmailMailer, ale to tě prakticky nemusí zajímat, protože metodu send() obsahují obě implementace.

Viz https://doc.nette.org/cs/mail#… a https://github.com/…xtension.php

sjiamnocna
Člen | 16
+
0
-
private Connection $Con;

    private Mailer $Mailer;

    public function __construct(
      Connection $Con,
      Mailer $Mailer
    ){
        $this->Con = $Con;
        $this->Mailer = $Mailer;
    }

Super, díky. Tváří se, že funguje :)

Editoval sjiamnocna (27. 4. 9:14)

sjiamnocna
Člen | 16
+
0
-

No a konfiguroval už takhle někdo SMTP přes Gmail na vlastní doméně? Nějaké doporučení, zkušenosti? :)

nightfish
Člen | 268
+
+1
-

Funguje mi tohle. Protože mám účty řešené přes Google Workspace a mám aktivní dvoufaktorové přihlašování (mám pocit, že je povinné), musel jsem si pro odesílání e-mailů pod účtem info@example.cz vygenerovat App Password, které v konfiguraci SMTP používám – viz https://support.google.com/…nswer/185833?…

mail:
    smtp: true
    host: smtp.gmail.com
    port: 587
    username: info@example.cz
    password: hesloheslo
    timeout: 5
    secure: tls