E-mails versturen in Java: Een stapsgewijze handleiding
Vereisten
Om e-mails te versturen vanuit een Java-applicatie heb je de JavaMail API en het Java Activation Framework (JAF) nodig. Beide kun je downloaden van de officiële Java-website:
- JavaMail (versie 1.2 of nieuwer)
- JAF (versie 1.1.1 of nieuwer)
Pak de gedownloade bestanden uit en voeg de mail.jar en activation.jar toe aan je CLASSPATH.
Een simpele e-mail versturen
In dit voorbeeld versturen we een platte-tekst e-mail via een lokale SMTP-server (localhost). Zorg dat je machine verbonden is met internet en dat de SMTP-server correct geconfigureerd is.
Voorbeeldcode
// Bestandsnaam: SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String[] args) {
// Ontvanger
String to = "ontvanger@gmail.com";
// Afzender
String from = "afzender@gmail.com";
// SMTP-server (localhost)
String host = "localhost";
// Systeemeigenschappen ophalen en mailserver instellen
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
// Sessie aanmaken
Session session = Session.getDefaultInstance(properties);
try {
// MimeMessage object aanmaken
MimeMessage message = new MimeMessage(session);
// Afzender instellen
message.setFrom(new InternetAddress(from));
// Ontvanger toevoegen
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Onderwerp
message.setSubject("Dit is het onderwerp!");
// Berichttekst
message.setText("Dit is de daadwerkelijke boodschap.");
// Versturen
Transport.send(message);
System.out.println("Bericht succesvol verzonden....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compileren en uitvoeren
$ javac SendEmail.java $ java SendEmail Bericht succesvol verzonden....
Meerdere ontvangers
Gebruik addRecipients() om meerdere e-mailadressen tegelijk toe te voegen (TO, CC of BCC):
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
- type –
Message.RecipientType.TO,CCofBCC - addresses – array van
InternetAddressobjecten
HTML e-mail versturen
Vergelijkbaar met het vorige voorbeeld, maar nu gebruiken we setContent() met MIME-type text/html.
Voorbeeldcode
// Bestandsnaam: SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail {
public static void main(String[] args) {
String to = "ontvanger@gmail.com";
String from = "afzender@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("HTML e-mail test");
// HTML-inhoud
message.setContent("Dit is een HTML bericht
Met opmaak!
", "text/html");
Transport.send(message);
System.out.println("HTML e-mail succesvol verzonden....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
E-mail met bijlage versturen
Hiervoor maken we een MimeMultipart object aan dat zowel de tekst als de bijlage bevat.
Voorbeeldcode
// Bestandsnaam: SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.io.File;
public class SendFileEmail {
public static void main(String[] args) {
String to = "ontvanger@gmail.com";
String from = "afzender@gmail.com";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try {
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("E-mail met bijlage");
// Tekstdeel
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Hierbij de gevraagde bijlage.");
// Multipart container
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Bijlage
messageBodyPart = new MimeBodyPart();
String filename = "document.pdf";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// Alles in het bericht stoppen
message.setContent(multipart);
Transport.send(message);
System.out.println("E-mail met bijlage verzonden....");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Authenticatie bij de SMTP-server
Als je SMTP-server authenticatie vereist, stel dan gebruikersnaam en wachtwoord in via de properties:
properties.setProperty("mail.smtp.auth", "true");
properties.setProperty("mail.user", "jouw_gebruikersnaam");
properties.setProperty("mail.password", "jouw_wachtwoord");
Vervolgens moet je een Authenticator aan de sessie doorgeven. De rest van de verzendlogica blijft ongewijzigd.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
- Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList
- E-mails versturen in Java: Een stapsgewijze handleiding