Envoi d’emails avec Java

Envoi de courriels avec Java

1. Vue d'ensemble

Dans ce rapide didacticiel, nous allons examiner l'envoi d'un e-mail avec et sans pièces jointes, à l'aide de la bibliothèque de messagerie Java principale.

2. Configuration du projet et dépendance

Pour cet article, nous allons utiliser un projet simple basé sur Maven avec une dépendance sur la bibliothèque de messagerie Java:


    javax.mail
    mail
    1.5.0-b01

La dernière version peut être trouvéehere.

3. Envoi d'un texte brut et d'un e-mail HTML

Tout d'abord, nous devons configurer la bibliothèque avec les informations d'identification de notre fournisseur de services de messagerie. Ensuite, nous créerons unSession t qui sera utilisé dans la construction de notre message à envoyer.

La configuration se fait via un sobject JavaProperties :

Properties prop = new Properties();
prop.put("mail.smtp.auth", true);
prop.put("mail.smtp.starttls.enable", "true");
prop.put("mail.smtp.host", "smtp.mailtrap.io");
prop.put("mail.smtp.port", "25");
prop.put("mail.smtp.ssl.trust", "smtp.mailtrap.io");

Dans la configuration des propriétés ci-dessus, nous avons configuré l'hôte de messagerie en tant que Mailtrap et utilisons également le port fourni par le service.

Maintenant, allons plus loin en créant une session avec notre nom d'utilisateur et notre mot de passe:

Session session = Session.getInstance(prop, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
});

Le nom d'utilisateur et le mot de passe sont fournis par le fournisseur de service de messagerie en plus des paramètres de l'hôte et du port.

Maintenant que nous avons un mailSession object, créons unMimeMessage  pour l'envoi:

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(
  Message.RecipientType.TO, InternetAddress.parse("[email protected]"));
message.setSubject("Mail Subject");

String msg = "This is my first email using JavaMailer";

MimeBodyPart mimeBodyPart = new MimeBodyPart();
mimeBodyPart.setContent(msg, "text/html");

Multipart multipart = new MimeMultipart();
multipart.addBodyPart(mimeBodyPart);

message.setContent(multipart);

Transport.send(message);

Dans l'extrait de code ci-dessus, nous avons d'abord créé une instancemessage avec les propriétés nécessaires - to, from et subject. Suivi par unmimeBodyPartt qui a un encodage detext/html, puisque notre message est stylé en HTML.

La prochaine chose que nous avons faite est de créer une instance deMimeMultipart object que nous pouvons utiliser pour envelopper lesmimeBodyPart que nous avons créés.

Enfin, nous définissons le sobjectmultipart comme contenu de nosmessage et utilisons le sobjectsend()ofTransport pour faire l'envoi du courrier.

So, we can say that the mimeBodyPartis contained in the multipart that is contained in the message. Hence, a multipart can contain more than one mimeBodyPart.

Ce sera l'objet de la prochaine section.

4. Envoi d'un e-mail avec une pièce jointe

Ensuite, pour envoyer une pièce jointe, il suffit de créer un autreMimeBodyPartand pour y attacher le (s) fichier (s):

MimeBodyPart attachmentBodyPart = new MimeBodyPart();
attachmentBodyPart.attachFile(new File("path/to/file"));

Nous pouvons ensuite ajouter la nouvelle partie du corps au sobjectMimeMultipartque nous avons créé précédemment:

multipart.addBodyPart(attachmentBodyPart);

C’est tout ce que nous devons faire.

Once again, we set the multipart instance as the content of the message object and finally we’ll use the send() to do the mail sending.

5. Conclusion

En conclusion, nous avons vu comment utiliser la bibliothèque de messagerie Java native pour envoyer des e-mails même avec des pièces jointes.

Comme toujours, le code source complet est disponibleover on Github.