JavaMail
JavaMail | |
Fejlesztő | Oracle Corporation |
Legfrissebb stabil kiadás | 2.1.3 (stabil verzió, 2024. március 4.)[1] |
Programozási nyelv | Java |
Platform | platformfüggetlen |
Állapot | aktív |
Kategória | Java APIk |
Licenc |
|
A JavaMail weboldala |
A JavaMail egy Java nyelven írt alkalmazásprogramozási felület, amivel e-maileket lehet küldeni és fogadni SMTP, POP3 és IMAP protokollokon keresztül. A JavaMail a Java EE része, de egy opcionális csomag formájában Java SE környezetben is használható.
A hivatalos referenciaimplementáció mellett létezik egy másik, szintén nyílt forráskódú implementáció, a GNU JavaMail. Igaz, hogy csak a JavaMail 1.3-as változatát támogatja, de ezen kívül lehetőséget kínál NNTP csatlakozásra is. Ezzel a rendszerrel tehát hírfolyamcikkeket lehet írni és olvasni.
A JavaMail komponensei
- Message osztály: egy levél attribútumait és a tartalmi részét foglalja magába
- Folder osztály: leveleket és almappákat tartalmazhat, valamint levelek másolását, törlését, összefűzését is lehetővé tevő metódusokat definiál
- Store osztály: egy adatbázist definiál, amely magába foglalja a könyvtárszerkezetet és az abban lévő leveleket, valamint metódusokat biztosít az adatbázishoz kapcsolódáshoz, lekérdezéséhez, valamint a kapcsolat megszüntetéséhez
- Transport osztály: a levél célba való eljuttatásáért felelős, metódusokat definiál a több címzettnek való küldéshez is
- Session osztály: olyan globális és felhasználókénti tulajdonságokat definiál, amelyek meghatározzák a levelezésre képes alkalmazások és a hálózat közötti interfészt
A JavaMail használata
1. Egy JavaMail kliens jellemzően egy Session objektum létrehozásával kezdődik:
Session session = Session.getInstance(props, authenticator);
2. A Session objektum getStore() metódusának segítségével kapcsolódik az alapértelmezett tárolóhoz, valamint a connect() metódus segítségével hozhatja létre a tényleges kapcsolatot:
Store store = session.getStore(); store.connect();
3. Amennyiben a kapcsolat sikeresen létrejött, a kliens eléri az adott tároló mappáit és az azokban lévő leveleket:
// az INBOX mappa lekérése Folder inbox = store.getFolder("INBOX"); // az INBOX mappa megnyitása inbox.open(Folder.READ_WRITE); // az első levél lekérése Message m = inbox.getMessage(1); // a levél címének lekérése String subject = m.getSubject(); // a levél tartalmának lekérése Object content = m.getContent();
4. Végezetül a kliens bezárja az összes megnyitott mappát, valamint a tárolót:
// INBOX bezárása inbox.close(); // a tároló bezárása store.close();
Egyrészes, sima szöveges e-mail küldése
import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class TestEmail { public static void main(String[] args) { String to = "sendToMailAddress"; String from = "sendFromMailAddress"; String host = "smtp.yourisp.net"; Properties props = new Properties(); // Ha a statikus Transport.send()-et használjuk, // meg kell adni melyik hoston keresztül küldjünk props.put("mail.smtp.host", host); // Debug bekapcs props.put("mail.debug", "true"); Session session = Session.getInstance(props); try { Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); InternetAddress[] address = {new InternetAddress(to)}; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject("sima, szöveges email java kódból"); msg.setSentDate(new Date()); msg.setText("Íme itt az üzenet,\n" + "ez a második sora."); Transport.send(msg); } catch (MessagingException mex) { mex.printStackTrace(); } } }
Többrészes e-mail és HTML-e-mail küldése valamint fájl csatolása
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) { String to = "sendToMailAddress"; String from = "sendFromMailAddress"; String host = "smtpserver.yourisp.net"; Properties props = new Properties(); // Ha a statikus Transport.send()-et használjuk, // meg kell adni melyik hoston keresztül küldjünk props.put("mail.smtp.host", host); // Debug bekapcsolása props.put("mail.debug", "true"); Session session = Session.getInstance(props); try { // Transport objektummal történő küldés Transport bus = session.getTransport("smtp"); // Csak egyszer csatlakozik // Transport.send() minden küldés után kapcsolatot bont // Általában, SMTP-hez nem szükséges felhasználónév és jelszó bus.connect(); //de ha mégis, akkor //bus.connect("smtpserver.yourisp.net", "username", "password"); Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(from)); InternetAddress[] address = {new InternetAddress(to)}; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject("javás emailküldés"); msg.setSentDate(new Date()); // Üzenet tartalmának megadása és küldés setTextContent(msg); msg.saveChanges(); bus.sendMessage(msg, address); setMultipartContent(msg); msg.saveChanges(); bus.sendMessage(msg, address); setFileAsAttachment(msg, "C:/WINDOWS/CLOUD.GIF"); msg.saveChanges(); bus.sendMessage(msg, address); setHTMLContent(msg); msg.saveChanges(); bus.sendMessage(msg, address); bus.close(); } catch (MessagingException mex) { mex.printStackTrace(); } } // Egyszerű, egyrészes text/plain email public static void setTextContent(Message msg) throws MessagingException { // Üzenet tartalmának beállítása String mytxt = "Íme itt az email, \n" + "ez a második sora."; msg.setText(mytxt); // A form tartalmának megváltoztatása az általunk definiáltra msg.setContent(mytxt, "text/plain"); } // Egyszerű többrészes e-mail. Mindkét törzsrész text/plain. public static void setMultipartContent(Message msg) throws MessagingException { // Első rész létrehozása és kitöltése MimeBodyPart p1 = new MimeBodyPart(); p1.setText("This is part one of a test multipart e-mail."); // Második rész létrehozása és kitöltése MimeBodyPart p2 = new MimeBodyPart(); // A karakterkészlet beállítása p2.setText("Ez a második rész", "utf-8"); // Multipart létrehozása. A törzsrészeket hozzáadjuk. Multipart mp = new MimeMultipart(); mp.addBodyPart(p1); mp.addBodyPart(p2); // Beállítjuk a Multipartot az üzenet tartalmának msg.setContent(mp); } // Fájl csatolása a JAF FileDataSource használatával: public static void setFileAsAttachment(Message msg, String filename)throws MessagingException { // Első rész létrehozása és kitöltése MimeBodyPart p1 = new MimeBodyPart(); p1.setText("Ez az email első része." + "A második rész csatolmány."); // Második rész létrehozása és kitöltése MimeBodyPart p2 = new MimeBodyPart(); // Betesszük a fájlt a második részbe FileDataSource fds = new FileDataSource(filename); p2.setDataHandler(new DataHandler(fds)); p2.setFileName(fds.getName()); // Multipart létrehozása. A törzsrészeket hozzáadjuk. Multipart mp = new MimeMultipart(); mp.addBodyPart(p1); mp.addBodyPart(p2); // Beállítjuk a Multipart-ot üzenet tartalmának msg.setContent(mp); } // Egyrészes HTML-tartalom beállítása. // Bármilyen más típusú adat küldése hasonló public static void setHTMLContent(Message msg) throws MessagingException { String html = "<html><head><title>" + msg.getSubject() + "</title></head><body><h1>" + msg.getSubject() + "</h1><p>This is a test of sending an HTML e-mail" + " through Java.</body></html>"; // HTMLDataSource egy belső osztály msg.setDataHandler(new DataHandler(new HTMLDataSource(html))); } /* * Belső osztály, hogy JAF adatforrásként HTML e-mail tartalmat *küldhessünk */ Static class HTMLDataSource implements DataSource { private String html; public HTMLDataSource(String htmlString) { html = htmlString; } // HTML string InputStream-ként történő visszaadása. // Minden alkalommal új folyamot kell visszaadni. public InputStream getInputStream() throws IOException { if (html == null) throw new IOException("Null HTML"); return new ByteArrayInputStream(html.getBytes()); } public OutputStream getOutputStream() throws IOException { throw new IOException("This DataHandler cannot write HTML"); } public String getContentType() { return "text/html"; } public String getName() { return "JAF text/html dataSource to send e-mail only"; } } }
Licence
A JavaMail a Project Kenai részeként nyílt forráskódú program.
A forráskód a következő licencek alatt érhető el:
- CDDL-1.0
- GPL-2.0
- BSD
Források
- http://www.oracle.com/technetwork/java/javamail-1-149769.pdf
- http://download.oracle.com/docs/cd/E19644-01/817-5449/djmail.html
További információk
- JavaMail projekt site-ja a Kenai-n
- GNU JavaMail
- Informatikai portál • összefoglaló, színes tartalomajánló lap
- ↑ Release 2.1.3, 2024. március 4. (Hozzáférés: 2024. március 22.)