Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE HELPER POUR L'ENVOI DE MAILS


Information sur la source

Catégorie :Reseaux et Internet Classé sous : mail Niveau : Débutant Date de création : 11/11/2004 Date de mise à jour : 29/11/2005 01:52:30 Vu : 8 624

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


Description

Classe Helper pour simplifier l'envoi de mail.

Possibilité d'ajouter des destinataires, copie et copie cachée, de vérifier si une adresse est valide.
On peut appeler les fonctions avec un tableau de String en paramètre, ou avec une String toute seule.
Une string peut contenir plusieurs adresses mails séparées par un espace, une virgule ou un point virgule.

Notes :
- une fonction spéciale à la fin permet de transformer un pseudo en mail.
- un tout petit peu de config au début, le serveur smtp et l'adresse no-reply

Exemple d'utilisation :
//Envoi un message provenant de no-reply@societe.fr au webmaster,
//à mail@exemple et no.spam
Mail m = new Mail();
m.setTo("webmaster, mail@exemple.com;no.spam@thank.you");
m.setSujet("test");
m.setMessage("Ceci est un test");
m.send();
 

Source

  • /*
  • * Created on 10 nov. 2004
  • */
  • package xxxx.util;
  • import java.util.Properties;
  • import javax.mail.Message;
  • import javax.mail.Session;
  • import javax.mail.Transport;
  • import javax.mail.internet.InternetAddress;
  • import javax.mail.internet.MimeMessage;
  • /**
  • * Classe pour simplifier les envois de mails
  • * @author SMAC
  • */
  • public class Mail {
  • /** Type texte brut */
  • static public final int TEXT = 0;
  • /** Type text/html */
  • static public final int HTML = 1;
  • /** Adresse "no-reply" par défaut de l'entreprise */
  • private static final String NOREPLY = "noreply@societe.fr";
  • /** Adresse du serveur SMTP de l'entreprise */
  • private static final String SMTPHOST = "smtp.societe.fr";
  • private Properties props;
  • private Session session;
  • private MimeMessage mm;
  • private int mimetype;
  • /**
  • * Si on n'appelle pas setFrom, met automatiquement noreply@societe.fr
  • */
  • private boolean noreply = true;
  • /**
  • * Créateur d'un mail.
  • */
  • public Mail() {
  • //Par défaut en texte brut
  • mimetype = TEXT;
  • //Get system properties
  • props = System.getProperties();
  • //Setup mail server
  • props.put("mail.smtp.host", SMTPHOST);
  • //Get session
  • session = Session.getDefaultInstance(props, null);
  • //Define message
  • mm = new MimeMessage(session);
  • }
  • //############################################################
  • //Ajout d'expéditeur et destinataires
  • //############################################################
  • /**
  • * Ajoute un expéditeur
  • * @param expediteur
  • * @throws Exception
  • */
  • public void setFrom(String expediteur) throws Exception {
  • if (expediteur.trim().length() > 0) {
  • mm.setFrom(checkMail(expediteur));
  • noreply = false;
  • }
  • }
  • /**
  • * Ajoute un destinataire
  • * @param destinataire
  • * @throws Exception
  • */
  • public void setTo(String destinataire) throws Exception {
  • if (destinataire.trim().length() > 0) {
  • if (plusieursMails(destinataire))
  • setTo(decoupe(destinataire));
  • else {
  • mm.addRecipient(Message.RecipientType.TO, checkMail(destinataire));
  • }
  • }
  • }
  • /**
  • * Ajoute plusieurs destinataires
  • * @param dest
  • * @throws Exception
  • */
  • public void setTo(String[] dest) throws Exception {
  • for (int i=0; i<dest.length; i++)
  • setTo(dest[i]);
  • }
  • /**
  • * Ajoute un destinataire en copie
  • * @param cc
  • * @throws Exception
  • */
  • public void setCC(String cc) throws Exception {
  • if (cc.trim().length() > 0) {
  • if (plusieursMails(cc))
  • setCC(decoupe(cc));
  • else {
  • mm.addRecipient(Message.RecipientType.CC, checkMail(cc));
  • }
  • }
  • }
  • /**
  • * Ajoute plusieurs destinataires en copie
  • * @param cc
  • * @throws Exception
  • */
  • public void setCC(String[] cc) throws Exception {
  • for (int i=0; i < cc.length; i++)
  • setCC(cc[i]);
  • }
  • /**
  • * Ajoute un destinataire en copie cachée.
  • * @param bcc
  • * @throws Exception
  • */
  • public void setCopieCachee(String bcc) throws Exception {
  • if (bcc.trim().length() > 0) {
  • if (plusieursMails(bcc))
  • setCopieCachee(decoupe(bcc));
  • else {
  • mm.addRecipient(Message.RecipientType.BCC, checkMail(bcc));
  • }
  • }
  • }
  • /**
  • * Ajoute plusieurs destinataires en copie cachée.
  • * @param bcc
  • * @throws Exception
  • */
  • public void setCopieCachee(String[] bcc) throws Exception {
  • for (int i=0; i < bcc.length; i++)
  • setCopieCachee(bcc[i]);
  • }
  • //############################################################
  • //Champs avec destinataires multiples
  • //############################################################
  • /**
  • * Teste si y'a plusieurs mails dans la chaîne, séparés par un espace, une virgule ou un point-virgule
  • * @param mails
  • * @return
  • */
  • static public boolean plusieursMails(String mails) {
  • return ((mails.indexOf(' ') + mails.indexOf(',') + mails.indexOf(';')) > -1);
  • }
  • /**
  • * Découpe la chaîne contenant plusieurs mails en String[]
  • * @return
  • */
  • static public String[] decoupe(String mails) {
  • return mails.split(" |,|;");
  • }
  • //############################################################
  • //Sujet et message
  • //############################################################
  • /**
  • * Ajoute le sujet
  • * @param sujet
  • * @throws Exception
  • */
  • public void setSujet(String sujet) throws Exception {
  • mm.setSubject(sujet);
  • }
  • /**
  • * Choisir entre le type texte brut ({@link Mail#TEXT}) ou HTML ({@link Mail#HTML}).
  • * @param mime
  • * @throws Exception
  • */
  • public void setMimeType(int mime) throws Exception {
  • mimetype = mime;
  • }
  • /**
  • * Ajoute le message
  • * @param message
  • * @throws Exception
  • */
  • public void setMessage(String message) throws Exception {
  • if (mimetype == HTML)
  • mm.setContent(message, "text/html");
  • else mm.setText(message);
  • }
  • //############################################################
  • //Envoi
  • //############################################################
  • /**
  • * Envoie le mail
  • * @throws Exception
  • */
  • public void send() throws Exception {
  • if (noreply)
  • setFrom(NOREPLY);
  • Transport.send(mm);
  • }
  • //############################################################
  • //Vérifications de la validité d'adresse e-mails
  • //(fonctions pour l'extérieur : jsp ou WebServices...)
  • //############################################################
  • /**
  • * Vérifie si l'adresse passée en paramètre est valide. Si elle ne contient pas
  • * de @, vérifie si elle correspond bien à un pseudo (voir nameToMail).
  • * @param mail
  • */
  • static public void isValide(String mail) throws Exception {
  • if (plusieursMails(mail))
  • areValide(decoupe(mail));
  • else
  • Mail.checkMail(mail);
  • }
  • /**
  • * Vérifie si les adresses passées en paramètres sont valides. Si elles ne contient pas
  • * de @, vérifie si elles correspondent à des pseudos (voir nameToMail).
  • * <p>Vérifie chacune des adresse, et renvoie une exception global, contenant plusieurs
  • * messages d'erreur si plusieurs adresses sont fausses, chaque message étant séparé
  • * par un \n.
  • * @param mails
  • * @throws Exception
  • */
  • static public void areValide(String[] mails) throws Exception {
  • String msg = "";
  • for (int i=0; i<mails.length; i++) {
  • try {
  • isValide(mails[i]);
  • } catch (Exception e) {
  • msg += ((msg.length()>0)?"\n":"") + e.getMessage();
  • }
  • }
  • if (msg.length() > 0) {
  • throw new Exception(msg);
  • }
  • }
  • //############################################################
  • //Fonctions private,
  • //statiques pour être appelés par les public isValide et areValide
  • //############################################################
  • /**
  • * Vérifie la validité d'une adresse e-mail, et renvoie sous forme d'InternetAdress
  • * ou une exception en cas d'erreur.
  • * @param mail
  • * @throws Exception
  • */
  • static private InternetAddress checkMail(String mail) throws Exception {
  • //Pas de @, c'est peut-être un pseudonyme ?...
  • if (mail.indexOf('@') == -1) {
  • return new InternetAddress(nameToMail(mail));
  • }
  • else {
  • //le parse d'InternetAddress ne renvoie pas d'erreur sur adresse@mail
  • //alors on fait un test simple pour savoir si y'a un point, après l'@
  • //adresse@mail.fr est OK, adresse@mail renvoie une exception.
  • if (mail.lastIndexOf('.') < mail.indexOf('@')) {
  • throw new Exception("Adresse email \""+mail+"\" invalide");
  • }
  • else {
  • return new InternetAddress(mail);
  • }
  • }
  • }
  • /**
  • * Ici votre fonction perso, qui transforme des noms génériques en adresses e-mail.
  • * <p>Par exemple : webmaster -> webmaster@societe.fr
  • * @param name
  • * @throws Exception si le pseudo est inconnu.
  • */
  • static private String nameToMail(String name) throws Exception {
  • //L'exemple du mail au webmaster, si on met juste "webmaster" sans mettre
  • //@societe.fr, cette fonction transforme.
  • if (name.equalsIgnoreCase("webmaster"))
  • return "webmaster@societe.fr";
  • //else if....
  • //else if....
  • //else c'est une erreur
  • else
  • throw new Exception("Nom \""+name+"\" inconnu");
  • }
  • }
