IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Comment envoyer un email via JavaMail 1.4.3 et CKEditor avec NetBeans IDE

Cet article est divisé en plusieurs parties, couvrant des sujets allant de la simple écriture de classes expéditeurs d'e-mail en Java à l'intégration d'une JFrame avec CKEditor, qui est un riche éditeur HTML. ♪

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Téléchargement et intégration des librairies dans NetBeans IDE 6.8

Tout d'abord, vous devez télécharger la dernière version de Java Mail à partir de cette page, ainsi que DJ Native Swing.

Après avoir téléchargé les bibliothèques, vous avez besoin de les mettre dans la bibliothèque du Gestionnaire de NetBeans. Je vous recommande de stocker toutes les bibliothèques, dans C: \ Program Files \ Java bibliothèques \ , par exemple.

Intégration Java Mail
Intégration DJnativeSwing

II. Création d'une application Java et ajout de bibliothèques au projet

Suivre les étapes pour commencer à créer l'application.

1. Choisir Fichier -> Nouveau Projet -> Application Java. Cliquez suivant.

2. Quand la fenêtre 'Nom et Emplacement' apparait, nommez votre projet FCKEditorEmailSender et décochez 'Créer Classe Main' et vous finissez par créer un projet vide.Cliquer 'Finir'.

3. Dans l'onglet Projets, faites un clic droit sur Bibliothèques et choisissez Ajouter une bibliothèque dans menu.
Ensuite, sélectionner la bibliothèque que vous avez ajoutée à partir du Gestionnaire de bibliothèques.

Vous devriez avoir maintenant Java Mail et les fichiers jar DJNativeSwing.

Votre projet doit maintenant ressembler à l'image ci-dessous :

Vue de l'arborescence

III. Créer le paquetage et les classes Java

Maintenant, nous allons coder un peu.

Allez sur le projet que vous avez créé et puis créez un package nommé EmailSender. Dans le paquet, créez une classe Java nommée EmailSender(même nom, ne vous inquiétez pas) à partir de la boîte de dialogue Nouveau fichier.

