ublaboo/mailing: mailování jednoduše a správně

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

Zdravím,

kdo bych chtěl jednoduše posílat maily, nabízím ublaboo/mailing. Dokumentace na GitHubu.

Shrnutí
1, Odeslání mailu jednoduše: $mailFactory->createByType('ContactMail', ['sender' => 'a@b.c'])->send();
2, Podle konfugurace rozšíření se mailu budou bu'd logovat (do .eml), nebo odesílat, nebo oboje.
3, Defaultně se zpracovává stejnojmenná šablona (vlastně skoro: ContactMail.php a templates/contact_maill.latte), takže neřešíte šablony.

Další info v readme

Editoval Pavel Janda (19. 9. 2016 15:59)

Pavel Kravčík
Člen | 1195
+
+1
-

Pěkné. Podívám se na to eml, to vypadá jako zajímavé řešení. Já si udělal rozšíření pro TracyBar a emaily si na testování posílám tam v DEV verzi. Každopádně plus.

CZechBoY
Člen | 3608
+
0
-

@PavelKravčík tady je právě výhoda ta, že se ti to ukládá. Najmeš 50 testerů a vždycky vidíš co se odeslalo. V tracyBaru si to můžeš leda ručně vyscreenovat.

@PavelJanda škoda, že s tim přicházíš o měsíc později než jsem to potřeboval :D ale i tak díky :-)

Pavel Kravčík
Člen | 1195
+
0
-

@CZechBoY: Já to pochopil, proto říkám zajímavé řešení. :) Taky jsme to řešil před měsícem, akorát místo createType tam posílám potomka objektu Message, který si vše řeší uvnitř sebe sám.

Pavel Janda
Člen | 977
+
0
-

@CZechBoY Heh, zákon schválnosti.

Vždycky se musí maily schovávat, testovat apod. Takže pokud testuji na devu aplikaci a potřebuji odesílat maily do neznáma, prostě změním konfiguraci, maily se mi logují (pouze) a já si je stále pohodlně zobrazím v pošťákovi. A naopak na produkci je loguji, protože se mohou zatoulat a klienti by je rádi dostali zpět.. Cpát maily do databáze mi přijde nesmyslné. A můžu je takhle sypat i na nějaký jiný filesystem apod.

@PavelKravčík Jj, to je podobné. Akorát tedy se vyrobí trošku „větší“ Message, která ví třeba o mailových adresách z parametrů konfigurace, nebo rovnou zná base_path pro obrázky a podobně. Tohle je řešení, ke kterému jsem po několika měsících doiteroval a zdá se mi asi nejvhodnější pro menší projekty.

Editoval Pavel Janda (15. 12. 2015 11:52)

Pavel Kravčík
Člen | 1195
+
0
-

@PavelJanda: To už řeší faktory to nastavení. Spíš mám rád, že ten objekt mi napoví, co mu můžu předat. Tj. může mít třeba public proměnné a vyhazovat vyjímku, že chybí číslo smlouvy apod.

Ještě bys mohl zvážit jeden parametr navíc. Já tomu říkám debugMail a pokud ho nastavím, tak všechny maily, které projdou službou se odešlou na tu adresu. Tj. fyzicky otestuji, že ty maily došly až k adresátovi (filtry, spam, blokace). Ale to se testuje méně často.

Pavel Janda
Člen | 977
+
0
-

@PavelKravčík Mnohem víc by se mi líbilo, kdyby konkrétní aplikace v produkčním prostředí nastavila bcc v konfiguračních parametrech. Nebo si vyrobím svoji Mailfactory, které předám Ublaboo\Mailing\mailFactory a v té svojí továrně už upravím Message k obrazu svému.

Pavel Kravčík
Člen | 1195
+
0
-

@PavelJanda: Jasně, ale já mluvím o předprodukčním prostředí. Tj. situace, kdy se maily dobře ukládají na disk/db/session, ale fyzicky nikdy neodejdou díky špatnému nastavení serveru například. A nechceš to testovat na klientech, ale na svůj mail. A tohle vynechá tu podmínku, že musíš šahat do kódu. Tj. pro testování stačí nastavit parametr, ale nepřepisovat kód. Je to nepodstatný detail, jen jsem chtěl naznačit, co jsem myslel.

