Programovanie

Rýchly štart JavaMail

V serveri JavaMail nájdete API a implementácie poskytovateľov, ktoré vám umožňujú vyvíjať plne funkčné aplikácie e-mailových klientov. „Aplikácie e-mailových klientov“ vyvoláva myšlienky o aplikácii Microsoft Outlook; a áno, môžete napísať vlastnú náhradu za Outlook. Ale e-mailový klient nemusí vôbec zostať na klientskom počítači. Môže to byť skutočne servlet alebo EJB bežiaci na vzdialenom serveri, ktorý poskytuje prístup koncového používateľa k e-mailu prostredníctvom webového prehľadávača. Pomysli na Hotmail (áno, aj ty by si mohol napísať svoju vlastnú verziu Hotmailu). Alebo sa môžete úplne vyhnúť používateľskému rozhraniu. Čo tak automatická odpoveď, ktorá číta prichádzajúce správy a posiela odpovede prispôsobené podľa pôvodného odosielateľa?

V mojom vlastnom projekte pre domácich miláčikov hovorí hovoriaci e-mailový klient prichádzajúce správy, to znamená, že ich hovorí. Je to založené na zdokonalení myšlienky, ktorú som predstavil v „Talking Java!“ Neskôr ti o tom poviem viac.

Zatiaľ začnite inštaláciou a konfiguráciou softvéru JavaMail.

Nastaviť

Ak používate platformu Java 2 Enterprise Edition (J2EE) 1.3, máte šťastie: obsahuje program JavaMail, takže nie je potrebné žiadne ďalšie nastavenie. Ak však používate platformu Java 2 Platform Standard Edition (J2SE) 1.1.7 a novšiu a chcete pre svoje aplikácie e-mailovú adresu, stiahnite si a nainštalujte nasledovné:

  • JavaMail
  • JavaBeans Activation Framework

Pre inštaláciu stačí rozbaliť stiahnuté súbory a pridať obsiahnuté súbory jar do svojej cesty ku triede. Ako príklad uvádzam moju triedu pre tento projekt:

.; C: \ Apps \ Java \ javamail-1.2 \ mail.jar; C: \ Apps \ Java \ javamail-1.2 \ mailapi.jar; C: \ Apps \ Java \ javamail-1.2 \ pop3.jar; C: \ Apps \ Java \ javamail-1.2 \ smtp.jar; C: \ Apps \ Java \ jaf-1.0.1 \ activation.jar 

The mailapi.jar súbor obsahuje základné triedy API, zatiaľ čo pop3.jar a smtp.jar súbory obsahujú implementácie poskytovateľa pre príslušné poštové protokoly. (Nebudeme používať imap.jar Súbor v tomto článku.) Implementácie poskytovateľa si predstavte podobne ako ovládače JDBC (Java Database Connectivity), ale skôr pre systémy zasielania správ ako pre databázy. Pokiaľ ide o mail.jar Súbor obsahuje každý z vyššie uvedených súborov jar, takže svoju triednu cestu môžete obmedziť iba na mail.jar a activation.jar súbory.

The activation.jar Tento súbor vám umožňuje spracovávať typy MIME (Multipurpose Internet Mail Extensions) dostupné cez binárne dátové toky. Hľadajte DataHandler trieda v Nielen obyčajný text oddiel neskôr.

Pre zaujímavosť, zvyšok tohto článku neponúka komplexné pokrytie API; skôr sa naučíte cvičením. Ak hľadáte podrobné informácie o rozhraní API, pozrite sa na súbory PDF a Javadocs zahrnuté v príslušných balíkoch na stiahnutie.

Po nainštalovaní softvéru musíte získať podrobnosti o e-mailovom účte, aby ste mohli spustiť nasledujúce príklady. Budete potrebovať názov servera SMTP (Simple Mail Transfer Protocol) vášho ISP a názov servera POP (Post Office Protocol), prihlasovacie meno e-mailového účtu a heslo svojej poštovej schránky. Obrázok 1 zobrazuje moje podrobnosti (rozumej to nie skutočné), ako ich používa Microsoft Outlook.

