[addon mail-library] MailLibrary – stahujte si maily z mail serveru

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

Nette: >= 2.0.8
PHP: >= 5.3
Git: repozitář
Addons: MailLibrary

MailLibrary je addon pro Nette umožňující stahování mailů z mail serveru.

Jakékoliv návrhy nebo bugy hlaste na gitu (issues/pull requests)

Editoval greeny (4. 3. 2013 14:04)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Bylo by super, kdyby ta knihovnička nabízela klasické metody. Všechna ta magická rozhraní jsou sexy, ale stačí, když budou pro ty standardní metody aliasem.

greeny
Člen | 405
+
0
-

Dobrá připomínka, zapracuju na tom ;)

enumag
Člen | 2118
+
0
-

Héézký, to asi někdy vyzkouším. :-)

  • Mohl bys tam přidat nějakou opensource licenci? Takto nikdo kromě tebe nemá právo kód použít.
  • Dalším krokem by mohl být composer. ;-)
greeny
Člen | 405
+
0
-

Licence, hm, dobrej nápad :D
composer – jen co se s ním naučím ;)

greeny
Člen | 405
+
0
-

Composer, licence přidána

Filip Procházka
Moderator | 4668
+
0
-

Až na těch pár drobností to vypadá dobře :)

greeny
Člen | 405
+
0
-

Do composer.json se verze nepíšou, když máte balíček verzovaný – raději udělej tag na repozitáři ;)

S composerem se teprve učím, odstraním to.

Měl bys definovat i autoloading

Nepostará se náhodou o autoloading RobotLoader? Vzhledem k tomu, že Nette je povinnou součástí addonu, tak ho tam uživatel mít bude.

CharsetConverter by slušela výjimka v konstruktoru

Přidám hned jak to půjde ;)

zdá se mi to, nebo procházíš úplně všechny emaily, co ve schránce jsou a načítáš je do paměti? asi by bylo dobrý mít tam nějakou formu stránkování

To nevím, asi si špatně pochopil kód. Je stránkování si obstará sám uživatel tím, že získá počet mailů a jejich idčka pomocí daných funkcí.
Jedinné co se načte vždycky je seznam idček mailů. Headery a struktury se načítají až v případě potřeby.

enumag
Člen | 2118
+
0
-

O autoloading se RobotLoader nepostará, respektive neměl bys s tím počítat. Téměř všechny knihovny s composerem mají autoloading vyřešený v composer.json takže je zvykem složku vendor do RobotLoaderu nedávat a načíst si pouze vendor/autoload.php, který vygeneruje Composer během instalace závislostí.

Vzhledem k tomu kolik e-mailů může ve schránce být mi připadá i loadování všech IDček trochu nevhodné. Je možné řešit to jinak?

greeny
Člen | 405
+
0
-

V příští verzi plánuju určité změny v načítání, možnost plné kontroly nad složkama, označování mailů flagama, apod. Určitě na to někdy dojde ;)

Filip Procházka
Moderator | 4668
+
0
-

S tím autoloadingem je to trochu složitější. RobotLoader bys rozhodně na knihovny, které instaluješ přes Composer, používat neměl! Tak ho tam prosím doplň dle schématu, až budeš mít chvilku ;)

Jedinné co se načte vždycky je seznam idček mailů. Headery a struktury se načítají až v případě potřeby.

I to je moc :) Co když budu mít ve schránce milion emailů? Vytvoříš pole o milionu objektů, abys načetl jeden?

Od několika tisíc emailů začne být úplně jedno, že načítáš jenom IDčka :)

greeny
Člen | 405
+
0
-

Autoloading hotov, nová verze, na které dělám, bude obsahovat možnost omezení počtu mailů.

Honza Kuchař
Člen | 1662
+
0
-

Vypadá to parádně. Přidal bys to i do doplňků? Ideálně do anglické sekce?

greeny
Člen | 405
+
0
-

Je to tam, i v české, i v anglické ;)

Honza Kuchař
Člen | 1662
+
0
-

Omlouvám se, tu na fóru chybí link na doplněk v prvním příspěvku, tak jak to mají ostatní doplňky, to mě zmátlo.

greeny
Člen | 405
+
0
-

Vpohodě, já to tam dal až potom cos napsal ;) :D

Honza Kuchař
Člen | 1662
+
0
-