/*
 * Created on 10 nov. 2004
 */
package xxxx.util;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * Classe pour simplifier les envois de mails
 * @author SMAC
 */
public class Mail {
	/** Type texte brut */
	static public final int TEXT = 0;
	/** Type text/html */
	static public final int HTML = 1;
	
	/** Adresse "no-reply" par défaut de l'entreprise */
	private static final String NOREPLY = "noreply@societe.fr";
	/** Adresse du serveur SMTP de l'entreprise */
	private static final String SMTPHOST = "smtp.societe.fr";
	
	private Properties props;
	private Session session;
	private MimeMessage mm;
	private int mimetype;
	/**
	 * Si on n'appelle pas setFrom, met automatiquement noreply@societe.fr
	 */
	private boolean noreply = true;
	
	/**
	 * Créateur d'un mail.
	 */
	public Mail() {
		//Par défaut en texte brut
		mimetype = TEXT;
		
		//Get system properties
		props = System.getProperties();
		//Setup mail server
		props.put("mail.smtp.host", SMTPHOST);
		//Get session
		session = Session.getDefaultInstance(props, null);
		//Define message
		mm = new MimeMessage(session);
	}
		
	//############################################################
	//Ajout d'expéditeur et destinataires
	//############################################################
	
	/**
	 * Ajoute un expéditeur
	 * @param expediteur
	 * @throws Exception
	 */
	public void setFrom(String expediteur) throws Exception {
		if (expediteur.trim().length() > 0) {
			mm.setFrom(checkMail(expediteur));
			noreply = false;
		}
	}
	
