Javamail

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 21. helmikuuta 2015 tarkistetusta versiosta . tarkastukset vaativat 6 muokkausta .
javamail
Tyyppi funktiokirjasto
Tekijä Sun Microsystems
Kehittäjä Eclipse Foundation
Sisään kirjoitettu Java
Ensimmäinen painos 1996 [1]
Laitteistoalusta cross-platform
uusin versio
Lisenssi GNU GPL 2 ja yhteinen kehitys- ja jakelulisenssi versio 1.1 [d]
Verkkosivusto eclipse-ee4j.github.io/… ​(  englanti)

JavaMail  on Java - sovellusliittymä sähköpostin vastaanottamiseen ja lähettämiseen SMTP- , POP3- ja IMAP -protokollia käyttäen . JavaMail on osa Java EE - alustaa , mutta se on saatavana myös lisäosapakettina käytettäväksi Java SE - sovelluksissa .

JavaMailille on myös avoimen lähdekoodin vaihtoehtoinen toteutus  , GNU JavaMail, joka toteuttaa vain version 1.3 JavaMail-määrityksen; Se on ainoa ilmainen toteutus, joka tukee NNTP-protokollaa , jonka avulla voit lukea ja lähettää artikkeleita uutisryhmiin .

JavaMail ei sisällä sähköpostipalvelinta, mutta tällaisiin tehtäviin voidaan käyttää ilmaista Apache James ja Java-sähköpostipalvelinta (POP3 ja SMTP) tai SubEthaSMTP- kirjastoa SMTP-palvelimen luomiseen [3] .

Lisenssi

Lähdekoodi ja käännetyt kirjastot ovat saatavilla CDDL-1.1- lisenssillä ja osittain GPLv2 - lisenssillä linkkipoikkeuksella , ja esimerkkilähteet ovat saatavilla BSD-lisenssillä [4] .

Käyttöesimerkkejä

Viestien haku IMAP:n kautta

