Comment envoyer des e-mails en Java : Guide étape par étape
L'envoi d'e-mails depuis une application Java est relativement simple, mais vous devez d'abord disposer de l'API JavaMail et du Java Activation Framework (JAF) installés sur votre machine.
Prérequis
Téléchargez la dernière version de JavaMail (version 1.6.2) depuis le site officiel d'Oracle ou Maven Central.
Téléchargez la dernière version de JAF (version 1.1.1) depuis le site officiel d'Oracle.
Après décompression, vous trouverez plusieurs fichiers JAR dans les répertoires créés. Ajoutez mail.jar et activation.jar à votre CLASSPATH.
Envoi d'un e-mail simple
Voici un exemple complet pour envoyer un e-mail simple. On suppose que votre localhost est connecté à Internet et configuré pour l'envoi d'e-mails (serveur SMTP local).
Exemple de code
// Fichier : SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String[] args) {
// Destinataire
String to = "destinataire@gmail.com";
// Expéditeur
String from = "expediteur@gmail.com";
// Serveur SMTP local
String host = "localhost";
// Propriétés système
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
// Session par défaut
Session session = Session.getDefaultInstance(properties);
try {
// Création du message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Ligne d'objet du message");
message.setText("Ceci est le corps du message texte simple.");
// Envoi
Transport.send(message);
System.out.println("Message envoyé avec succès !");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Compilez et exécutez ce programme :
Résultat
$ java SendEmail Message envoyé avec succès !
Envoi à plusieurs destinataires
Pour envoyer à plusieurs adresses, utilisez la méthode suivante :
void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException
type : TO, CC ou BCC (copie carbone ou copie carbone invisible). Exemple : Message.RecipientType.TO
addresses : tableau d'adresses e-mail. Utilisez InternetAddress() pour chaque adresse.
Envoi d'un e-mail HTML
Cet exemple montre comment envoyer un e-mail au format HTML. La différence principale réside dans l'utilisation de setContent() avec le type MIME text/html.
Exemple de code
// Fichier : 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 = "destinataire@gmail.com";
String from = "expediteur@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 HTML");
// Contenu HTML
message.setContent("Bienvenue !
Ceci est un message HTML.
", "text/html");
Transport.send(message);
System.out.println("E-mail HTML envoyé avec succès !");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Résultat
$ java SendHTMLEmail E-mail HTML envoyé avec succès !
Envoi d'e-mail avec pièce jointe
Pour joindre un fichier, il faut créer un message multipart (MimeMultipart) contenant une partie texte et une partie fichier.
Exemple de code
// Fichier : 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 = "destinataire@gmail.com";
String from = "expediteur@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 avec pièce jointe");
// Partie texte
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Veuillez trouver le fichier en pièce jointe.");
// Structure multipart
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Pièce jointe
messageBodyPart = new MimeBodyPart();
String filename = "document.pdf";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
Transport.send(message);
System.out.println("E-mail avec pièce jointe envoyé !");
} catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Résultat
$ java SendFileEmail E-mail avec pièce jointe envoyé !
Authentification utilisateur
Si votre serveur SMTP exige une authentification, définissez ces propriétés :
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.user", "monutilisateur");
props.put("mail.smtp.password", "monmotdepasse");
Vous devrez alors utiliser une Authenticator personnalisée lors de la création de la session. Le reste du mécanisme d'envoi reste identique.
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code