Envoi d'e-mails en Java

L'envoi d'e-mails à l'aide d'une application Java est très simple, mais vous devez d'abord installer l'API JavaMail et le Java Activation Framework (JAF) sur votre machine.

  • Vous pouvez télécharger la dernière version depuis le site Web Java :JavaMail, ouvrez la page Web et sur le côté droit il y a un lienTéléchargements, cliquez dessus pour télécharger.
  • Vous pouvez télécharger la dernière version depuis le site Web Java :JAF (version 1.1.1)。

Vous pouvez également utiliser le lien de téléchargement fourni par ce site :

  • JavaMail mail.jar 1.4.5
  • JAF (version 1.1.1) activation.jar

Téléchargez et décompressez ces fichiers. Dans le répertoire de premier niveau nouvellement créé, vous trouverez des fichiers jar pour ces deux applications. Vous devez placer les fichiersmail.jaretactivation.jardans votre CLASSPATH.

Si vous utilisez un serveur de messagerie tiers tel que le serveur SMTP de QQ, vous pouvez vous référer à l'exemple complet d'authentification utilisateur au bas de l'article.


Envoyer un e-mail simple

Ci-dessous se trouve un exemple d'envoi d'un e-mail simple. Supposons que votre hôte local soit déjà connecté au réseau.

Code du fichier SendEmail.java :

//Nom du 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) { //Adresse e-mail du destinataire String to = "[email protected]"; //Adresse e-mail de l'expéditeur String from = "[email protected]"; //Spécifiez l'hôte pour l'envoi du courrier comme localhost String host = "localhost"; //Obtenir les propriétés du système Properties properties = System.getProperties(); //Configurer le serveur de messagerie properties.setProperty("mail.smtp.host", host); //Obtenir l'objet Session par défaut Session session = Session.getDefaultInstance(properties); try{ //Créer un objet MimeMessage par défaut MimeMessage message = new MimeMessage(session); //Définir le champ d'en-tête From : message.setFrom(new InternetAddress(from)); //Définir le champ d'en-tête To : message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Définir le champ d'en-tête Subject : message.setSubject("Ceci est la ligne d'objet !"); //Définir le corps du message message.setText("Ceci est le message réel"); //Envoyer le message Transport.send(message); System.out.println("Message envoyé avec succès...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Compilez et exécutez ce programme pour envoyer un e-mail simple :

$ java SendEmail
Sent message successfully....

Si vous souhaitez envoyer un e-mail à plusieurs destinataires, utilisez les méthodes suivantes pour spécifier plusieurs identifiants de destinataire :

void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException

Voici une description des paramètres :

  • type:Doit être défini sur TO, CC ou BCC, où CC signifie copie carbone et BCC signifie copie carbone invisible. Exemple :Message.RecipientType.TO

  • addresses:Il s'agit d'un tableau d'identifiants de courriel. Lorsque vous spécifiez des identifiants de courriel, vous devrez utiliser la méthode InternetAddress().


Envoyer un e-mail HTML

Voici un exemple d'envoi d'un e-mail HTML. Supposons que votre hôte local soit déjà connecté au réseau.

Il est très similaire à l'exemple précédent, sauf que nous utilisons la méthode setContent() avec le deuxième paramètre "text/html" pour définir le contenu afin de préciser que du contenu HTML doit être envoyé.

Code du fichier SendHTMLEmail.java :

//Nom du 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) { //Adresse e-mail du destinataire String to = "[email protected]"; //Adresse e-mail de l'expéditeur String from = "[email protected]"; //Spécifiez l'hôte pour l'envoi du courrier comme localhost String host = "localhost"; //Obtenir les propriétés du système Properties properties = System.getProperties(); //Configurer le serveur de messagerie properties.setProperty("mail.smtp.host", host); //Obtenez l'objet Session par défaut. Session session = Session.getDefaultInstance(properties); try{ //Créer un objet MimeMessage par défaut. MimeMessage message = new MimeMessage(session); //Définir le champ d'en-tête From : message.setFrom(new InternetAddress(from)); //Définir le champ d'en-tête To : message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Définir le champ d'en-tête Subject : message.setSubject("Ceci est la ligne d'objet !"); //Envoyer un message HTML ; vous pouvez insérer des balises HTML message.setContent("<h1>Ceci est le message réel</h1>", "text/html" ); //Envoyer le message Transport.send(message); System.out.println("Message envoyé avec succès...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Compilez et exécutez ce programme pour envoyer un e-mail HTML :

