Ugrás a tartalomhoz

JavaMail

A Wikipédiából, a szabad enciklopédiából
A lap korábbi változatát látod, amilyen Zafir (vitalap | szerkesztései) 2012. október 27., 13:29-kor történt szerkesztése után volt. Ez a változat jelentősen eltérhet az aktuális változattól. (A JavaMail használata)
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 olyan Java nyelven írt alkalmazásprogramozási felület, melyen keresztül SMTP, POP3 és IMAP protokollokon keresztül is lehet e-maileket küldeni és fogadni. A JavaMail Java EE platformon működik, de egy további csomaggal kibővítve Java SE alatt is lehet használni.

Létezik egy másik, szintén nyílt forráskódú változata, 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.

JavaMail specifikációs célok

  • az egyszerű, jól áttekinthető osztályok révén a fejlesztőknek könnyű elsajátítani és használni
  • a jól megszokott programozási technikák alkalmazásával jól összeköthető más Java API-val
  • a könnyűsúlyú osztályok és interfészek használata egyszerűvé teszi az alapvető e-mail szolgáltatások beépítését bármely alkalmazásba
  • elősegíti a robusztus levelező rendszereket használó alkalmazásokat: többféle komplex levél formátumot, adattípust valamint protokollt támogat

A JavaMail komponensei

  • Message osztály: egy levél attribútumait és a tartami 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 tipikusan egy Session objektum létrehozásával kezdődik:

Session session = Session.getInstance(props, authenticator);


2. A Session objekum 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();

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:

Források

Külső hivatkozások

JavaMail példák

Egy részes text/plain 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) {
 
        // EMAIL CÍM MEGADÁSA!!!
        String to = "sendToMailAddress";
        String from = "sendFromMailAddress";
        // ISP MAIL SERVER MEGADÁSA!!!
        String host = "smtp.yourisp.net";
 
        // Beállítások létrehozása
        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);
        // Ha be szeretnénk tekinteni, hogy mi is történik
        props.put("mail.debug", "true");
        Session session = Session.getInstance(props);
 
        try {
            // Üzenet létrehozása
            Message msg = new MimeMessage(session);
 
            //Üzenet tulajdonságainak beállítása
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setSubject("Test E-Mail through Java");
            msg.setSentDate(new Date());
 
            // Üzenet tartalma
            msg.setText("This is a test of sending a " +
                        "plain text e-mail through Java.\n" +
                        "Here is line 2.");
 
            //Üzenet küldése
            Transport.send(msg);
        }
        catch (MessagingException mex) {
            // Megejelenítjük az összes lácolt kivételt!
            mex.printStackTrace();
        }
    }
}// Az osztály vége

Minta Kód Többrészes E-Mail, HTML E-Mail és Fájl Csatolmány Küldésére

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) {
 
        // EMAIL CÍM MEGADÁSA!!!
        String to = "sendToMailAddress";
        String from = "sendFromMailAddress";
        // ISP MAIL SERVER MEGADÁSA!!!
        String host = "smtpserver.yourisp.net";
 
        // Session beállításainak létrehozása
        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);
        // Ha be szeretnénk tekinteni, hogy mi is történik
        props.put("mail.debug", "true");
 
        // Session lekérése
        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 -> 
//bus.connect("smtpserver.yourisp.net", "username", "password");
 
            // Üzenet létrehozása
            Message msg = new MimeMessage(session);
 
            // Üzenet tulajdonságainak beállítása
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to)};
            msg.setRecipients(Message.RecipientType.TO, address);
            // A vesszővel elválasztott email címek listájának párosítása.
            msg.setRecipients(Message.RecipientType.CC,
                                InternetAddress.parse(to, true));
            // Parse comma/space-separated list. Cut some slack.
            msg.setRecipients(Message.RecipientType.BCC,
                                InternetAddress.parse(to, false));
 
            msg.setSubject("Test E-Mail through Java");
            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) {
            // Láncolt kivételek megjelenítése
            mex.printStackTrace();
            // Hogyan férjünk hozzá a láncolt kivételekhez
            while (mex.getNextException() != null) {
                // A következő kivétel a láncban
                Exception ex = mex.getNextException();
                ex.printStackTrace();
                if (!(ex instanceof MessagingException)) break;
                else mex = (MessagingException)ex;
            }
        }
    }
 
    // Egyszerű, egy részes text/plain e-mail
    public static void setTextContent(Message msg) throws MessagingException {
            // Üzenet tartalmának beállítása
            String mytxt = "This is a test of sending a " +
                            "plain text e-mail through Java.\n" +
                            "Here is line 2.";
            msg.setText(mytxt);
 
            // A form tartalmának megváltoztatása az általunk definiáltra
            msg.setContent(mytxt, "text/plain");
 
    }
 
    // Egyszerű több részes e-mail. Mind kettő törzs ré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 karakter készlet beállítása
        p2.setText("This is the second part", "us-ascii");
 
        // 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);
    }
 
// Fájl csatolmányként történő beállítása.  JAF FileDataSource-ját   //használja.
	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("This is part one of a test multipart e-mail." +
                    "The second part is file as an attachment");
 
        // 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 tartalma 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;
        }
 
        // Hml string InputStream-ként történő visszaadása.
        // Minden alkalamommal ú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";
        }
    }
 
} //Osztály vége
  1. Release 2.1.3, 2024. március 4. (Hozzáférés: 2024. március 22.)