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 ä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
- ↑ JavaMail™ API - En teknisk översikt - S. 4.
- ↑ Utgåva 2.1.0 - 2022.
- ↑ JavaMail API: e-postservrar . Hämtad 21 februari 2015. Arkiverad från originalet 21 februari 2015. (obestämd)
- ↑ JavaMail-licens . Datum för åtkomst: 20 februari 2015. Arkiverad från originalet den 12 november 2014. (obestämd)
Länkar