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 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
- ↑ JavaMail™ API – technický přehled – str. 4.
- ↑ Vydání 2.1.0 – 2022.
- ↑ JavaMail API: poštovní servery . Získáno 21. února 2015. Archivováno z originálu 21. února 2015. (neurčitý)
- ↑ Licence JavaMail . Datum přístupu: 20. února 2015. Archivováno z originálu 12. listopadu 2014. (neurčitý)
Odkazy