	/**
	 * Ajoute un destinataire
	 * @param destinataire
	 * @throws Exception
	 */
	public void setTo(String destinataire) throws Exception {
		if (destinataire.trim().length() > 0) {
			if (plusieursMails(destinataire))
				setTo(decoupe(destinataire));
			else {
				mm.addRecipient(Message.RecipientType.TO, checkMail(destinataire));
			}
		}
	}
	/**
	 * Ajoute plusieurs destinataires
	 * @param dest
	 * @throws Exception
	 */
	public void setTo(String[] dest) throws Exception {
		for (int i=0; i<dest.length; i++)
			setTo(dest[i]);
	}
	
	/**
	 * Ajoute un destinataire en copie
	 * @param cc
	 * @throws Exception
	 */
	public void setCC(String cc) throws Exception {
		if (cc.trim().length() > 0) {
			if (plusieursMails(cc))
				setCC(decoupe(cc));
			else {
				mm.addRecipient(Message.RecipientType.CC, checkMail(cc));
			}
		}
	}
	/**
	 * Ajoute plusieurs destinataires en copie
	 * @param cc
	 * @throws Exception
	 */
	public void setCC(String[] cc) throws Exception {
		for (int i=0; i < cc.length; i++)
			setCC(cc[i]);
	}
	
