Java – Sending email
CodeDevEnglish
Source to keep somewhere: 2 classes to send emails.
In order to work these classes requires activation.jar et mail.jar
First java class : email data object.
package com.ledruide.utils.mail; import java.util.ArrayList; import java.util.List; /** * @author JRA * @since 26 fev. 2005 */ public class Mail { public String login = null; public String password = null; public String host = null; public List<String> to = null; public List<String> cc = null; public List<String> bcc = null; public List<String> attach = null; public String from = null; public String fromName = null; public String replyTo = null; public String subject = null; public String mode = "html"; public String content = null; public String priority = null; public String getLogin() { return login; } public void setLogin(String string) { login = string; } public String getPassword() { return password; } public void setPassword(String string) { password = string; } public String getHost() { return host; } public void setHost(String string) { host = string; } public String getFrom() { return from; } public void setFrom(String string) { from = string; } public String getFromName() { return fromName; } public void setFromName(String string) { fromName = string; } public String getReplyTo() { return replyTo; } public void setReplyTo(String string) { replyTo = string; } public String getSubject() { return subject; } public void setSubject(String string) { subject = string; } public String getMode() { return mode; } public void setMode(String string) { mode = string; } public String getContent() { return content; } public void setContent(String string) { content = string; } public List<String> getTo() { return to; } public void setTo(List<String> list) { to = list; } public void addTo(String string) { if (to == null) { to = new ArrayList<String>(); } to.add(string); } public List<String> getCc() { return cc; } public void setCc(List<String> list) { cc = list; } public void addCc(String string) { if (cc == null) { cc = new ArrayList<String>(); } cc.add(string); } public List<String> getBcc() { return bcc; } public void setBcc(List<String> list) { bcc = list; } public void addBcc(String string) { if (bcc == null) { bcc = new ArrayList<String>(); } bcc.add(string); } public List<String> getAttach() { return attach; } public void setAttach(List<String> list) { attach = list; } public void addAttach(String string) { if (attach == null) { attach = new ArrayList<String>(); } attach.add(string); } public String getPriority(){ return priority; } public void setPriority( String priority ){ this.priority = priority; } } </pre> Second java class, email send job: <pre class="brush:java> package com.ledruide.utils.mail; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Properties; import java.util.StringTokenizer; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.Multipart; 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; /** * EnvoiMail * Classe permettant d'envoyer un mail acceptant comme parametres : * * Emetteur. * Adresse de retour. * Destinataires (TO, CC, BCC). * Fichiers attachés. * Nom de serveur SMTP * Nom d'utilisateur * Mot de passe (au cas ou..) * Sujet * Contenu * @author JRA * @since 26 fev. 2005 */ public final class SendMail { private SendMail() { } /** * Permet d'utiliser le programme en ligne de commande * de facon independante.<BR> * Usage : EnvoiMail [-l login -p password -H host <br> * -TO to@to1.com;to@to2.com -CC cc@cc1.com;cc@cc2.com -BCC bcc@bcc1.com;bcc@bcc2.com <BR> * -F fichierAttaché1;fichierAttaché2 -e emetteur -r adresseReponse <BR> * Sujet et contenu sont demandés ensuite. * * @param args */ public static void main (final String[] args) { if (args.length < 4) { System.out.println(usage()); System.exit(1); } else { try { System.out.println("constructParam"); final Mail arguments = constructParam(args); System.out.println("createMessage"); createMessage(arguments); } catch (Exception e) { e.printStackTrace(); } } } public static String usage() { return "\nUsage : SendMail [-l login\n" + "\t-p password\n" + "\t-H host\n" + "\t-TO to@to1.com;to@to2.com\n" + "\t-CC cc@cc1.com;cc@cc2.com\n" + "\t-BCC bcc@bcc1.com;bcc@bcc2.com\n" + "\t-F fichierAttache1;fichierAttache2\n" + "\t-e emetteur\n" + "\t-r adresseReponse\n" + "\t-m mode[text or html(default)]\n" + "\nLe sujet et le contenu sont demandes ensuite..."; } /** * Construit la HashMap en fonction des arguments passés en ligne de commande * <h4>Ne doit être appelé que par le main en ligne de commande !<h4> * * @param args les arguments de la ligne de commande * @return la HashMap construite. */ private static Mail constructParam (final String[] args) throws Exception { final Mail courriel = new Mail(); StringTokenizer tokenizer; final String separateur = ";"; final BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int i; for (i = 0; i < args.length; i++) { /* LOGIN */ if ("-l".equalsIgnoreCase(args[i])) { courriel.setLogin(args[++i]); System.out.println("login = " + courriel.getLogin()); } /* PASSWORD */ else if ("-p".equalsIgnoreCase(args[i])) { courriel.setPassword(args[++i]); System.out.println("password = " + courriel.getPassword()); } /* HOST */ else if ("-H".equalsIgnoreCase(args[i])) { courriel.setHost(args[++i]); System.out.println("host = " + courriel.getHost()); } /* EMETTEUR */ else if ("-e".equalsIgnoreCase(args[i])) { courriel.setFrom(args[++i]); System.out.println("emetteur = " + courriel.getFrom()); } /* ADRESSE REPONSE */ else if ("-r".equalsIgnoreCase(args[i])) { courriel.setReplyTo(args[++i]); System.out.println("addresseReponse = " + courriel.getReplyTo()); } /* TO */ else if ("-TO".equalsIgnoreCase(args[i])) { tokenizer = new StringTokenizer(args[++i], separateur); while (tokenizer.hasMoreElements()) { courriel.addTo(tokenizer.nextElement().toString()); } } /* CC */ else if ("-CC".equalsIgnoreCase(args[i])) { tokenizer = new StringTokenizer(args[++i], separateur); while (tokenizer.hasMoreElements()) { courriel.addCc(tokenizer.nextElement().toString()); } } /* BCC */ else if ("-BCC".equalsIgnoreCase(args[i])) { tokenizer = new StringTokenizer(args[++i], separateur); while (tokenizer.hasMoreElements()) { courriel.addBcc(tokenizer.nextElement().toString()); } } /* MODE */ else if ("-m".equalsIgnoreCase(args[i])) { courriel.setMode(args[++i]); System.out.println("mode = " + courriel.getMode()); } /* FICHIERS ATTACHES */ else if ("-F".equalsIgnoreCase(args[i])) { tokenizer = new StringTokenizer(args[++i], separateur); while (tokenizer.hasMoreElements()) { courriel.addAttach(tokenizer.nextElement().toString()); } }/* SINON AFFICHER L'AIDE */ else { System.out.println(usage()); System.exit(1); break; } } System.out.print("Sujet: "); System.out.flush(); final String sujet = in.readLine(); courriel.setSubject(sujet); System.out.print("Contenu: "); System.out.flush(); final StringBuffer contenu = new StringBuffer(in.readLine()); courriel.setContent(contenu.toString()); return courriel; } /** * Methode d'envoi du message.<br> * Inclus le traitement des parametres envoyés (test des paramètres nécessaires. * * @param mail Mail contenant les paramètres du message * @exception Exception if an error occurs */ public static void createMessage (final Mail mail) throws Exception { final StringBuffer probleme = new StringBuffer(2000); if (!testParametres(mail, probleme)) { throw new Exception(probleme.toString()); } final Properties properties = System.getProperties(); properties.put("mail.smtp.host", mail.getHost()); final Session session = Session.getInstance(properties, null); /* * Inclusion de toutes les variables d'envoi. */ final MimeMessage message = new MimeMessage(session); final Multipart multiPart = new MimeMultipart(); /* SET FROM */ message.setFrom(new InternetAddress(mail.getFrom().toString())); /* REPLY TO */ final String replyTo = mail.getReplyTo().toString(); //message.setReplyTo(ia.parse(replyTo)); message.setReplyTo(InternetAddress.parse(replyTo)); /* DESTINATAIRE(S) */ Iterator lEnum = mail.getTo().iterator(); while (lEnum.hasNext()) { final String dest = lEnum.next().toString(); final InternetAddress destIA = new InternetAddress(dest); message.addRecipient(Message.RecipientType.TO, destIA); } /* CARBON COPY */ lEnum = mail.getCc().iterator(); while (lEnum.hasNext()) { final String dest = lEnum.next().toString(); final InternetAddress destIA = new InternetAddress(dest); message.addRecipient(Message.RecipientType.CC, destIA); } /* BLIND CARBON COPY */ lEnum = mail.getBcc().iterator(); while (lEnum.hasNext()) { final String dest = lEnum.next().toString(); final InternetAddress destIA = new InternetAddress(dest); message.addRecipient(Message.RecipientType.BCC, destIA); } /* SUJET */ message.setSubject(mail.getSubject()); /* DATE D'ENVOI */ message.setSentDate(new Date()); /* TYPE MIME DE LA PARTIE CONTENU DU MESSAGE */ String charset="utf-8"; final MimeBodyPart mbpMessage = new MimeBodyPart(); if ("html".equalsIgnoreCase(mail.getMode())) { mbpMessage.setContent(mail.getContent(), "text/html"); } else { mbpMessage.setText(mail.getContent()); } /* AJOUT DU CONTENU AU MESSAGE EN 1ERE PARTIE */ multiPart.addBodyPart(mbpMessage); /* FICHIERS ATTACHES */ MimeBodyPart mbpAttach; List fichiers = mail.getAttach(); if (fichiers != null) { lEnum = fichiers.iterator(); while (lEnum.hasNext()) { String name = lEnum.next().toString(); File fichier = new File(name); mbpAttach = new MimeBodyPart(); FileDataSource fds = new FileDataSource(name); mbpAttach.setDataHandler(new DataHandler(fds)); mbpAttach.setFileName(fichier.getName()); /* AJOUT DU CONTENU AU MESSAGE EN 1ERE PARTIE */ multiPart.addBodyPart(mbpAttach); } } message.setContent(multiPart); /* * Transport du message */ try { if ("".equals(mail.getLogin()) && "".equals(mail.getPassword())) { Transport.send(message, message.getAllRecipients()); } else { final Transport transport = session.getTransport("smtp"); transport.connect(mail.getHost(), mail.getLogin(), mail.getPassword()); transport.sendMessage(message, message.getAllRecipients()); transport.close(); } }catch (Exception e) { e.printStackTrace(); throw e; } } /** * Teste la validités des parametres reçu dans la HashMap * * @param map la Map des parametres a tester * @return true si tous les parametres sont testés avec succès */ private static boolean testParametres (final Mail mail, final StringBuffer probleme) { boolean ok = true; probleme.append("\n*****************************"); probleme.append("\n**** PROBLEMS :"); if (mail == null) { probleme.append("\nNothing to send ! ........KO"); ok = false; } else { /* * Verification de la validites de tous les parametres pour * eviter plus tard une NullPointerException */ if ( mail.getLogin() == null ) { probleme.append("\nNo login..................OK"); mail.setLogin(""); } if ( mail.getPassword() == null ) { mail.setPassword(""); probleme.append("\nNo password...............OK"); } if ( mail.getFrom() == null ) { mail.setFrom(""); probleme.append("\nNo From...................OK"); } if ( mail.getReplyTo() == null ) { mail.setReplyTo(mail.getFrom()); probleme.append("\nNo Reply to...............OK"); } if ( mail.getHost() == null ) { mail.setHost(""); probleme.append("\nNo SMTP Host...........FATAL"); ok = false; } if ( mail.getSubject() == null ) { mail.setSubject(""); probleme.append("\nNo subject................OK"); } if ( mail.getMode() == null ) { mail.setMode("html"); probleme.append("\nNo mode...................OK"); } if ( mail.getContent() == null ) { mail.setContent(""); probleme.append("\nNo content................OK"); } if ( mail.getTo() == null ) { mail.setTo(new ArrayList<String>(0)); probleme.append("\nNo recipient TO........FATAL"); ok = false; } if ( mail.getCc() == null ) { mail.setCc(new ArrayList<String>(0)); probleme.append("\nNo Carbon Copy............OK"); } if ( mail.getBcc() == null ) { mail.setBcc(new ArrayList<String>(0)); probleme.append("\nNo Blind Carbon Copy......OK"); } /* * Ici je regarde de quel type sont les fichiers que je recoit File ou URL */ if ( mail.getAttach() != null ) { List fichiers = mail.getAttach(); Iterator ite = fichiers.iterator(); while (ite.hasNext()) { final String name = (String)ite.next(); // Try to open URL connection first try { URL url = new URL(name); //InputStream file = null; url.openStream(); } catch (MalformedURLException e) { // Try to open plain file, if `name' is not a URL specification try { //InputStream file = null; new FileInputStream(name); } catch (FileNotFoundException ex) { probleme.append("\nAttached file '" + name + "' not found.....FATAL"); ok = false; } } catch (IOException ex) { probleme.append("\nAttached file '" + name + "' not found.....FATAL"); ok = false; } } //while } else { probleme.append("\nNo attached file..........OK"); } } probleme.append("\n*****************************"); return ok; } }
Leave a comment