Free Java API for Sending Simple & HTML-based Emails
Open Source Java Email Processing API to Create and Send Text and HTML-based Email Messages with Attachments, Embedded Images, SMTP, IMAP, POP3 Protocol Support abd Advanced Security support.
Co to jest JavaMail?
W świecie aplikacji korporacyjnych i systemów automatyzacji możliwość programowego wysyłania i odbierania e‑maili nie jest jedynie wygodą — jest koniecznością. Od wysyłania resetów haseł i potwierdzeń zamówień po przetwarzanie przychodzących zgłoszeń wsparcia, integracja e‑mailowa jest kluczową funkcją. Dla programistów Javy filarem tej funkcjonalności jest solidne, otwartoźródłowe API JavaMail. Niniejsza, szczegółowa strona produktu przybliży API JavaMail, jego potężne możliwości oraz dostarczy praktyczne przykłady kodu, które pomogą rozpocząć integrację e‑maili w aplikacjach Java.
JavaMail API to dojrzały, otwartoźródłowy framework udostępniony przez Oracle (dawniej Sun Microsystems), który zapewnia platformowo‑i‑protokołowo‑niezależny zestaw narzędzi do budowy aplikacji pocztowych i komunikacyjnych. Jest standardowym API do obsługi e‑maili w ekosystemie Javy. Abstrahuje on złożoność protokołów pocztowych takich jak SMTP, POP3 i IMAP, umożliwiając programistom pracę z czystym, obiektowo‑zorientowanym interfejsem. W bibliotece znajduje się wiele istotnych funkcji, m.in. tworzenie i wysyłanie wiadomości HTML, dodawanie załączników, wstawianie obrazów inline, obsługa treści wieloczęściowych, silne uwierzytelnianie i zabezpieczenia, obsługa skrzynek pocztowych, lepsze wyszukiwanie i filtrowanie wiadomości, odczyt e‑maili przez SMTP i wiele innych.
Rozpoczęcie pracy z JavaMail
Przede wszystkim musisz zainstalować JDK 1.6 lub nowszy. Następnie dodaj poniższą zależność Maven do pliku pom.xml.
Maven Dependency
<dependency>
<groupId>com.sun.mail</groupId>s;
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
Możesz pobrać bibliotekę bezpośrednio ze strony GitHub.
Wysyłanie wiadomości e‑mail przy użyciu biblioteki Java
Otwarta biblioteka JavaMail zawiera wsparcie dla tworzenia i wysyłania zarówno prostych, jak i HTML‑owych wiadomości e‑mail w aplikacjach Java. Programiści mogą odczytywać istniejące e‑maile, dodawać pliki i obrazy jako załączniki, wysyłać wiadomości do wielu odbiorców, dodawać własne nagłówki i wiele więcej. Należy określić parametry połączenia, takie jak host, port oraz flagi włączające uwierzytelnianie i TLS. Poniższy przykład pokazuje, jak wysłać podstawowy e‑mail tekstowy przy użyciu serwera SMTP (np. Gmail) w aplikacji Java.
Jak wysłać podstawowy e‑mail tekstowy przy użyciu serwera SMTP via Java API?
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
public class SimpleEmailSender {
public static void main(String[] args) {
// Sender's and recipient's email ID
String from = "your.email@gmail.com";
String to = "recipient.email@example.com";
// SMTP server configuration (for Gmail)
String host = "smtp.gmail.com";
final String username = "your.email@gmail.com";
final String password = "your-app-password"; // Use an App Password for Gmail
// Setup mail server properties
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.starttls.enable", "true"); // Use TLS
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.port", "587");
// Get the Session object and pass username and password
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object
Message message = new MimeMessage(session);
// Set From: header field
message.setFrom(new InternetAddress(from));
// Set To: header field
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Hello from JavaMail API");
// Set the actual message body
message.setText("This is a test email sent programmatically using the JavaMail API.");
// Send message
Transport.send(message);
System.out.println("Email sent successfully!");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
Wyszukiwanie i filtrowanie e‑maili w Javie
Otwarta biblioteka JavaMail zapewnia pełne wsparcie dla wyszukiwania wiadomości e‑mail w folderze według różnych kryteriów (nadawca, temat, data, flagi) w aplikacjach Java. Jest to szczególnie przydatne przy tworzeniu klientów pocztowych lub automatyzacji. Można także łączyć wiele warunków (AND, OR, NOT) przy użyciu AndTerm, OrTerm, NotTerm. Poniższy przykład pokazuje, jak wyszukać wiadomości od konkretnego nadawcy.
Jak wyszukać wiadomości od konkretnego nadawcy w aplikacjach Java?
Store store = session.getStore("imap");
store.connect("imap.example.com", username, password);
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
// Search for messages from a specific sender
SearchTerm senderTerm = new FromStringTerm("alerts@example.com");
Message[] found = inbox.search(senderTerm);
for (Message m : found) {
System.out.println("Subject: " + m.getSubject());
}
inbox.close(false);
store.close();
Obsługa protokołów SMTP, IMAP, POP3
Otwarta biblioteka JavaMail domyślnie obsługuje trzy najpopularniejsze protokoły pocztowe: SMTP (Simple Mail Transfer Protocol) do wysyłania wiadomości, POP3 (Post Office Protocol 3) do prostego pobierania e‑maili oraz IMAP (Internet Message Access Protocol) do bardziej zaawansowanego dostępu (foldery, pobieranie częściowe). Ponadto wspiera bezpieczne warianty, takie jak SMTPS, POP3S, IMAPS, i może być rozszerzona o własnych dostawców.
Zaawansowane uwierzytelnianie i zabezpieczenia w Javie
Otwarta biblioteka JavaMail wspiera bezpieczną komunikację z serwerami pocztowymi, co jest kluczowe w dzisiejszym środowisku nastawionym na bezpieczeństwo. Biblioteka obsługuje TLS (Transport Layer Security), które szyfruje kanał komunikacji między aplikacją a serwerem pocztowym. Obsługuje także SSL (Secure Sockets Layer), będący poprzednikiem TLS, dostępny przy nawiązywaniu bezpiecznego połączenia. Dodatkowo wspiera standardowe uwierzytelnianie przy użyciu nazwy użytkownika i hasła.