Javamail

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 21. února 2015; kontroly vyžadují 6 úprav .
javamail
Typ knihovna funkcí
Autor Sun Microsystems
Vývojář Nadace Eclipse
Zapsáno v Jáva
První vydání 1996 [1]
Hardwarová platforma multiplatformní
Nejnovější verze
Licence GNU GPL 2 a Common Development and Distribution License verze 1.1 [d]
webová stránka eclipse-ee4j.github.io/… (  anglicky)

JavaMail  je Java API pro příjem a odesílání e-mailů pomocí protokolů SMTP , POP3 a IMAP . JavaMail je součástí platformy Java EE , ale je k dispozici také jako doplňkový balíček pro použití v aplikacích Java SE .

Existuje také alternativní implementace JavaMail s otevřeným zdrojovým kódem  , GNU JavaMail, která implementuje pouze specifikaci JavaMail verze 1.3; je to jediná bezplatná implementace, která podporuje protokol NNTP , který vám umožňuje číst a posílat články do diskusních skupin .

JavaMail neobsahuje poštovní server, ale pro takové úlohy lze použít bezplatný Apache James a Java Email Server (POP3 a SMTP), nebo pro vytvoření SMTP serveru knihovnu SubEthaSMTP [3] .

Licence

Zdrojový kód a zkompilované knihovny jsou dostupné pod licencí CDDL-1.1 a částečně pod licencí GPLv2 s výjimkou odkazu a vzorové zdroje jsou dostupné pod licencí BSD [4] .

Příklady použití

Načítání zpráv přes IMAP

