Javamail

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 21 februari 2015; kontroller kräver 6 redigeringar .
javamail
Sorts funktionsbibliotek
Författare Sun Microsystems
Utvecklaren Eclipse Foundation
Skrivet i Java
Första upplagan 1996 [1]
Hårdvaruplattform plattformsoberoende
senaste versionen
Licens GNU GPL 2 och Common Development and Distribution License version 1.1 [d]
Hemsida eclipse-ee4j.github.io/… ​(  engelska)

JavaMail  är ett Java API för att ta emot och skicka e- post med SMTP- , POP3- och IMAP -protokollen . JavaMail är en del av Java EE-plattformen , men finns även tillgängligt som ett tilläggspaket för användning i Java SE -applikationer .

Det finns också en alternativ implementering av JavaMail med öppen källkod  , GNU JavaMail, som endast implementerar version 1.3 JavaMail-specifikationen; det är den enda kostnadsfria implementeringen som stöder NNTP-protokollet , som låter dig läsa och posta artiklar i nyhetsgrupper .

JavaMail inkluderar ingen e-postserver, men gratis Apache James och Java Email Server (POP3 och SMTP) kan användas för sådana uppgifter, eller SubEthaSMTP- biblioteket för att skapa en SMTP-server [3] .

Licens

Källkoden och de kompilerade biblioteken är tillgängliga under CDDL-1.1- licensen och delvis under GPLv2 med ett länkundantag , och exempelkällorna är tillgängliga under BSD-licensen [4] .

Användningsexempel

Hämtar meddelanden via IMAP