Dans la classe, créez des champs privés comme indiqué ci-dessous :

 
Sélectionnez
                    public class EmailSender {
                      private String smtpServer;
                      private String port;
                      private String user;
                      private String password;
                      private String auth;
                      private String from;

Créez un simple constructeur en pressant ALT + INSERT et sélectionnez tous les champs dans la fenêtre. Afin de permettre l'envoi d'emails par l'API JavaMail, vous devez créer un objet Properties où vous mettez toutes les informations nécessaires au sujet de la session SMTP, tels que le serveur, le port et l'utilisateur.

À la fin créez la méthode suivante :

 
Sélectionnez
                    private Properties prepareProperties()

Ensuite, lorsque vous préparez l'objet Properties, vous pouvez tout simplement mettre le modèle d'un message électronique.

Cette méthode renvoie un message MIME (qui signifie Multipurpose Internet Mail Extensions Message Class). Ensuite, créer cette méthode :

 
Sélectionnez
                    private MimeMessage prepareMessage(Session mailSession,String charset,
                    String from, String subject,
                    String HtmlMessage,String[] recipient)

La prochaine étape à propos de l'envoi d'emails via Internet implique la création d'une méthode pour envoyer des messages de contenu HTML. Créez cette méthode :

 
Sélectionnez
                    public void sendEmail(String subject,String HtmlMessage,String[] to)

La plupart des serveurs SMTP doivent authentifier les utilisateurs à distance qui tentent d'envoyer des emails.
Pour cette raison, nous devons créer une simple classe SMTPAuthenticator dans le paquet EmailSender.

Cette classe étend javax.mail.Authenticator et fournit une méthode comme suit :

 
Sélectionnez
                    protected PasswordAuthentication getPasswordAuthentication()

Maintenant nous ajoutons les implémentations des méthodes montrées ci-dessous :

 
Sélectionnez
                    private Properties prepareProperties()
                    {
                       Properties props = new Properties();
                       props.setProperty("mail.smtp.host", smtpServer);
                       props.setProperty("mail.smtp.port", port);
                       props.setProperty("mail.smtp.user", user);
                       props.setProperty("mail.smtp.password", password);
                       props.setProperty("mail.smtp.auth", auth);
                       return props;
                    }
                    
                    
                    private MimeMessage prepareMessage(Session mailSession,String charset,
                                                            String from, String subject,
                                                            String HtmlMessage,String[] recipient) {
                            //Multipurpose Internet Mail Extensions
                            MimeMessage message = null;
                            try {
                                message = new MimeMessage(mailSession);
                                message.setFrom(new InternetAddress(from));
                                message.setSubject(subject);
                                for (int i=0;i<recipient.length;i++)
                                    message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient[i]));
                                message.setContent(HtmlMessage, "text/html; charset=\""+charset+"\"");
                            } catch (Exception ex) {
                                Logger.getLogger(EmailSender.class.getName()).log(Level.SEVERE, null, ex);
                            }
                            return message;
                        }
                    
                    
                    public void sendEmail(String subject,String HtmlMessage,String[] to)
                        {
                            Transport transport = null;
                            try {
                                Properties props = prepareProperties();
                                Session mailSession = Session.getDefaultInstance(
                                                props, new SMTPAuthenticator(from, password, true));
                                transport =  mailSession.getTransport("smtp");
                                MimeMessage message = prepareMessage(mailSession, "ISO-8859-2",
                                                                    from, subject, HtmlMessage, to);
                                transport.connect();
                                Transport.send(message);
                            } catch (Exception ex) {    
                            }
                            finally{
                                try {
                                    transport.close();
                                } catch (MessagingException ex) {
                                    Logger.getLogger(EmailSender.class.getName()).
                                                                        log(Level.SEVERE, null, ex);
                                }
                            }
                        }
                    
                    
                    package EmailSender;
                     
                    import javax.mail.Authenticator;
                    import javax.mail.PasswordAuthentication;
                     
                    public class SMTPAuthenticator extends Authenticator{
                        private String username;
                        private String password;
                        private boolean needAuth;
                     
                        public SMTPAuthenticator(String username, String password,boolean needAuth)
                        {
                            this.username = username;
                            this.password = password;
                            this.needAuth = needAuth;
                        }
                     
                        @Override
                        protected PasswordAuthentication getPasswordAuthentication() {
                            if (needAuth)
                                return new PasswordAuthentication(username, password);
                                    else return null;
                        }
                    }

IV. Création d'un formulaire Swing pour fournir une belle interface graphique

Maintenant que nous avons fini le travail concernant l'email, nous allons nous concentrer sur Swing et l'intégration FCKEditor.

Vous devez cliquer sur le bouton droit sur le paquet EmailSender et choisissez 'Nouveau'->'JFrame Form', appelez cette classe SendEmail et mettez la classe dans le package EmailSender.

Maintenant faites un clic droit sur la vue du design de la JFrame et sélectionnez :
Choisir disposition -> Border Layout

Clic droit pour le menu contextuel des dispositions pour le Border Layout

Quand vous essayez de déplacer un JPanel depuis la Palette sur le design, vous verrez quelques bordures qui sont simplement des détenteurs de contenu du border layout.

Si vous souhaitez en connaitre davantage, lisez BorderLayout de la doc officielle Java.

Cliquez sur Panel dans la Palette et glissez-le comme dans l'image ci-dessous. Dans cet espace, vous allez placer des contrôles pour obtenir les valeurs SMTP.

Mise en place JPanel en haut
Configuration SMTP

Maintenant, cliquez droit sur le panneau ci-dessus et sélectionnez :

Mise en page Set -> Format Null.

Cela rendra vos contrôles non flottants quand l'utilisateur va redimensionner la fenêtre et d'autre part les contrôles seront dans la même position, car il a été créé en mode design.

Testez avec des présentations différentes lorsque vous exécutez votre application pour voir ce qui va arriver:)
Maintenant, vous aurez besoin pour créer des boutons pour interagir avec l'utilisateur. Mettez un nouveau JPanel au plus bas « Placer le support ».

