ENVOI DE MAIL AVEC JAVAMAIL
1°) Importer la librairie javamail
Disponible dans \\prof\ressources\Java\javamail
2°) Dans le projet utiliser les import suivants :
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
…
3°) Exemple d'envoi de mail :
…
//Envoi des mails avec reçu personnalisé en pièce jointe
public void PreparationMail()
{
//Utilisation
String pseudo="arsene.dupont@orange.fr";
String motDePasse="monMotDePasseOrange";
String expediteur="nom.prenom@gmail.com";
// Dans cet exemple on suppose que les destinataires sont dans la collection lesMembres
// Et les pièces jointes dans la collection lesPiecesJointes
String destinataires[] = new String[lesMembres.size()];
for(int i=0; i < lesMembres.size(); i++)
{
destinataires[i] = lesMembres.get(i).getEmail(); // Il existe une classe Membre avec entre autres un attribut email et l'accesseur correspondant
}
String maPieceJointe = "monDocument.pdf"; // Dans cet exemple je consodère que tout le monde reçoit la même pièce jointe
String sujet="Sujet de l'envoi";
String message="Bonjour. Blablabla…";
try
{
envoyerMail(pseudo, motDePasse, expediteur, destinataires, sujet, message, maPieceJointe);
System.out.println("Mail envoyé !");
}
catch(MessagingException ex)
{
System.out.println("Erreur envoi mail : " + ex.getMessage());
ex.printStackTrace();
}
}
//Méthode permettant la création et l'envoi du mail
private void envoyerMail(String pseudo, String motDePasse, String expediteur, String destinataires[], String sujet, String message, String pieceJointe) throws MessagingException
{
//Configurer le serveur smtp
Properties props=new Properties();
// Via gmail
//props.put("mail.smtp.host", "smtp.gmail.com"); //smtp.mail.yahoo.fr pour Yahoo par exemple
//props.put("mail.smtp.ssl.trust", "smtp.gmail.com"); //smtp.mail.yahoo.fr pour Yahoo par exemple
// Via Orange
props.put("mail.smtp.host", "smtp.orange.fr"); //smtp.mail.yahoo.fr pour Yahoo par exemple
props.put("mail.smtp.ssl.trust", "smtp.orange.fr"); //smtp.mail.yahoo.fr pour Yahoo par exemple
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
// Pour autoriser une connexion "non sécurisée" : pour gmail notamment
props.setProperty("mail.smtp.starttls.enable", "true");
//Création d'une session et envoi du pseudo et mot de passe. A prendre tel quel, seuls le pseudo et motDePasse sont modifiables
Session session=Session.getInstance(props, new Authenticator()
{
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(pseudo, motDePasse);
}
});
//Créer message
MimeMessage msg=new MimeMessage(session);
//Configurer expéditeur
InternetAddress adrExpediteur=new InternetAddress(expediteur);
msg.setFrom(adrExpediteur);
String fichier = "";
for (int j = 0; j < destinataires.length; j++)
{
//Configurer destinataire
InternetAddress[] adrDestinataires=new InternetAddress[1]; // 1 car on considère que le destinataire n'a qu'une seule adresse mail
adrDestinataires[0] = new InternetAddress(destinataires[j]);
//Le deuxième paramètre est un tableau d'InternetAddress, même si un seul élément
msg.setRecipients(Message.RecipientType.TO, adrDestinataires);
// Préparation à l'ajout du message et de la pièce jointe
Multipart multipart = new MimeMultipart();
// creation partie principale du message
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(message);
multipart.addBodyPart(messageBodyPart);
// création et ajout de la piece jointe
messageBodyPart = new MimeBodyPart();
System.out.println("Fichier envoyé : " + pieceJointe);
DataSource source = new FileDataSource(pieceJointe);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(source.getName());
multipart.addBodyPart(messageBodyPart);
// Fin piece jointe
//Définition du sujet, du contenu principal du message(texte et pièce jointe)
msg.setSubject(sujet);
msg.setContent(multipart);
//les deux lignes suivantes sont optionnelles
msg.setHeader("Exemple mail en java", "JAVAMAIL");
msg.setSentDate(new Date());
//Envoi du mail
Transport.send(msg);
}
}
…