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 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
- ↑ JavaMail™ API - Tekninen yleiskatsaus - s. 4.
- ↑ Julkaisu 2.1.0 - 2022.
- ↑ JavaMail API: sähköpostipalvelimet . Haettu 21. helmikuuta 2015. Arkistoitu alkuperäisestä 21. helmikuuta 2015. (määrätön)
- ↑ JavaMail-lisenssi . Käyttöpäivä: 20. helmikuuta 2015. Arkistoitu alkuperäisestä 12. marraskuuta 2014. (määrätön)
Linkit