Pavel Janda
Člen | 977
+
0
-

@PavelKravčík No vždyť jo. :)
Akorát pozměníš config třeba z:

mailing:
	mails:
		recipient: klient@je.nej

na

mailing:
	mails:
		recipient: muj@dev.mail

A dá se toho docílit buď pomocí načítání různých sekcí souboru config.neon, nebo změnou a načtením souboru config.local.neon, nebo desítkami dalších způsobů. Vlastní factory jsem uvedl z tohoto důvodu: Ne vždy má aplikace standardní určování běhového prostředí. A v té vlastní factory už si podle způsobu určení běhového prostředí přenastavím příjemce mailu.

Prostě ano, oba myslíme totéž, akorát já bych to raději viděl někde mimo (tedy v projektu).. :)

leninzprahy
Člen | 150
+
+1
-

Pavel Kravčík napsal(a):

Ještě bys mohl zvážit jeden parametr navíc. Já tomu říkám debugMail a pokud ho nastavím, tak všechny maily, které projdou službou se odešlou na tu adresu. Tj. fyzicky otestuji, že ty maily došly až k adresátovi (filtry, spam, blokace). Ale to se testuje méně často.

Tohle je dle mého názoru lepší řešit nastavením vlastního "DevMaileru" (podědíš třeba Nette\Mail\SendmailMailer), který se o to postará…

Pavel Kravčík
Člen | 1195
+
0
-

@PavelJanda: Jasně, tak jsem to jen z textu nepochopil, tohle přesně používám a myslím. :)

@leninzprahy: To je asi zbytečné, to řešení výše je dostačující.

potapnik
Člen | 127
+
0
-

Ahoj, není to sice přímo k addonu, nicméně mailováním z dev/staging/etc. jsem se zabýval docela dlouho, než jsem narazil na službu, která to řeší za mě, a tou je https://mailtrap.io/ – na všech dev/staging etc. serverech mám nakonfigurovaný SmtpMailer na ní a padá mi tam z nich vše včetně detailního rozboru zaslaných emailů, spam scoringu apod. Parametry služby jsou i ve free verzi velice příznivé, a pro mě třeba padlo nastavování rozdílných vývojových prostředí, donastavování vagrant virtuálů apod.

andros
Člen | 145
+
0
-

Ahoj, začal jsem používat Ublaboo Mailing a je naprosto skvělý. Jen se mi nedaří rozchodit v šabloně odkazy {link Presenter:view}. Exception in Nette\Bridges\ApplicationLatte\Template::__toString(): Cannot load presenter ‚Homepage‘, class ‚HomepagePresenter‘ was not found.

Poradil by někdo ?
Továrnička vypadá takto:

namespace AdminModule;

use Nette,
	Ublaboo\Mailing\Mail,
	Ublaboo\Mailing\IComposableMail;

class ResetPasswordMail extends Mail implements IComposableMail
{

	/**
	 * There you will always have your mail addresses from configuration file
	 * @var array
	 */
	protected $mails;


	public function compose(Nette\Mail\Message $message, $params = NULL)
	{
		$message->setFrom($this->mails['default_sender']);
		$message->addTo($params['recipient']);
	}

}

a email odesílám:

$mail = $this->mailFactory->createByType('AdminModule\ResetPasswordMail', $params);
$mail->send();
Pavel Kravčík
Člen | 1195
+
+1
-

@andros: Zkoušel si absolutní adresu? :Module:Presenter:action?

andros
Člen | 145
+
+1
-

Nezkoušel :) Nevěděl jsem, že něco takového jde. Funguje mi to bez té první dvojtečky. Tedy: Module:Presenter:action.

Díky moc za nakopnutí správným směrem. Teď je to naprostá paráda.

Pavel Kravčík napsal(a):

@andros: Zkoušel si absolutní adresu? :Module:Presenter:action?