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
}