Stránka Návrh interface IMailer
- kravčo
- Člen | 721
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
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
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
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
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?
- Honza Kuchař
- Člen | 1662
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?
- Honza Kuchař
- Člen | 1662
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
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
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
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
Ale pokud mailer bude podporovat šablonování, tak jak poznáš, jestli je mail v html?
- Honza Kuchař
- Člen | 1662
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
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
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ší…