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 :
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
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("Ceci est la ligne d'objet !");
message.setText("Ceci est le message réel");
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 :
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
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("Ceci est la ligne d'objet !");
message.setContent("<h1>Ceci est le message réel</h1>",
"text/html" );
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 :
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
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("Ceci est la ligne d'objet !");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Ceci est le corps du message");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
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("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 :
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)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "smtp.qq.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
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");
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Ceci est la ligne d'objet !");
message.setText("Ceci est le message réel");
Transport.send(message);
System.out.println("Message envoyé avec succès....depuis example.com");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Autres extensions