1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256
| 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 */
/** Adresse du serveur SMTP de l'entreprise */
private static final String SMTPHOST = "SMTP_de_Ton_SERVEUR***";
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;
mimetype = HTML; //Kamal
//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
public void setTo(String[] dest) throws Exception {
for (int i=0; i<dest.length; i++)
setTo(dest[i]);
}
// * Ajoute un destinataire en copie
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
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.
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.
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
static public boolean plusieursMails(String mails) {
return ((mails.indexOf(' ') + mails.indexOf(',') + mails.indexOf(';')) > -1);
}
// * Découpe la chaîne contenant plusieurs mails en String[]
static public String[] decoupe(String mails) {
return mails.split(" |,|;");
}
//############################################################
//Sujet et message
//############################################################
// * Ajoute le sujet
public void setSujet(String sujet) throws Exception {
mm.setSubject(sujet);
}
//* Choisir entre le type texte brut ({@link Mail#TEXT}) ou HTML ({@link Mail#HTML}).
public void setMimeType(int mime) throws Exception {
mimetype = mime;
}
// * Ajoute le message
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(String NOREPLY) 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("tonPseudo***"))
return "ton_Mail****";
//else if....
//else if....
//else c'est une erreur
else
throw new Exception("Nom \""+name+"\" inconnu");
}
} |
Partager