Posielanie e-mailov cez SMTP

Prvý príklad ukazuje, ako poslať základnú e-mailovú správu cez SMTP. Ďalej nájdete SimpleSender triedy, ktorá z príkazového riadku vezme podrobnosti vašej správy a zavolá samostatnú metódu - poslať (...) - poslať:

balík com.lotontech.mail; import javax.mail. *; import javax.mail.internet. *; import java.util. *; / ** * Jednoduchá trieda odosielateľov e-mailov. * / public class SimpleSender {/ ** * Hlavná metóda na odoslanie správy zadanej z príkazového riadku. * / public static void main (String args []) {try {String smtpServer = args [0]; Reťazec to = args [1]; Reťazec z = args [2]; Sláčikový subjekt = args [3]; Telo reťazca = args [4]; poslať (smtpServer, do, z, predmetu, tela); } catch (Exception ex) {System.out.println ("Použitie: java com.lotontech.mail.SimpleSender" + "smtpServer toAddress odAddress subjectText bodyText"); } System.exit (0); } 

Ďalej spustite SimpleSender ako je uvedené nižšie. Vymeniť smtp.myISP.net s vlastným serverom SMTP, ako je odvodené z vašich nastavení pošty:

> java com.lotontech.mail.SimpleSender smtp.myISP.net [email protected] [email protected] „Dobrý deň“ „Stačí pozdraviť.“ 

A ak to funguje, na prijímacom konci uvidíte niečo podobné ako na obrázku 2.

The poslať (...) metóda dokončuje SimpleSender trieda. Najprv ukážem kód a potom podrobne rozpíšem teóriu:

 / ** * metóda „odoslať“ na odoslanie správy. * / public static void send (String smtpServer, String to, String from, String subject, String body) {try {Properties props = System.getProperties (); // - Pripojenie k predvolenej relácii, alebo by sme mohli spustiť novú - props.put ("mail.smtp.host", smtpServer); Relácia session = Session.getDefaultInstance (rekvizity, null); // - Vytvoriť novú správu - Správa msg = nová MimeMessage (relácia); // - Nastaviť polia FROM a TO - msg.setFrom (new InternetAddress (from)); msg.setRecipients (Message.RecipientType.TO, InternetAddress.parse (to, false)); // - Mohli by sme zahrnúť aj príjemcov CC - // if (cc! = Null) // msg.setRecipients (Message.RecipientType.CC //, InternetAddress.parse (cc, false)); // - Nastaviť predmet a hlavný text - msg.setSubject (subject); msg.setText (body); // - Nastaviť ďalšie informácie v hlavičke - msg.setHeader ("X-Mailer", "LOTONtechEmail"); msg.setSentDate (nový dátum ()); // - Poslať správu - Transport.send (msg); System.out.println ("Správa bola odoslaná v poriadku."); } catch (Výnimka ex) {ex.printStackTrace (); }}} 

Najskôr si všimnite, že dostávate reláciu pošty (java.mail.Session), bez ktorých nemôžete nič robiť. V takom prípade voláte Session.getDefaultInstance (...) získať zdieľanú reláciu, ktorú môžu iné desktopové aplikácie znova použiť; môžete tiež vytvoriť úplne novú reláciu - prostredníctvom Session.getInstance (...) metóda - to by bolo pre vašu aplikáciu jedinečné. Druhá možnosť by sa mohla ukázať ako dôležitá pre e-mailových klientov, ktorí nie sú izolovaní na báze jednotlivých používateľov, napríklad pre webový e-mailový systém implementovaný pomocou servletov.

Uskutočnenie relácie vyžaduje, aby ste nastavili určité vlastnosti; minimálne potrebujete mail.smtp.host vlastnosť, ak posielate správy cez SMTP. Ďalšie vlastnosti nájdete v dokumentácii API.

Keď budete mať reláciu, vytvorte správu. V tomto príklade nastavujete správu od a do e-mailové adresy, predmet, a telo text, všetko prevzaté pôvodne z príkazového riadku. Nastavujete tiež niektoré informácie v hlavičke vrátane dátumu a môžete ich určiť cc príjemcov, ak chcete.

Nakoniec správu odošlete prostredníctvom javax.mail.Transport trieda. Ak by vás zaujímalo, ako to vie o našej poštovej relácii, pozrite sa späť na konštruktéra správy.

Nielen obyčajný text

The setText (...) pohodlná metóda v triede javax.mail.Message (zdedené po javax.mail.Časť rozhranie) nastaví obsah správy na dodaný reťazec a nastaví typ MIME na text / obyčajný.

Nie ste však obmedzený iba na obyčajný text: ďalšie typy obsahu môžete odosielať prostredníctvom servera setDataHandler (...) metóda. Vo väčšine prípadov môžete pod pojmom „iné typy obsahu“ rozumieť prílohy súborov, napríklad dokumenty Word, ale o niečo zaujímavejšie informácie nájdete v tomto kóde na odoslanie sériového objektu Java:

ByteArrayOutputStream byteStream = nový ByteArrayOutputStream (); ObjectOutputStream objectStream = nový ObjectOutputStream (byteStream); objectStream.writeObject (theObject); msg.setDataHandler (nový DataHandler (nový ByteArrayDataSource (byteStream.toByteArray (), "lotontech / javaobject"))); 

Nenájdete DataHandler triedy v rámci javax.mail. * štruktúra balíka, pretože patrí do balíka JavaBeans Activation Framework (JAF) javax.aktivácia. Pamätajte, že ste si stiahli distribúciu JAF a JavaMail. JAF poskytuje mechanizmus pre manipuláciu napísaný na stroji dátový obsah, čo pre internetový obsah znamená typy MIME.

A ak naozaj vyskúšate vyššie uvedený kód na odoslanie objektu Java e-mailom, budete mať problém s nájdením súboru ByteArrayDataSource triedy, keďže ani jeden mail.jar ani activation.jar zahrni to. Skúste sa pozrieť do ukážkového adresára JavaMail!

Pokiaľ ide o tie prílohy súborov, ktoré vás spočiatku budú pravdepodobne zaujímať, vytvorili by ste a javax.activation.FileDataSource napríklad v DataHandlerkonštruktér. Pravdepodobne nie je pravdepodobné, že pošlete súbor sám; skôr to bude pravdepodobne príloha textovej správy. Preto musíte pochopiť koncept viacdielnych správ, takže tento koncept predstavím teraz, v kontexte prijímania e-mailov.

Prijímať e-maily cez POP3

Predtým som predstavil javax.mail.Časť rozhranie implementované javax.mail.Message. Teraz vysvetlím jeho časti správy, ktoré sú v tomto príklade dôležité. Na začiatok sa pozrite na obrázok 3.

Obrázok 3 zobrazuje a Správa ako bol vytvorený v predchádzajúcom príklade, ktorý je správou aj časťou správy, pretože implementuje Časť rozhranie. Pre ktorúkoľvek časť môžete získať jej obsah (akýkoľvek objekt Java) a v prípade jednoduchej textovej správy môže byť objektom obsahu String. V prípade viacdielnej správy bude obsah typového typu Viacdielne, z ktorých sa zmocníme jednotlivých častí tela, ktoré sami implementujú Časť rozhranie.

V praxi sa všetko prejaví pri prechádzaní kódu pre a SimpleReceiver triedy, ktorú predstavím v troch častiach: prvá, definícia triedy a hlavný(...) metóda, ktorá berie podrobnosti o pripojení z príkazového riadku; po druhé, prijímať (...) metóda, ktorá zachytáva a prechádza prichádzajúce správy; a nakoniec printMessage (...) metóda, ktorá vytlačí informácie o hlavičke a obsah každej správy.

Tu je prvá časť:

balík com.lotontech.mail; import javax.mail. *; import javax.mail.internet. *; import java.util. *; import java.io. *; / ** * Jednoduchá trieda prijímačov e-mailov. * / public class SimpleReceiver {/ ** * Hlavná metóda prijímania správ z poštového servera uvedená ako argumenty príkazového riadku. * / public static void main (String args []) {try {String popServer = args [0]; Reťazec popUser = args [1]; Reťazec popPassword = args [2]; príjem (popServer, popUser, popPassword); } catch (Exception ex) {System.out.println ("Použitie: java com.lotontech.mail.SimpleReceiver" + "popServer popUser popPassword"); } System.exit (0); } 

Neskôr vás prevediem poriadnou testovacou jednotkou, zatiaľ je tu však príkazový riadok, ktorý ho má spustiť (nezabudnite nahradiť argumenty príkazu nastaveniami pošty):

> java com.lotontech.mail.SimpleReceiver pop.myIsp.net myUserName myPassword 

The prijímať (...) metóda - volaná z hlavný(...) - otvorí vašu POP3 DORUČENÚ STRÁNKU a pri každom volaní postupne prechádza správami printMessage (...). Tu je kód:

 / ** * metóda "prijímania" na načítanie správ a ich spracovanie. * / public static void receive (String popServer, String popUser, String popPassword) {Store store = null; Priečinok priečinok = null; skúste {// - Chyťte predvolenú reláciu - Vlastnosti props = System.getProperties (); Relácia session = Session.getDefaultInstance (rekvizity, null); // - Chyťte obchod so správami POP3 a pripojte sa k nemu - store = session.getStore ("pop3"); store.connect (popServer, popUser, popPassword); // - Pokúste sa chytiť predvolený priečinok - folder = store.getDefaultFolder (); if (folder == null) throw new Exception ("No default folder"); // - ... a jeho DOROBENÉ - priečinok = folder.getFolder ("DOROBENÉ"); if (folder == null) throw new Exception ("No POP3 INBOX"); // - Otvoriť priečinok iba na čítanie - folder.open (Folder.READ_ONLY); // - Získajte obálky správ a spracujte ich - Správa [] msgs = folder.getMessages (); pre (int msgNum = 0; msgNum <msgs.length; msgNum ++) {printMessage (msgs [msgNum]); }} catch (Výnimka ex) {ex.printStackTrace (); } konečne {// - Pekne sa zatvorte - vyskúšajte {if (priečinok! = null) adresár.close (false); if (store! = null) store.close (); } catch (Výnimka ex2) {ex2.printStackTrace ();}}} 

Všimnite si, že z relácie získavate obálku skladu správ POP3 a potom sa k nej pripájate pomocou nastavení pošty, ktoré bolo pôvodne zadané v príkazovom riadku.

Po pripojení získate popis v predvolenom priečinku - v skutočnosti v koreňovom adresári stromu - a odtiaľ v priečinku Doručená pošta, ktorý obsahuje prichádzajúce správy. Otvoríte SPRÁVU pre prístup iba na čítanie; chytíte správy a prechádzate nimi jednu po druhej.

Ako bokom by vás mohlo zaujímať, či by ste niekedy chceli otvoriť priečinok Doručená pošta pre napíš prístup. To by ste urobili, ak ste chceli označiť správy ako prijaté alebo ich odstrániť zo servera. V našom príklade sa na ne iba pozeráte.

Nakoniec sa v kóde vyššie staráte o to, aby ste po dokončení zavreli priečinok a ukladací priestor správ, ktorý ponecháva iba priečinok printMessage (...) tejto triedy.

Vytlačte správy

V tejto časti skôr javax.mail.Časť diskusia o rozhraní sa stáva relevantnou.

$config[zx-auto] not found$config[zx-overlay] not found