mise en place JPanel en bas

Ajouter deux boutons :

mise-en-place-boutons

Et nous sommes proches de la fin du tutoriel. La dernière chose à faire est de mettre FCKEditor dans la méthode principale. Modifiez ainsi :

 
Sélectionnez
            public static void main(String[] args) 
            UIUtils.setPreferredLookAndFeel();
            NativeInterface.open();
            final String configurationScript =
              "FCKConfig.ToolbarSets[\"Default\"] = [\n" +
              "['Source','DocProps','-','Save','NewPage','Preview','-','Templates'],\n" +
              "['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'],\n" +
              "['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],\n" +
              "['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'],\n" +
              "'/',\n" +
              "['Style','FontFormat','FontName','FontSize'],\n" +
              "['TextColor','BGColor'],\n" +
              "'/',\n" +
              "['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'],\n" +
              "['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote'],\n" +
              "['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'],\n" +
              "['Link','Unlink','Anchor'],\n" +
              "['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak', '-', 'ShowBlocks'],\n" +
              "];\n" +
              "FCKConfig.ToolbarCanCollapse = false;\n";
                java.awt.EventQueue.invokeLater(new Runnable() {
                    public void run() {
                        htmlEditor = new JHTMLEditor(HTMLEditorImplementation.FCKEditor,
        JHTMLEditor.FCKEditorOptions.setCustomJavascriptConfiguration(configurationScript));
                        SendEmail es2 = new SendEmail();
                        es2.setSize(new Dimension(800,600));
                        es2.add(htmlEditor,BorderLayout.CENTER);
                        es2.setLocationByPlatform(true);
                        es2.setVisible(true);
                    }
                });
            }

Maintenant, lorsque vous remplacez la méthode principale accédez à la vue Design et double-cliquez sur les deux boutons pour générer actionPerformed.

Mettez ce code pour chaque bouton. Notez bien que j'ai utilisé le code ci-dessous pour fournir des nouveaux threads pour éviter bloc Graphical User Interface cours Envoyer un e-mail:

 
Sélectionnez
            Interface cours Envoyer un e-mail:
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
              public void run() {
            emailer.sendEmail(subject.getText(),
            htmlEditor.getHTMLContent(),
             recipientsString); 
             }
            });
             private void sendEmailActionPerformed(java.awt.event.ActionEvent evt) {                                          
                    // TODO add your handling code here:
                            StringTokenizer recepientsTokenizer = new StringTokenizer(to.getText(), ",");
                            final String[] recipientsString = new String[recepientsTokenizer.countTokens()];
                            for (int i = 0; i < recipientsString.length; i++) {
                                recipientsString[i] = recepientsTokenizer.nextToken();
                            }
                             final EmailSender emailer = new EmailSender(smtpServer.getText(),
                                    port.getText(), username.getText(),
                                    password.getPassword().toString(),
                                    "true", from.getText());
                          javax.swing.SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            emailer.sendEmail(subject.getText(),
                                    htmlEditor.getHTMLContent(),
                                    recipientsString);
                        }
                    });
            
                }       
            private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
              // TODO add your handling code here:
              dispose();
            }

Vous pouvez maintenant construire votre projet et le montrer à vos amis:)

Vous avez donc normalement quelque chose qui ressemble à ceci :

Résultat final

Ici, vous pouvez télécharger le projet NetBeans.

Tip

Lorsque vous téléchargez DJ Native vous pouvez double-cliquer sur le DJNativeSwing-SWTDemo.jar à regarder de plus près dans classesm différents impressionnants comme JWebBrowser JHtmlEditor avec HtmlEditors différents.

V. Remerciements

Cet article est une traduction de celui rédigé par Robert Piesnikowski dont vous pourrez trouver l'original ici. Je tiens à remercier Robert Piesnikowski pour les échanges que nous avons eus et son accord pour la traduction de son article.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   



Copyright © 2010 Mike Francois. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.