Programmēšana

JavaMail ātrais sākums

JavaMail jūs atradīsit API un pakalpojumu sniedzēju ieviešanu, kas ļaus jums izstrādāt pilnībā funkcionējošas e-pasta klienta lietojumprogrammas. "E-pasta klienta lietojumprogrammas" atsaucas uz domām par Microsoft Outlook; un, jā, jūs varētu uzrakstīt pats savu Outlook aizstājēju. Bet e-pasta klientam vispār nav jāatrodas klienta mašīnā. Tas patiešām varētu būt servlets vai EJB, kas darbojas attālā serverī, nodrošinot galalietotāja piekļuvi e-pastam, izmantojot tīmekļa pārlūkprogrammu. Padomājiet par Hotmail (jā, jūs varētu arī uzrakstīt savu Hotmail versiju). Vai arī jūs varētu pilnībā izvairīties no lietotāja saskarnes. Kā būtu ar automātisko atbildētāju, kas lasa ienākošos ziņojumus un nosūta atbildes, pielāgojot tos atbilstoši sākotnējam sūtītājam?

Manā mājdzīvnieku projektā runājošs e-pasta klients lasa - tas ir, runā - ienākošos ziņojumus. Tas ir balstīts uz idejas pilnveidošanu, kuru ieviesu sadaļā "Runājošā Java!" Es jums pastāstīšu vairāk par to vēlāk.

Pagaidām sāciet ar JavaMail programmatūras instalēšanu un konfigurēšanu.

Uzstādīt

Ja izmantojat Java 2 Platform, Enterprise Edition (J2EE) 1.3, jums ir paveicies: tajā ir JavaMail, tāpēc papildu iestatīšana nav nepieciešama. Tomēr, ja jūs izmantojat Java 2 Platform, Standard Edition (J2SE) 1.1.7 un jaunākas versijas un vēlaties, lai lietojumprogrammas būtu pieejamas e-pastā, lejupielādējiet un instalējiet:

  • JavaMail
  • JavaBeans aktivizācijas ietvars

Lai instalētu, vienkārši izpakojiet lejupielādētos failus un pievienojiet tajā esošos burku failus savam klases ceļam. Piemēram, šeit ir mans klases ceļš šim projektam:

.; 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 fails satur API pamatklases, bet pop3.jar un smtp.jar faili satur pakalpojumu sniedzēja ieviešanu attiecīgajiem pasta protokoliem. (Mēs neizmantosim imap.jar šajā rakstā.) Iedomājieties, ka pakalpojumu sniedzēju ieviešana ir līdzīga JDBC (Java Database Connectivity) draiveriem, bet ziņojumapmaiņas sistēmām, nevis datu bāzēm. Kas attiecas uz mail.jar failu, tajā ir visi iepriekš minētie burku faili, tāpēc jūs varat ierobežot savu klases ceļu tikai uz mail.jar un aktivizēšana.jar failus.

The aktivizēšana.jar fails ļauj apstrādāt MIME (daudzfunkcionālus interneta pasta paplašinājumus) veidus, kas pieejami, izmantojot bināras datu plūsmas. Meklējiet DataHandler klase Ne tikai vienkāršs teksts sadaļu vēlāk.

Šajā ziņā pārējais šis raksts nepiedāvā visaptverošu API pārklājumu; drīzāk jūs uzzināsiet, darot. Ja tā ir padziļināta API informācija, kuru meklējat, apskatiet attiecīgajos lejupielādes komplektos iekļautos PDF failus un Javadocs.

Kad esat instalējis programmatūru, jums jāsaņem e-pasta konta informācija, lai palaistu sekojošos piemērus. Jums būs nepieciešams jūsu ISP SMTP (vienkāršā pasta pārsūtīšanas protokola) servera nosaukums un POP (pasta nodaļas protokola) servera nosaukums, jūsu e-pasta konta pieteikšanās vārds un pastkastes parole. 1. attēlā ir parādītas manas detaļas - nevis reālās, jūs saprotat - kā to izmanto Microsoft Outlook.

