Stránka Návrh interface IMailer

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

Diskuse ke stránce Návrh interface IMailer


Na riešenie mailov s viacerými časťami (plaintext + html verzia) by bola veľmi vhodná nejaká všeobecná metóda:

function addMimePart($string, $type = self::MIME_TEXT, $id = NULL);

pomocou nej sa dajú pridať viaceré časti: text/plain, text/html, inline obrázky, otázka, či ju bude na čo napojiť… ja totiž s nejakými advancovanými mailovacími triedami skúsenosti nemám…

xificurk
Člen | 121
+
0
-

Myslím, že interface by měl zapouzdřovat i odesílání pomocí SMTP – osobně používám celkem často odesílání mailu pomocí smtp a emailu na Google Apps. V PHPMaileru tedy něco takového:

<?php
$mail->IsSMTP();
$mail->SMTPAuth   = true;
$mail->SMTPSecure = 'ssl';
$mail->Host       = 'smtp.gmail.com';
$mail->Port       = 465;
$mail->Username   = 'no-reply@mydomain.com';
$mail->Password   = 'secret';
?>
Panda
Člen | 569
+
0
-

Drobný návrh: u funkcí getTo(), getCc() a getBcc() by možná bylo užitečnější místo řetězce typu

"Jméno 1" <jedna@mail.com>, "Jméno 2" <dva@mail.com>

vracet spíš pole adres:

array(
	0 => '"Jméno 1" <jedna@mail.com>',
	1 => '"Jméno 2" <dva@mail.com>'
);

Možná by také nebylo úplně od věci vracet to pole asociativní pro snazší manipulaci:

array(
	'jedna@mail.com' => '"Jméno 1" <jedna@mail.com>',
	'dva@mail.com' => '"Jméno 2" <dva@mail.com>'
);

a pak přidat třídy removeTo($mail), removeCc($mail) a removeBcc($mail). Podobně by třeba metody setTo(), setCc() a setBcc() mohly přijímat pole příjemců, aby se nemuselo vše řešit opakovaným voláním addSomething().

xificurk
Člen | 121
+
0
-

Vzhledem k tomu, že To, Cc, Bcc jsou z principu vždy seznamem adresátů daného typu, domnívám se, že je naprosto přirozené, že settery a gettery pro tyto vlastnosti budou pracovat vždy s poli. Jako dozumný kandidát pro formát takového pole se mi zdá 'me@example.com' => 'My name' – to z toho důvodu, že email by v těchto seznamech měl být vždy unikátním identifikátorem.

Pro ulehčení práce při odesílání emailů jedinému uživateli se můžou přidat metody add{To|Cc|Bcc}($email, $name = NULL), eventuelně by se ještě mohly hodit již zmiňované remove{To|Cc|Bcc}($email).

Patrik Votoček
Člen | 2221
+
0
-

xificurk napsal(a):

Jako dozumný kandidát pro formát takového pole se mi zdá 'me@example.com' => 'My name' – to z toho důvodu, že email by v těchto seznamech měl být vždy unikátním identifikátorem.

A jak budeš řešit případ kdy máš pouze e-mailové adresy? a nemáš k nim jména?

Patrik Votoček
Člen | 2221
+
0
-

Něco malinko jsem tam doplnil tak na to mrkněte…

xificurk
Člen | 121
+
0
-

vrtak-cz napsal(a):

A jak budeš řešit případ kdy máš pouze e-mailové adresy? a nemáš k nim jména?

Jednoduše, přeci 'me@example.com' => NULL, ale je pravda, že současná odlehčená verze interface bez zbytečných setterů a getterů je asi lepším řešením.

Honza Kuchař
Člen | 1662
+
0
-

Nedával bych tam setHTML() hrozně to mate. Ale dal bych setType() nebo setMailType() a do parametru by se zadávaly konstanty const HTML='html'; const TEXT='text';. Co vy na to?

To jestli odesílat přes SMTP bych nijak nestandardizoval. Nechal bych to na adaptéru. Resp. asi uplně nejprehlednejsi by bylo kdyby adapter umel odesilat pouze jednim zpusobem. Tzn. PHPMailerAdapter by bylo abstract a potom by se pouzivalo PHPMailerSMTPAdapter. To co tu stvoril David mi prijde, ze je prave to znovu vynalezani kola, kteremu jsme se chteli vyhnout. Nebo ne?

Jod
Člen | 701
+
0
-

Ale mail môže byť aj textový aj html zároveň.

Honza Marek
Člen | 1664
+
0
-

Už se vyhnout nechcem :-D

Honza Kuchař
Člen | 1662
+
0
-

No jasne, pokud je HTML, tak se textová verze vygeneruje automaticky, pokud je textová, HTML verze neexistuje.

To setType jsem myslel jako náhradu za:

    // html e-mail?
    /**
     * @var bool $html
     */
    public function setHtml($html);
    /**
     * @return bool
     */
    // public function isHtml();

které mi připadá matoucí

Editoval honzakuchar (26. 5. 2009 16:47)

Honza Kuchař
Člen | 1662
+
0
-

Honza M. napsal(a):

Už se vyhnout nechcem :-D

Ach jo. :D Ale stejně si myslím, že je lepší to řešení s tím interface a adaptery. Asi si zkusím něco takového implementovat, protože mi to prostě nedá. Připadá mi to mnohem šikovnější, než psát další mailer… Proč taky že? :)

Tomik
Nette Evangelist | 485
+
0
-

Někde je může nastat situace, kdy je potřeba do mailu uložit něco jiného do HTML a něco jiného do textu (např. dovětek pro textovou verzi, že se jedná o pouze textovou verzi, a že pokud chce čtenář vidět vše, jak má, měl by navštívit: a odkaz na HTML verzi vyvěšenou někde na webu…

Honza Kuchař
Člen | 1662
+
0
-

Jeste me tak napadlo. Zadny setType bych nedelal. Udelal bych, ze pokud tam vlozis pres setHtmlBody(), tak bude typ automaticky HTML a vygeneruje se i textova verze (která se též pomocí setTextBody() uloží, ale pouze pokud by vratilo getTextBody() prazdny string, aby pokud si predefinujeme textBody v templatu, aby se nam potom neprepsal automaticky vygenerovanym), ktera se bude dat zmenit pomoci setTextBody().

Honza Marek
Člen | 1664
+
0
-

Ale pokud mailer bude podporovat šablonování, tak jak poznáš, jestli je mail v html?

Honza Kuchař
Člen | 1662
+
0
-

Budu předpokládat, že mail je v HTML. (pokud tam nebudou žádné tagy, tak se stejně vygeneruje úplně stejně i altBody)

Inza
Člen | 330
+
0
-

Hej! Co je jako tohleto za stránku?;-) – To je jen jako takový whiteboard ne? Jste zneužili dokumentaci…! Pacholci!:-D Což mi připomíná že bychom na podobné výtřnosti mohl zavésti sekci… Návrhy nebo whiteboard, páč mi cosi říká že tenhleten „návrh“ není poslední… – odkud se na to odkazuje?

Inza
Člen | 330
+
0
-

Tak jsem vám to poladil ještě lépe: už jsem vám vytvořil hezky stránkečku, kde si můžete s návrhy hráti: https://nette.org/cs/vyvoj/design si tam pak přidejte další…