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 Sz20b11 (vitalap | szerkesztései) 2011. május 10., 06:21-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 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.

2009. március 2-án jelent meg a JavaMail 1.4.2 számú veziója.

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 robosztus levelező rendszereket használó alkalmazásokat: többé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 tartalmzhat, valamint levelek másolását, törlését, összefűzését is lehetővá teő metódusokat deifiniá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


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

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
// Egyszerű, egy részes text/plain e-mail küldése
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ég is -> 
//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