E-pasta ziņojumu sūtīšana, izmantojot SMTP

Pirmais piemērs parāda, kā nosūtīt pamata e-pasta ziņojumu, izmantojot SMTP. Zemāk jūs atradīsit SimpleSender klase, kas paņem ziņas no komandrindas un izsauc atsevišķu metodi - sūtīt (...) - lai to nosūtītu:

pakete com.lotontech.mail; importēt javax.mail. *; importēt javax.mail.internet. *; importēt java.util. *; / ** * Vienkārša e-pasta sūtītāju klase. * / public class SimpleSender {/ ** * Galvenā metode, kā nosūtīt ziņojumu, kas norādīts komandrindā. * / public static void main (String args []) {mēģiniet {String smtpServer = args [0]; Virkne līdz = args [1]; Virkne no = args [2]; Virknes priekšmets = args [3]; Stīgas ķermenis = args [4]; nosūtīt (smtpServer, to, from, subjektam, ķermenim); } catch (izņēmums ex) {System.out.println ("Lietojums: java com.lotontech.mail.SimpleSender" + "smtpServer toAddress fromAddress subjectText bodyText"); } Sistēma.iziet (0); } 

Pēc tam palaidiet SimpleSender kā norādīts zemāk. Aizvietot smtp.myISP.net ar savu SMTP serveri, kas iegūts no jūsu pasta iestatījumiem:

> java com.lotontech.mail.SimpleSender smtp.myISP.net [email protected] [email protected] "Labdien" "Vienkārši, lai pateiktu sveiki." 

Un, ja tas darbojas, saņemšanas galā jūs redzēsiet kaut ko līdzīgu 2. attēlā redzamajam.

The sūtīt (...) metode pabeidz SimpleSender klasē. Vispirms es parādīšu kodu un pēc tam sīki izklāstīšu teoriju:

 / ** * "nosūtīt" metodi, lai nosūtītu ziņojumu. * / public static void send (String smtpServer, String to, String from, String subject, String body) {mēģiniet {Properties props = System.getProperties (); // - pievienošana noklusējuma sesijai vai arī mēs varētu sākt jaunu - props.put ("mail.smtp.host", smtpServer); Sesijas sesija = Session.getDefaultInstance (props, null); // - Izveidot jaunu ziņojumu - Message msg = new MimeMessage (session); // - iestatiet laukus FROM un TO - msg.setFrom (new InternetAddress (from)); msg.setRecipients (Message.RecipientType.TO, InternetAddress.parse (to, false)); // - Mēs varētu iekļaut arī CC adresātus - // if (cc! = Null) // msg.setRecipients (Message.RecipientType.CC //, InternetAddress.parse (cc, false)); // - iestatiet priekšmetu un pamattekstu - msg.setSubject (subject); msg.setText (pamatteksts); // - iestatiet kādu citu galvenes informāciju - msg.setHeader ("X-Mailer", "LOTONtechEmail"); msg.setSentDate (jauns datums ()); // - nosūtīt ziņojumu - Transport.send (msg); System.out.println ("Ziņojums nosūtīts labi."); } catch (izņēmums ex) {ex.printStackTrace (); }}} 

Pirmkārt, ievērojiet, ka iegūstat pasta sesiju (java.mail.Sesija), bez kura jūs nevarat neko nedarīt. Šajā gadījumā jūs zvanāt Session.getDefaultInstance (...) iegūt kopīgu sesiju, kuru citas darbvirsmas lietojumprogrammas var atkārtoti izmantot; jūs varat arī iestatīt pilnīgi jaunu sesiju, izmantojot Session.getInstance (...) metode - tā būtu unikāla jūsu lietojumprogrammai. Pēdējais varētu izrādīties svarīgs e-pasta klientiem, kas nav izolēti katram lietotājam, piemēram, tīmekļa e-pasta sistēmai, kas ieviesta ar servletiem.

Lai izveidotu sesiju, jums jāiestata noteiktas īpašības; vismaz jums ir nepieciešams mail.smtp.host īpašumu, ja sūtāt ziņojumus, izmantojot SMTP. Citus rekvizītus, kas aprakstīti API dokumentācijā, atradīsit.

Pēc sesijas izveidošanas izveidojiet ziņojumu. Šajā piemērā jūs iestatāt ziņojuma vērtību no un uz e-pasta adreses, priekšmets, un ķermeņa teksts, viss sākotnēji ņemts no komandrindas. Jūs iestatāt arī daļu galvenes informācijas, ieskaitot datumu, un varat norādīt cc saņēmējiem, ja vēlaties.

Visbeidzot, jūs nosūtīt ziņojumu, izmantojot javax.mail.Transport klasē. Ja rodas jautājums, kā tā zina par mūsu pasta sesiju, atskatieties uz ziņojuma veidotāju.

Ne tikai teksts

The setText (...) ērtības metode klasē javax.mail.Ziņojums (mantots no javax.mail.daļa interfeiss) ziņojuma saturam nosaka piegādāto virkni un MIME tipu teksts / vienkāršs.

Tomēr jūs neaprobežojaties tikai ar vienkāršu tekstu: izmantojot., Varat nosūtīt citus satura veidus setDataHandler (...) metodi. Lielākajā daļā gadījumu jūs varat lietot "citus satura veidus", domājot failu pielikumus, piemēram, Word dokumentus, taču, lai iegūtu kaut ko mazliet interesantāku, pārbaudiet šo kodu, lai nosūtītu Java sērijveida objektu:

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

Jūs neatradīsit DataHandler klases ietvaros javax.mail. * pakotnes struktūra, jo tā pieder JavaBeans Activation Framework (JAF) pakotnei javax.aktivācija. Atcerieties, ka jūs lejupielādējāt JAF izplatīšanu, kā arī JavaMail. JAF nodrošina apstrādes mehānismu drukāts datu saturs, kas interneta saturam nozīmē MIME tipus.

Un, ja jūs patiešām izmēģināt iepriekš minēto kodu, lai nosūtītu Java objektu pa e-pastu, jums būs problēmas atrast ByteArrayDataSource klase, tā kā neviena mail.jar ne arī aktivizēšana.jar iekļaujiet to. Pamēģiniet meklēt JavaMail demonstrācijas direktorijā!

Kas attiecas uz tiem failu pielikumiem, kas, visticamāk, jūs sākotnēji interesē, jūs izveidotu javax.activation.FileDataSource instancē DataHandlerkonstruktors. Protams, jūs, visticamāk, nesūtīsit failu atsevišķi; drīzāk tas, iespējams, būs pielikums īsziņai. Lai to izdarītu, jums ir jāsaprot daudzpartiju ziņojumu jēdziens, tāpēc es to ieviesīšu tūlīt, e-pasta saņemšanas kontekstā.

Saņemiet e-pastu, izmantojot POP3

Iepriekš es iepazīstināju ar javax.mail.daļa interfeiss, kuru ieviesa javax.mail.Ziņojums. Tagad es paskaidrošu tā ziņojuma daļas, kas ir svarīgas šajā piemērā. Lai sāktu, ieskatieties 3. attēlā.

3. attēlā parādīts a Ziņojums kā izveidots iepriekšējā piemērā, kas ir gan ziņa, gan ziņojuma daļa, jo tā īsteno Daļa interfeiss. Jebkurā daļā varat iegūt tā saturu (jebkuru Java objektu), un vienkāršas īsziņas gadījumā satura objekts var būt Stīga. Daudzpartiju ziņojuma saturs būs veida Daudzdaļīga, no kuras mēs varam iegūt atsevišķas ķermeņa daļas, kuras pašas īsteno Daļa interfeiss.

Praksē viss kļūs acīmredzams, pārejot caur a kodu SimpleReceiver klase, kuru es izklāstīšu trīs sadaļās: pirmkārt, klases definīcija un galvenais (...) metode, kas no komandrindas paņem savienojuma detaļas; otrkārt, saņemt (...) metode, kas uztver un iziet cauri ienākošajiem ziņojumiem; un, visbeidzot, printMessage (...) metode, kas izdrukā katra ziņojuma galvenes informāciju un saturu.

Lūk, pirmā sadaļa:

pakete com.lotontech.mail; importēt javax.mail. *; importēt javax.mail.internet. *; importēt java.util. *; importēt java.io. *; / ** * Vienkārša e-pasta uztvērēju klase. * / public class SimpleReceiver {/ ** * Galvenā metode ziņojumu saņemšanai no pasta servera norādīta * kā komandrindas arguments. * / public static void main (String args []) {mēģiniet {String popServer = args [0]; Virkne popUser = args [1]; Virknes popPassword = args [2]; saņemt (popServer, popUser, popPassword); } catch (izņēmums ex) {System.out.println ("Lietojums: java com.lotontech.mail.SimpleReceiver" + "popServer popUser popPassword"); } Sistēma.iziet (0); } 

Es jūs vēlāk izvedu caur pareizu testa braucienu, bet tagad šeit ir komandrinda, lai to palaistu (atcerieties aizstāt komandu argumentus ar pasta iestatījumiem):

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

The saņemt (...) metode - izsaukts no galvenais (...) - atver jūsu POP3 INBOX un katru reizi zvanot, secīgi iziet cauri ziņojumiem printMessage (...). Šeit ir kods:

 / ** * "saņemt" metodi ziņojumu ielādēšanai un apstrādei. * / public static void saņemt (String popServer, String popUser, String popPassword) {Store store = null; Mapes mape = null; mēģiniet {// - iegūt noklusējuma sesiju - Rekvizīti props = System.getProperties (); Sesijas sesija = Session.getDefaultInstance (props, null); // - iegūstiet POP3 ziņojumu krātuvi un izveidojiet savienojumu ar to - store = session.getStore ("pop3"); store.connect (popServer, popUser, popPassword); // - mēģiniet iegūt noklusējuma mapi - folder = store.getDefaultFolder (); if (mape == null) mest jaunu Izņēmums ("Nav noklusējuma mapes"); // - ... un tā INBOX - mape = folder.getFolder ("INBOX"); if (mape == null) mest jaunu izņēmumu ("No POP3 INBOX"); // - atveriet mapi tikai lasīšanai - folder.open (Folder.READ_ONLY); // - Iegūstiet ziņojumu iesaiņotājus un apstrādājiet tos - Message [] msgs = folder.getMessages (); for (int msgNum = 0; msgNum <msgs.length; msgNum ++) {printMessage (msgs [msgNum]); }} catch (izņēmums ex) {ex.printStackTrace (); } visbeidzot {// - labi aizveriet - mēģiniet {if (mape! = null) mape.close (false); if (veikals! = null) veikals.slēgt (); } catch (izņēmums ex2) {ex2.printStackTrace ();}}} 

Ievērojiet, ka no sesijas iegūstat POP3 ziņojumu krātuves iesaiņojumu un pēc tam izveidojat savienojumu ar to, izmantojot sākotnēji komandrindā norādītos pasta iestatījumus.

Kad esat izveidojis savienojumu, jūs saņemat noklusējuma mapes rokturi - faktiski mapju koka sakni - un no turienes mapi INBOX, kurā atrodas ienākošie ziņojumi. Jūs atverat INBOX, lai piekļūtu tikai lasīšanai; jūs saņemat ziņojumus un pa vienam izejiet tiem cauri.

Ja neņemat vērā, jūs varētu domāt, vai jūs kādreiz vēlaties atvērt rakstīt piekļuvi. Jūs to darītu, ja jūs nodomātu atzīmēt ziņojumus kā saņemtus un / vai noņemt tos no servera. Mūsu piemērā jūs skatāties tikai viņus.

Visbeidzot, augšējā kodā jūs rūpējaties, lai pēc pabeigšanas aizvērtu mapi un ziņojumu krātuvi, kas atstāj tikai printMessage (...) metodi, lai pabeigtu šo klasi.

Izdrukājiet ziņojumus

Šajā sadaļā agrāk javax.mail.daļa interfeisa diskusija kļūst aktuāla.

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