tuo javax.mail.* ; tuonti java.util.Properties ; public class TestImap { public static void main ( Merkkijono [] args ) heittää Poikkeus { final String user = "[email protected]" ; // käyttäjätunnus lopullinen String pass = "salasanasi" ; // salasana lopullinen String host = "imap.mail.ru" ; // postipalvelimen osoite // Luo ominaisuudet Ominaisuudet props = new Properties (); //ota käyttöön virheenkorjaustilan rekvisiitta . put ( "mail.debug" , "true" ); //Määritä protokolla - IMAP ja SSL- ominaisuudet . put ( "mail.store.protocol" , "imaps" ); Istuntoistunto = istunto . _ getInstance ( rekvisiitta ); Kauppakauppa = istunto . _ getstore (); // yhteys sähköpostipalvelimeen . yhdistä ( isäntä , käyttäjä , pass ); //hae kansio, jossa on saapuvat viestit Kansio saapuneet = store . getFolder ( "INBOX" ); //avaa vain luku -postilaatikko . avaa ( Folder.READ_ONLY ) ; _ //hae uusin viesti (vanhin on numero 1) Viesti m = saapuneet . getMessage ( inbox.getMessageCount ( ) ); Moniosainen mp = ( Moniosainen ) m . getContent (); BodyPart bp = mp . getBodyPart ( 0 ); //Näytä sisältö näytöllä Järjestelmä . ulos . println ( bp.getContent ( ) ); } }

Esimerkki tekstiviestin lähettämisestä

tuonti java.util.* ; tuo javax.mail.* ; tuonti javax.mail.internet.* ; tuo javax.activation.* ; // Yksinkertaisen viestin lähettäminen sisältötyypillä "text/plain" public class TestEmail { public static void main ( String [ ] args ) { // Korvaa viestin vastaanottajan osoite tähän String to = "sendToMailAddress" ; String from = "sendFromMailAddress" ; // Korvaa tähän lähettämiseen käytetty SMTP-palvelin String host = "smtp.yourisp.net" ; // Tässä määritetään SMTP-palvelimen portti. int port = 123 ; // Luo ominaisuuksia, hanki istunto Ominaisuudet props = new Properties (); // Käytettäessä staattista menetelmää Transport.send() // sinun on määritettävä minkä isännän kautta viesti lähetetään props . put ( "mail.smtp.host" , isäntä ); // Jos sähköpostipalvelin käyttää SSL- sovelluksia . put ( "mail.smtp.ssl.enable" , "true" ); // Määritä SMTP-palvelimen portti. rekvisiitta . put ( "mail.smtp.port" , portti ); // Useimmat SMTP-palvelimet käyttävät todennusta. rekvisiitta . put ( "mail.smtp.auth" , "true" ); // Ota virheenkorjaustilan rekvisiitta käyttöön . put ( "mail.debug" , "true" ); // Valtuuta. Istuntoistunto = istunto . _ getDefaultInstance ( props , new javax . mail . Authenticator () { // Määritä kirjautumissalasana sähköpostista, josta lähetämme viestin. @Override protected PasswordAuthentication getPasswordAuthentication () { return new PasswordAuthentication ( "sisäänkirjautuminen" , "salasana" ) ; } }); try { // Luo viestiobjekti Viesti msg = new MimeMessage ( istunto ); // Aseta viestin attribuutit msg . setFrom ( uusi Internet -osoite ( lähteestä )); Internet -osoite [] osoite = { uusi Internet -osoite ( vastaanottaja )}; viesti _ setRecipients ( Message . RecipientType . TO , osoite ); viesti _ setSubject ( "Testaa sähköposti Java kautta" ); viesti _ setSentDate ( uusi päivämäärä ()); // Aseta viestin tekstiviesti . setText ( "Tämä on " + "tekstiviestin lähettämisen testi Javan kautta.\n" + "Tässä on rivi 2." ); // Lähetä viesti Kuljetus . lähetä ( msg ); } catch ( MessagingException mex ) { // Tulosta tiedot poikkeuksesta, jos se tapahtuu mex . printStackTrace (); } } }

Esimerkki moniosaisen viestin lähettämisestä tiedostoliitteineen

tuonti java.util.* ; tuo java.io.* ; tuo javax.mail.* ; tuonti javax.mail.internet.* ; tuo javax.activation.* ; public class SendMailUsage { public static void main ( String [ ] args ) { // Korvaa viestin vastaanottajan osoite tähän String to = "sendToMailAddress" ; String from = "sendFromMailAddress" ; // Korvaa tähän lähettämiseen käytetty SMTP-palvelin String host = "smtpserver.yourisp.net" ; // Luo ominaisuuksia, hanki istunto Ominaisuudet props = new Properties (); // Käytettäessä staattista menetelmää Transport.send() // sinun on määritettävä minkä isännän kautta viesti lähetetään props . put ( "mail.smtp.host" , isäntä ); // Ota virheenkorjaustilan rekvisiitta käyttöön . put ( "mail.debug" , "true" ); //Ota valtuutusehdotukset käyttöön . put ( "mail.smtp.auth" , "true" ); // Hae istunto Session session = Session . getInstance ( rekvisiitta ); yritä { // Hae kuljetusobjekti sähköpostin lähettämiseksi Transport bus = session . getTransport ( "smtp" ); // Muodosta yhteys kerran // Transport.send() -metodin yhteys katkeaa jokaisen lähetyksen jälkeen //bus.connect(); // Yleensä SMTP-palvelimelle on määritettävä käyttäjätunnus ja salasanaväylä . connect ( "smtpserver.yourisp.net" , "käyttäjänimi" , "salasana" ); // Luo viestiobjekti Viesti msg = new MimeMessage ( istunto ); // Aseta viestin attribuutit msg . setFrom ( uusi Internet -osoite ( lähteestä )); Internet -osoite [] osoite = { uusi Internet -osoite ( vastaanottaja )}; viesti _ setRecipients ( Message . RecipientType . TO , osoite ); // Jäsennä osoiteluettelo välilyönneillä erotettuna. Tiukka viestisyntaksi . setRecipients ( Message . RecipientType . CC , InternetAddress . parse ( to , true )); // Jäsennä osoiteluettelo välilyönneillä erotettuna. Pehmeämpi syntaksi. viesti _ setRecipients ( Message . RecipientType . BCC , InternetAddress . parse ( vastaanottaja , false )); viesti _ setSubject ( "Testaa sähköpostin lähettäminen Javalla" ); viesti _ setSentDate ( uusi päivämäärä ()); // Aseta viestin sisältö ja lähetä setTextContent ( msg ); viesti _ tallennaMuutokset (); bussi . sendMessage ( viesti , osoite ); setMultipartContent ( msg ); viesti _ tallennaMuutokset (); bussi . sendMessage ( viesti , osoite ); setFileAsAttachment ( msg , "C:/WINDOWS/CLOUD.GIF" ); viesti _ tallennaMuutokset (); bussi . sendMessage ( viesti , osoite ); setHTMLContent ( msg ); viesti _ tallennaMuutokset (); bussi . sendMessage ( viesti , osoite ); bussi . sulje (); } catch ( MessagingException mex ) { // Tulosta tiedot mahdollisista poikkeuksista, joita heitetään mex . printStackTrace (); // Hae sisäkkäinen poikkeus while ( mex . getNextException () != null ) { // Hae poikkeusketjun seuraava poikkeus ex = mex . getNextException (); ex . printStackTrace (); if ( ! ( ex instanceof MessagingException )) break ; else mex = ( Viestinvälityspoikkeus ) ex ; } } } // Yksiosainen viesti, jonka sisältötyyppi on teksti/plain. public static void setTextContent ( Message msg ) throws MessagingException { // Aseta sisältötyyppi String mytxt = "Tämä on " + "testi vain tekstisähköpostin lähettämiselle Java:n kautta.\n" + "Tässä on rivi 2." ; viesti _ setText ( mytxt ); // Vaihtoehtoinen viesti . setContent ( mytxt , "text/plain" ); } // Viesti, jonka sisältötyyppi on moniosainen/sekoitettu. Molemmat osat ovat teksti-/pelkkäsisältötyyppisiä. public static void setMultipartContent ( Message msg ) heittää MessagingExceptionin { // Luo ja täytä MimeBodyPartin ensimmäinen osa p1 = new MimeBodyPart (); p1 . setText ( "Tämä on osa moniosaista testisähköpostia." ); // Luo ja täytä MimeBodyPartin toinen osa p2 = new MimeBodyPart (); // Näin asetat merkistön tekstisisällölle p2 . setText ( "Tämä on toinen osa" , "us-ascii" ); // Luo Multipart-luokan esiintymä. Viestin osien lisääminen siihen. Moniosainen mp = uusi MimeMultipart (); mp . addBodyPart ( p1 ); mp . addBodyPart ( p2 ); // Aseta Multipart-luokan objekti viestiviestin sisällöksi . setContent ( mp ); } // Tiedoston liittäminen liitteenä. Käyttää JAF FileDataSource. public static void setFileAsAttachment ( Message msg , String filename ) throws MessagingException { // Luo ja täytä MimeBodyPartin ensimmäinen osa p1 = new MimeBodyPart (); p1 . setText ( "Tämä on osa moniosaisen testisähköpostin yksi." + "Toinen osa on tiedosto liitteenä" ); // Luo toinen MimeBodyPart p2 = uusi MimeBodyPart (); // Tiedoston lisääminen toiseen osaan FileDataSource fds = new FileDataSource ( tiedostonimi ); p2 . setDataHandler ( uusi DataHandler ( fds )); p2 . setFileName ( fds.getName ( ) ); // Luo Multipart-luokan esiintymä. Viestin osien lisääminen siihen. Moniosainen mp = uusi MimeMultipart (); mp . addBodyPart ( p1 ); mp . addBodyPart ( p2 ); // Aseta Multipart-luokan esiintymä viestiasiakirjan sisällöksi . setContent ( mp ); } // Lisätään html-sisällön ensimmäiseen osaan. // Minkä tahansa muun tiedon lähettäminen tapahtuu samalla tavalla. public static void setHTMLContent ( Message msg ) heittää MessagingException { String html = "<html><head><title>" + msg . getSubject () + "</title></head><body><h1>" + msg . getSubject () + "</h1><p>Tämä on testi HTML-sähköpostin lähettämiselle" + " Java:n kautta.</body></html>" ; // HTMLDataSource on msg :n sisäinen luokka . setDataHandler ( uusi DataHandler ( uusi HTMLDataSource ( html )))); } /* * Sisäluokka toimii kuten JAF-tietolähde ja lisää HTML:n viestin sisältöön */ staattinen luokka HTMLDataSource toteuttaa DataSource { private String html ; public HTMLDataSource ( String htmlString ) { html = htmlString ; } // Palauta html-merkkijono InputStreamissa. // Palauttaa uuden virran aina, kun julkinen InputStream getInputStream ( ) heittää IOExceptionin { if ( html == null ) throw new IOException ( "Null HTML" ); palauttaa uusi ByteArrayInputStream ( html.getBytes ( ) ); } public OutputStream getOutputStream ( ) heittää IOExceptionin { throw new IOException ( "Tämä DataHandler ei voi kirjoittaa HTML:ää" ); } public String getContentType () { return "text/html" ; } public String getName () { return "JAF text/html dataSource lähettää vain sähköpostia" ; } } }

Muistiinpanot

  1. JavaMail™ API - Tekninen yleiskatsaus - s. 4.
  2. Julkaisu 2.1.0 - 2022.
  3. JavaMail API: sähköpostipalvelimet . Haettu 21. helmikuuta 2015. Arkistoitu alkuperäisestä 21. helmikuuta 2015.
  4. JavaMail-lisenssi . Käyttöpäivä: 20. helmikuuta 2015. Arkistoitu alkuperäisestä 12. marraskuuta 2014.

Linkit