import javax.mail.* ; import java.util.Properties ; public class TestImap { public static void main ( String [] args ) vyvolá výjimku { final String user = "[email protected]" ; // uživatelské jméno final String pass = "vaše heslo" ; // konečné heslo String host = "imap.mail.ru" ; // adresa poštovního serveru // Vytvoření vlastností Vlastnosti props = new Vlastnosti (); //povolí podpěry režimu ladění . put ( "mail.debug" , "true" ); //Určení protokolu - IMAP s podporou SSL . dát ( "mail.store.protocol" , "imaps" ); Sezení relace = relace . getInstance ( rekvizity ); Store store = session . getstore (); //připojení k úložišti poštovního serveru . připojit ( hostitel , uživatel , průchod ); //získání složky s příchozími zprávami Složka doručená pošta = úložiště . getFolder ( "INBOX" ); //otevřít doručenou poštu pouze pro čtení . otevřít ( Folder.READ_ONLY ) ; _ //získáte nejnovější zprávu (nejstarší bude číslo 1) Zpráva m = inbox . getMessage ( inbox.getMessageCount ( ) ); Vícedílné mp = ( Vícedílné ) m . getContent (); BodyPart bp = mp . getBodyPart ( 0 ); //Zobrazení obsahu na obrazovce Systém . ven . println ( bp.getContent ( ) ); } }

Příklad odeslání textové zprávy

import java.util.* ; import javax.mail.* ; import javax.mail.internet.* ; import javax.aktivace.* ; // Odeslání jednoduché zprávy s typem obsahu "text/plain" public class TestEmail { public static void main ( String [] args ) { // Zde nahraďte adresu příjemce zprávy String to = "sendToMailAddress" ; String from = "sendFromMailAddress" ; // Nahraďte sem SMTP server použitý pro odesílání String host = "smtp.yourisp.net" ; // Zde uvedeme port SMTP serveru. int port = 123 ; // Vytvořit vlastnosti, získat relaci Vlastnosti props = new Vlastnosti (); // Při použití statické metody Transport.send() // musíte určit, přes kterého hostitele bude zpráva odeslána props . dát ( "mail.smtp.host" , hostitel ); // Pokud poštovní server používá SSL props . dát ( "mail.smtp.ssl.enable" , "true" ); // Zadejte port serveru SMTP. rekvizity . put ( "mail.smtp.port" , port ); // Většina serverů SMTP používá ověřování. rekvizity . dát ( "mail.smtp.auth" , "true" ); // Povolit podpěry režimu ladění . put ( "mail.debug" , "true" ); // Povolit. Sezení relace = relace . getDefaultInstance ( props , new javax . mail . Authenticator () { // Zadejte přihlašovací heslo z pošty, ze které budeme zprávu odesílat. @Override protected PasswordAuthentication getPasswordAuthentication () { return new PasswordAuthentication ( "login" , "heslo" ) ; } }); try { // Vytvořit objekt zprávy Zpráva msg = new MimeMessage ( session ); // Nastavení atributů zprávy msg . setFrom ( new InternetAddress ( from )); InternetAddress [] address = { new InternetAddress ( to )}; zpráva _ setRecipients ( Zpráva . RecipientType . TO , adresa ); zpráva _ setSubject ( "Test e-mailu přes Javu" ); zpráva _ setSentDate ( nové datum ()); // Nastavit tělo zprávy msg . setText ( "Toto je test odeslání " + "prostého textového e-mailu přes Java.\n" + "Tady je řádek 2." ); // Odeslat zprávu Transport . odeslat ( msg ); } catch ( MessagingException mex ) { // Vytiskne informace o výjimce , pokud k ní dojde mex . printStackTrace (); } } }

Příklad odeslání vícedílné zprávy se souborovými přílohami

import java.util.* ; import java.io.* ; import javax.mail.* ; import javax.mail.internet.* ; import javax.aktivace.* ; public class SendMailUsage { public static void main ( String [] args ) { // Zde nahraďte adresu příjemce zprávy String to = "sendToMailAddress" ; String from = "sendFromMailAddress" ; // Nahraďte sem SMTP server použitý pro odesílání String host = "smtpserver.yourisp.net" ; // Vytvořit vlastnosti, získat relaci Vlastnosti props = new Vlastnosti (); // Při použití statické metody Transport.send() // musíte určit, přes kterého hostitele bude zpráva odeslána props . dát ( "mail.smtp.host" , hostitel ); // Povolit podpěry režimu ladění . put ( "mail.debug" , "true" ); //Povolit podporu pro autorizaci . dát ( "mail.smtp.auth" , "true" ); // Získání relace Session session = Session . getInstance ( rekvizity ); try { // Získá transportní objekt pro odeslání e-mailu Transport bus = session . getTransport ( "smtp" ); // Jednorázové připojení // Metoda Transport.send() se odpojí po každém odeslání //bus.connect(); // Obvykle pro server SMTP musíte zadat sběrnici uživatelských jmen a hesel . připojit ( "smtpserver.yourisp.net" , "uživatelské jméno" , "heslo" ); // Vytvoření objektu zprávy Zpráva msg = new MimeMessage ( session ); // Nastavení atributů zprávy msg . setFrom ( new InternetAddress ( from )); InternetAddress [] address = { new InternetAddress ( to )}; zpráva _ setRecipients ( Zpráva . RecipientType . TO , adresa ); // Analyzujte seznam adres oddělených mezerami. Přísná syntaxe msg . setRecipients ( Message . RecipientType . CC , InternetAddress . parse ( to , true )); // Analyzujte seznam adres oddělených mezerami. Měkčí syntaxe. zpráva _ setRecipients ( Message . RecipientType . BCC , InternetAddress . parse ( to , false )); zpráva _ setSubject ( "Test odeslání e-mailu pomocí Java" ); zpráva _ setSentDate ( nové datum ()); // Nastavení obsahu zprávy a odeslání setTextContent ( msg ); zpráva _ uložitZměny (); autobus . sendMessage ( msg , adresa ); setMultipartContent ( msg ); zpráva _ uložitZměny (); autobus . sendMessage ( zpráva , adresa ); setFileAsAttachment ( msg , "C:/WINDOWS/CLOUD.GIF" ); zpráva _ uložitZměny (); autobus . sendMessage ( msg , adresa ); setHTMLContent ( msg ); zpráva _ uložitZměny (); autobus . sendMessage ( zpráva , adresa ); autobus . zavřít (); } catch ( MessagingException mex ) { // Tisk informací o všech možných výjimkách vyvolaných mex . printStackTrace (); // Získání vnořené výjimky while ( mex . getNextException () != null ) { // Získání další výjimky v řetězci výjimek ex = mex . getNextException (); ex . printStackTrace (); if ( ! ( ex instanceof MessagingException )) break ; else mex = ( MessagingException ) ex ; } } } // Jednodílná zpráva s typem obsahu text/plain. public static void setTextContent ( Message msg ) vyvolá MessagingException { // Nastavit typ obsahu String mytxt = "Toto je test odeslání " + "prostého textového e-mailu přes Java.\n" + "Zde je řádek 2." ; zpráva _ setText ( mytxt ); // Alternativní způsob msg . setContent ( mytxt , "text/prostý" ); } // Zpráva s typem obsahu multipart/mixed. Obě části jsou typu text/prostý obsah. public static void setMultipartContent ( Message msg ) vyvolá MessagingException { // Vytvoří a naplní první část MimeBodyPart p1 = new MimeBodyPart (); p1 . setText ( "Toto je první část testovacího vícedílného e-mailu." ); // Vytvořte a naplňte druhou část MimeBodyPart p2 = new MimeBodyPart (); // Zde je návod, jak nastavit znakovou sadu pro textový obsah p2 . setText ( "Toto je druhá část" , "us-ascii" ); // Vytvoří instanci třídy Multipart. Přidání částí zprávy do něj. Multipart mp = new MimeMultipart (); t.t. _ addBodyPart ( p1 ); t.t. _ addBodyPart ( p2 ); // Nastaví objekt třídy Multipart jako obsah zprávy msg . setContent ( mp ); } // Připojení souboru jako přílohy. Používá JAF FileDataSource. public static void setFileAsAttachment ( Message msg , String filename ) vyvolá MessagingException { // Vytvoří a naplní první část MimeBodyPart p1 = new MimeBodyPart (); p1 . setText ( "Toto je první část testovacího vícedílného e-mailu." + "Druhá část je soubor jako příloha" ); // Vytvoří druhý MimeBodyPart p2 = new MimeBodyPart (); // Přidání souboru do druhé části FileDataSource fds = new FileDataSource ( filename ); p2 . setDataHandler ( new DataHandler ( fds )); p2 . setFileName ( fds.getName ( ) ); // Vytvoří instanci třídy Multipart. Přidání částí zprávy do něj. Multipart mp = new MimeMultipart (); t.t. _ addBodyPart ( p1 ); t.t. _ addBodyPart ( p2 ); // Nastaví instanci třídy Multipart jako obsah dokumentu msg . setContent ( mp ); } // Přidání do první části obsahu html. // Odesílání dat jakéhokoli jiného typu se provádí stejným způsobem. public static void setHTMLContent ( Message msg ) vyvolá MessagingException { String html = "<html><head><title>" + zpráva . getSubject () + "</title></head><body><h1>" + msg . getSubject () + "</h1><p>Toto je test odeslání HTML e-mailu" + " prostřednictvím Javy.</body></html>" ; // HTMLDataSource je vnitřní třída msg . setDataHandler ( new DataHandler ( new HTMLDataSource ( html )))); } /* * Vnitřní třída funguje jako zdroj dat JAF a přidává HTML k obsahu zprávy */ static class HTMLDataSource implementuje DataSource { private String html ; public HTMLDataSource ( String htmlString ) { html = htmlString ; } // Vrátí řetězec html v InputStream. // Vrátí nový proud pokaždé, když public InputStream getInputStream () vyvolá IOException { if ( html == null ) throw new IOException ( "Null HTML" ); return new ByteArrayInputStream ( html.getBytes ( ) ); } public OutputStream getOutputStream () vyvolá IOException { throw new IOException ( "Tento DataHandler nemůže psát HTML" ); } public String getContentType () { return "text/html" ; } public String getName () { return "JAF text/html zdroj dat pouze k odeslání e-mailu" ; } } }

Poznámky

  1. JavaMail™ API – technický přehled – str. 4.
  2. Vydání 2.1.0 – 2022.
  3. JavaMail API: poštovní servery . Získáno 21. února 2015. Archivováno z originálu 21. února 2015.
  4. Licence JavaMail . Datum přístupu: 20. února 2015. Archivováno z originálu 12. listopadu 2014.

Odkazy