Mimochodem zvážil bych jméno doplňku – není totiž úplně jasné, co dělá… Většinou se totiž maily z PHP aplikací odesílají.

greeny
Člen | 405
+
0
-

Odesílání bude podporováno taky ;)

Honza Kuchař
Člen | 1662
+
0
-

Nedělal bych z toho moloch. Stačí konverze mailu do Nette\Mail\Mail. Tak už s tím provedeš co potřebuješ, pošleš přes jaký ovladač chceš.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Velmi dobrá připomínka, stačí, když to bude umět číst maily, třídit je do složek apod. Odesílání je v Nette krásně vyřešeno.

greeny
Člen | 405
+
0
-

Taková implementace byla samozřejmě v plánu :D

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Skvělé :).

greeny
Člen | 405
+
0
-

Na githubu je už první část nové verze 2.0, která je výsledkem refactoringu téměř celé knihovny. Také je k tomuto jádru, které už se nejspíš měnit nebude, sepsána dokumentace (pro zvědavce ;) ) Jakékoliv návrhy na vylepšení uvítám, kdo by chtěl vidět kód, může si na GitHubu najít branch „2.0“.

Dokumentace zde:
http://greeny.github.com/MailLibrary/

one-two
Člen | 80
+
0
-

Pěknej tool, mám pár dotazů:

  • plánuje se práce se složkama (přesun do podsložek, stromová struktura atd.)?
  • s jakejma emailovejma serverama to kamarádí?
  • zvládá to v pohodě český znaky v názvech složky?

Měl sem totiž tu čest „patlat“ jednoho emailovýho klienta a byl sem dost zoufalej, když sem viděl jak si každej server (Google, Courier, Dovecot) jinak řeší systémový názvy složek a k tomu občas mrskne takovej pseudo-prefix, nehledě na to, že na jednom dokonce asi dvě standardní PHP imap_* funkce prostě fungovaly špatně… co sem pak koukal do Squirrelmailu tak tam to snad řešili tak, že natvrdo vytvořej spojení se serverem a volaj přímo IMAP příkazy :)

greeny
Člen | 405
+
0
-

No, momentálně je vývoj z nedostatku času pozastaven, ale mám v plánu pokračovat tak do týdne…

  • práce se složkama již je téměř hotová a bude plně podporována
  • v podstatě zatím testováno jen na Googlu, ale ve 2.0 bude podpora driverů (IMAP driver, POP3 driver, apod.), takže v podstatě jakýkoliv mailserver…
  • český znaky by to zvládat mělo, uvidím, jak proběhne test na různé mailové servery…

Co se týče imap_* fcí, je to hrůza a nedá se s tím dělat – proto jsem začal psát tuto knihovnu

akadlec
Člen | 1326
+
0
-

Tak co jak pokračuje vývoj tohodle rozšíření?

greeny
Člen | 405
+
0
-

Vpodstatě pozastaven do doby než budu mít víc času než teď… Omlouvám se všem, kdo čekají, ale mám teď dost práce + maturitní ročník…

akadlec
Člen | 1326
+
0
-

A nechceš hodit na git do toho rozpracovaného barnche cos dokončil?

greeny
Člen | 405
+
0
-

na gitu je branch 2.0 kde je aktuálně co mám hotové + http://greeny.github.io/MailLibrary je dokumentace jak to pojede

Editoval greeny (3. 10. 2013 21:38)

akadlec
Člen | 1326
+
0
-

Super, aspoň sem tedy chytl tu myšlenku a doladil pro mé použití, ale stejnak je ten IMAP peklo :(

greeny
Člen | 405
+
0
-

imap_* funkce jsou ještě 100× horší než čisté připojení k serveru a volání IMAP příkazů, ale stejně pro to jsou v plánu Drivery (IMAP, POP3, plain socket, apod.)

greeny
Člen | 405
+
0
-

Tak se mi trochu uklidnila škola a já se mohl vrátit k MailLibrary…

Přehled novinek v nové verzi (akruálně branch dev)

  • podpora driverů (zatím mám jen IMAP, ale časem možná přibydou další)
  • filtrování mailů (podobně jako Nette\Database)
  • podpora více Mailboxů
  • odstranění závislosti na Nette (tohle neberte prosím jako že bych měl něco proti Nette… Nette je super, ale po důkladné inspekci kódu jsem zjistil, že použití Nette v MailLibrary je maximálně parkrát třída Strings a Object, což je skoro zbytečné)
  • budu psát i testy (zatím tam žádné nejsou, ale budou)

Hledal jsem taky na GitHubu a Googlu a nenašel jsem skoro žádnou podobnou knihovnu, tak doufám, že se alespoň trochu rozšíří. Příjmám jakékoliv nápady ;)

