Nativní Nette\Mailovací class? Asi ne…Interface? ANO!
- Honza Marek
- Člen | 1664
Nevim na co je dobrej nette mail bez šablon :-) Od controlu bych to asi nedědil, protože mailer se nemá kam co připojovat na jiné komponenty, natožpak aby si invalidoval snippety.
- Honza Kuchař
- Člen | 1662
Honza M. napsal(a):
Nevim na co je dobrej nette mail bez šablon :-)
Souhlas :)
- Patrik Votoček
- Člen | 2221
Dopřával jsem si pár hodinek spánku a docela se to tu rozjelo. To že jste návrh interface hodili na wiki je super sám jsem to chtěl udělat. Co se týká template tak tady sem pro jak setHtmlBody a setTextBody tak i setTemplate. Kdo bude chtít posílat bez Template tak at si posílá a kdo s (jako třeba já) tak bude posílat s templatetama.
- David Grudl
- Nette Core | 8218
https://api.nette.org/…eb.Mail.html ale chce to odladit, zejména kódování quoted_printable. Podpora šablon zatím není.
ps. vycházel jsem z tohoto dokumentu, perfektně popsané pro lidi, co o MIME nic neví (jako ještě před chvílí já ;)
- Patrik Votoček
- Člen | 2221
Davide myslíš že by tam šlo ještě dodělat Fluenty pro všechny set a add metody?
- romansklenar
- Člen | 655
Fajn! Dobré zprávy po ránu. Bude ještě součástí nějaké rozhraní nebo už je to zbytečné?
- Ondřej Brejla
- Člen | 746
Člověk tu oroduje za rozhraní a ona se z toho vyklube classa :-) Super, díky moc!
- Honza Kuchař
- Člen | 1662
Jsem též pro fluenty. :)
Jenom přemýšlím, jak do Nette/Mail naimplementuji nějakou funkci, kterou Nette/Mail nepodporuje. Němělo by to přece jenom fungovat jako, že by Nette/Mail vracel přímo třídu adaptéru (a tím pádem se vrátit k té myšlence interfaců a adaptérů). Tohle řešení mi přijde, že bude mít časem dost veliké nedostatky (rozšiřování pomocí extension method vidím spíš jako nouzovku). Nebo se mýlím?
- kravčo
- Člen | 721
Podľa mňa to až také zlé nebude :)
class MyZendMail extends /*Nette\Web\*/Mail
{
public static $mailer = 'zendMailer';
// funkcia Mail::send() nie je polymorfná...
public function send()
{
return call_user_func(
array(get_class($this), self::$mailer),
$this->build()
);
}
private static function zendMailer($message)
{
Debug::dump($message);
// tu už môže prebehnúť nastavenie pre Zend_Mail
// a aj odoslanie pomocou neho.
}
}
Alebo Nette\Web\Mail
nebola zamýšľaná na takéto
rozširovanie?
- Honza Kuchař
- Člen | 1662
Tak se dívám, že jsme oběhli od původního návrhu. Šlo přece o to, aby jsme mohli používat různé mailery přes stejné příkazy. (abychom mohli kdykoli mailer vyměnit → interface) Tzn. pokud napíšem další mailer, tak nevím co tím získáme. Je to tak, ze ano? :)
Moje vize je taková, někde v config.ini si nastavím adaptér, přes který to budu posílat a celá aplikace začne v tu chvíli posílat emaily přes tento adaptér. Akorát ted nevím, jak nějak šikovně udělat předání uživ. jména a hesla a serveru pro SMTP adapter. Ale asi bych to udělal tak, že si zase v tom config.ini nastavím proměnný a pokud budou v tom adaptéru existovat, tak mi je tam Nette/Mail nastaví. Co vy na to, já myslím, že tohle bude do budoucna určitě lepší.
- Honza Marek
- Člen | 1664
Když budeš chtít vyměnit mailer, tak to bude nejspíš kvůli nějaké pokročilé funkčnosti. A ta v interfacu velice pravděpodobně nebude.
Původní návrh byl tuším spíš taková nouzovka. Já jsem si od toho sliboval, že vznikne několik adaptérů na různé mailery s lidským a stejným ovládáním a každý si bude moct vybrat jemu sympatický. Naším tajným přáním vždy bylo mít nativní mailovací knihovnu v nette :-D
- Honza Kuchař
- Člen | 1662
Aha, no tak dobra. Ale proste uz jsem si za ty leta nejak zvyknul pouzivat PHPMailer. :) No uvidíme tedy co přinese navíc Nette/Web/Mail. :) Hlavně bych se to snažil udělat přehledně (jednotne nazvy,fluent+dedeni z Object,…), protože i když PHPMailer funguje perfektně, tak jeho přehlednost je tedy nic moc. :(
- Honza Marek
- Člen | 1664
Já od něj čekám především šablony, které ještě neumí. Z Objectu dědí snad všechny třídy frameworku. A fluent bych taky uvítal.
- Honza Kuchař
- Člen | 1662
No dodělat podporu šablon pro PHPMailer, není nic složitého. :) Jednoduchý wrapper a je to :)
- Honza Kuchař
- Člen | 1662
Ještě mě napadla taková možnost, co kdyby Nette/Mail
byl
jenom objekt, ve kterém by se udržovaly všechny informace o e-mailu a poté
by se tento objekt předal nějakému maileru/adaptéru, ten už by si e-mail
zpracoval, jak uzná za vhodné. A mailer/adaptér, by musel pouze akceptovat
na vstupu objekt Nette/Mail. A pomocí něčeho v config.ini
by si
člověk zadefinoval, co bude chtít používat jako výchozí mailer/adaptér.
Co vy na to (pane Kraus)? :)
Shrnutí
Měli bychom:
Nette/Mail
Ten by obsahoval hotový email se všemi informacemi. Posléze by se předal:
Nette/Mailer
Který daný e-mail (Nette/Mail) odešle. Chtělo by to možná vymyslet, jak do tohoto objektu naimplemetovat nějaká extras, třeba nějaké hodnoty s kterými se nepočítalo. Navrhuji udělat pole, které si poté zpracuje každý mailer podle sebe.
Nette/IMailer
Obsahoval by
public function send(Mail $mail,$extras/* viz Nette/Mailer */);
.
Toť vše.
Jak by to mohlo vypadat v kódu?
$m = new Mail(/* Environment::getConfig("Mail") */);
$m->defaults = Environment::getConfig("Mail"); // Nastaví výchozí hodnoty Mailu, odesílatele, atd. (opravdu usnadní život :) (alternativa pro variantu volanou přímo v konstruktoru)
$m->from = "...";
.
.
/* Ve výchozím nastavení už byl určen Mailer */
$mr = $m->mailer;
$mr->config = Environment::getConfig("Mailer"); // Nastavil by automaticky z config objektu hodnoty
/* Něco bychom změnili */
$mr->host = "127.0.0.1"; // Mailer je navržen na posílání přes SMTP -> nastavuji host. Jiný mailer třeba nebude mít žádné nastavení.
/* Mailer musí implementovat rozhraní IMailer, které by obsahoval metodu send(Mail $mail); */
$m->send(); // Zde by se vlastně v pozadí davolalo $mr->send($m);
Co vy na to? :) (kopal jsem na zahradě trativod, tak jsem měl čas na přemýšlení, proto je to takové delší :)
//EDIT: Tošku jsem to rozepsal :)
Editoval honzakuchar (26. 5. 2009 21:38)
- Honza Kuchař
- Člen | 1662
Nevim, to co je na SVNku, mi to přijde dosti zmatené nebo jsem to vůbec nepochopil. Jak třeba do toho zavést SMTP (další mailery? dědit třídu? divný ne?)?
- jasir
- Člen | 746
honzakuchar napsal(a):
Nevim, to co je na SVNku, mi to přijde dosti zmatené nebo jsem to vůbec nepochopil. Jak třeba do toho zavést SMTP (další mailery? dědit třídu? divný ne?)?
Jak to chápu – více možností: podědit třídu a přepsat
defaultMailer() nebo send(), případně nastavit vlastní callback přes
Mail::$mailer
na vlastní funkci… Ale s posíláním majlů
nemám moc zkušeností (teda přes php, jinak mi to celkem jde ;)
Editoval jasir (26. 5. 2009 23:10)
- Honza Marek
- Člen | 1664
Spíš nepochopil. Mělo by fungovat něco takového, pokud si vyrobíš třídu SmtpMailer:
$mail = new Mail;
// nastavení mailu
$smtpMailer = new SmtpMailer;
$mail->mailer = array($smtpMailer, "send");
$mail->send();
- jasir
- Člen | 746
Honza M. napsal(a):
Spíš nepochopil. Mělo by fungovat něco takového, pokud si vyrobíš třídu SmtpMailer:
$mail = new Mail; // nastavení mailu $smtpMailer = new SmtpMailer; $mail->mailer = array($smtpMailer, "send"); $mail->send();
Ten callback je statická proměnná, takže se spíš
Mail::$mailer = array($smtpMailer, "send");
. V jedné aplikaci se
asi více typů Mailerů nepoužije, čili to tak i dává smysl :)
- David Grudl
- Nette Core | 8218
Dlouho jsem odolával napsat Nette\Mail, protože mi to připadalo jako něco těžkého a obrovského. Nakonec to byla celkem hračka. Základ by měl být funkční, postupně přidám podporu pro šablony a nejspíš i SMTP odesílání. Bude fajn, když to důkladně otestujete.
Ad „Interface“: popravdě nevidím v tom žádný přínos. Zkuste se reálně zamyslet, k čemu mít jednotný interface pro různé mailery, které dělají de facto to stejné?
Ad „Mail jen jako popisovač:“ v podstatě to tak funguje. Vlastní mailer lze aktuálně nastavit dvěma způsoby:
function debugMailer($mail)
{
file_put_contents('email.eml', $mail->generateMessage());
}
// 1. varianta
Mail::$defaultMailer = 'debugMailer';
// 2. varianta
$mail = new Mail;
...
$mail->send('debugMailer');
- Patrik Votoček
- Člen | 2221
Chcete posílat html e-maily pomocí Nette šablon a
Nette\Web\Mail
?
https://componette.org/search/?…
Edit: Uvítám jakékoliv připomínky a bugy.
Editoval vrtak-cz (27. 5. 2009 8:35)
- romansklenar
- Člen | 655
Asi jsi tam na řádku 110 zapomněl nějaké echo
a
v dokumentaci používáš v ukázce s presenterem třídu Mail
místo PTemplateMail
.
- Honza Kuchař
- Člen | 1662
super, diky za objasneni. Pokud bude trida nette/mail spolehliva, tak to bude urcite veliky prinos. (omlouvam se za natvrdlost, zil jsem v tom ze to bude fungovat jinak, ale uz jste me presvecili, integrace maileru do frameworku je asi opravdu nutnost a kdyz prinese i neco noveho, treba sablonovani :)
- Honza Kuchař
- Člen | 1662
No jak je navržená tahle třída, též vznikne prostor pro vlastní
řešení. Je to dobře vymyšleno. A popravně nevím, co by mít interface na
mailer vlastně přineslo. Protože to jak to funguje teď, je velice podobné
tomu, jak jsem to navrhoval zde
(byl jsem také zastáncem IMailer
a Mailer
ů). Tyhle
2 řešení mi přijdou ve své podstatě shodná, až na to, že mi
rozdělení do tří částí
(Mail
,IMailer
,Mailer
) přijde
přehlednější a jasnější. U tohoto řešení mi chvíli trvalo,
než mi došlo, jak to vlastně funguje. Ale funkčně jsou obě řešení
rovnocená (alespoň mě nenapadají žádné rozdíly).
- Honza Kuchař
- Člen | 1662
David Grudl napsal(a):
Zkuste se reálně zamyslet, k čemu mít jednotný interface pro různé mailery, které dělají de facto to stejné?
Nemyslel jsem (alespoň já) mailerem třeba
PHPMailer
. Myslel jsem, že v nette budou vlasní mailery. Jeden
třeba pro posílanání přes SMTP, druhý přes funkci mail(),… A když by
někdo chtěl používat něco „navíc“, tak by si třeba udělal adaptér,
který by implementoval rozhraní IMailer stejně jako Mailery v nette. A mohl
by to to používat.
Ale znova opakuji, jediný rozdíl mezi řešením od Davida a řešení s Interface mi přijde v přehlednosti. Nebo se přece jenom nějaký rozdíl najde? :)
- David Grudl
- Nette Core | 8218
honzakuchar napsal(a):
Nemyslel jsem (alespoň já) mailerem třeba
PHPMailer
. Myslel jsem, že v nette budou vlasní mailery. Jeden třeba pro posílanání přes SMTP, druhý přes funkci mail(),… A když by někdo chtěl používat něco „navíc“, tak by si třeba udělal adaptér, který by implementoval rozhraní IMailer stejně jako Mailery v nette. A mohl by to to používat.
Jo takhle! Chápal jsem to úplně jinak, návrh interface spíš připomínal rozhraní pro uživatelskou část, než pro samotný odesílač.
Ale znova opakuji, jediný rozdíl mezi řešením od Davida a řešení s Interface mi přijde v přehlednosti. Nebo se přece jenom nějaký rozdíl najde? :)
Ano, callback vs. interface.
Callback je flexibilnější a jednodušší. Hodnotou může být funkce, metoda nebo objekt (v PHP 5.3). Interface představuje čistě objektové řešení, hodnotou může být jen objekt. Interface je ukecanější, musí existovat soubor s interface + třídu, výchozí implementací. Nicméně interface je mnohem silnější prostředek. Callbackem lze nahradit jen interface, který má právě jednu metodu.
Celá věc stojí asi takto: buď se použije callback, nebo se použije interface a celá věc se přesune do nového jmenného prostoru Nette\Mail. Co myslíte?
- Honza Kuchař
- Člen | 1662
No já protože se mi stále více líbí interface, tak jsem si ten mailer napsal. Použijte z toho co chcete. (za nic neručím, je to psaný dost na rychlo – za dnešní odpoledne, protože se mi nechtělo genervat něco na vstup do funguje mail, tak jsem si vytvořil adaptér na PHPMailer, ale nacpat tam můžete cokoli.)
Co to umí navíc?
Templaty
Mailery jsou odělené třídy, takže je to (podle mě) přehlednější.
Fluenty
Co to zatím neumí, ale bude umět – v nejbližších dnech?
Posílat soubory
Posílat intergrované obrázky
Konfigurace (jak výchozí Mailu, tak Maileru) – tzn. přímo v kódu mám
zatím nastavený SMTP (prozatimě)
zdrojáky stahuje zde
Ukázka
// Odešleme e-mail
$m = new MMail();
$m->from = "Pan Pokusný <test@test.cz>"; // Přeloží se do objektu EmailParticipant
$m->addTo("test2@test2.com","Pan Pokusný ěščřžýáíé");
$m->subject = "Přředmět";
$m->body = new Template; // Body akceptuje Template, string, html - rozlišení string/html je buť ruční $m->messageType = MMail::TEXT; nebo automatické: hledá se podle reg. výrazu
$m->body->setFile(dirname(__FILE__)."/test.phtml");
/*
Je tam hromada dalšího nastavení - projděte si zdroják
*/
$m->send();
EDIT: Dělení
Použito rozdělení na: (ty Mka jsou tam, protože už je Mail odsazen)
– IMMailer
– MMailer
(výchozí implementace)
– MMail
– + Hormada dalších Mailer
ů/adaptérů
//EDIT II.: Jsem to mohl napsat o 2 min později. Bylo by to více dnešní :)
Editoval honzakuchar (28. 5. 2009 8:21)
- Honza Kuchař
- Člen | 1662
Ochutnávka v. 0.2
/* Defaults */
MMail::setDefaultMailer(new phpMailerAdapter)/* Returns IMailer */
->setConfig(array(
"Host"=>"mail.karneval.cz",
));
MMail::setDefaults(array(
"From"=>"Jan Kuchař <honza@test.cz>",
));
$m = new MMail();
//$m->from = "Pepa Pokusný <ahoj@test.cz>";
// $m->from je object, takže k němu můžeme přistupovat i takto: $m->from->email; nebo $m->from->name;
/* Můžete používat též $m->addTo("Jan Kuchař <honza@test.cz>"); */
$m->addTo("honza@test.cz","Jan Kuchař");
//$m->addCc("honza@test.cz","Jan Kuchař");
//$m->addBcc("honza@test.cz","Jan Kuchař");
//$m->removeBcc("honza@test.cz");
//Debug::dump($m->bcc);
//$m->replyTo = "Jan Kuchař <test@pokus.it>";
$m->subject = "Test";
$m->priority = MMail::PRIORITY_HIGH; // Default is NORMAL
//$m->messageType = MMail::TEXT; // Now autodetect
/* Ukázka autodetekce obsahu */
/* Body nastavovat až po definování všeho - jinak nebude možnost přepsat hodnoty mailu */
$m->body = $m->fromTemplate(
new Template, /* new Template or Presenter */
dirname(__FILE__)."/test.phtml", /* This is only shotrcut */
TRUE /* CurlyBrackets? */
);
$m->body->someVar = "test";
//$m->body = "Ahoj jak se mas. Tahle zpráva bude v textovém režimu.";
//$m->body = "Ahoj jak se mas.<br>Tahle zpráva bude v html režimu.";
/* Ruční přepsní */
/*
$m->messageType = self::TEXT;
$m->body = "Tato zprava bude v textovem režimu. <br> asdasdasdasdasd. (BR bude v textovém režimu)";
*/
$m->send(/* Here you can also set mailer, but only with default settings */);
Ukázka templatu
Textový template
{?
//$mail->subject = "Předmět";
//$mail->messageType = MMail::TEXT; // Může být a nemusí, pokud se v mailu nevyskytují html tagy, tak se automaticky rozpozná, že email je textový
}
Test z templatu :)
asdasd
asd
HTML template
{?
//$mail->subject = "Předmět";
//$mail->messageType = MMail::HTML; // Může být a nemusí, pokud se v mailu vyskytují html tagy, tak se automaticky rozpozná, že email je html
}
Test z templatu :)<br>
<b>asdasd</b>
asd
Metody jsou už plně fluentní.
Stahujte
Vývojovou verzi můžete stahovat zde.
Prosím napište mi feedback.
Co tahle verze ještě stále neumí?
- Soubory
- Vložené obrázky
- Víte o něčem, co se ještě používá často?
Editoval honzakuchar (28. 5. 2009 22:14)
- Ondřej Brejla
- Člen | 746
Možná bys to nemusel postovat sem, ale dát to rovnou do Code snippets repository, imho to tam patří, tady ti to nejspíš časem zapadne…
- David Grudl
- Nette Core | 8218
Proč na to nevyužiješ Nette\Mail, který přiložené obrázky posílat umí a nepotřebuje PHPMailer?
(já mám pocit, že mi tohle téma nějak uniká… budete mi to musit vysvětlit v sobotu :-)
- Honza Marek
- Člen | 1664
Já ho taky nechápu :) Myslím, že mu chybí SMTP odesílání, ale taky nevím, proč s tím tak koumá.
- Ondřej Brejla
- Člen | 746
Já taky pořádně nevím k čemu to všechno, ale tak třeba to má nějaký hlubší smysl :)
Koukám, že na svnku už se objevil IMailer, moc pěkné :) Jen mě napadlo, jestli by nebylo hezčí, kdyby se jiný než defaultní mailer mohl předávat už v konstruktoru? Předávat ho až v send()…nevim…proč to tak vlastně je? Asi to nějaký smysl má?
Editoval Warden (28. 5. 2009 21:41)
- Honza Kuchař
- Člen | 1662
- Na ten PHPMailer se vůbec nedívejte. Udělal jsem si prostě mailer, který to předá PHPMaileru, ale mailery můžou posílat přes cokoli jiného. (třeba přes funkci mail(), ale to se mi nechtělo implementovat, to až někdy časem)
- Smysl: Význam to má asi tak stejný, jako Nette/Mail. :) (odesílat maily) Akorát zde jsou mailery jednoduše konfigurovatelné (a každý mailer, je zastoupen jednou třídou). A podle mě je to celé přehlednější. Pokud by se mělo tohle používat, tak bych si to představil nějak tak, že pomocí současné MMail si zajistím data emailu. Při zavolání send() se mi předpřipaví data pro mailer (převede se to všechno do UTF-8 pokud v něm mail ještě není). Data se předají maileru/adaptéru, který dělá to co v této chvíli Nette/Mail (vygeneruje mail, hlavicky, atd.) a odešle (nebo v případě adpatéru předá další přídě, která mail zpracuje). Klidně může existovat ještě mezi Mailer, který ten objekt MMail převede text (jak to dělá Nette/Mail). A ten by se poté zpracovával dál. Bla, bla, bla. Prostě rozšířitelnosti se v tomto řešení meze nekladou. Jediný rozdíl je tedy v rozšířitelnosti a přehlednosti.
- Souvisí to s bodem 2): Podle mě, by se měla odělit třída na samotné
odeslání mailu (
MMailer
). A třída, ve které se udržují data o mailu. (MMail
)
Pozn.: Tenhle balíček, jsem psal z jediného důvodu. Pokud by se zde zalíbil, mohl by se implementovat do nette. (nechci se vnucovat, jenom že proti tomu nic nemám)
Ještě pro ujasnění: Mailerem zde
nemyslím něco jako PHPMailer, ale třídu implementující
rozhraní IMMailer
. Tato třída přijímá na vstupu objekt
MMail
a odešle e-mail. Z objektu MMail
si vytahá co
umí zpracovat. Zbytek prostě nechá být.
P.S.: Jak tak vidím, tak se David s tím interface inspiroval. :) (IMailer)
Editoval honzakuchar (28. 5. 2009 22:20)
- Honza Marek
- Člen | 1664
Feature request: Uvítal bych, kdyby se při neodeslaném mailu vyhodila výjimka.
- Honza Kuchař
- Člen | 1662
Honza M. napsal(a):
Feature request: Uvítal bych, kdyby se při neodeslaném mailu vyhodila výjimka.
Zkus ten MMail :) (ale předpokládám, že to bylo na Davida)
- David Grudl
- Nette Core | 8218
honzakuchar napsal(a):
- Smysl: Význam to má asi tak stejný, jako Nette/Mail. :) (odesílat maily)
Tedy jde o alternativu pro Nette\Mail. Tož jako proč né, ale měl jsi to napsat o týden dřív :-)) V této chvíli už mám pocit, že to jde trošku mimo Nette. Nicméně fandím tvé snaze, napsat si mailer je dobré cvičení.
P.S.: Jak tak vidím, tak se David s tím interface inspiroval. :) (IMailer)
Ano, interface mi připadá čistší; nadhodil jsem tohle téma včera, ale popravdě už když jsem se ptal na názor, byl jsem rozhodnut.
- Honza Kuchař
- Člen | 1662
No dobre, beru to jako cviceni. :) Ale strávil jsem s tím 2 odpoledne, tak doufám, že Nette/Mail bude alespoň stejně použitelné. :))
- _Martin_
- Generous Backer | 679
Na počátku byly Maily, spousty Mailů, složitých, tajemných a ďábelských – až přišel Nette člověk
- Nette člověk chtěl svatý Mail, který by jej ochránil od nástrah ďábelských Mailů – a byl odmítnut.
- Všichni Nette lidé chtěli svatý Mail, který by je ochránil od nástrah ďábelských Mailů – a byli odmítnuti.
- Nette člověk se rozhodl vytvořit vlastní Mail, který by jej ochránil od nástrah ďábelských Mailů.
- Bůh stvořil svatý Mail a dal jej Nette lidem.
- Nette člověk zavrhl svatý Mail a stvořil Mail svůj, spolupracující s Maily ďábelskými.
- ?
Ani už nevím, v kterém tom kroku jsem tuhle diskuzi přestal chápat, ale děkuji Davidovi za pěknou třídu, děkuji Honzovi za pěknou třídu a teď, když mě omluvíte, musím si jít napsat svůj zbrusu nový Mail…
P.S. Pokud se vás tento článek dotkl, pravděpodobně se díváte na svět moc vážnýma očima – ale pevně věřím, že se nic takového nestalo=)
- Honza Kuchař
- Člen | 1662
S těma Mail(er)ama to dopadlo skoro stejně jako u flashMessagingu. :) Možná by to chtělo nějakou stránku s tím co se bude dělat a kdy (nějaký plán) a co už je hotovo. Nebo něco takového existuje?
// EDIT: _Martin_: Zatracený dábelský maily! :)) No bod 6) mě teda docela zajímá. :))
P.S.: Pro Davida: No alespoň jeden účel jsem pro ten můj Mail našel: Třídy jsou si velice podobné. (a došli jsme k tomu každý sám) → Je to dobré řešení. Ale přesto si myslím, že by se ještě mohlo Nette/Mail inspirovat a to v:
- Konfiguraci (výchozí nastavení Mail; nastavení Maileru – když bude odesílat přes SMTP, musím mu nějak předat tu konfiguraci, že :)
- Nějakou zkratku na vytvoření mailu z templatu. (+ do templatu předat aktuální instanci Mail – $mail)
- (detail) Neudělat na dvojici email a jméno třídu? S metovou __toSring(); Je to zase podle mě přehlednější a jednoduší. (v MMail je to EmailParticipant – mázase __toString(), kde to to převede do patřičného formátu) + EmailParticipantList (není implementováno, ale v __toString by se odělily EmailParticipant-i čárkami)
- Podpora html/text mailu + ruční přepínání režimu + jako výchozí autodetekce (viz MMail)
- Kontrola před odesláním – vyplnil jsem odesílatele? Vyplnil jsem předmět? vyplnil jsem tělo? → jinak výjimka.
- Fluent – už je od rev. 300
Editoval honzakuchar (29. 5. 2009 17:19)
- David Grudl
- Nette Core | 8218
honzakuchar napsal(a):
S těma Mail(er)ama to dopadlo skoro stejně jako u flashMessagingu. :) Možná by to chtělo nějakou stránku s tím co se bude dělat a kdy (nějaký plán) a co už je hotovo. Nebo něco takového existuje?
To by nepomohlo. Protože bylo jasně řečeno, že něco tak složitého jako je mailování se v dohledné době dělat nebude ;)
- Konfiguraci (výchozí nastavení Mail; nastavení Maileru – když bude odesílat přes SMTP, musím mu nějak předat tu konfiguraci, že :)
Tam se předá nakonfigurovaný objekt SmtpMailer například do Mail::$defaultMailer (časem bude nahrazeno asi za Environment). Výchozí nastavení maileru jsem neřešil, připadá mi čistší si udělat potomka. (cokoliv přes statické třídy je potenciální zlo.)
- Nějakou zkratku na vytvoření mailu z templatu. (+ do templatu předat aktuální instanci Mail – $mail)
Jojo, podpora templates je velmi důležitá, ale komitnu to, až to budu mít perfektně vyladěné.
- (detail) Neudělat na dvojici email a jméno třídu? S metovou __toSring(); Je to zase podle mě přehlednější a jednoduší. (v MMail je to EmailParticipant – mázase __toString(), kde to to převede do patřičného formátu) + EmailParticipantList (není implementováno, ale v __toString by se odělily EmailParticipant-i čárkami)
- Podpora html/text mailu + ruční přepínání režimu + jako výchozí autodetekce (viz MMail)
To by mělo fungovat: pokud je nastaveno HTML, půjde o text/html email. Pokud chybí text, bude vygenerován z HTML.
- Kontrola před odesláním – vyplnil jsem odesílatele? Vyplnil jsem předmět? vyplnil jsem tělo? → jinak výjimka.
Pravda, to by se asi mělo přidat.
- Honza Kuchař
- Člen | 1662
Tak výborně. :) Když ty 3 body odškrtneme(bod 1. – souhlas; bod
4. je opravdu blbost :)), tak bude Nette/Mail
lépe použitelné
než MMail
→ budu ho pužívat :).
Ještě jsem objevil jednu věc, co používám na PHPMaileru:
Předám mu html (v případě Nette/Mail by to byl template) soubor. → co
v něm najde obrázky automaticky je přidá do mailu (jako inline). Opravdu
užitečné a jednoduché. A začátečníka to určitě osloví – je to
takové hodně efektní. :)
Každopádně vývoj MMail
je UKONČEN. :)
- David Grudl
- Nette Core | 8218
vrtak-cz napsal(a):
Je nějáký důvod proč fluent nemají i metody add*?
Je tam třeba addAttachment, které vrací objekt vytvořeného attachmentu. Takže obecně u add- metod je dávat fluent problematické, protože se to nedá (ani u tak jednoduché třídy) udělat plošně a konzistentně. Takže raději (zatím) bez fluent.
honzakuchar napsal(a):
Předám mu html (v případě Nette/Mail by to byl template) soubor. → co v něm najde obrázky automaticky je přidá do mailu (jako inline). Opravdu užitečné a jednoduché. A začátečníka to určitě osloví – je to takové hodně efektní. :)
Jojo, to jsem do těch šablon dal taky, pokusím se co nejdříve komitovat.
- kravčo
- Člen | 721
honzakuchar napsal(a):
Předám mu html (v případě Nette/Mail by to byl template) soubor. → co v něm najde obrázky automaticky je přidá do mailu (jako inline). Opravdu užitečné a jednoduché. A začátečníka to určitě osloví – je to takové hodně efektní. :)
Pokiaľ som to správne vyčítal zo zdrojákov, Nette\Mail\Mail
má toto implementované (samozrejme len v prípade html tela), a ani pridanie
šablón do buildovacieho reťazca by to nemalo nijako narušiť…