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
[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]- 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
[szerkesztés]- ↑ Release 2.1.3, 2024. március 4. (Hozzáférés: 2024. március 22.)