Ohjelmointi

JavaMailin pikakäynnistys

JavaMailista löydät API: t ja palveluntarjoajan toteutukset, joiden avulla voit kehittää täysin toimivia sähköpostiohjelmasovelluksia. "Sähköpostisovellussovellukset" herättää ajatuksia Microsoft Outlookista; ja kyllä, voit kirjoittaa oman Outlook-korvikkeen. Mutta sähköpostiohjelman ei tarvitse asua asiakaskoneella ollenkaan. Itse asiassa se voi olla servlet tai EJB, joka toimii etäpalvelimella ja tarjoaa loppukäyttäjälle pääsyn sähköpostiin verkkoselaimen kautta. Ajattele Hotmailia (kyllä, voit myös kirjoittaa oman version Hotmailista). Tai voit välttää käyttöliittymän kokonaan. Entä automaattivastaaja, joka lukee saapuvia viestejä ja lähettää vastauksia alkuperäisen lähettäjän mukaan räätälöityinä?

Omassa lemmikkiprojektissani puhuva sähköpostiohjelma lukee - eli puhuu - saapuvia viestejä. Se perustuu ideani tarkentamiseen, jonka esitin "Talking Java!" Kerron sinulle siitä myöhemmin myöhemmin.

Aloita nyt asentamalla ja määrittämällä JavaMail-ohjelmisto.

Perustaa

Jos käytät Java 2 Platform, Enterprise Edition (J2EE) 1.3: ta, olet onnekas: se sisältää JavaMailin, joten lisäasetuksia ei tarvita. Jos kuitenkin käytössäsi on Java 2 Platform, Standard Edition (J2SE) 1.1.7 tai uudempi ja haluat sähköpostiohjelman sovelluksillesi, lataa ja asenna seuraavat:

  • JavaMail
  • JavaBeans Activation Framework

Asenna vain purkamalla ladatut tiedostot ja lisäämällä sisältämät purkitiedostot luokkatiedeesi. Esimerkkinä tässä on minun luokkatie tälle projektille:

.; 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 

mailapi.jar tiedosto sisältää keskeiset API-luokat, kun taas pop3.jar ja smtp.jar tiedostot sisältävät vastaavien postiprotokollien tarjoajan toteutukset. (Emme käytä imap.jar tiedosto tässä artikkelissa.) Ajattele palveluntarjoajan toteutuksia samanlaisina kuin JDBC (Java Database Connectivity) -ajurit, mutta pikaviestijärjestelmille eikä tietokannoille. Mitä tulee mail.jar tiedosto, se sisältää kaikki yllä olevat purkitiedostot, joten voit rajoittaa luokkatiedon vain mail.jar ja aktivointi.jar tiedostot.

aktivointi.jar tiedoston avulla voit käsitellä MIME-tyyppejä (monikäyttöiset Internet-postilaajennukset), joihin pääsee binaaristen datavirtojen kautta. Etsi DataHandler luokka Ei vain pelkkää tekstiä kappale myöhemmin.

Tämän vuoksi loppuosa tästä artikkelista ei tarjoa kattavaa sovellusliittymän kattavuutta; pikemminkin opit tekemällä. Jos kyseessä ovat perusteelliset API-tiedot, joita etsit, tutustu vastaaviin latauspaketteihin sisältyviin PDF-tiedostoihin ja Javadocs-tiedostoihin.

Kun olet asentanut ohjelmiston, sinun on hankittava sähköpostitilin tiedot seuraavien esimerkkien suorittamiseksi. Tarvitset Internet-palveluntarjoajan SMTP (Simple Mail Transfer Protocol) -palvelimen nimen ja POP (Post Office Protocol) -palvelimen nimen, sähköpostitilisi kirjautumistunnuksen ja postilaatikon salasanan. Kuva 1 esittää yksityiskohtiani - eivät todellisia yksityiskohtia, ymmärrätte - sellaisina kuin Microsoft Outlook käyttää.

