ublaboo/mailing: mailování jednoduše a správně
- Pavel Janda
- Člen | 977
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
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.
- Pavel Kravčík
- Člen | 1195
@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
@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
@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
@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
@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
@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
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
@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
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
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();