importera javax.mail.* ; importera java.util.Properties ; public class TestImap { public static void main ( String [] args ) throws Exception { final String user = "användarnamn@mail.ru" ; // användarnamn final String pass = "ditt lösenord" ; // lösenord final String host = "imap.mail.ru" ; // e-postserveradress // Skapa egenskaper Properties props = new Properties (); //aktivera rekvisita i felsökningsläge . put ( "mail.debug" , "true" ); //Ange protokoll - IMAP med SSL -rekvisita . put ( "mail.store.protocol" , "imaps" ); Session session = session . getInstance ( rekvisita ); Butiksbutik = session . _ getstore (); //anslut till e - postserverarkivet . ansluta ( värd , användare , pass ); //få en mapp med inkommande meddelanden Mappinkorg = butik . getFolder ( "INBOX" ); //öppna den skrivskyddade inkorgen . öppen ( Folder.READ_ONLY ) ; _ //få det senaste meddelandet (det äldsta kommer att vara nummer 1) Meddelande m = inkorg . getMessage ( inbox.getMessageCount ( ) ); Multipart mp = ( Multipart ) m . getContent (); BodyPart bp = mp . getBodyPart ( 0 ); //Visa innehåll på skärmen System . ut . println ( bp.getContent ( ) ); } }

Exempel på att skicka ett textmeddelande

importera java.util.* ; importera javax.mail.* ; importera javax.mail.internet.* ; importera javax.activation.* ; // Skicka ett enkelt meddelande med innehållstypen "text/plain" public class TestEmail { public static void main ( String [] args ) { // Ersätt adressen till mottagaren av meddelandet här String to = "sendToMailAddress" ; String from = "sendFromMailAddress" ; // Ersätt SMTP-servern som används för att skicka hit String host = "smtp.yourisp.net" ; // Här anger vi porten för SMTP-servern. int port = 123 ; // Skapa egenskaper, få session Properties rekvisita = nya egenskaper (); // När du använder den statiska metoden Transport.send() // måste du ange genom vilken värd meddelandet ska skickas rekvisita . put ( "mail.smtp.host" , värd ); // Om e-postservern använder SSL- rekvisita . put ( "mail.smtp.ssl.enable" , "true" ); // Ange porten för SMTP-servern. rekvisita . put ( "mail.smtp.port" , port ); // De flesta SMTP-servrar använder autentisering. rekvisita . put ( "mail.smtp.auth" , "true" ); // Aktivera debug mode rekvisita . put ( "mail.debug" , "true" ); // Auktorisera. Session session = session . getDefaultInstance ( props , new javax . mail . Authenticator () { // Ange inloggningslösenordet från e-postmeddelandet som vi kommer att skicka meddelandet från. @Override protected PasswordAuthentication getPasswordAuthentication () { return new PasswordAuthentication ( "login" , "password" ) ; } }); try { // Skapa ett meddelandeobjekt Message msg = new MimeMessage ( session ); // Ställ in meddelandeattribut msg . setFrom ( ny Internetadress ( från )); Internetadress [] adress = { ny Internetadress ( till )}; meddelande . setRecipients ( Meddelande . RecipientType . TO , adress ); meddelande . setSubject ( "Testa e-post via Java" ); meddelande . setSentDate ( nytt datum ()); // Ställ in meddelandetext msg . setText ( "Detta är ett test för att skicka ett " + "e-postmeddelande med vanlig text via Java.\n" + "Här är rad 2." ); // Skicka meddelande Transport . skicka ( msg ); } catch ( MessagingException mex ) { // Skriv ut information om undantaget om det inträffar mex . printStackTrace (); } } }

Ett exempel på att skicka ett flerdelat meddelande med filbilagor

importera java.util.* ; importera java.io.* ; importera javax.mail.* ; importera javax.mail.internet.* ; importera javax.activation.* ; offentlig klass SendMailUsage { public static void main ( String [] args ) { // Ersätt adressen till mottagaren av meddelandet här String to = "sendToMailAddress" ; String from = "sendFromMailAddress" ; // Ersätt SMTP-servern som används för att skicka hit String host = "smtpserver.yourisp.net" ; // Skapa egenskaper, få session Properties rekvisita = nya egenskaper (); // När du använder den statiska metoden Transport.send() // måste du ange genom vilken värd meddelandet ska skickas rekvisita . put ( "mail.smtp.host" , värd ); // Aktivera debug mode rekvisita . put ( "mail.debug" , "true" ); //Aktivera auktorisering rekvisita . put ( "mail.smtp.auth" , "true" ); // Hämta sessionen Session session = Session . getInstance ( rekvisita ); prova { // Få transportobjektet att skicka e-postmeddelandet Transport buss = session . getTransport ( "smtp" ); // Ställ in anslutningen en gång // Transport.send()-metoden kopplas bort efter varje sändning //bus.connect(); // Vanligtvis för SMTP-servern behöver du ange användarnamn och lösenord buss . connect ( "smtpserver.yourisp.net" , "användarnamn" , "lösenord" ); // Skapa ett meddelandeobjekt Message msg = new MimeMessage ( session ); // Ställ in meddelandeattribut msg . setFrom ( ny Internetadress ( från )); Internetadress [] adress = { ny Internetadress ( till )}; meddelande . setRecipients ( Meddelande . RecipientType . TO , adress ); // Analysera en lista med adresser separerade med mellanslag. Strikt msg- syntax . setRecipients ( Message . RecipientType . CC , InternetAddress . parse ( to , true )); // Analysera en lista med adresser separerade med mellanslag. Mjukare syntax. meddelande . setRecipients ( Message . RecipientType . BCC , InternetAddress . parse ( to , false )); meddelande . setSubject ( "Testa skicka e-post med Java" ); meddelande . setSentDate ( nytt datum ()); // Ställ in meddelandeinnehåll och skicka setTextContent ( msg ); meddelande . saveChanges (); buss . sendMessage ( meddelande , adress ); setMultipartContent ( msg ); meddelande . saveChanges (); buss . sendMessage ( meddelande , adress ); setFileAsAttachment ( msg , "C:/WINDOWS/CLOUD.GIF" ); meddelande . saveChanges (); buss . sendMessage ( meddelande , adress ); setHTMLContent ( msg ); meddelande . saveChanges (); buss . sendMessage ( meddelande , adress ); buss . stäng (); } catch ( MessagingException mex ) { // Skriv ut information om eventuella undantag som kastas mex . printStackTrace (); // Hämta det kapslade undantaget while ( mex . getNextException ( ) != null ) { // Hämta nästa undantag i undantagskedjan ex = mex . getNextException (); ex . printStackTrace (); if ( ! ( ex instans av MessagingException )) break ; else mex = ( MessagingException ) ex ; } } } // Ett meddelande i en del med innehållstyp text/plain. public static void setTextContent ( Message msg ) throws MessagingException { // Set content type String mytxt = "Detta är ett test för att skicka ett " + "e-postmeddelande med vanlig text via Java.\n" + "Här är rad 2." ; meddelande . setText ( mytxt ); // Alternativt sätt meddelande . setContent ( mytxt , "text/plain" ); } // Meddelande med innehållstyp multipart/mixed. Båda delarna är av text/vanligt innehåll. public static void setMultipartContent ( Message msg ) throws MessagingException { // Skapa och fyll i den första delen av MimeBodyPart p1 = new MimeBodyPart (); p1 . setText ( "Detta är del ett av ett e-postmeddelande med flera delar." ); // Skapa och fyll i den andra delen av MimeBodyPart p2 = new MimeBodyPart (); // Så här ställer du in en teckenuppsättning på textinnehåll p2 . setText ( "Detta är den andra delen" , "us-ascii" ); // Skapa en instans av klassen Multipart. Lägger till meddelandedelar till den. Multipart mp = ny MimeMultipart (); mp . addBodyPart ( p1 ); mp . addBodyPart ( p2 ); // Ställ in objektet för klassen Multipart som innehållet i meddelandet . setContent ( mp ); } // Bifoga en fil som en bilaga. Används av JAF FileDataSource. public static void setFileAsAttachment ( Message msg , String filename ) throws MessagingException { // Skapa och fyll i den första delen av MimeBodyPart p1 = new MimeBodyPart (); p1 . setText ( "Detta är del ett av ett e-postmeddelande med flera delar." + "Den andra delen är en fil som en bilaga" ); // Skapa den andra MimeBodyPart p2 = new MimeBodyPart (); // Lägga till en fil i den andra delen FileDataSource fds = new FileDataSource ( filnamn ); p2 . setDataHandler ( ny DataHandler ( fds )); p2 . setFileName ( fds.getName ( ) ); // Skapa en instans av klassen Multipart. Lägger till meddelandedelar till den. Multipart mp = ny MimeMultipart (); mp . addBodyPart ( p1 ); mp . addBodyPart ( p2 ); // Ställ in en instans av klassen Multipart som innehållet i msg- dokumentet . setContent ( mp ); } // Lägger till den första delen av HTML-innehållet. // Att skicka data av någon annan typ görs på samma sätt. public static void setHTMLContent ( Message msg ) throws MessagingException { String html = "<html><head><title>" + msg . getSubject () + "</title></head><body><h1>" + msg . getSubject () + "</h1><p>Detta är ett test för att skicka ett HTML-e-postmeddelande" + " genom Java.</body></html>" ; // HTMLDataSource är en inre klass av msg . setDataHandler ( ny DataHandler ( ny HTMLDataSource ( html )))); } /* * Inre klass fungerar som JAF-datakälla och lägger till HTML till meddelandeinnehållet */ statisk klass HTMLDataSource implementerar DataSource { private String html ; public HTMLDataSource ( String htmlString ) { html = htmlString ; } // Returnera html-sträng i InputStream. // Returnerar en ny ström varje gång public InputStream getInputStream () kastar IOException { if ( html == null ) throw new IOException ( "Null HTML" ); returnera ny ByteArrayInputStream ( html.getBytes ( ) ); } public OutputStream getOutputStream () kastar IOException { throw new IOException ( "Denna DataHandler kan inte skriva HTML" ); } public String getContentType () { return "text/html" ; } public String getName () { return "JAF text/html dataSource för att endast skicka e-post" ; } } }

Anteckningar

  1. JavaMail™ API - En teknisk översikt - S. 4.
  2. Utgåva 2.1.0 - 2022.
  3. JavaMail API: e-postservrar . Hämtad 21 februari 2015. Arkiverad från originalet 21 februari 2015.
  4. JavaMail-licens . Datum för åtkomst: 20 februari 2015. Arkiverad från originalet den 12 november 2014.

Länkar