Envoi de mail avec l'api javamail

Description

1 ) Description de besoin:
Pour la suite du projet "UTILISATION DE SSH ET MYSQL EN JAVA" que vous trouverez ici :http://www.javafr.com/codes/UTILISATION-SSH-MYSQL-JAVA_55140.aspx
Aujourd'hui, je vais aborder une nouvelle étape de mon projet et qui consiste à envoyer des mails de notifications. Pour rappel le but de ce projet est la gestion des abonnements. Donc on va mettre en place une procedure d'envoi de mail aux clients est chargés de comptes.

2 ) L'environnement et mise en place
une machine Linux (Debian), Mysql, JVM
mon application tourne en cron, et s'execute chaque 24 heurs

3) L'application
Avant de commencer, il faut avoir la librairie JavaMail que vous trouvrer dans ce lient http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-eeplat-419426.html#javamail-1.4.7-oth-JPR. ainsi que le connecteur Mysql et que vous pouvez le trouver ici http://cdn.mysql.com/Downloads/Connector-J/mysql-c onnector-java-5.1.25.zip.
cette application des constituer de 5 classes regroupés dans 3 pacquages.

Source / Exemple :


 package javamail; import entity.Abonnement; import entity.ChargeCompte; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import session.AbonnementFacade; public class JavaMail {     public JavaMail() {     }     public void sendMail(String to, String subject, String messsage) {         Properties props = new Properties();         props.put("mail.smtp.host", "mail.dom.cc");         Session session = Session.getInstance(props, null);         try {             MimeMessage msg = new MimeMessage(session);             msg.setFrom(new InternetAddress("service.client@slc.dz"));             msg.setRecipients(Message.RecipientType.TO, to);             //msg.setRecipients(Message.RecipientType.CC, CC_LIST);             //msg.setRecipients(Message.RecipientType.BCC, BCC_LIST);             msg.setSubject(subject);             msg.setSentDate(new Date());             msg.setText(messsage, "utf-8", "html");             Transport.send(msg);         } catch (MessagingException mex) {             System.out.println("send failed, exception: " + mex);         }     }     public void mailRappelFinAbonnement() {           AbonnementFacade abonnementFacade = new AbonnementFacade();         List<ChargeCompte> listMailChargeClientPourRappelEtablierFacture = abonnementFacade.getListMailChargeClient();         for (ChargeCompte chargeCompte : listMailChargeClientPourRappelEtablierFacture) {             if (!chargeCompte.getAbonnementsList().isEmpty()) {                 String msg = "Bonjour " + chargeCompte.getPrenom() + "<br/>";                 String j = "";                 for (Abonnement abonnement : chargeCompte.getAbonnementsList()) {                     j += "<tr>"                             + "<td bgcolor=\"#FFFFFF\" valign=\"top\" align=\"left\">" + abonnement.getNomClient() + "</td>"                             + "<td bgcolor=\"#FFFFFF\" valign=\"top\" align=\"left\">" + abonnement.getContact() + "</td>"                             + "<td bgcolor=\"#FFFFFF\" valign=\"top\" align=\"left\">" + abonnement.getEmailClient() + "</td>"                             + "<td bgcolor=\"#FFFFFF\" valign=\"top\" align=\"left\">" + new SimpleDateFormat("dd/MM/YYYY").format(abonnement.getDateDebut()) + "</td>"                             + "<td bgcolor=\"#FFFFFF\" valign=\"top\" align=\"left\">" + new SimpleDateFormat("dd/MM/YYYY").format(abonnement.getDateFin()) + "</td>"                             + "<td bgcolor=\"#FFFFFF\" valign=\"top\" align=\"left\">" + abonnement.getReste() + "</td>"                             + "</tr>";                 }                 msg += "Les abonnenements des clients suivants toucheront a leurs fin dans quelques jours. Veuillez leurs préparer les factures pour les prochains abonnements" + "<br/>";                 msg += "Merci" + "<br/><br/><br/>";                 msg += "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"#333333\">";                 msg += "<tr bgcolor=\"#0acff1\">";                 msg += "<td width=\"30%\"><strong><font color=\"#FFFFFF\">Client</font></strong></td>";                 msg += "<td width=\"30%\"><strong><font color=\"#FFFFFF\">Contact</font></strong></td>";                 msg += "<td width=\"30%\"><strong><font color=\"#FFFFFF\">E-mail</font></strong></td>";                 msg += "<td width=\"30%\"><strong><font color=\"#FFFFFF\">Date debut</font></strong></td>";                 msg += "<td width=\"30%\"><strong><font color=\"#FFFFFF\">Date fin</font></strong></td>";                 msg += "<td width=\"30%\"><strong><font color=\"#FFFFFF\">Jours restant avant fin d'abonnement</font></strong></td>";                 msg += "</tr>";                 msg += j;                 msg += "</table>";                 sendMail(chargeCompte.getEmail(), "", msg);                 System.out.println(msg);             }         }     }     /** 

* @param args the command line arguments 

*/
     public static void main(String[] args) {         // TODO code application logic here         new JavaMail().mailRappelFinAbonnement();     } } package entity; import java.util.Date; public class Abonnement {     private int reste;     private int idAbonnement;     private int idClient;     private Date dateDebut;     private Date dateFin;     private int etatAbonnement;     private String nomClient;     private String emailClient;     private String contact;     public String getContact() {         return contact;     }     public void setContact(String contact) {         this.contact = contact;     }     public Date getDateDebut() {         return dateDebut;     }     public void setDateDebut(Date dateDebut) {         this.dateDebut = dateDebut;     }     public Date getDateFin() {         return dateFin;     }     public void setDateFin(Date dateFin) {         this.dateFin = dateFin;     }     public String getEmailClient() {         return emailClient;     }     public void setEmailClient(String emailClient) {         this.emailClient = emailClient;     }     public int getEtatAbonnement() {         return etatAbonnement;     }     public void setEtatAbonnement(int etatAbonnement) {         this.etatAbonnement = etatAbonnement;     }     public int getIdAbonnement() {         return idAbonnement;     }     public void setIdAbonnement(int idAbonnement) {         this.idAbonnement = idAbonnement;     }     public int getIdClient() {         return idClient;     }     public void setIdClient(int idClient) {         this.idClient = idClient;     }     public String getNomClient() {         return nomClient;     }     public void setNomClient(String nomClient) {         this.nomClient = nomClient;     }     public int getReste() {         return reste;     }     public void setReste(int reste) {         this.reste = reste;     }     public Abonnement(int reste, int idAbonnement, int idClient, Date dateDebut, Date dateFin, int etatAbonnement, String nomClient, String emailClient, String contact) {         this.reste = reste;         this.idAbonnement = idAbonnement;         this.idClient = idClient;         this.dateDebut = dateDebut;         this.dateFin = dateFin;         this.etatAbonnement = etatAbonnement;         this.nomClient = nomClient;         this.emailClient = emailClient;         this.contact = contact;     } } package entity; import java.util.List; public class ChargeCompte {     private String nom;     private String prenom;     private String email;     private String tel;     private List<Abonnement> abonnementsList;     public List<Abonnement> getAbonnementsList() {         return abonnementsList;     }     public void setAbonnementsList(List<Abonnement> abonnementsList) {         this.abonnementsList = abonnementsList;     }     public String getEmail() {         return email;     }     public void setEmail(String email) {         this.email = email;     }     public String getNom() {         return nom;     }     public void setNom(String nom) {         this.nom = nom;     }     public String getPrenom() {         return prenom;     }     public void setPreom(String preom) {         this.prenom = preom;     }     public String getTel() {         return tel;     }     public void setTel(String tel) {         this.tel = tel;     }     public ChargeCompte(String nom, String preom, String email, String tel) {         this.nom = nom;         this.prenom = preom;         this.email = email;         this.tel = tel;     }     public ChargeCompte(String nom, String preom, String email, String tel, List<Abonnement> abonnementsList) {         this.nom = nom;         this.prenom = preom;         this.email = email;         this.tel = tel;         this.abonnementsList = abonnementsList;     } } package session; import entity.Abonnement; import entity.ChargeCompte; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class AbonnementFacade extends AbstractSQL {     public AbonnementFacade() {     }     public List<Abonnement> getListClient(int idContact) {         List<Abonnement> lcs = new ArrayList<Abonnement>();         String query = "SELECT DATEDIFF(a.date_fin,CURDATE()) as reste, a.id_abonnement, a.id_client, a.date_debut, a.date_fin, a.etat_abonnement, c.id , c.Nom , c.Email , c.Contact ";         query += "FROM abonnement a JOIN clients c ON c.id = a.id_client JOIN abonnement_contact ac ON ac.id_abonnement = a.id_abonnement ";         query += "WHERE ac.id_contatct = " + idContact+ " AND (";         query += "DATE_ADD( CURDATE( ) , INTERVAL 15 DAY ) = date_fin ";         query += "OR DATE_ADD( CURDATE( ) , INTERVAL 10 DAY ) = date_fin ";         query += "OR DATE_ADD( CURDATE( ) , INTERVAL 5 DAY ) = date_fin ";         query += "OR DATE_ADD( CURDATE( ) , INTERVAL 2 DAY ) = date_fin ";         query += "OR DATE_ADD( CURDATE( ) , INTERVAL 1 DAY ) = date_fin ";         query += "OR DATE_ADD( CURDATE( ) , INTERVAL 0 DAY ) = date_fin ";         query += ") ";         if (connect()) {             try {                 ResultSet rs = execResult(query);                 if (rs != null) {                     while (rs.next()) {                         lcs.add(new Abonnement(rs.getInt("reste"), rs.getInt("id_abonnement"), rs.getInt("id_client"), rs.getDate("date_debut"), rs.getDate("date_fin"), rs.getInt("etat_abonnement"), rs.getString("Nom"), rs.getString("Email"), rs.getString("Contact")));                     }                 }             } catch (SQLException ex) {             }         } else {             System.out.println("Mysql connection failed !!!");         }         close();         return lcs;     }          public List<ChargeCompte> getListMailChargeClient(){         List<ChargeCompte> lcs = new ArrayList<ChargeCompte>();         String query = "SELECT id_contatct , Nom , Prenom , Portable , Email ";         query += "FROM abonnement_contact a ";         query += "JOIN utilisateurs u ON a.id_contatct = u.id ";         query += "GROUP BY a.id_contatct ";         if (connect()) {             try {                 ResultSet rs = execResult(query);                 if (rs != null) {                     while (rs.next()) {                         lcs.add(new ChargeCompte(rs.getString("Nom"), rs.getString("Prenom"), rs.getString("Email"), rs.getString("Portable"), getListClient(rs.getInt("id_contatct"))));                     }                 }             } catch (SQLException ex) {             }         } else {             System.out.println("Mysql connection failed !!!");         }         close();         return lcs;     } } package session; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; public class AbstractSQL {          private String dbURL = "jdbc:mysql://localhost:3306/abonnement_db";     private String driverClass = "com.mysql.jdbc.Driver";     private String serverName = "localhost";     private String portNumber = "3306";     private String databaseName = "abonnement";     private String user = "root";     private String password = "root";          private java.sql.Connection dbConnect = null;     private java.sql.Statement dbStatement = null;          public Boolean connect() {         try {             Class.forName(driverClass).newInstance();             this.dbConnect = DriverManager.getConnection(dbURL, this.user, this.password);             this.dbStatement = this.dbConnect.createStatement();             return true;         } catch (SQLException ex) {             Logger.getLogger(AbstractSQL.class.getName()).log(Level.SEVERE, null, ex);         } catch (ClassNotFoundException ex) {             Logger.getLogger(AbstractSQL.class.getName()).log(Level.SEVERE, null, ex);         } catch (InstantiationException ex) {             Logger.getLogger(AbstractSQL.class.getName()).log(Level.SEVERE, null, ex);         } catch (IllegalAccessException ex) {             Logger.getLogger(AbstractSQL.class.getName()).log(Level.SEVERE, null, ex);         }         return false;     }     /** 

* Executer une requete SQL 

* @param sql 

* @return resultat de la requete 

*/
     public ResultSet execResult(String sql) {         try {             ResultSet rs = this.dbStatement.executeQuery(sql);             return rs;         } catch (SQLException ex) {             Logger.getLogger(AbstractSQL.class.getName()).log(Level.SEVERE, null, ex);         }         return null;     }          public void exec(String sql){         try {             this.dbStatement.executeUpdate(sql);         } catch (SQLException ex) {             Logger.getLogger(AbstractSQL.class.getName()).log(Level.SEVERE, null, ex);         }     }     /** 

* Fermer la connexion au serveur de DB 

*/
     public void close() {         try {             this.dbStatement.close();             this.dbConnect.close();             this.dbConnect.close();         } catch (SQLException ex) {             Logger.getLogger(AbstractSQL.class.getName()).log(Level.SEVERE, null, ex);         }     } } 





Voici le script de la db

----------------------------------
-- CREATE DATABASE `abonnement_db`;
-- USE `abonnement_db`;
--

-- --------------------------------------------------------

--
-- Structure de la table `abonnement`
--

CREATE TABLE IF NOT EXISTS `abonnement` (
`id_abonnement` int(11) NOT NULL AUTO_INCREMENT,
`id_client` int(11) NOT NULL DEFAULT '0',
`date_debut` date NOT NULL DEFAULT '0000-00-00',
`date_fin` date NOT NULL DEFAULT '0000-00-00',
`etat_abonnement` tinyint(4) NOT NULL DEFAULT '0',
`couper_client` tinyint(4) NOT NULL DEFAULT '0',
`send_mail_client` tinyint(4) NOT NULL DEFAULT '0',
`send_mail_charge_compte` tinyint(4) NOT NULL DEFAULT '0',
`facture_regle` tinyint(4) NOT NULL DEFAULT '0',
`observation` text NOT NULL,
`id_connexion` int(11) NOT NULL DEFAULT '0',
`id_charge_compte` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_abonnement`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=45 ;

--
-- Contenu de la table `abonnement`
--

INSERT INTO `abonnement` (`id_abonnement`, `id_client`, `date_debut`, `date_fin`, `etat_abonnement`, `couper_client`, `send_mail_client`, `send_mail_charge_compte`, `facture_regle`, `observation`, `id_connexion`, `id_charge_compte`) VALUES
(1, 1, '2014-03-13', '2014-05-15', 1, 0, 1, 1, 0, '', 0, 2),
(2, 2, '2014-03-13', '2014-04-24', 1, 0, 1, 1, 0, '', 0, 1);

-- --------------------------------------------------------

--
-- Structure de la table `abonnement_contact`
--

CREATE TABLE IF NOT EXISTS `abonnement_contact` (
`id_abonnement` int(11) NOT NULL DEFAULT '0',
`id_contatct` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id_abonnement`,`id_contatct`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

--
-- Contenu de la table `abonnement_contact`
--

INSERT INTO `abonnement_contact` (`id_abonnement`, `id_contatct`) VALUES
(1, 1),
(1, 2),
(2, 1),
(2, 2);

-- --------------------------------------------------------

--
-- Structure de la table `charge_compte`
--

CREATE TABLE IF NOT EXISTS `charge_compte` (
`id` int(30) NOT NULL AUTO_INCREMENT,
`Nom` varchar(100) DEFAULT 'Nom revendeur-X',
`Prenom` varchar(100) DEFAULT 'Prenom revendeur-X',
`Adresse` varchar(100) DEFAULT 'Adresse X',
`Telephone` varchar(50) DEFAULT '021 00 00 00',
`Portable` varchar(50) DEFAULT '070 00 00 00',
`Email` varchar(40) DEFAULT '@',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Contenu de la table `charge_compte`
--

INSERT INTO `charge_compte` (`id`, `Nom`, `Prenom`, `Adresse`, `Telephone`, `Portable`, `Email`) VALUES
(1, 'Nom revendeur-1', 'Prenom revendeur-1', 'Adresse 1', '021 00 00 00', '070 00 00 00', 'rv1@comp.com'),
(2, 'Nom revendeur-2', 'Prenom revendeur-2', 'Adresse 2', '021 00 00 00', '070 00 00 00', 'rv2@comp.com');

-- --------------------------------------------------------

--
-- Structure de la table `clients`
--

CREATE TABLE IF NOT EXISTS `clients` (
`id` int(20) NOT NULL AUTO_INCREMENT,
`Nom` varchar(100) DEFAULT 'Client X',
`Adresse` varchar(255) DEFAULT 'Adresse X',
`Telephone` varchar(16) DEFAULT '021 00 00 00',
`Portable` varchar(16) DEFAULT '070 00 00 00',
`Willaya_id` int(10) DEFAULT NULL,
`Fax` varchar(20) DEFAULT '021000000',
`Email` varchar(30) DEFAULT '@',
`Contact` varchar(100) DEFAULT 'contact',
`Fonction` varchar(120) DEFAULT 'fonction contact',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Contenu de la table `clients`
--

INSERT INTO `clients` (`id`, `Nom`, `Adresse`, `Telephone`, `Portable`, `Willaya_id`, `Fax`, `Email`, `Contact`, `Fonction`) VALUES
(1, 'Client 1', 'Adresse X1', '021 00 00 00', '070 00 00 00', 16, '021000000', 'client.1@client.com', 'contact', 'fonction contact'),
(2, 'Client 2', 'Adresse 2', '021 00 00 00', '070 00 00 00', 16, '021000000', 'client.2@client2.com', 'contact', 'fonction contact');

----------------------------------

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.