	/**
	 * Ajoute un destinataire en copie cachée.
	 * @param bcc
	 * @throws Exception
	 */
	public void setCopieCachee(String bcc) throws Exception {
		if (bcc.trim().length() > 0) {
			if (plusieursMails(bcc))
				setCopieCachee(decoupe(bcc));
			else {
				mm.addRecipient(Message.RecipientType.BCC, checkMail(bcc));
			}
		}
	}
	/**
	 * Ajoute plusieurs destinataires en copie cachée.
	 * @param bcc
	 * @throws Exception
	 */
	public void setCopieCachee(String[] bcc) throws Exception {
		for (int i=0; i < bcc.length; i++)
			setCopieCachee(bcc[i]);
	}
	
	//############################################################
	//Champs avec destinataires multiples
	//############################################################

	/**
	 * Teste si y'a plusieurs mails dans la chaîne, séparés par un espace, une virgule ou un point-virgule
	 * @param mails
	 * @return
	 */
	static public boolean plusieursMails(String mails) {
		return ((mails.indexOf(' ') + mails.indexOf(',') + mails.indexOf(';')) > -1);
	}
	/**
	 * Découpe la chaîne contenant plusieurs mails en String[]
	 * @return
	 */
	static public String[] decoupe(String mails) {
		return mails.split(" |,|;");
	}
	
	//############################################################
	//Sujet et message
	//############################################################

	/**
	 * Ajoute le sujet
	 * @param sujet
	 * @throws Exception
	 */
	public void setSujet(String sujet) throws Exception {
		mm.setSubject(sujet);
	}
	
	/**
	 * Choisir entre le type texte brut ({@link Mail#TEXT}) ou HTML ({@link Mail#HTML}).
	 * @param mime
	 * @throws Exception
	 */
	public void setMimeType(int mime) throws Exception {
		mimetype = mime;
	}
	
	/**
	 * Ajoute le message
	 * @param message
	 * @throws Exception
	 */
	public void setMessage(String message) throws Exception {
		if (mimetype == HTML)
			mm.setContent(message, "text/html");
		else mm.setText(message);
	}
	
	//############################################################
	//Envoi
	//############################################################
	
	/**
	 * Envoie le mail
	 * @throws Exception
	 */
	public void send() throws Exception {
		if (noreply)
			setFrom(NOREPLY);
		Transport.send(mm);
	}
	
