Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Petr 07. 02. 2012, 14:02:29

Název: Java mail a logování pošty
Přispěvatel: Petr 07. 02. 2012, 14:02:29
Dobrý den, mám aplikaci na generování faktur, ty se následně odesílají v dávkách  na mail zákazníků. Mám tam logování  v případě vzniku výjimky, ale potřebuji aplikaci rozšířit o možnost logovat i úspěšné odeslání emailu, jako potvrzení o odeslání.

Potřeboval bych logovat údaje jako: čas přijetí mailu na server, z jaké adresy mail obdržel, zda byl v pořádku.
Procházel jsem dokumentaci k balíčkům javax.mail.* a com.sun.mail.* které využívám, ale nic tam není použitelné, vím, že se tyto údaje logují přímo na daném SMTP serveru, ale rád bych věděl zda je možné je nějak získat skrze Javu, zda to někdo neřešil.
Předem děkuji za nápady
Název: Re:JAVA mail, logování
Přispěvatel: DarkKnight 07. 02. 2012, 15:19:59
a mas pristup na finalni server? (tj tam, kde ten email prijde)

pokud ne, nemuzes to nijak logovat (pokud neprijde email od daemona)
Název: Re:JAVA mail, logování
Přispěvatel: Petr 07. 02. 2012, 16:49:29
přístup na finální server nemám, proto se snažím zjistit, zda není možné po odeslání emailu zavolat nějakou metodu, která by si toto info od serveru vyžádala, zatím se mi jen potvrzuje, že to nejde
jediným řešením se zatím zdá být, získat log od zřizovatele serveru a z něj pak zpětně potřebné info dohledat a doplnit do logu
Název: Re:JAVA mail, logování
Přispěvatel: Ivan 07. 02. 2012, 17:23:49
Ahoj, nevim jak si SMTP predstavuji Javisti, ale se SMTP se nebav. Neni to tvoje prace a ani nedostupnost SMTP serveru neni problem tvoji aplikace.

Spravny reseni - alespon na Unixu - je spustit prikaz sendmail a telo mailu mu predat. Dal uz to opravdu neni problem tvoji aplikace.
Prikaz sendmail nejspis preda mail lokalnimu SMTP serveru a ten se pak bude pokouset o doruceni tak dlouho jak bude potreba.

Tenhle pristup ma spoustu vyhod
- routovani mailu si vyresi Unix admin, ne programator
- konfigurace SMTP se provadi na jedinem miste
- vsechny logy jsou pristupne na standartnim miste /var/log/mail.log
- tvoje aplikace nebude odpovedna za pripadny re-submit, pokud je vzdaleny SMTP server nedostupny.

To ze wokna zadny podobny pristup nenabizi jeste neznamena, ze Javovy programy musi delat chaos i na Unixu.
Název: Re:JAVA mail, logování
Přispěvatel: Petr 07. 02. 2012, 19:11:17
Ano vím co má aplikace za úkol, naprosto s tebou souhlasím, ale zákazník, pro kterého byla aplikace vyrobena si vyžádal tuto funkcionalitu, pokud je to reálné, jelikož jsem toto ještě neřešil, tak jsem chtěl vědět názory druhých, abych měl podložené, že nemám špatný úsudek na věc co neznám. Takže děkuji
Název: Re:JAVA mail, logování
Přispěvatel: DarkKnight 07. 02. 2012, 20:49:27
Ivan: pokud jsem to spravne pochopil, tak chce neco na zpusob dorucenky u SMS -> aby se zapsalo do aplikace, nejenom, kdy byl email odeslan, ale i kdy byl dorucen (coz z principu neni bez pristupu k cilovemu serveru mozne)
Název: Re:JAVA mail, logování
Přispěvatel: Sislik 07. 02. 2012, 22:42:20
existuje "Potvrzeni o doruceni" (neplest s "Potvrzeni o precteni"!), ten, kdo uklada zpravu do cilovy schranky posle potvrzeni, ze zprava byla ulozena do schranky, ovsem ne kazdy server toto podporuje, zobecnit se to da na to, ze potvrzeni posila posledni server v rade, ktery toto podporuje, takze treba neposle, ze zprava byla ulozena do schranky, ale ze zprava byla predana nadrazenemu serveru

pokud by Petrovo SMTP server podporoval zasilani "Potvrzeni o doruceni", tak by mel vzdy jistotu, ze mu pri nejhorsim jeho vlastni server potvrdi, ze zpravu predal dal

poznamka na zaver: nekteri postovni klienti, napr. Thunderbird, zamenuji "Potvrzeni o doruceni" za "Potvrzeni o precteni", takze se mi stava, ze ackoliv "Potvrzeni o precteni" nevyzaduje, prichazi mi potvrzeni, za ucivatel si zpravu precetl :)
Název: Re:JAVA mail, logování
Přispěvatel: Sislik 07. 02. 2012, 22:44:20
zapomnel jsem dodat - to potvrzeni prijde jako email zpatky na adresu odesilatele
Název: Re:JAVA mail, logování
Přispěvatel: Dusan Zatkovsky 08. 02. 2012, 12:22:13
Je to prakticky z podstaty fungovania emailu nemozne, rovno na to zabudni a zakaznikovy to vytlc z hlavy. Dokonca aj keby si parsoval logy vlastneho ( odosielacieho ) mailservru, nemas zarucene, ze to niekam doslo, pretoze naprotivny smtp server, na ktory to posles, vobec nemusi byt cielovy server a moze tam byt medzitym kludne milion dalsich serverov. Takze to proste posli a dalej sa nestaraj.

Ciste mimo zaznam, co by si mohol naimplementovat je programovo citat postu uctu, pod ktoreho identitou to odosielas a vyhladavat tam maily o nedorucitelnosti, ktore sa tam vracaju v pripade problemu. Vzhladom na to, ze si to telo ale kdejaky debil aj tak prepisuje do lokalneho jazyka, aby to pochopili sliepky na druhej strane, uspesnost parsovania bude diskutabilna.
Název: Re:Java mail a logování pošty
Přispěvatel: Petr 09. 02. 2012, 10:27:23
nejde ani tak o to abych jistě věděl, že to adresátovi dorazilo, ale že to určitě přijal poštovní server odesilatele, to jestli už to jde dále nebo ne je věc mimo, jde tu čistě o průkaznost, že to ze systému odešlo a mít zameteno před vlastním prahem, samozřejmě jsem již podal info o možnostech řešení, takže momentálně akorát loguji přesný čas odeslání mailu z aplikace, aby bylo možné dohledávat v logu, děkuji Vám za Vaše poznatky
Název: Re:Java mail a logování pošty
Přispěvatel: Ivan 09. 02. 2012, 11:37:31
Kdyz budes pouzivat pro odesilani lokalni sendmail(SMTP) tak to ma jeste jednu vyhodu. V logu sendmailu najdes neco jako:
- prijmul jsem od uzivatele "xy" email a davam mu hash "AB3GH".
- vyzvednul jsem z fronty mail "AB3GH" a predavam ho SMTP serveru "abc.gh.cz".

No a na servervu "abc.gh.cz" najdes v mail logu hlasku:
- prijmul jsem serveru "aplikace.gh.cz" email kterej ma hash "AB3GH".

Tim se dalsi investigace znacne zjednodusuje. Pokud muzes pro vyhledavani pouzit MSGID, tak je to mnohem jistejsi nez nejakej timestamp. Zvlast kdyz ti pres mail gataway prochazi desitky maily za vterinu.