Javamail
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 21. februar 2015; checks kræver
6 redigeringer .
JavaMail er en Java API til modtagelse og afsendelse af e- mail ved hjælp af SMTP- , POP3- og IMAP-protokollerne . JavaMail er en del af Java EE-platformen , men er også tilgængelig som en tilføjelsespakke til brug i Java SE -applikationer .
Der er også en open source alternativ implementering af JavaMail , GNU JavaMail, som kun implementerer version 1.3 JavaMail-specifikationen; det er den eneste gratis implementering, der understøtter NNTP-protokollen , som giver dig mulighed for at læse og sende artikler til nyhedsgrupper .
JavaMail inkluderer ikke en mailserver, men gratis Apache James og Java Email Server (POP3 og SMTP) kan bruges til sådanne opgaver, eller SubEthaSMTP- biblioteket til at oprette en SMTP-server [3] .
Licens
Kildekoden og de kompilerede biblioteker er tilgængelige under CDDL-1.1- licensen og delvist under GPLv2 med en linkundtagelse , og eksempelkilderne er tilgængelige under BSD-licensen [4] .
Eksempler på brug
Henter beskeder via IMAP
import javax.mail.* ;
import java.util.Properties ;
offentlig klasse TestImap {
public static void main ( String [] args ) throws Exception {
final String user = "[email protected]" ; // brugernavn
final String pass = "din adgangskode" ; // password
final String host = "imap.mail.ru" ; // mail server adresse
// Opret egenskaber
Properties props = new Properties ();
//aktiver debug mode
rekvisitter . put ( "mail.debug" , "sand" );
//Specificer protokol - IMAP med SSL-
rekvisitter . put ( "mail.store.protocol" , "imaps" );
Session session = session . getInstance ( rekvisitter );
Butik butik = session . getstore ();
//opret forbindelse til mailserverens
lager . forbinde ( vært , bruger , pass );
//hent en mappe med indgående beskeder Mappeindbakke = butik . getFolder ( "INBOX" );
//åbn den skrivebeskyttet
indbakke . åben ( Folder.READ_ONLY ) ; _
//få den seneste besked (den ældste bliver nummer 1)
Besked m = indbakke . getMessage ( inbox.getMessageCount ( ) ); Multipart mp = ( Multipart ) m . getContent (); BodyPart bp = mp . getBodyPart ( 0 );
//Vis indhold på skærmen
System . ud . println ( bp.getContent ( ) ); } }
Eksempel på afsendelse af en tekstbesked
importer java.util.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
// Afsendelse af en simpel besked med indholdstypen "text/plain"
public class TestEmail {
public static void main ( String [] args ) {
// Erstat adressen på modtageren af beskeden her
String to = "sendToMailAddress" ;
String from = "sendFromMailAddress" ;
// Erstat den SMTP-server, der bruges til at sende her .
String host = "smtp.yourisp.net" ;
// Her angiver vi SMTP-serverens port.
int port = 123 ;
// Opret egenskaber, få session
Properties props = new Properties ();
// Når du bruger den statiske metode Transport.send()
// skal du angive, gennem hvilken vært meddelelsen vil blive sendt
rekvisitter . put ( "mail.smtp.host" , vært );
// Hvis mailserveren bruger SSL-
rekvisitter . put ( "mail.smtp.ssl.enable" , "true" );
// Angiv porten på SMTP-serveren.
rekvisitter . put ( "mail.smtp.port" , port );
// De fleste SMTP-servere bruger godkendelse.
rekvisitter . put ( "mail.smtp.auth" , "sand" );
// Aktiver debug mode
rekvisitter . put ( "mail.debug" , "sand" );
// Godkend.
Session session = session . getDefaultInstance ( props , new javax . mail . Authenticator () {
// Angiv login-adgangskoden fra den mail, som vi vil sende beskeden fra.
@Override
protected PasswordAuthentication getPasswordAuthentication () {
return new PasswordAuthentication ( "login" , "password" ) ;
}
});
try {
// Create a message object
Message msg = new MimeMessage ( session );
// Indstil meddelelsesattributter
msg . setFrom ( ny internetadresse ( fra ));
Internetadresse [] adresse = { ny internetadresse ( til )};
besked . setRecipients ( Besked . RecipientType . TO , adresse );
besked . setSubject ( "Test e-mail via Java" );
besked . setSentDate ( ny dato ());
// Indstil meddelelsestekst
msg . setText ( "Dette er en test af at sende en " +
"e-mail med almindelig tekst via Java.\n" +
"Her er linje 2." );
// Send besked
Transport . send ( besked );
}
catch ( MessagingException mex ) {
// Udskriv oplysninger om undtagelsen , hvis den forekommer
mex . printStackTrace ();
}
}
}
Et eksempel på afsendelse af en flerdelt besked med vedhæftede filer
importer java.util.* ;
importer java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
offentlig klasse SendMailUsage {
public static void main ( String [] args ) {
// Erstat adressen på modtageren af beskeden her
String to = "sendToMailAddress" ;
String from = "sendFromMailAddress" ;
// Erstat den SMTP-server, der bruges til at sende her .
String host = "smtpserver.yourisp.net" ;
// Opret egenskaber, få session
Properties props = new Properties ();
// Når du bruger den statiske metode Transport.send()
// skal du angive, gennem hvilken vært meddelelsen vil blive sendt
rekvisitter . put ( "mail.smtp.host" , vært );
// Aktiver debug mode
rekvisitter . put ( "mail.debug" , "sand" );
//Aktiver
autorisationsrekvisitter . put ( "mail.smtp.auth" , "sand" );
// Hent sessionen
Session session = Session . getInstance ( rekvisitter );
prøv {
// Få transportobjektet til at sende e-mailen
Transport bus = session . getTransport ( "smtp" );
// Opsæt forbindelsen én gang
// Transport.send()-metoden afbrydes efter hver afsendelse
//bus.connect();
// Normalt for SMTP-serveren skal du angive brugernavn og
adgangskodebussen . connect ( "smtpserver.yourisp.net" , "brugernavn" , "adgangskode" );
// Opret et meddelelsesobjekt
Message msg = new MimeMessage ( session );
// Indstil meddelelsesattributter
msg . setFrom ( ny internetadresse ( fra ));
Internetadresse [] adresse = { ny internetadresse ( til )};
besked . setRecipients ( Besked . RecipientType . TO , adresse );
// Parse en liste over adresser adskilt af mellemrum. Streng
msg- syntaks . setRecipients ( Message . RecipientType . CC ,
InternetAddress . parse ( to , true ));
// Parse en liste over adresser adskilt af mellemrum. Blødere syntaks.
besked . setRecipients ( Message . RecipientType . BCC ,
InternetAddress . parse ( to , false ));
besked . setSubject ( "Test afsendelse af e-mail med Java" );
besked . setSentDate ( ny dato ());
// Indstil beskedindhold og send
setTextContent ( msg );
besked . gem Ændringer ();
bus . sendMessage ( besked , adresse );
setMultipartContent ( msg );
besked . gem Ændringer ();
bus . sendMessage ( besked , adresse );
setFileAsAttachment ( msg , "C:/WINDOWS/CLOUD.GIF" );
besked . gem Ændringer ();
bus . sendMessage ( besked , adresse );
setHTMLContent ( msg );
besked . gem Ændringer ();
bus . sendMessage ( besked , adresse );
bus . lukke ();
}
catch ( MessagingException mex ) {
// Udskriv oplysninger om eventuelle undtagelser, der er kastet
mex . printStackTrace ();
// Hent den indlejrede undtagelse
while ( mex . getNextException ( ) != null ) {
// Hent den næste undtagelse i
undtagelseskæden ex = mex . getNextException ();
eks . printStackTrace ();
if ( ! ( eksempelvis MessagingException ) ) break ;
else mex = ( MessagingException ) ex ;
}
}
}
// En besked i én del med indholdstype tekst/almindelig.
public static void setTextContent ( Message msg ) throws MessagingException {
// Set content type
String mytxt = "Dette er en test af at sende en " +
"e-mail med almindelig tekst gennem Java.\n" +
"Her er linje 2." ;
besked . setText ( mytxt );
// Alternativ måde
meddelelse . setContent ( mytxt , "text/plain" );
}
// Besked med indholdstype multipart/mixed. Begge dele er af tekst/almindeligt indholdstype.
public static void setMultipartContent ( Message msg ) throws MessagingException {
// Opret og udfyld den første del af
MimeBodyPart p1 = new MimeBodyPart ();
p1 . setText ( "Dette er del et af en test multipart e-mail." );
// Opret og udfyld den anden del af
MimeBodyPart p2 = new MimeBodyPart ();
// Sådan indstilles et tegnsæt på tekstindhold
p2 . setText ( "Dette er den anden del" , "us-ascii" );
// Opret en instans af Multipart-klassen. Tilføjelse af meddelelsesdele til det.
Multipart mp = ny MimeMultipart ();
mp . addBodyPart ( p1 );
mp . addBodyPart ( p2 );
// Indstil objektet for Multipart-klassen som indholdet af
meddelelsen . setContent ( mp );
}
// Vedhæftning af en fil som en vedhæftet fil. Brugt af JAF FileDataSource.
public static void setFileAsAttachment ( Message msg , String filename )
throws MessagingException {
// Opret og udfyld den første del af
MimeBodyPart p1 = new MimeBodyPart ();
p1 . setText ( "Dette er del et af en test multipart e-mail." +
"Den anden del er fil som en vedhæftet fil" );
// Opret den anden
MimeBodyPart p2 = ny MimeBodyPart ();
// Tilføjelse af en fil til den anden del
FileDataSource fds = new FileDataSource ( filnavn );
p2 . setDataHandler ( ny DataHandler ( fds ));
p2 . setFileName ( fds.getName ( ) );
// Opret en instans af Multipart-klassen. Tilføjelse af meddelelsesdele til det.
Multipart mp = ny MimeMultipart ();
mp . addBodyPart ( p1 );
mp . addBodyPart ( p2 );
// Indstil en instans af Multipart-klassen som indholdet af
msg -dokumentet . setContent ( mp );
}
// Tilføjelse til den første del af html-indholdet.
// Afsendelse af data af enhver anden type foregår på samme måde.
public static void setHTMLContent ( Message msg ) throws MessagingException {
String html = "<html><head><title>" +
msg . getSubject () +
"</title></head><body><h1>" +
msg . getSubject () +
"</h1><p>Dette er en test af at sende en HTML-e-mail" +
" gennem Java.</body></html>" ;
// HTMLDataSource er en indre klasse af
msg . setDataHandler ( ny DataHandler ( ny HTMLDataSource ( html ))));
}
/*
* Indre klasse fungerer som JAF datakilde og tilføjer HTML til meddelelsens indhold
*/
statisk klasse HTMLDataSource implementerer DataSource {
private String html ;
public HTMLDataSource ( String htmlString ) {
html = htmlString ;
}
// Returner html-streng i InputStream.
// Returnerer en ny strøm hver gang
public InputStream getInputStream () kaster IOException {
if ( html == null ) throw new IOException ( "Null HTML" );
returnere ny ByteArrayInputStream ( html.getBytes ( ) ); }
public OutputStream getOutputStream () kaster IOException {
throw new IOException ( "Denne DataHandler kan ikke skrive HTML" );
}
public String getContentType () {
return "text/html" ;
}
public String getName () {
return "JAF text/html dataSource for kun at sende e-mail" ;
}
}
}
Noter
- ↑ JavaMail™ API - En teknisk oversigt - S. 4.
- ↑ Udgivelse 2.1.0 - 2022.
- ↑ JavaMail API: mailservere . Hentet 21. februar 2015. Arkiveret fra originalen 21. februar 2015. (ubestemt)
- ↑ JavaMail-licens . Dato for adgang: 20. februar 2015. Arkiveret fra originalen 12. november 2014. (ubestemt)
Links