JavaMail
| JavaMail | |
| Fejlesztő | Oracle Corporation |
| Legfrissebb stabil kiadás | 2.1.5 (stabil verzió, 2025. szeptember 30.)[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();
}
}
}