JavaMail

JavaMail
FejlesztőOracle Corporation
Legfrissebb stabil kiadás2.1.3 (stabil verzió, 2024. március 4.)[1]
Programozási nyelvJava
Platformplatformfüggetlen
Állapotaktív
KategóriaJava APIk
Licenc
  • GPL-2.0
  • Common Development and Distribution License version 1.1
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[szerkesztés]

  • 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[szerkesztés]

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[szerkesztés]

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[szerkesztés]

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[szerkesztés]

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:

Források[szerkesztés]

További információk[szerkesztés]

  1. Release 2.1.3, 2024. március 4. (Hozzáférés: 2024. március 22.)