Lähetetään sähköpostia SMTP: n kautta

Ensimmäinen esimerkki osoittaa, kuinka lähetetään perussähköpostiviesti SMTP: n kautta. Alla löydät SimpleSender luokka, joka ottaa viestisi tiedot komentoriviltä ja kutsuu erillisen menetelmän - lähettää(...) - lähettää se:

paketti com.lotontech.mail; tuo javax.mail. *; tuo javax.mail.internet. *; tuo java.util. *; / ** * Yksinkertainen sähköpostin lähettäjäluokka. * / public class SimpleSender {/ ** * Päämenetelmä komentorivillä annetun viestin lähettämiseen. * / public static void main (String args []) {kokeile {String smtpServer = args [0]; Merkkijono = args [1]; Merkkijono = args [2]; Merkkijono = args [3]; Merkkijono = args [4]; lähetä (smtpServer, vastaanottajalle, kohteesta, ruumiille); } catch (Exception ex) {System.out.println ("Käyttö: java com.lotontech.mail.SimpleSender" + "smtpServer toAddress fromAddress subjectText bodyText"); } System.exit (0); } 

Suorita seuraavaksi SimpleSender kuten alla. Korvata smtp.myISP.net oman SMTP-palvelimen kanssa, joka on johdettu sähköposti-asetuksista:

> java com.lotontech.mail.SimpleSender smtp.myISP.net [email protected] [email protected] "Hello" "Just to say Hello." 

Ja jos se toimii, näet vastaanottopäässä jotain sellaista, mikä näkyy kuvassa 2.

lähettää(...) menetelmä täydentää SimpleSender luokassa. Näytän ensin koodin ja sitten teorin:

 / ** * "lähetä" -menetelmä viestin lähettämiseksi. * / public static void send (String smtpServer, String to, String from, String subject, String body) {kokeile {Ominaisuudet rekvisiitta = System.getProperties (); // - Liitetään oletussessioon, tai voimme aloittaa uuden - props.put ("mail.smtp.host", smtpServer); Istunnon istunto = Session.getDefaultInstance (rekvisiitta, null); // - Luo uusi viesti - Message msg = new MimeMessage (session); // - Määritä FROM- ja TO-kentät - msg.setFrom (uusi InternetAddress (from)); msg.setRecipients (Message.RecipientType.TO, InternetAddress.parse (to, false)); // - Voisimme sisällyttää myös CC-vastaanottajat - // if (cc! = Null) // msg.setRecipients (Message.RecipientType.CC //, InternetAddress.parse (cc, false)); // - Aseta aihe ja pääteksti - msg.setSubject (aihe); msg.setText (body); // - Aseta muita otsikkotietoja - msg.setHeader ("X-Mailer", "LOTONtechEmail"); msg.setSentDate (uusi päivämäärä ()); // - Lähetä viesti - Transport.send (msg); System.out.println ("Viesti lähetetty OK."); } catch (Exception ex) {ex.printStackTrace (); }}} 

Huomaa ensin, että olet saamassa sähköpostiistunnon (java.mail.Session), ilman jota et voi tehdä mitään. Tässä tapauksessa soitat Session.getDefaultInstance (...) saada jaettu istunto, jota muut työpöytäsovellukset voivat käyttää uudelleen; Voit myös asettaa kokonaan uuden istunnon - Session.getInstance (...) menetelmä - se olisi ainutlaatuinen sovelluksellesi. Jälkimmäinen voi osoittautua tärkeäksi sähköpostiohjelmille, joita ei ole eristetty käyttäjäkohtaisesti, kuten verkkopohjainen sähköpostijärjestelmä, joka on toteutettu servlet-sovellusten kanssa.

Istunnon luominen edellyttää tiettyjen ominaisuuksien määrittämistä; tarvitset vähintään mail.smtp.host ominaisuus, jos lähetät viestejä SMTP: n kautta. Löydät muita ominaisuuksia, jotka on kuvattu API-dokumentaatiossa.

Kun sinulla on istunto, luo viesti. Tässä esimerkissä asetat viestin alkaen ja että sähköpostiosoitteet, aihe, ja runko teksti, kaikki otettu alun perin komentoriviltä. Asetat myös joitain otsikkotietoja, mukaan lukien päivämäärä, ja voit määrittää cc vastaanottajille, jos haluat.

Lopuksi lähetät viestin javax.mail.Transport luokassa. Jos ihmettelet, miten se tietää sähköpostiistunnostamme, katso taaksepäin viestin rakentajaa.

Ei vain pelkkää tekstiä

setText (...) mukavuusmenetelmä luokassa javax.mail.Message (peritty javax.mail.osa käyttöliittymä) asettaa viestin sisällön toimitettuun merkkijonoon ja MIME-tyypiksi teksti / tavallinen.

Et kuitenkaan rajoitu pelkkään tekstiin: voit lähettää muita sisältötyyppejä setDataHandler (...) menetelmä. Useimmissa tapauksissa voit käyttää "muita sisältötyyppejä" tarkoittamaan tiedostoliitteitä, kuten Word-asiakirjoja, mutta jos haluat jotain mielenkiintoisempaa, tutustu tähän koodiin Java-sarjoitetun objektin lähettämiseksi:

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

Et löydä DataHandler luokan sisällä javax.mail. * pakettirakenne, koska se kuuluu JavaBeans Activation Framework (JAF) -pakettiin javax.aktivointi. Muista, että latait JAF-jakelun sekä JavaMailin. JAF tarjoaa mekanismin käsittelyyn kirjoitettu tietosisältö, joka Internet-sisällön kannalta tarkoittaa MIME-tyyppejä.

Ja jos todella yrität yllä olevaa koodia lähettääksesi Java-objektin sähköpostitse, sinulla on vaikeuksia löytää ByteArrayDataSource luokassa, koska kumpikaan mail.jar ei myöskään aktivointi.jar sisällytä se. Yritä etsiä JavaMail-demohakemistosta!

Mitä tulee niihin liitetiedostoihin, joista olet todennäköisesti kiinnostunut alun perin, luodaan javax.activation.FileDataSource esimerkiksi DataHandlerrakentaja. Tietysti et todennäköisesti lähetä tiedostoa yksin; pikemminkin se on todennäköisesti liite tekstiviestiin. Tätä varten sinun on ymmärrettävä moniosaisten viestien käsite, joten esitän sen nyt, sähköpostin yhteydessä.

Vastaanota sähköpostia POP3: n kautta

Aiemmin esitin javax.mail.osa käyttöliittymä, jonka toteuttaa javax.mail.Message. Selitän nyt sen viestin osat, jotka ovat tärkeitä tässä esimerkissä. Aloita katsomalla kuvaa 3.

Kuva 3 esittää a Viesti kuten luotu edellisessä esimerkissä, joka on sekä viesti että viestiosa, koska se toteuttaa Osa käyttöliittymä. Voit hankkia minkä tahansa osan sen sisällön (minkä tahansa Java-objektin), ja yksinkertaisen tekstiviestin tapauksessa sisältöobjekti voi olla Merkkijono. Moniosaisen viestin sisältö on tyypiltään Moniosainen, josta voimme tarttua yksittäisiin kehon osiin, jotka itse toteuttavat Osa käyttöliittymä.

Käytännössä kaikki käyvät ilmi, kun astut läpi a-koodin SimpleReceiver luokka, jonka esitän kolmessa osassa: ensin luokan määritelmä ja tärkein (...) menetelmä, joka ottaa yhteyden tiedot komentoriviltä; toiseksi vastaanottaa(...) menetelmä, joka sieppaa saapuvat viestit ja kulkee niiden läpi; ja lopuksi printMessage (...) menetelmä, joka tulostaa kunkin viestin otsikkotiedot ja sisällön.

Tässä on ensimmäinen osa:

paketti com.lotontech.mail; tuo javax.mail. *; tuo javax.mail.internet. *; tuo java.util. *; tuo java.io. *; / ** * Yksinkertainen sähköpostin vastaanottoluokka. * / public class SimpleReceiver {/ ** * Päämenetelmä viestien vastaanottamiseksi sähköpostipalvelimelta määritetty * komentoriviargumentteina. * / public static void main (String args []) {kokeile {String popServer = args [0]; Merkkijono popUser = args [1]; Merkkijono popPassword = args [2]; vastaanottaa (popServer, popUser, popPassword); } catch (Exception ex) {System.out.println ("Käyttö: java com.lotontech.mail.SimpleReceiver" + "popServer popUser popPassword"); } System.exit (0); } 

Otan sinut asianmukaisen koeajon läpi myöhemmin, mutta toistaiseksi tässä on komentorivi sen suorittamiseksi (muista korvata komentoargumentit sähköpostiasetuksillasi):

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

vastaanottaa(...) menetelmä - kutsutaan tärkein (...) - avaa POP3-INBOX-viestisi ja käy läpi viestit vuorotellen aina soittaessasi printMessage (...). Tässä on koodi:

 / ** * "vastaanottaa" -menetelmä viestien noutamiseksi ja käsittelemiseksi. * / public staattinen void vastaanotto (String popServer, String popUser, String popPassword) {Store store = null; Kansiokansio = null; kokeile {// - Hanki oletusistunto - Ominaisuudet rekvisiitta = System.getProperties (); Istunnon istunto = Session.getDefaultInstance (rekvisiitta, null); // - Hanki POP3-viestisäilö ja muodosta yhteys siihen - store = session.getStore ("pop3"); store.connect (popServer, popUser, popPassword); // - Yritä saada kiinni oletuskansiosta - folder = store.getDefaultFolder (); if (kansio == null) heittää uuden poikkeuksen ("Ei oletuskansiota"); // - ... ja sen INBOX - kansio = folder.getFolder ("INBOX"); if (kansio == null) heittää uuden poikkeuksen ("Ei POP3-POSTIA"); // - Avaa kansio vain luku -kansio.open (Folder.READ_ONLY); // - Hae viestien kääreitä ja käsittele ne - Message [] msgs = folder.getMessages (); for (int msgNum = 0; msgNum <viestin pituus; msgNum ++) {printMessage (viestit [msgNum]); }} catch (Exception ex) {ex.printStackTrace (); } lopuksi {// - Sulje mukavasti - kokeile {if (kansio! = null) -kansiota. sulje (false); if (myymälä! = tyhjä) store.close (); } catch (Poikkeus ex2) {ex2.printStackTrace ();}}} 

Huomaa, että hankit istunnosta POP3-sanomalehtien kääreen ja muodostat yhteyden sitten komentorivillä alun perin toimitetuilla sähköposti-asetuksilla.

Kun yhteys on muodostettu, saat oletuskansion kahvan - käytännössä kansiopuun juuren - ja sieltä INBOX-kansion, joka pitää saapuvat viestit. Avaat INBOXin vain luku -käyttöä varten. tartut viesteihin ja astut niiden läpi yksi kerrallaan.

Voit sivuuttaa, haluatko koskaan avata INBOX: n kirjoittaa pääsy. Olisit, jos aiot merkitä viestit vastaanotetuksi ja / tai poistaa ne palvelimelta. Esimerkissämme katsot vain heitä.

Lopuksi yllä olevassa koodissa huolehdit kansion ja viestivaraston sulkemisesta, kun olet valmis, jolloin vain printMessage (...) menetelmä tämän luokan loppuun saattamiseksi.

Tulosta viestit

Tässä osiossa aikaisempi javax.mail.osa käyttöliittymäkeskustelusta tulee merkitystä.

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