Código de Java - Enviar Correo Gmail con Java

Imágen de perfil

Enviar Correo Gmail con Javagráfica de visualizaciones


Java

estrellaestrellaestrellaestrellaestrella(1)
Actualizado el 09 de Mayo del 2017 por Yacoobs (Publicado el 08 de Mayo del 2017)
4.724 visualizaciones desde el 08 de Mayo del 2017. Una media de 77 por semana
Como el titulo dice... si es un programa para enviar correos Gmail, tanto mensajes de texto como archivo adjunto.

Hay que recalcar que para que el programa funcione es necesario de librerías exteriores Gmail

También hay que activar una opción ((Permitir el acceso de aplicaciones menos seguras: NO/Si))

Por ultimo hay que mencionar que el envio de archivos por medio de Gmail fue bloqueados por seguridad de tu cuenta por ese motivo el programa sufre de bloqueos al intentar enviar paquetes exe, zip... pero no es un problema de programa es gmail y sus sistemas de seguridad

Por último recuerden que el Frame está como AbsoluteLayout, tiene un LabelFondo (una imagen de fondo que le da un toque mas pro a la interface), la imagen esta contenida en un directorio llamado fondo " TODO ESTO ES IMPORTANTE PARA QUE EL PROGRAMA ARRANQUE"

Saludos y espero que aprendan Java

Requerimientos

Instalación de Java, Netbeans
Librería secundaria gmail

2
estrellaestrellaestrellaestrellaestrella(1)

Actualizado el 15 de Julio del 2017 (Publicado el 08 de Mayo del 2017)gráfica de visualizaciones de la versión: 2
4.725 visualizaciones desde el 08 de Mayo del 2017. Una media de 77 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
import java.io.File;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
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.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
 
// Programa echo por Yacoobs Cort. Mart. 5 de enero del 2017
 
// informacion:     http://panamahitek.com/javamail-enviar-correos-electronicos-desde-java
// Documentacion:   http://www.chuidiang.com/java/herramientas/javamail/enviar-correo-javamail.php
// Documentacion:   http://www.chuidiang.com/java/herramientas/javamail/enviar-adjuntos-javamail.php
// libreria:        https://drive.google.com/open?id=0BxexK3DwU8EyVGFSNl8wUXVKVWM
 
public class InterfaceGrafica extends javax.swing.JFrame {
 
 
    public InterfaceGrafica() {
 
        setTitle("Gmail V.0.2 Yacoobs Cort. Mart.");
 
        initComponents();
        setLocation(300, 300);
        jLabelTex5.setText("Ruta archivo: " + ruta);
        String direc="@gmail.com";
        jTextFieldCorreo.setText(emisor+direc);
        jTextFieldRecive.setText(receptor+direc);
        jTextFieldPass.setText(contrasena);
 
 
 
    }
 
    public class hilo implements Runnable{
 
        public void run() {
 
        //Con el metodo getText() obtenemos el contenido y lo vamos almacenado en dichas variables...    
        String texto = jTextAreaMensaje.getText();
        String correo = jTextFieldCorreo.getText();
        String pass = jTextFieldPass.getText();
        String rec = jTextFieldRecive.getText();
        String asu = jTextFieldAsunto.getText();
 
        //Evaluamos la condicion que el mensaje contenga una contraseña, un asunto y un mensaje...
        //Y que los correos sean validos....
        if (!texto.equals("") & !pass.equals("") & !asu.equals("") & !correo.equals("@gmail.com") &
                !rec.equals("@gmail.com")){
            System.out.println("Enviando..");
            Enviar(texto, correo,pass,rec ,asu );
        }
        else {
            JOptionPane.showMessageDialog(null, "Faltan datos por completar....");
            jButtonEnviar.setEnabled(true);
        }
 
        }
 
    }
 
