Javamail
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2015. február 21-én áttekintett
verziótól ; az ellenőrzések 6 szerkesztést igényelnek .
A JavaMail egy Java API e - mailek fogadására és küldésére SMTP , POP3 és IMAP protokollok használatával . A JavaMail a Java EE platform része , de kiegészítő csomagként is elérhető Java SE alkalmazásokhoz .
A JavaMailnek létezik egy nyílt forráskódú alternatív megvalósítása is , a GNU JavaMail, amely csak az 1.3-as verziójú JavaMail specifikációt valósítja meg; ez az egyetlen ingyenes megvalósítás, amely támogatja az NNTP protokollt , amely lehetővé teszi cikkek olvasását és hírcsoportokba való közzétételét .
A JavaMail nem tartalmaz levelezőszervert, de az ingyenes Apache James és Java Email Server (POP3 és SMTP) használható az ilyen feladatokhoz, vagy a SubEthaSMTP könyvtár SMTP szerver létrehozásához [3] .
Licenc
A forráskód és a lefordított könyvtárak CDDL-1.1 licenc alatt, részben pedig GPLv2 alatt érhetők el hivatkozáskivétellel , a példaforrások pedig a BSD licenc alatt [4] .
Használati példák
Üzenetek lekérése IMAP-on keresztül
import javax.mail.* ;
import java.util.Properties ;
public class TestImap {
public static void main ( String [] args ) throws Exception {
final String user = "[email protected]" ; // felhasználónév
végleges String pass = "a jelszavad" ; //
végleges jelszó String host = "imap.mail.ru" ; // levelezőszerver címe
// Tulajdonságok létrehozása
Properties props = new Properties ();
//hibakeresési mód
kellékeinek engedélyezése . put ( "mail.debug" , "true" );
//Protokoll megadása - IMAP SSL
kellékekkel . put ( "mail.store.protocol" , "imaps" );
Session session = session . getInstance ( kellékek );
Store store = session . getstore ();
//csatlakozás a levelezőszerver
tárolójához . connect ( host , user , pass );
//mappa beszerzése a bejövő üzenetekkel
Mappa bejövő üzenetek = store . getFolder ( "INBOX" );
//csak olvasható
beérkező levelek megnyitása . nyitott ( Folder.READ_ONLY ) ; _
//a legfrissebb üzenet lekérése (a legrégebbi az 1-es lesz)
Üzenet m = postafiók . getMessage ( inbox.getMessageCount ( ) ); Többrészes mp = ( Többrészes ) m . getContent (); Testrész bp = mp . getBodyPart ( 0 );
//Tartalom megjelenítése a képernyőn
Rendszer . ki . println ( bp.getContent ( ) ); } }
Példa szöveges üzenet küldésére
import java.util.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
// Egyszerű üzenet küldése "text/plain" tartalomtípussal
public class TestEmail {
public static void main ( String [ ] args ) {
// Helyettesítse itt az üzenet címzettjének címét
String to = "sendToMailAddress" ;
String from = "sendFromMailAddress" ;
// Cserélje ki a küldéshez használt SMTP-kiszolgálót
String host = "smtp.yourisp.net" ;
// Itt megadjuk az SMTP szerver portját.
int port = 123 ;
// Tulajdonságok létrehozása, munkamenet lekérése
Properties props = new Properties ();
// A Transport.send()
// statikus metódus használatakor meg kell adni, hogy az üzenet melyik gazdagépen keresztül kerüljön küldésre
props . put ( "mail.smtp.host" , host );
// Ha a levelezőszerver SSL
kellékeket használ . put ( "mail.smtp.ssl.enable" , "true" );
// Adja meg az SMTP szerver portját.
kellékek . put ( "mail.smtp.port" , port );
// A legtöbb SMTP-kiszolgáló hitelesítést használ.
kellékek . put ( "mail.smtp.auth" , "igaz" );
// Hibakeresési mód
kellékeinek engedélyezése . put ( "mail.debug" , "true" );
// Engedélyezze.
Session session = session . getDefaultInstance ( props , new javax . mail . Authenticator () {
// Adja meg a bejelentkezési jelszót abból az e-mailből, ahonnan az üzenetet küldjük.
@Override
protected PasswordAuthentication getPasswordAuthentication () {
return new PasswordAuthentication ( "login" , "password" ) ;
}
});
try {
// Üzenetobjektum létrehozása
Message msg = new MimeMessage ( session );
// Üzenetattribútumok beállítása
msg . setFrom ( new InternetAddress ( from ));
InternetAddress [] address = { new InternetAddress ( to )};
msg . setRecipients ( Üzenet . RecipientType . TO , cím );
msg . setSubject ( "E-mail tesztelése Java-n keresztül" );
msg . setSentDate ( új dátum ());
// Üzenettörzs üzenet
beállítása . setText ( "Ez egy egyszerű szöveges e-mail " + "küldésének tesztje Java-n keresztül.\n"
+ "Itt a 2. sor." );
// Üzenet küldése
Transport . küld ( üzenet );
}
catch ( MessagingException mex ) {
// Információk nyomtatása a kivételről, ha előfordul
mex . printStackTrace ();
}
}
}
Példa többrészes üzenet küldésére fájlmellékletekkel
import java.util.* ;
import java.io.* ;
import javax.mail.* ;
import javax.mail.internet.* ;
import javax.activation.* ;
public class SendMailUsage {
public static void main ( String [ ] args ) {
// Helyettesítse itt az üzenet címzettjének címét
String to = "sendToMailAddress" ;
String from = "sendFromMailAddress" ;
// Helyettesítse a küldéshez használt SMTP-kiszolgálót
String host = "smtpserver.yourisp.net" ;
// Tulajdonságok létrehozása, munkamenet lekérése
Properties props = new Properties ();
// A Transport.send()
// statikus metódus használatakor meg kell adni, hogy az üzenet melyik gazdagépen keresztül kerüljön küldésre
props . put ( "mail.smtp.host" , host );
// Hibakeresési mód
kellékeinek engedélyezése . put ( "mail.debug" , "true" );
//Engedélyezési
kellékek engedélyezése . put ( "mail.smtp.auth" , "igaz" );
// A munkamenet lekérése
Session session = Session . getInstance ( kellékek );
try {
// A transport objektum lekérése az e-mail elküldéséhez
Transport bus = session . getTransport ( "smtp" );
// A kapcsolat egyszeri beállítása
// A Transport.send() metódus minden küldés után megszakad
//bus.connect();
// Általában az SMTP szerverhez meg kell adni a felhasználónév és jelszó
buszt . connect ( "smtpserver.yourisp.net" , "username" , "password" );
// Üzenetobjektum létrehozása
Message msg = new MimeMessage ( session );
// Üzenetattribútumok beállítása
msg . setFrom ( new InternetAddress ( from ));
InternetAddress [] address = { new InternetAddress ( to )};
msg . setRecipients ( Üzenet . RecipientType . TO , cím );
// Szóközökkel elválasztott címlista elemzése. Szigorú
üzenet szintaxis . setRecipients ( Message . RecipientType . CC ,
InternetAddress . parse ( to , true ));
// Szóközökkel elválasztott címlista elemzése. Lágyabb szintaxis.
msg . setRecipients ( Message . RecipientType . BCC ,
InternetAddress . parse ( to , false ));
msg . setSubject ( "E-mail küldés tesztelése Java-val" );
msg . setSentDate ( új dátum ());
// Üzenet tartalmának beállítása és
setTextContent ( msg ) küldése;
msg . Változások mentése ();
busz . sendMessage ( üzenet , cím );
setMultipartContent ( msg );
msg . Változások mentése ();
busz . sendMessage ( üzenet , cím );
setFileAsAttachment ( msg , "C:/WINDOWS/CLOUD.GIF" );
msg . Változások mentése ();
busz . sendMessage ( üzenet , cím );
setHTMLContent ( msg );
msg . Változások mentése ();
busz . sendMessage ( üzenet , cím );
busz . bezár ();
}
catch ( MessagingException mex ) { // Információk nyomtatása a
mex esetleges kivételeiről
. printStackTrace (); // A beágyazott kivétel lekérése while ( mex . getNextException () != null ) { // A következő kivétel lekérése a Kivételláncban ex = mex . getNextException (); pl . printStackTrace (); if ( ! ( ex instance of MessagingException )) break ; else mex = ( MessagingException ) ex ; } } }
// Egyrészes üzenet szöveges/sima tartalomtípussal.
public static void setTextContent ( Message msg ) throws MessagingException {
// Tartalomtípus beállítása
String mytxt = "Ez egy egyszerű szöveges e-mail " + "küldésének tesztje Java-n keresztül.\n"
+ "Itt a 2. sor." ; msg . setText ( mytxt );
// Alternate way
msg . setContent ( mytxt , "text/plain" );
}
// Többrészes/vegyes tartalomtípusú üzenet. Mindkét rész szöveges/sima tartalom típusú.
public static void setMultipartContent ( Message msg ) throws MessagingException { // A
MimeBodyPart első részének létrehozása és kitöltése
p1 = new MimeBodyPart (); p1 . setText ( "Ez egy többrészes teszt e-mail egyik része." );
// A MimeBodyPart második részének létrehozása és kitöltése p2 = new MimeBodyPart ();
// Így állíthat be karakterkészletet a
p2 szöveges tartalomhoz . setText ( "Ez a második rész" , "us-ascii" );
// Hozzon létre egy példányt a Multipart osztályból. Üzenetrészek hozzáadása hozzá.
Többrészes mp = új MimeMultipart ();
mp . addBodyPart ( p1 );
mp . addBodyPart ( p2 );
// A Multipart osztály objektumának beállítása az
üzenet tartalmaként . setContent ( mp );
}
// Fájl csatolása mellékletként. A JAF FileDataSource használja.
public static void setFileAsAttachment ( Message msg , String filename )
throws MessagingException {
// A MimeBodyPart első részének létrehozása és kitöltése p1 = new MimeBodyPart ();
p1 . setText ( "Ez egy többrészes teszt e-mail egyik része." +
"A második rész egy fájl mellékletként" );
// A második
MimeBodyPart létrehozása p2 = new MimeBodyPart ();
// Fájl hozzáadása a második részhez
FileDataSource fds = new FileDataSource ( fájlnév );
p2 . setDataHandler ( új DataHandler ( fds ));
p2 . setFileName ( fds.getName ( ) );
// Hozzon létre egy példányt a Multipart osztályból. Üzenetrészek hozzáadása hozzá.
Többrészes mp = új MimeMultipart ();
mp . addBodyPart ( p1 );
mp . addBodyPart ( p2 );
// A Multipart osztály egy példányának beállítása az
msg dokumentum tartalmaként . setContent ( mp );
}
// Hozzáadás a html tartalom első részéhez.
// Bármilyen más típusú adat küldése is hasonló módon történik.
public static void setHTMLContent ( Message msg ) throws MessagingException {
String html = "<html><head><title>" +
msg . getSubject () +
"</title></head><body><h1>" +
msg . getSubject () +
"</h1><p>Ez egy HTML e-mail küldésének tesztje" +
" Java-n keresztül.</body></html>" ;
// A HTMLDataSource az msg belső osztálya . setDataHandler ( new DataHandler ( új HTMLDataSource ( html ))));
}
/*
* A belső osztály úgy működik, mint a JAF adatforrás, és HTML-kódot ad hozzá az üzenet tartalmához
*/
static class A HTMLDataSource implementálja a DataSource {
private String html ;
public HTMLDataSource ( String htmlString ) {
html = htmlString ;
}
// html karakterlánc visszaadása az InputStreamben.
// Minden alkalommal új adatfolyamot ad vissza, amikor
a public InputStream getInputStream () eldobja az IOExceptiont {
if ( html == null ) throw new IOException ( "Null HTML" );
return new ByteArrayInputStream ( html.getBytes ( ) ); }
public OutputStream getOutputStream () throws IOException {
throw new IOException ( "Ez az adatkezelő nem tud HTML-t írni" );
}
public String getContentType () {
return "text/html" ;
}
public String getName () {
return "JAF szöveg/html adatforrás csak e-mail küldésére" ;
}
}
}
Jegyzetek
- ↑ JavaMail™ API – Technikai áttekintés – 4. o.
- ↑ Kiadás 2.1.0 – 2022.
- ↑ JavaMail API: levelezőszerverek . Letöltve: 2015. február 21. Az eredetiből archiválva : 2015. február 21.. (határozatlan)
- ↑ JavaMail licenc . Hozzáférés dátuma: 2015. február 20. Az eredetiből archiválva : 2014. november 12. (határozatlan)
Linkek