Nativní Nette\Mailovací class? Asi ne…Interface? ANO!

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Honza Marek
Člen | 1664
+
0
-

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
+
0
-

Honza M. napsal(a):

Nevim na co je dobrej nette mail bez šablon :-)

Souhlas :)

Patrik Votoček
Člen | 2221
+
0
-

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 | 8142
+
0
-

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
+
0
-

Davide myslíš že by tam šlo ještě dodělat Fluenty pro všechny set a add metody?

romansklenar
Člen | 655
+
0
-

Fajn! Dobré zprávy po ránu. Bude ještě součástí nějaké rozhraní nebo už je to zbytečné?

Honza Marek
Člen | 1664
+
0
-

Díky.

Ondřej Brejla
Člen | 746
+
0
-

Člověk tu oroduje za rozhraní a ona se z toho vyklube classa :-) Super, díky moc!

Honza Kuchař
Člen | 1662
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

No dodělat podporu šablon pro PHPMailer, není nic složitého. :) Jednoduchý wrapper a je to :)

Honza Kuchař
Člen | 1662
+
0
-

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)

xificurk
Člen | 121
+
0
-

honzakuchar: jo tohle řešení by se mi hodně líbilo, hlavně odpadají problémy s tím, že každý mailer umí něco jiného (viz. neschopnost dohodnout se na rozumném interface pro mailer výše), prostě si naloží s mailem, jak (ne)umí.

hrach
Člen | 1834
+
0
-

kdo sleduje daviduv twitter tak vi, ze david uz asi vytvoril vlastni mailovaci tridu, takze nebude treba zadnych rozhrani… :)

jasir
Člen | 746
+
0
-

hrach napsal(a):

kdo sleduje daviduv twitter tak vi, ze david uz asi vytvoril vlastni mailovaci tridu, takze nebude treba zadnych rozhrani… :)

No, v SVNku je snad už od rána, takže ne asi, ale určitě :)
Vždyť už Vrtak hledá chyby přece :)

Honza Kuchař
Člen | 1662
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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 | 8142
+
0
-

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
+
0
-

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
+
0
-

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.

Patrik Votoček
Člen | 2221
+
0
-

Thx. Opraveno.

Honza Kuchař
Člen | 1662
+
0
-

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 :)

arron
Člen | 464
+
0
-

Ja se teda osobne stale priklanim k interfacu (skoro bych rekl, ze nakonec stejne vznikne, kdyz vidim, ze jeste pred mesicem byl tento napad jednoznacne zavrhnut a jak to nekonec dopadlo:-)), protoze tim vznikne (tak jako snad vsude v Nette) prostor pro vlastni reseni.

Honza Kuchař
Člen | 1662
+
0
-

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
+
0
-

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 | 8142
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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 | 8142
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-
  1. 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)
  2. 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.
  3. 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
+
0
-

Feature request: Uvítal bych, kdyby se při neodeslaném mailu vyhodila výjimka.

Honza Kuchař
Člen | 1662
+
0
-

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 | 8142
+
0
-

honzakuchar napsal(a):

  1. 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
+
0
-

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
+
0
-

Na počátku byly Maily, spousty Mailů, složitých, tajemných a ďábelských – až přišel Nette člověk

  1. Nette člověk chtěl svatý Mail, který by jej ochránil od nástrah ďábelských Mailů – a byl odmítnut.
  2. Všichni Nette lidé chtěli svatý Mail, který by je ochránil od nástrah ďábelských Mailů – a byli odmítnuti.
  3. Nette člověk se rozhodl vytvořit vlastní Mail, který by jej ochránil od nástrah ďábelských Mailů.
  4. Bůh stvořil svatý Mail a dal jej Nette lidem.
  5. Nette člověk zavrhl svatý Mail a stvořil Mail svůj, spolupracující s Maily ďábelskými.
  6. ?

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
+
0
-

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:

  1. Konfiguraci (výchozí nastavení Mail; nastavení Maileru – když bude odesílat přes SMTP, musím mu nějak předat tu konfiguraci, že :)
  2. Nějakou zkratku na vytvoření mailu z templatu. (+ do templatu předat aktuální instanci Mail – $mail)
  3. (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)
  4. Podpora html/text mailu + ruční přepínání režimu + jako výchozí autodetekce (viz MMail)
  5. Kontrola před odesláním – vyplnil jsem odesílatele? Vyplnil jsem předmět? vyplnil jsem tělo? → jinak výjimka.
  6. Fluent – už je od rev. 300

Editoval honzakuchar (29. 5. 2009 17:19)

David Grudl
Nette Core | 8142
+
0
-

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 ;)

  1. 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.)

  1. 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é.

  1. (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)

You Ain't Gonna Need It ;)

  1. 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.

  1. 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.

Patrik Votoček
Člen | 2221
+
0
-

Je nějáký důvod proč fluent nemají i metody add*?

Honza Kuchař
Člen | 1662
+
0
-

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 | 8142
+
0
-

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
+
0
-

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ť…