„JavaMail“ rasite API ir teikėjų diegimus, leidžiančius kurti visiškai veikiančias el. Pašto kliento programas. „El. Pašto programos“ sukelia mintis apie „Microsoft Outlook“; ir taip, galite parašyti savo „Outlook“ pakaitalą. Bet el. Pašto klientas visiškai neturi gyventi kliento mašinoje. Iš tiesų, tai gali būti servletas arba EJB, veikiantis nuotoliniame serveryje, suteikiantis galutiniam vartotojui prieigą prie el. Pašto per interneto naršyklę. Pagalvokite apie „Hotmail“ (taip, galėtumėte parašyti ir savo „Hotmail“ versiją). Arba galite visiškai išvengti vartotojo sąsajos. Kaip būtų su automatiniu atsakikliu, kuris skaito gaunamus pranešimus ir siunčia atsakymus, pritaikytus pagal pradinį siuntėją?
Mano paties augintinių projekte kalbantis el. Pašto klientas skaito - tai yra kalba - gaunamus pranešimus. Tai paremta idėjos, kurią pristatiau „Kalbant Java!“, Patobulinimu. Aš jums pasakysiu daugiau apie tai vėliau.
Dabar pradėkite diegdami ir sukonfigūruodami „JavaMail“ programinę įrangą.
Sąranka
Jei naudojate „Java 2 Platform, Enterprise Edition (J2EE) 1.3“, jums pasisekė: jame yra „JavaMail“, todėl nereikia jokių papildomų sąrankų. Vis dėlto, jei naudojate „Java 2 Platform“, „Standard Edition“ (J2SE) 1.1.7 ir naujesnes versijas ir norite savo el. Pašto galimybės, atsisiųskite ir įdiekite šiuos veiksmus:
- „JavaMail“
- „JavaBeans“ aktyvinimo sistema
Norėdami įdiegti, paprasčiausiai išpakuokite atsisiųstus failus ir pridėkite esančius „jar“ failus prie savo klasės kelio. Pavyzdžiui, štai mano klasės kelias į šį 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: \ Programos „Java“ javamail-1.2 \ smtp.jar; C: „Apps“ Java “jaf-1.0.1 \ activation.jar
mailapi.jar
faile yra pagrindinės API klasės, o pop3.jar
ir smtp.jar
failuose yra teikėjo įdiegti atitinkami pašto protokolai. (Mes nenaudosime imap.jar
failą šiame straipsnyje.) Pagalvokite apie tiekėjų diegimus, panašius į JDBC („Java Database Connectivity“) tvarkykles, tačiau pranešimų sistemoms, o ne duomenų bazėms. Kalbant apie paštas.jar
failą, jame yra visi aukščiau nurodyti failai, todėl galite apriboti savo klasės kelią tik paštas.jar
ir aktyvinimas.jar
failus.
aktyvinimas.jar
failas leidžia tvarkyti MIME (daugiafunkcinius interneto pašto plėtinius), pasiekiamus per dvejetainius duomenų srautus. Ieškokite „DataHandler“
klasėje Ne tik paprastas tekstas skyrių vėliau.
Turime omenyje, kad likusioje šio straipsnio dalyje nėra išsamios API aprėpties; verčiau išmoksi darydamas. Jei tai yra išsami API informacija, kurios ieškote, peržiūrėkite PDF failus ir „Javadocs“, esančius atitinkamuose atsisiuntimo rinkiniuose.
Įdiegę programinę įrangą, turite gauti išsamią el. Pašto paskyros informaciją, kad galėtumėte vykdyti toliau pateiktus pavyzdžius. Jums reikės IPT SMTP (paprasto pašto siuntimo protokolo) serverio pavadinimo ir POP (pašto tarnybos protokolo) serverio pavadinimo, el. Pašto paskyros prisijungimo vardo ir pašto dėžutės slaptažodžio. 1 paveiksle parodytos mano detalės, o ne tikrosios, suprantate, kaip naudoja „Microsoft Outlook“.
Siunčiamas el. Paštas per SMTP
Pirmasis pavyzdys parodo, kaip siųsti pagrindinį el. Laišką per SMTP. Žemiau rasite „SimpleSender“
klasė, kuri ima jūsų pranešimo informaciją iš komandinės eilutės ir iškviečia atskirą metodą - siųsti (...)
- išsiųsti:
paketas com.lotontech.mail; importuoti javax.mail. *; importuoti javax.mail.internet. *; importuoti java.util. *; / ** * Paprasta el. Pašto siuntėjų klasė. * / public class SimpleSender {/ ** * Pagrindinis būdas išsiųsti pranešimą, pateiktą komandinėje eilutėje. * / public static void main (String args []) {try {String smtpServer = args [0]; Stygos į = args [1]; Stygos iš = args [2]; Stygos subjektas = args [3]; Styginių kūnas = args [4]; siųsti (smtpServer, to, from, subjektas, kūnas); } sugauti (Išimtis ex) {System.out.println ("Naudojimas: java com.lotontech.mail.SimpleSender" + "smtpServer toAddress fromAddress subjectText bodyText"); } System.exit (0); }
Kitas, paleisti „SimpleSender“
kaip nurodyta žemiau. Pakeiskite smtp.myISP.net
su savo SMTP serveriu, kaip nustatyta jūsų pašto nustatymuose:
> java com.lotontech.mail.SimpleSender smtp.myISP.net [email protected] [email protected] "Sveiki" "Tiesiog noriu pasakyti labas".
Jei tai veikia, priėmimo gale pamatysite kažką panašaus į tai, kas parodyta 2 paveiksle.
siųsti (...)
metodas užbaigia „SimpleSender“
klasė. Pirmiausia parodysiu kodą, tada paaiškinsiu teoriją:
/ ** * „siųsti“ būdas išsiųsti pranešimą. * / public static void send (String smtpServer, String to, String from, String Subject, String body) {try {Properties props = System.getProperties (); // - prisijungimas prie numatytojo seanso, arba mes galime pradėti naują - props.put ("mail.smtp.host", smtpServer); Sesijos sesija = Session.getDefaultInstance (rekvizitai, nulis); // - Sukurti naują pranešimą - Message msg = new MimeMessage (session); // - nustatykite laukus FROM ir TO - msg.setFrom (new InternetAddress (from)); msg.setRecipients (Message.RecipientType.TO, InternetAddress.parse (to, false)); // - Mes taip pat galėtume įtraukti CC gavėjus - // if (cc! = Null) // msg.setRecipients (Message.RecipientType.CC //, InternetAddress.parse (cc, false)); // - Nustatykite temą ir pagrindinį tekstą - msg.setSubject (subject); msg.setText (body); // - nustatykite kitą antraštės informaciją - msg.setHeader ("X-Mailer", "LOTONtechEmail"); msg.setSentDate (nauja data ()); // - siųsti pranešimą - Transport.send (msg); System.out.println ("Pranešimas išsiųstas gerai."); } sugauti (Išimtis ex) {ex.printStackTrace (); }}}
Pirmiausia atkreipkite dėmesį, kad gaunate el. Pašto sesiją (java.mail.Sesija
), be kurio jūs nieko negalite padaryti. Šiuo atveju jūs skambinate Session.getDefaultInstance (...)
gauti bendrą sesiją, kurią kitos darbalaukio programos gali naudoti pakartotinai; taip pat galite nustatyti visiškai naują seansą - per Session.getInstance (...)
metodas - tai būtų unikalu jūsų programai. Pastarasis gali pasirodyti svarbus el. Pašto klientams, kurie nėra izoliuoti kiekvienam vartotojui, pavyzdžiui, žiniatinklio el. Pašto sistemai, įdiegtai su servletais.
Norint nustatyti sesiją, reikia nustatyti tam tikras ypatybes; bent jau jums reikia paštas.smtp.host
nuosavybę, jei siunčiate pranešimus per SMTP. Rasite kitų ypatybių, aprašytų API dokumentacijoje.
Kai turėsite sesiją, sukurkite pranešimą. Šiame pavyzdyje jūs nustatote pranešimą nuo ir į pašto adresus, tema, ir kūnas tekstas, visas paimtas iš komandinės eilutės. Taip pat nustatote tam tikrą antraštės informaciją, įskaitant datą, ir galite nurodyti cc gavėjai, jei norite.
Galiausiai, jūs išsiųsite pranešimą per javax.mail.Transportas
klasė. Jei įdomu, kaip jis žino apie mūsų pašto seansą, atsigręžkite į pranešimo kūrėją.
Ne tik paprastas tekstas
„setText“ (...)
patogumo metodas klasėje javax.mail. Žinutė
(paveldėta iš javax.mail.dalis
sąsaja) nustato pranešimo turinį pagal pateiktą eilutę ir MIME tipą tekstas / paprastas
.
Vis dėlto jūs neapsiribojate paprastu tekstu: galite siųsti kitus turinio tipus naudodami „setDataHandler“ (...)
metodas. Daugeliu atvejų failų priedus, pvz., „Word“ dokumentus, reiškia „kiti turinio tipai“, bet norėdami sužinoti šiek tiek įdomesnių dalykų, patikrinkite šį kodą, jei norite siųsti „Java“ serijinį objektą:
ByteArrayOutputStream byteStream = nauja ByteArrayOutputStream (); ObjectOutputStream objectStream = naujas ObjectOutputStream (byteStream); objectStream.writeObject (theObject); msg.setDataHandler (naujas DataHandler (naujas ByteArrayDataSource (byteStream.toByteArray (), "lotontech / javaobject")));
Jūs nerasite „DataHandler“
klasę javax.mail. *
paketo struktūrą, nes ji priklauso „JavaBeans Activation Framework“ (JAF) paketui javax.aktyvinimas
. Atminkite, kad atsisiuntėte JAF platinimą ir „JavaMail“. JAF pateikia tvarkymo mechanizmą spausdinta duomenų turinys, kuris interneto turiniui reiškia MIME tipus.
Ir jei jūs tikrai bandysite anksčiau pateiktą kodą, norėdami siųsti „Java“ objektą el. Paštu, jums bus sunku rasti „ByteArrayDataSource“
klasė, nes nė viena paštas.jar
nei aktyvinimas.jar
įtraukite jį. Pabandykite ieškoti „JavaMail“ demonstraciniame kataloge!
Kalbant apie tuos failų priedus, kurie iš pradžių labiau domina, turėtumėte sukurti javax.activation.FileDataSource
pavyzdžiui, „DataHandler“
konstruktorius. Žinoma, jūs greičiausiai nesiųsite failo vieni; veikiausiai tai bus teksto pranešimo priedas. Tam jums reikia suprasti daugiadalių pranešimų sąvoką, todėl aš pristatysiu šią koncepciją dabar el. Pašto gavimo kontekste.
Gaukite el. Laišką per POP3
Anksčiau aš pristatiau javax.mail.dalis
sąsaja, įdiegta javax.mail. Žinutė
. Dabar paaiškinsiu jo pranešimo dalis, kurios yra svarbios šiame pavyzdyje. Norėdami pradėti, pažvelkite į 3 paveikslą.
3 paveiksle parodyta a Pranešimas
kaip sukurta ankstesniame pavyzdyje, kuri yra ir žinutė, ir pranešimo dalis, nes ji įgyvendina Dalis
sąsaja. Bet kuriai daliai galite gauti jos turinį (bet kurį „Java“ objektą), o paprasto teksto pranešimo atveju turinio objektas gali būti Stygos
. Kelių dalių pranešimo turinys bus tipo Daugiasluoksnis
, iš kurių galime sulaikyti atskiras kūno dalis, kurios pačios įgyvendina Dalis
sąsaja.
Praktiškai viskas paaiškės, kai pereisite a kodą „SimpleReceiver“
klasė, kurią pateiksiu trijuose skyriuose: pirma, klasės apibrėžimas ir pagrindinis (...)
metodas, kuris paima ryšio informaciją iš komandinės eilutės; antra, gauti (...)
metodas, kuris fiksuoja ir peržiūri gaunamus pranešimus; ir pagaliau printMessage (...)
metodas, kuris spausdina kiekvieno pranešimo antraštės informaciją ir turinį.
Čia yra pirmasis skyrius:
paketas com.lotontech.mail; importuoti javax.mail. *; importuoti javax.mail.internet. *; importuoti java.util. *; importuoti java.io. *; / ** * Paprasta el. Pašto imtuvų klasė. * / public class SimpleReceiver {/ ** * Pagrindinis būdas gauti pranešimus iš pašto serverio nurodytas * kaip komandinės eilutės argumentai. * / public static void main (String args []) {try {String popServer = args [0]; Stygos popUser = args [1]; Eilutė popPassword = args [2]; gauti (popServer, popUser, popPassword); } sugauti (Išimtis ex) {System.out.println ("Naudojimas: java com.lotontech.mail.SimpleReceiver" + "popServer popUser popPassword"); } System.exit (0); }
Vėliau pervesiu jus į tinkamą bandomąjį važiavimą, bet kol kas čia yra komandinė eilutė, skirta jai paleisti (nepamirškite pakeisti komandos argumentų savo pašto parametrais):
> java com.lotontech.mail.SimpleReceiver pop.myIsp.net myUserName myPassword
gauti (...)
metodas - vadinamas iš pagrindinis (...)
- atidaro POP3 INBOX ir paeiliui peržiūri pranešimus, kiekvieną kartą skambindamas printMessage (...)
. Štai kodas:
/ ** * „gauti“ metodas pranešimams gauti ir juos apdoroti. * / public static void gauti (String popServer, String popUser, String popPassword) {Store store = null; Aplanko aplankas = null; pabandykite {// - Gauti numatytąjį seansą - Ypatybės rekvizitai = System.getProperties (); Sesijos sesija = Session.getDefaultInstance (rekvizitai, nulis); // - Paimkite POP3 pranešimų saugyklą ir prisijunkite prie jos - store = session.getStore ("pop3"); store.connect (popServer, popUser, popPassword); // - Pabandykite surasti numatytąjį aplanką - folder = store.getDefaultFolder (); if (aplankas == null) mesti naują išimtį ("Nėra numatytojo aplanko"); // - ... ir jo INBOX - aplankas = folder.getFolder ("GAMINYS"); if (aplankas == null) mesti naują išimtį ("No POP3 INBOX"); // - atidarykite aplanką tik skaitymui - folder.open (Folder.READ_ONLY); // - Gaukite pranešimų paketus ir juos apdorokite - Pranešimas [] msgs = folder.getMessages (); for (int msgNum = 0; msgNum <msgs.length; msgNum ++) {printMessage (msgs [msgNum]); }} sugauti (Išimtis ex) {ex.printStackTrace (); } pagaliau {// - gražiai užsidarykite - pabandykite {if (aplankas! = null) aplanką.uždaryti (klaidinga); if (parduotuvė! = null) parduotuvė.uždaryti (); } sugavimas (ex2 išimtis) {ex2.printStackTrace ();}}}
Atkreipkite dėmesį, kad iš seanso gaunate POP3 pranešimų saugyklos pakuotę, tada prisijungiate prie jo naudodami pašto parametrus, kurie iš pradžių buvo pateikti komandinėje eilutėje.
Prisijungę gausite numatytojo aplanko rankenėlę - faktiškai aplankų medžio šaknį - ir iš ten aplanką INBOX, kuriame laikomi gaunami pranešimai. Atidarote „INBOX“, kad galėtumėte tik skaityti; susigaudote žinutėse ir žengiate po jas vienas po kito.
Nepaisant to, galite pagalvoti, ar kada norėtumėte atidaryti „INBOX“ rašyti prieiga. Jūs norėtumėte pažymėti pranešimus kaip gautus ir (arba) pašalinti juos iš serverio. Mūsų pavyzdyje jūs žiūrite tik į juos.
Galiausiai, aukščiau esančiame kode pasirūpinsite uždaryti aplanką ir pranešimų saugyklą, kai paliksite tik printMessage (...)
metodas užbaigti šią klasę.
Atspausdinkite pranešimus
Šiame skyriuje, anksčiau javax.mail.dalis
sąsajos diskusija tampa aktuali.