$ java SendHTMLEmail
Sent message successfully....

Envoyer un e-mail avec pièces jointes

Voici un exemple d'envoi d'un e-mail avec pièces jointes. Supposez que votre hôte local est déjà connecté au réseau.

Code du fichier SendFileEmail.java :

//Nom du fichier : SendFileEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendFileEmail { public static void main(String [] args) { //Adresse e-mail du destinataire String to = "[email protected]"; //Adresse e-mail de l'expéditeur String from = "[email protected]"; //Spécifiez l'hôte pour l'envoi du courrier comme localhost String host = "localhost"; //Obtenir les propriétés du système Properties properties = System.getProperties(); //Configurer le serveur de messagerie properties.setProperty("mail.smtp.host", host); //Obtenez l'objet Session par défaut. Session session = Session.getDefaultInstance(properties); try{ //Créer un objet MimeMessage par défaut. MimeMessage message = new MimeMessage(session); //Définir le champ d'en-tête From : message.setFrom(new InternetAddress(from)); //Définir le champ d'en-tête To : message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Définir le champ d'en-tête Subject : message.setSubject("Ceci est la ligne d'objet !"); //Créer la partie du message BodyPart messageBodyPart = new MimeBodyPart(); //Message messageBodyPart.setText("Ceci est le corps du message"); //Créer un message multipartite Multipart multipart = new MimeMultipart(); //Définir la partie texte du message multipart.addBodyPart(messageBodyPart); //Partie pièce jointe messageBodyPart = new MimeBodyPart(); String filename = "file.txt"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); //Envoyer le message complet message.setContent(multipart ); //Envoyer le message Transport.send(message); System.out.println("Message envoyé avec succès...."); }catch (MessagingException mex) { mex.printStackTrace(); } } }

Compilez et exécutez votre programme pour envoyer un e-mail avec des pièces jointes.

$ java SendFileEmail
Sent message successfully....

Section d'authentification de l'utilisateur

Si vous devez fournir un nom d'utilisateur et un mot de passe au serveur de messagerie pour l'authentification de l'utilisateur, vous pouvez le faire avec les paramètres suivants :

props.put("mail.smtp.auth", "true"); props.setProperty("mail.user", "myuser"); props.setProperty("mail.password", "mypwd");

Le reste du mécanisme d'envoi d'e-mail reste le même que ci-dessus.

Exemple d'envoi d'e-mail avec authentification par nom d'utilisateur/mot de passe :

Cet exemple utilise le serveur de messagerie QQ comme exemple. Vous devez vous connecter au backend de votre boîte aux lettres QQ et activer le service POP3/SMTP sous "Paramètres" => "Comptes", comme le montre la figure ci-dessous :

La boîte aux lettres QQ définit le mot de passe en générant un code d'autorisation :

Le code Java est le suivant :

Code du fichier SendEmail2.java :

//Exemple d'envoi d'e-mail nécessitant un nom d'utilisateur et un mot de passe //Nom du fichier : SendEmail2.java //Cet exemple utilise la boîte mail QQ comme exemple ; vous devez la configurer dans le backend QQ import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendEmail2 { public static void main(String [] args) { //Adresse e-mail du destinataire String to = "[email protected]"; //Adresse e-mail de l'expéditeur String from = "[email protected]"; //Spécifiez l'hôte pour l'envoi de courrier comme smtp.qq.com String host = "smtp.qq.com"; //Serveur de messagerie QQ //Obtenir les propriétés système Properties properties = System.getProperties(); //Configurer le serveur de messagerie properties.setProperty("mail.smtp.host", host); properties.put("mail.smtp.auth", "true"); //Obtenir l'objet Session par défaut Session session = Session.getDefaultInstance(properties,new Authenticator(){ public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "code d'autorisation de la boîte aux lettres QQ"); //Nom d'utilisateur de l'expéditeur et code d'autorisation } }); try{ //Créer un objet MimeMessage par défaut MimeMessage message = new MimeMessage(session); //Définir le champ d'en-tête From: message.setFrom(new InternetAddress(from)); //Définir le champ d'en-tête To : message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Définir le champ d'en-tête Subject : message.setSubject("Ceci est la ligne d'objet !"); //Définir le corps du message message.setText("Ceci est le message réel"); //Envoyer le message Transport.send(message); System.out.println("Message envoyé avec succès....depuis example.com"); }catch (MessagingException mex) { mex.printStackTrace(); } } }
Autres extensions