    public void Enviar(String Texto,String Correo,String Password,
        String Recive,String Asunto) {
 
        time();
        enviando = true;
 
        //Properties es una clase de java estándar java.util.Properties. Esta clase admite que 
        //guardemos en ella parejas "clave-valor", es decir, guardamos datos -de tipo String- dándoles 
        //un nombre a cada uno para luego poder recuperarlos. Esto se hace por medio del método 
        //setProperty()...
        Properties props = new Properties();
 
        // Si requiere o no usuario y password para conectarse.
        props.setProperty("mail.smtp.auth", "true");
        // TLS si está disponible
        props.setProperty("mail.smtp.starttls.enable", "true");
        // Nombre del host de correo, es smtp.gmail.com
        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        // Puerto de gmail para envio de correos
        props.setProperty("mail.smtp.port", "587");
 
        //Con esto estamos en disposición de obtener nuestra instancia de Session.
        Session session = Session.getDefaultInstance(props, null);
 
 
        //Esta linea de aquí no es necesaria para que funcion el programa solamente muestra informacion
        //En consola de lo que esta sucediendo...
        //session.setDebug(true);
 
 
        //Instanciamos estas dos clases.....
        BodyPart adjunto = new MimeBodyPart();
        MimeMultipart multiParte = new MimeMultipart();
 
        //Evaluamos esta condicion para determinar si enviamos o no un paguete adjunto mas el mensaje....
        if (ruta==""){
            SoloMensaje=false;
        }else{
            SoloMensaje=true;
        }
 
        //Evaluamos la condicion en la que el mensaje este acompañado de un archivo.
        if (SoloMensaje){
 
            File archivo = new File(ruta);
            try {
 
                //Evaluamos que el archivo con la ruta exita realmente....
                if (archivo.exists()){
 
                    //Lo primero vamos a construir las dos partes del mensaje. El texto y la imagen. 
                    //Para ello, instanciamos dos clases MimeBodyPart y las rellenamos con los datos.
                    BodyPart texto = new MimeBodyPart();
                    //Empezamos con la de texto, que es más sencillo.
                    texto.setText(Texto);
 
                    //A este método hay que pasarle un DataHandler, que es una clase capaz de manejar los datos 
                    //que vayan en esta parte. Para instanciar ese DataHandler debemos darle una fuente de datos. 
                    //La fuente, puesto que tenemos la imagen en fichero, puede ser una clase FileDataSource, 
                    //capaz de leer un fichero con datos y saber de qué tipo es (imagen, audio, etc).
                    adjunto.setDataHandler(new DataHandler(new FileDataSource(ruta)));
                    adjunto.setFileName(archivo.getName());
 
 
                    // La clase MimeMultiPart no es más que una parte más de un correo, pero que está a su vez 
                    //compuesta de otras partes -el texto y la imagen en nuestro caso-. Podemos ir añadiendo 
                    //aquí todas las imagenes y otros ficheros que queramos.
                    multiParte.addBodyPart(texto);
                    multiParte.addBodyPart(adjunto);
 
                    System.out.println("Enviando paquete....");
 
                }
                else {
                    reset();
                    JOptionPane.showMessageDialog(this, "La ruta del paquete no existe o esta mal definida...");
 
                }
            } catch (MessagingException ex) {
                System.out.println("Error al enviar el archivo");
                reset();
                Logger.getLogger(InterfaceGrafica.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
 
        try {
 
            //Instanciamos la clase Message y le pasamos por objeto session...
            Message message = new MimeMessage(session);
            //Destinatario principal del mensaje
            message.setFrom(new InternetAddress(Correo));
            //Destinatario al que se envía copia del mensaje
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(Recive));
            //El contenido del asunto enviado.
            message.setSubject(Asunto);
            //El contenido del mensaje y el paquete enviado.
 
            //Creamos esta condicion para evaluar si al enviar el correo enviamos solo texto o texto mas paquete..
            if (SoloMensaje){
                message.setContent(multiParte);
            }else{
                message.setText(Texto);
            }
            //Para enviar el mensaje usamos la clase Transport, que se obtiene de Session. 
            //El método getTransport() requiere un parámetro String con el nombre del protocolo a usar. 
            //Como el de gmail es smtp, pues ponemos smtp.
            Transport t = session.getTransport("smtp");
            //Ahora debemos establecer la conexión, dando el nombre de usuario y password.
            t.connect(Correo,Password);
            //y ahora simplemente enviamos el mensaje
            t.sendMessage(message,message.getAllRecipients());
            //Con esto se envía el mensaje. Ahora solo queda cerrar la conexión
            t.close();
            ruta="";
 
            /*
            //Para enviar el mensaje usamos la clase Transport.
            Transport.send(message);
            */
 
 
            //Una ventana emergente confirmando que el mensaje fue enviado.
            reset();
            JOptionPane.showMessageDialog(this, "Su mensaje ha sido enviado");
 
 
        } catch (MessagingException | NullPointerException e) {
            reset();
            JOptionPane.showMessageDialog(this, "El mensaje no fue enviado, Contraseña, Paquete o Correo incorrecto...");
 
        }
}
 
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
 
        jButtonEnviar = new javax.swing.JButton();
        jButtonArchivo = new javax.swing.JButton();
        jButtonLimpiarPaquete = new javax.swing.JButton();
        jButtonLimpiarTodo = new javax.swing.JButton();
        jTextFieldCorreo = new javax.swing.JTextField();
        jTextFieldAsunto = new javax.swing.JTextField();
        jTextFieldRecive = new javax.swing.JTextField();
        jTextFieldPass = new javax.swing.JPasswordField();
        jLabelTex1 = new javax.swing.JLabel();
        jLabelTex2 = new javax.swing.JLabel();
        jLabelTex3 = new javax.swing.JLabel();
        jLabelTex4 = new javax.swing.JLabel();
        jLabelTex5 = new javax.swing.JLabel();
        jLabelTex6 = new javax.swing.JLabel();
        jLabel_Segundos = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextAreaMensaje = new javax.swing.JTextArea();
        jLabelfondotema = new javax.swing.JLabel();
 
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
 
        jButtonEnviar.setText("Enviar");
        jButtonEnviar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonEnviarActionPerformed(evt);
            }
        });
        getContentPane().add(jButtonEnviar, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 310, -1, -1));
 
        jButtonArchivo.setText("Archivo");
        jButtonArchivo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonArchivoActionPerformed(evt);
            }
        });
        getContentPane().add(jButtonArchivo, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 80, -1, -1));
 
        jButtonLimpiarPaquete.setText("Limpiar Paquete");
        jButtonLimpiarPaquete.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonLimpiarPaqueteActionPerformed(evt);
            }
        });
        getContentPane().add(jButtonLimpiarPaquete, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 120, -1, -1));
 
        jButtonLimpiarTodo.setText("Limpiar Todo");
        jButtonLimpiarTodo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonLimpiarTodoActionPerformed(evt);
            }
        });
        getContentPane().add(jButtonLimpiarTodo, new org.netbeans.lib.awtextra.AbsoluteConstraints(530, 310, -1, -1));
 
        jTextFieldCorreo.setText("@gmail.com");
        getContentPane().add(jTextFieldCorreo, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 20, 230, -1));
 
        jTextFieldAsunto.setText("Es un Asunto");
        getContentPane().add(jTextFieldAsunto, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 150, 250, -1));
 
        jTextFieldRecive.setText("@gmail.com");
        getContentPane().add(jTextFieldRecive, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 50, 230, 20));
 
        jTextFieldPass.setText("jPasswordField1");
        getContentPane().add(jTextFieldPass, new org.netbeans.lib.awtextra.AbsoluteConstraints(440, 20, 170, -1));
 
        jLabelTex1.setText("Correo:");
        getContentPane().add(jLabelTex1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 20, -1, -1));
 
        jLabelTex2.setText("Recive:");
        getContentPane().add(jLabelTex2, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 50, -1, -1));
 
        jLabelTex3.setText("Asunto:");
        getContentPane().add(jLabelTex3, new org.netbeans.lib.awtextra.AbsoluteConstraints(30, 150, -1, -1));
 
        jLabelTex4.setText("Contraseña:");
        getContentPane().add(jLabelTex4, new org.netbeans.lib.awtextra.AbsoluteConstraints(360, 20, -1, -1));
 
        jLabelTex5.setBackground(new java.awt.Color(255, 255, 255));
        jLabelTex5.setFont(new java.awt.Font("Tahoma", 1, 10)); // NOI18N
        jLabelTex5.setForeground(new java.awt.Color(153, 102, 255));
        jLabelTex5.setText("Ruta archivo:");
        getContentPane().add(jLabelTex5, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 80, -1, -1));
 
        jLabelTex6.setFont(new java.awt.Font("Tahoma", 1, 10)); // NOI18N
        jLabelTex6.setForeground(new java.awt.Color(153, 102, 255));
        jLabelTex6.setText("Peso archivo:");
        getContentPane().add(jLabelTex6, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 100, -1, -1));
 
        jLabel_Segundos.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel_Segundos.setText("0");
        getContentPane().add(jLabel_Segundos, new org.netbeans.lib.awtextra.AbsoluteConstraints(110, 310, 30, -1));
 
        jTextAreaMensaje.setColumns(20);
        jTextAreaMensaje.setRows(5);
        jTextAreaMensaje.setText("Esto es un mensaje de prueba....");
        jScrollPane1.setViewportView(jTextAreaMensaje);
 
        getContentPane().add(jScrollPane1, new org.netbeans.lib.awtextra.AbsoluteConstraints(20, 180, 600, 120));
 
        jLabelfondotema.setIcon(new javax.swing.ImageIcon(getClass().getResource("/fondo/Gmail.jpg"))); // NOI18N
        getContentPane().add(jLabelfondotema, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 650, 370));
 
        pack();
    }// </editor-fold>                        
 
    private void jButtonEnviarActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        //Creamos un hilo para poder utilizar el programa mientras este se envia el mensaje en 
        //segundo plano.
        jButtonEnviar.setEnabled(false);
        Runnable envia = new hilo();
        Thread t = new Thread(envia);
        t.start();
 
    }
 
    private void jButtonArchivoActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        abrirFile.setDialogTitle("Ruta Absoluta Busqueda..");
        abrirFile.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
 
        if (abrirFile.showOpenDialog(this)==0){
 
            File file = new File(abrirFile.getSelectedFile().toString());
            //Evaluamos la condicion de que el archivo exista....
            if (file.exists()){
                ruta=abrirFile.getSelectedFile().toString();
                jLabelTex5.setText("Ruta archivo: " + ruta);
                jLabelTex6.setText("Peso archivo: "+ file.length()+" bits...");
            }
        }
    }
 
    private void jButtonLimpiarPaqueteActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        ruta="";
        jLabelTex5.setText("Ruta archivo: " + ruta);
        jLabelTex6.setText("Peso archivo: ");
    }
 
    private void jButtonLimpiarTodoActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        ruta="";
        jTextAreaMensaje.setText("");
        jTextFieldAsunto.setText("");
        jTextFieldCorreo.setText("@gmail.com");
        jTextFieldPass.setText("");
        jTextFieldRecive.setText("@gmail.com");
        jLabelTex5.setText("Ruta archivo: " + ruta);
        jLabelTex6.setText("Peso archivo: ");
 
    }
 
    public void time(){
 
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
               segundos=0;
               jLabel_Segundos.setText(""+segundos);
                while (enviando) {
 
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException ex) {}
                    segundos++;
                    jLabel_Segundos.setText(""+segundos);
                }
 
            }
        });
        t.start();
 
    }
 
    public void reset(){
 
        jButtonEnviar.setEnabled(true);
        enviando=false;
 
    }
 
    public static void main(String args[]) {
 
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new InterfaceGrafica().setVisible(true);
            }
        });
    }
 
    //Variables importantes del programa...
    private String emisor="";
    private String receptor="";
    private String contrasena="";
 
    private final JFileChooser abrirFile  = new JFileChooser(new File(""));
    private boolean SoloMensaje = true;
    private boolean enviando = true;
    private String ruta = "";
    private int segundos =0;
 
 
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButtonArchivo;
    private javax.swing.JButton jButtonEnviar;
    private javax.swing.JButton jButtonLimpiarPaquete;
    private javax.swing.JButton jButtonLimpiarTodo;
    private javax.swing.JLabel jLabelTex1;
    private javax.swing.JLabel jLabelTex2;
    private javax.swing.JLabel jLabelTex3;
    private javax.swing.JLabel jLabelTex4;
    private javax.swing.JLabel jLabelTex5;
    private javax.swing.JLabel jLabelTex6;
    private javax.swing.JLabel jLabel_Segundos;
    private javax.swing.JLabel jLabelfondotema;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextAreaMensaje;
    private javax.swing.JTextField jTextFieldAsunto;
    private javax.swing.JTextField jTextFieldCorreo;
    private javax.swing.JPasswordField jTextFieldPass;
    private javax.swing.JTextField jTextFieldRecive;
    // End of variables declaration                   
}



Comentarios sobre la versión: 2 (1)

Imágen de perfil
Ing. Domenico
16 de Julio del 2017
estrellaestrellaestrellaestrellaestrella
No ha dejado ningún comentario
Responder

Comentar la versión: 2

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s3984  
Revisar política de publicidad