P.S.: Nevím, když už MailLibrary není závislá na Nette, jestli tohle není trošku offtopic, ale doufám, že mě za to neukamenujete :D

greeny
Člen | 405
+
0
-

Přidal jsem testy a pár bugfixů a featurek, teď už jen zbývá dořešit Attachmenty, flagy, řazení a stránkování mailů a konečně způsob, jak testovat ImapDriver :D

forkman
Člen | 72
+
0
-

Tenhle addon je bomba, dost by se mi hodil, ale potřeboval bych i podporu pro přílohy. Kdybych mohl nějak přispět, abychom se dostali ke zdárnému výsledku, rád to udělám. Stačí jen říct.

greeny
Člen | 405
+
0
-

Přílohy jsou momentálně ve vývoji, testuju asi na 5 různých mailserverech a zjišťuju, jaké výsledky které funkce vracejí a jak to nějak zobecnit. Pokusím se dnes nebo zítra pushnout alespoň částečně fungující řešení.

greeny
Člen | 405
+
0
-

Přílohy byly naimplementovány a oficiálně byla vydána verze 3.0.0, dostupná přes composer i na githubu (branch master). V nejbližší nové verzi ještě přidám podporu pro řazení mailů. Pokud byste náhodou někdo měli nějaký nápad, co by se hodilo přidat, klidně mi napište, rád na tom zapracuju.

greeny

forkman
Člen | 72
+
0
-

Přílohy fungují naprosto skvěle. Jen jsem narazil na pár problémů:

  1. v dokumentaci se uvádí stále starý název metody getAllMails(), nyní už je to jen getMails(),
  2. v ImapDriver.php na řádku 264 mi Nette hlásilo že $contact->adl je undefined,
  3. mám problém s nastavováním flagů, nebo to neumím :) předpokládám, že by mělo fungovat
<?php
$mail->setFlags(array(Mail::FLAG_SEEN), true);
?>
  1. s tím souvisí i poslední věc, dají se nějak filtrovat jen maily, které jsou nepřečtené?

Dík za skvělou práci!

greeny
Člen | 405
+
0
-
  1. v dokumentaci se uvádí stále starý název metody getAllMails(), nyní už je to jen getMails(),

Dokumentaci nevím, kdy a kde jsi četl, ale aktuální je na http://greeny.github.io/MailLibrary a tam je getMails()

  1. v ImapDriver.php na řádku 264 mi Nette hlásilo že $contact->adl je undefined,

Možná jsem někde zapomněl ověřit existenci proměnné, podívám se na to.

  1. mám problém s nastavováním flagů, nebo to neumím :) předpokládám, že by mělo fungovat
<?php
$mail->setFlags(array(Mail::FLAG_SEEN), true);
?>

Nastavování flagů je trochu jinak, viz dokumentace.

Příklad:

<?php
$mail->setFlags(array(Mail::FLAG_SEEN => TRUE, Mail::FLAG_DRAFT => FALSE));
?>
  1. s tím souvisí i poslední věc, dají se nějak filtrovat jen maily, které jsou nepřečtené?

Jako třeba

<?php
$selection->where(Mail::SEEN, FALSE);
?>

?

Děkuji za pozitivní ohlas ;)

Editoval greeny (18. 2. 2014 19:07)

forkman
Člen | 72
+
0
-

Dík, teď už mi všechno funguje přesně podle představ a očekávání, včetně stahování příloh. Ta dokumentace je moje chyba, holt jsem neudělal refresh a koukal jsem se na dokumentaci ke starší verzi :-)

Díky za to, fakt perfektní věc!

greeny
Člen | 405
+
0
-

Vydána verze 3.1.0:

  • přidána podpora pro řazení mailů (přidáno i do dokumentace)
  • přidána Nette Extension pro snadnější použití v Nette
  • opraven bug s ContacListem a jeho tvoření v ImapDriveru

Editoval greeny (22. 2. 2014 18:19)

greeny
Člen | 405
+
0
-

Vydána verze 3.2.0

  • přidána metoda Attachment::getType(), která vrátí MIME typ přílohy