	//############################################################
	//Vérifications de la validité d'adresse e-mails
	//(fonctions pour l'extérieur : jsp ou WebServices...)
	//############################################################
	/**
	 * Vérifie si l'adresse passée en paramètre est valide. Si elle ne contient pas
	 * de @, vérifie si elle correspond bien à un pseudo (voir nameToMail).
	 * @param mail
	 */
	static public void isValide(String mail) throws Exception {
		if (plusieursMails(mail))
			areValide(decoupe(mail));
		else
			Mail.checkMail(mail);
	}
	/**
	 * Vérifie si les adresses passées en paramètres sont valides. Si elles ne contient pas
	 * de @, vérifie si elles correspondent à des pseudos (voir nameToMail).
	 * <p>Vérifie chacune des adresse, et renvoie une exception global, contenant plusieurs
	 * messages d'erreur si plusieurs adresses sont fausses, chaque message étant séparé
	 * par un \n.
	 * @param mails
	 * @throws Exception
	 */
	static public void areValide(String[] mails) throws Exception {
		String msg = "";
		for (int i=0; i<mails.length; i++) {
			try { 
				isValide(mails[i]);
			} catch (Exception e) {
				msg += ((msg.length()>0)?"\n":"") + e.getMessage(); 
			}
		}
		if (msg.length() > 0) {
			throw new Exception(msg);
		}
	}
	
	//############################################################
	//Fonctions private,
	//statiques pour être appelés par les public isValide et areValide
	//############################################################

	/**
	 * Vérifie la validité d'une adresse e-mail, et renvoie sous forme d'InternetAdress
	 * ou une exception en cas d'erreur.
	 * @param mail
	 * @throws Exception
	 */
	static private InternetAddress checkMail(String mail) throws Exception {
		//Pas de @, c'est peut-être un pseudonyme ?...
		if (mail.indexOf('@') == -1) {
			return new InternetAddress(nameToMail(mail));
		}
		else {
			//le parse d'InternetAddress ne renvoie pas d'erreur sur adresse@mail
			//alors on fait un test simple pour savoir si y'a un point, après l'@
			//adresse@mail.fr est OK, adresse@mail renvoie une exception.
			if (mail.lastIndexOf('.') < mail.indexOf('@')) {
				throw new Exception("Adresse email \""+mail+"\" invalide");
			}
			else {
				return new InternetAddress(mail);
			}
		}
	}
	
	/**
	 * Ici votre fonction perso, qui transforme des noms génériques en adresses e-mail.
	 * <p>Par exemple : webmaster -> webmaster@societe.fr
	 * @param name
	 * @throws Exception si le pseudo est inconnu.
	 */
	static private String nameToMail(String name) throws Exception {
		//L'exemple du mail au webmaster, si on met juste "webmaster" sans mettre
		//@societe.fr, cette fonction transforme.
		if (name.equalsIgnoreCase("webmaster"))
			return "webmaster@societe.fr";
		//else if....
		//else if....
		//else c'est une erreur
		else
			throw new Exception("Nom \""+name+"\" inconnu");
	}
}

Conclusion

ça ne gère pas les pièces jointes, c'est basique, mais tellement pratique à utiliser dans une appli :-)
 

Historique

29 novembre 2005 01:52:31 :
- "mail" dans les mots clés

Commentaires et avis

signaler à un administrateur
Commentaire de khamine le 01/04/2005 13:56:36

c'est un programme trés utile;
mais il ne marche pas.
au 1er lieu voila l'erreur qui affiche:

Mail.java:160:cannot resolve symbol
symbol : method split (java.lang.String)
location: class java.lang.String
                    return mails.spilt(" |,|;");
                                      ^
1error

est lorsque j'ai remplacé cette methode avec une autre il s'est bien compilé mais lorsque j'ai ajouté le main suivant:

public static void main(String[] args)
{
Mail m = new Mail();
m.setTo("james,Adresse@yahoo.fr");
m.setSujet("test");
m.setMessage("Ceci est un test");
m.send();
}

il m'affiche 13 erreur du type 'must be trow' alors j'ai commencé a ajouté des try catch par tous mais ca marche pas.
c'est le code le plus interessent entre les codes utilisant javamail mais il doit marcher.

signaler à un administrateur
Commentaire de iubito le 01/04/2005 14:36:29

tu as quelle version de Java?
la méthode String.split (et non spilt dans ton erreur...) permet de découper une chaîne à partir d'une regexp en paramètre...

