SmtpMailer a FallbackMailer
- Kamil Valenta
- Člen | 833
Chtěl bych dát rozesílaným mailům trochu větší péči.
Aktuálně si v DI předávám mailer (konkrétně SMTP mailer), loguju si,
pokud odeslání selže, příp. to s časovým odstupem zkusím znovu.
Nevím, zda v dokumentaci přehlížím, lze si někde po $mailer->send($mail); vrátit queue/transaction ID?
Rád bych si to zalogoval s error hláškou, kterou SMTP vrátil. V logu SMTP pak podle ID dohledám více.
Druhá věc je použití Fallback maileru, jak si ho předáváte v DI a jak
k němu předáváte jednotlivé mailery?
A protože často SMTP vyžaduje, aby hlavička From byla shodná jako login
k SMTP, jak řešíte From?
Já mám aktuálně v neonu v parametrech mailFrom, což je prostě totožný
string jako mail > smtp > login. A když to v neonu měním, musím to
změnit na obou místech. Je to nepříjemné, ale roky se s tím dá žít.
Při použití Fallback maileru to padá, protože se From musí změnit podle
použitého SMTP. Doufal jsem, že $mail->setFrom() bude volitelné a při
nevyplnění si vezme login z maileru, ale setFrom() je povinné…
- Marek Bartoš
- Nette Blogger | 1297
lze si někde po $mailer->send($mail); vrátit queue/transaction ID?
Mailer ti nic nevrací, ale nastavuje header Message-ID, se kterým pak mail
odesílá. Když budeš mít víc mailerů v řadě, tak si můžeš
v posledním podle ID zalogovat.
Jen v případě nette/mail se nastavuje ID v Message, na klonu objektu,
těsně před odesláním. Takže by-default bude mít mail v každém maileru
vlastní ID.
Já si pro vícero mailerů udělal wrapper, aby ve všech mailerech měl mail
stejné ID. Případně si do Message můžeš nastavit i vlastní ID. Message
i můj mailer vlastní ID respektují.
Rád bych si to zalogoval s error hláškou, kterou SMTP vrátil. V logu SMTP pak podle ID dohledám více.
S ohledem na více mailerů to zatím řeším tak, že odesílání běží v cyklu s try-catch. Všechny chyby se pak vyhodí jako součást souhrnné exception, nemám v maileru interní logger či error handler.
Druhá věc je použití Fallback maileru, jak si ho předáváte v DI a jak k němu předáváte jednotlivé mailery?
U originálního maileru vypínám autowiring, ve svém seznamu pak můžu mailery poskládat jak potřebuju.
A protože často SMTP vyžaduje, aby hlavička From byla shodná jako login k SMTP, jak řešíte From?
Pro tohle snadné obecné řešení asi nebude, nefunguje to všude stejně.
S AWS SES odesíláme maily z jakéhokoli účtu v rámci domény.
Pro tvůj konkrétní případ bych si login dal do parametru a ten pak
předával i do SMTP loginu a nejspíš dal mailer do wrapperu, který podle
loginu odesílatele přenastaví.
Celá funkcionalita je v orisai/nette-mail
Editoval Marek Bartoš (4. 3. 17:03)