L’envoi d’un email est le composant le plus simple à mettre en oeuvre pour contacter des acteurs en dehors de notre système d’information. Ces acteurs ne seront pas obligé d’ouvrir un compte ou d’installer des logiciels. Il suffit d’avoir un compte email.
Sous Java, l’API responsable de ce volet est JavaMail. Cette API garantit toutes les opérations liées aux emails : envoie, réception, lecture, classification, etc.
JavaMail est disponibles dans entrepôt GitHub accessible ici. Toutes les ressources nécessaires sont disponibles. Les exemples donnés (ici) sont aussi très claires et documentés.
La partie qui nous intéresse aujourd’hui est l’envoie d’un email. Le teste utilisera un compte Gmail pour envoyer un message texte simple.
Pour envoyer un email, il est nécessaire de manipuler les classes
suivantes :
Sous Java, l’API responsable de ce volet est JavaMail. Cette API garantit toutes les opérations liées aux emails : envoie, réception, lecture, classification, etc.
JavaMail est disponibles dans entrepôt GitHub accessible ici. Toutes les ressources nécessaires sont disponibles. Les exemples donnés (ici) sont aussi très claires et documentés.
La partie qui nous intéresse aujourd’hui est l’envoie d’un email. Le teste utilisera un compte Gmail pour envoyer un message texte simple.
Pour envoyer un email, il est nécessaire de manipuler les classes
suivantes :
- Properties : cette classe permet de stocker des propriétés, elle n’est pas propre à l’API JavaMail disponible dans le package java.util).
- Session : pour créer une sessiond d’envoie de messages. Session ici n’a pas le même sens de Session manipulée en J2EE.
- Message : l’objet principal. Il permet de créer le message à envoyer et contiendra toutes les information nécessaire (emetteur, destinataire, contenu, date, etc.). Transport : qui permet de se connecter au serveur et d’envoyer le message réellement.
- Adresse email de l’expéditeur,
- Adresse(s) email de(s) destinataire(s),
- L’objet du message,
- Le corps du message.
- Il est important de s’authentifié, ainsi, il faut :
- Activiter l’authentification en ajoutant la propriété :
props.put("mail.smtp.auth", "true");
- Il faut utiliser la classe transport SMTPTransport et de se connecter avant d’envoyer le message,
- Il faut utiliser le protocole smtps et non pas smtp au moment de la création de la classe SMTPTransport comme suit :
SMTPTransport t = (SMTPTransport)session.getTransport("smtps");
- Il faut activer l’option less secure apps sur le compte google à utiliser.
import com.sun.mail.smtp.SMTPTransport; import java.util.Date; import java.util.Properties; import java.util.Scanner; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class MailService { public static String SERVER = "smtp.gmail.com"; public static String FROM = "votre_compte@gmail.com"; public static void sendMail(String to, String subject, String content) throws MessagingException { Properties props = System.getProperties(); props.put("mail.smtp.host", SERVER); props.put("mail.smtp.auth", "true"); Session session = Session.getInstance(props, null); session.setDebug(true); Message msg = new MimeMessage(session); msg.setFrom(new InternetAddress(FROM)); msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to, false)); msg.setSubject(subject); msg.setText(content); msg.setHeader("X-Mailer", "msgsend"); msg.setSentDate(new Date()); SMTPTransport t = (SMTPTransport)session.getTransport("smtps"); String password = readPassword(); t.connect("smtp.gmail.com", FROM, password); t.sendMessage(msg, msg.getAllRecipients()); System.out.println("Response: " + t.getLastServerResponse()); } public static String readPassword(){ Scanner in = new Scanner(System.in); System.out.println("Enter password :"); return in.nextLine(); } }
Vous pouver trouver une version PDF de ce post : ici.