je développe avec le 1.4.quelque chose

signaler à un administrateur
Commentaire de abdelkaoui le 10/08/2005 12:43:32

j'ai testé le programme, mais j'au eu cette erreur :

java.lang.NoClassDefFoundError: javax/activation/DataSource

signaler à un administrateur
Commentaire de abdelkaoui le 10/08/2005 12:48:33

cette erreur est provenu de l'instruction suivante :

mm = new MimeMessage(session);

signaler à un administrateur
Commentaire de iubito le 10/08/2005 15:25:31

as-tu le package activation.jar dans ton classpath ?

signaler à un administrateur
Commentaire de abdelkaoui le 10/08/2005 17:02:45

non je n'ai pas cette package, pouvez vous SVP me donner le lien pour la telecharger ?
Merci tres bien

signaler à un administrateur
Commentaire de iubito le 10/08/2005 17:34:16

www.google.fr

signaler à un administrateur
Commentaire de neolin85 le 24/05/2006 17:46:09

J'ai un probleme.
J'arrive pas a inclure le package javamail dans Eclipse
quelqu'un pourra m'aider.

signaler à un administrateur
Commentaire de INI2000 le 18/02/2007 18:02:55

Bonjour,

Je n'ai aucune erreur de compilation (C'est une très bonne nouvelle non?!!!)
Mais je n'arrive pas à recevoir le fameux email test.

Je suis qu'un simple programmeur en Java. Est-ce que mon ordi doit être un serveur pour se envoyer ce message. y a t il des configurations? Des installations? Merci de me pour votre reponse d'avance. Voici monprog principal.

public static void Main(String[] args) {
         try{
            Mail m = new Mail();
            m.setTo("gasmi, h.gasmi@gmail.com");
            m.setSujet("test");
            m.setMessage("Ceci est un test");
            m.send();
         }
         catch (Exception e) {
                  e.printStackTrace();
         }
}

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Javamail et Outlook [ par JulienR ] Voila j'ai un gros probleme, outlook permet de créer des tâches et de les envoyer, si le destinataire possède Outlook, il recevra le mail sous le form Javamail envoi d'un mail: format html?? [ par zebulaon ] Bonjour,Je cherche à envoyer un mail au format html grace à l'API javamail.Voici le code Java que j'ai trouvé sur internet. Il fonctionne bien, j'ai f vérification adresse e mail [ par jmg02001 ] Bonjour, connaiteriez vous une fonction pour vérifier qu'une adresse email a une syntaxe normale?Merci javamail sous Unix [ par skynet21fr ] Bonjour,je lance un mail en utilisant Javamail sous DOS, ca marche bien. En revanche lorque je lance cette meme classe sous Unix, j'ai le message d'er javamail [ par benarroud ] Bonjour, Je suis entrain de développer une application qui lit mes mails grâce l'API javamail, puis supprimer ce mail de ma boite J'arrive à lu les prog mail [ par toxyko_974 ] bonjour,je cherche comment faire un prog qui vérifirais l'arriver de courier mail sur un compte mail deja créer (par exemple chez wanadoo ou autre) et thread [ par the wizard ] slt je suis en train de creer un gros programme(pour moi) il est mutifonction (tableur , mail,navigateur,txt ect...) et je veut creer pour chaqu une d JavaMail ... de l'aide SVP [ par hraa2 ] Bonjour,Je suis nouveau dans java et j'ai essayé de faire fonctionner ce code pour faire un envoi de mail.une erreur me bloque : (j'utilise JBuilder)j Comment mettre piece jointe par mail ? [ par bacdroit2 ] Bonjour, je n'arrive pas à joindre un fichier par mail, si quelqu'un a une solution ce serait sumpa merci !bacdroit Envoi d'e-mail et expediteur [ par titinoosReims ] Coucou every body,Je suis tres embeter, je veux envoyer un e-mail via javamail grace a une page jsp mais mon probleme et que je veux determiner l'adre


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,452 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.