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ē DataHandler
konstruktors. 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.