La aplicación ya compilada y ejecutada, nos permite iniciar la sesión después podemos poner el asunto, el correo al que va dirigido es posible también mandar un archivo adjunto y el texto.
Para esta aplicación utilice 3 API's de Java, mismos que dejare en un link:
API's : JAR
Para agregar estas librerías a mi proyecto utilice netBeans, para aquellos que no sepan como se añaden al proyecto, les dejo un post donde pueden ver como podrían agregarlas:
Link: Crear PDF, API (iText)
Agradecimientos especiales a Fernando Gonzalez Camacho quien fue de vital importancia para hacer esto posible.
Ahora les muestro una vista previa de como se vería la salida del programa al ejecutarlo:
Para finalizar les dejo el código fuente (Tres archivos) del programa y las imágenes que utilice:
Esta es la clase donde se aplica la interfaz gráfica:
Después hacemos la clase donde utilizamos las API's que añadimos al proyecto:import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class Mail extends JFrame implements FocusListener, MouseListener{ public String user,pass; private JPanel panel = new JPanel(); private JPanel panelFondo = new JPanel(); private JPanel panelEnviarSalir = new JPanel(); private JMenuBar barra = new JMenuBar(); private JMenu menuArchivo = new JMenu("Archivo"); private JMenuItem itemEnviar = new JMenuItem("enviar"); private JMenuItem itemSalir = new JMenuItem("Salir"); private JTextArea areaTexto = new JTextArea("Agregar Mensaje..."); private JLabel lblAsunto = new JLabel("Asunto: "); private JTextField txtAsunto = new JTextField(); private JLabel lblCorreo = new JLabel("Correo: "); private JTextField txtCorreo = new JTextField(); private JLabel lblAdjuntar = new JLabel(); private JButton botonEnviar = new JButton("Enviar"); private JButton botonSalir = new JButton("Salir"); private Correo correo; public File selectedFile; IniciarSesion sesion = new IniciarSesion(); public Mail(){ initComponents(); setIconImage(getIconImage()); setTitle("NIMADRES-MAIL"); setBounds(300,150,500,500); setVisible(false); setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(true); } @Override public final Image getIconImage() { Image iconoVentana = Toolkit.getDefaultToolkit(). getImage(ClassLoader.getSystemResource("icono.png")); return iconoVentana; } public final void initComponents(){ panelFondo.setLayout(new BorderLayout()); panel.setLayout(new GridLayout(5, 3)); panel.setBackground(Color.black); itemEnviar.setBackground(Color.black); itemEnviar.setForeground(Color.red); itemSalir.setForeground(Color.red); itemSalir.setBackground(Color.black); menuArchivo.setBackground(Color.BLACK); menuArchivo.setForeground(Color.red); barra.setBackground(Color.black); menuArchivo.add(itemEnviar); menuArchivo.add(itemSalir); barra.add(menuArchivo); lblAsunto.setBackground(Color.black); lblAsunto.setForeground(Color.red); lblAsunto.setFont(new Font("consolas",1,20)); txtAsunto.setBackground(Color.black); txtAsunto.setForeground(Color.white); lblCorreo.setBackground(Color.black); lblCorreo.setForeground(Color.red); lblCorreo.setFont(new Font("conoslas",1,20)); txtCorreo.setBackground(Color.black); txtCorreo.setForeground(Color.white); lblAdjuntar.setIcon(new ImageIcon(getClass() .getResource("adjuntar.png"))); lblAdjuntar.setCursor(new Cursor(HAND_CURSOR)); areaTexto.setForeground(Color.white); areaTexto.setBackground(Color.black); areaTexto.setFont(new Font("Consolas",1,15)); areaTexto.setLineWrap(true); areaTexto.setWrapStyleWord(true); panel.add(lblAsunto); panel.add(txtAsunto); panel.add(lblCorreo); panel.add(txtCorreo); panel.add(lblAdjuntar); add(barra, BorderLayout.NORTH); panelFondo.add(panel,BorderLayout.NORTH); panelFondo.add(new JScrollPane(areaTexto),BorderLayout.CENTER); add(panelFondo); panelEnviarSalir.setLayout(new FlowLayout()); botonEnviar.setBackground(Color.BLACK); botonEnviar.setForeground(Color.red); botonSalir.setBackground(Color.BLACK); botonSalir.setForeground(Color.red); panelEnviarSalir.add(botonEnviar); panelEnviarSalir.add(botonSalir); panelEnviarSalir.setBackground(Color.black); add(panelEnviarSalir,BorderLayout.SOUTH); botonEnviar.addActionListener(sesion); botonSalir.addActionListener(sesion); itemSalir.addActionListener(sesion); itemEnviar.addActionListener(sesion); areaTexto.addFocusListener(this); areaTexto.setForeground(Color.LIGHT_GRAY); lblAdjuntar.addMouseListener(this); } public void Inicio(final String user, final String pass) throws Exception{ correo = new Correo(); setVisible(true); } @Override public void focusGained(FocusEvent arg0) { if(areaTexto.getText().equalsIgnoreCase("Agregar Mensaje...")) { areaTexto.setText(""); areaTexto.setForeground(Color.white); } } @Override public void focusLost(FocusEvent fe) { if(areaTexto.getText().equalsIgnoreCase("")) { areaTexto.setText("Agregar Mensaje..."); areaTexto.setForeground(Color.LIGHT_GRAY); } } @Override public void mouseClicked(MouseEvent me) { if(me.getSource().equals(lblAdjuntar)){ JFileChooser fileChooser = new JFileChooser(); int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { selectedFile = fileChooser.getSelectedFile(); } } } @Override public void mousePressed(MouseEvent me) {} @Override public void mouseReleased(MouseEvent me) {} @Override public void mouseEntered(MouseEvent me) {} @Override public void mouseExited(MouseEvent me) {} class IniciarSesion extends JDialog implements ActionListener,FocusListener{ private JTextField usuario = new JTextField("ejemplo@algo.com..."); private JPasswordField password = new JPasswordField(); private JLabel lblusuario = new JLabel("Correo"); private JLabel lblpassword = new JLabel("Password"); private JPanel panel = new JPanel(); private JButton iniciar = new JButton("Iniciar"); private JButton cancelar = new JButton("Cancelar"); public IniciarSesion(){ initComponents(); setIconImage(getIconImage()); setTitle("NIMADRES"); this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); setBounds(500, 250, 350, 250); setVisible(true); } public final void initComponents(){ panel.setLayout(null); panel.setBackground(Color.black); lblusuario.setText("Correo:"); lblusuario.setForeground(Color.red); lblusuario.setBounds(75, 10, 100, 20); lblusuario.setFont(new Font("consolas", 1, 20)); usuario.setBounds(75, 30, 200, 30); usuario.setFont(new Font("consolas", 1, 12)); usuario.setBackground(Color.black); usuario.setForeground(Color.white); lblpassword.setText("Contraseña"); lblpassword.setBounds(75, 75, 150, 30); lblpassword.setFont(new Font("consolas", 1, 20)); lblpassword.setForeground(Color.red); password.setBounds(75, 100, 200, 30); password.setFont(new Font("consolas", 1, 12)); password.setBackground(Color.black); password.setForeground(Color.white); iniciar.setBounds(65, 150, 100, 30); iniciar.setForeground(Color.red); iniciar.setBackground(Color.black); cancelar.setBounds(200, 150, 100, 30); cancelar.setForeground(Color.red); cancelar.setBackground(Color.black); panel.add(lblusuario); panel.add(usuario); panel.add(lblpassword); panel.add(password); panel.add(iniciar); panel.add(cancelar); add(panel); iniciar.addActionListener(this); cancelar.addActionListener(this); usuario.addFocusListener(this); usuario.setForeground(Color.LIGHT_GRAY); } @Override public void actionPerformed(ActionEvent e) { //Iniciar Sesion if(e.getSource().equals(iniciar)){ user = usuario.getText(); pass = password.getText(); if(Validation(user)){ setVisible(false); usuario.setText(""); password.setText(""); try { Inicio(user, pass); } catch (Exception ex) { Logger.getLogger(Mail.class.getName()) .log(Level.SEVERE, null, ex); } } else JOptionPane.showMessageDialog(this, "la cuenta no es valida","FATAL ERROR", JOptionPane.ERROR_MESSAGE); } if(e.getSource().equals(cancelar) || e.getSource().equals(itemSalir) || e.getSource().equals(botonSalir)){ System.exit(0); } if(e.getSource().equals(itemEnviar) || e.getSource().equals(botonEnviar)){ try { if(correo.enviaCfd(user, pass,txtCorreo.getText(), txtAsunto.getText(),areaTexto.getText(),selectedFile)){ txtCorreo.setText(""); txtAsunto.setText(""); areaTexto.setText(""); selectedFile = null; } } catch (Exception ex) { Logger.getLogger(Mail.class.getName()) .log(Level.SEVERE, null, ex); } } } @Override public void focusGained(FocusEvent arg0) { if(usuario.getText().equalsIgnoreCase("ejemplo@algo.com...")) { usuario.setText(""); usuario.setForeground(Color.white); } } @Override public void focusLost(FocusEvent fe) { if(usuario.getText().equalsIgnoreCase("")) { usuario.setText("ejemplo@algo.com..."); usuario.setForeground(Color.LIGHT_GRAY); } } public boolean Validation(String _Mail){ Pattern p = Pattern.compile("^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-z]{2,4})$"); Matcher m = p.matcher(_Mail); if(m.matches()){ return true; } return false; } } }
import java.io.File; import java.io.IOException; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; 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; import javax.swing.JOptionPane; public class Correo { private static final String PROTOCOL = "smtp"; private static final String SMTP_SERVER_LIVE = "smtp.live.com"; //private static final String SMTP_PORT_LIVE = "25"; private static final String SMTP_SERVER_GMAIL = "smtp.gmail.com"; private static final String SMTP_PORT_GMAIL = "587"; //private static final String SMTP_SERVER_HOTMAIL = "msn.hotmail.com"; private Properties props = new Properties(); public boolean enviaCfd(final String USERNAME, final String PASSWORD,final String destino, final String asunto,final String texto, File archivo){ try{ Multipart multipart = new MimeMultipart(); MimeBodyPart attachmentPart = null; if (archivo != null) { BodyPart _texto = new MimeBodyPart(); _texto.setText(texto); attachmentPart = new MimeBodyPart(); FileDataSource fileDataSource = new FileDataSource(archivo); attachmentPart.setDataHandler(new DataHandler(fileDataSource)); attachmentPart.setFileName(texto); attachmentPart.attachFile(archivo); multipart.addBodyPart(attachmentPart); multipart.addBodyPart(_texto); } // Propiedades de la conexión String cuenta[] = USERNAME.split("@"); SMTP_SERVER(USERNAME,cuenta[1]); // Preparamos la sesion Session session = Session.getDefaultInstance(props); // Construimos el mensaje MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(destino)); message.addRecipient(Message. RecipientType.TO,new InternetAddress(destino)); message.setSubject(asunto); message.setText(texto); if(archivo != null){ message.setContent(multipart); } // Lo enviamos. Transport t = session.getTransport(PROTOCOL); t.connect(USERNAME, PASSWORD); t.sendMessage(message, message.getAllRecipients()); // Cierre. t.close(); JOptionPane.showMessageDialog(null ,"Mensaje Enviado" ,"NIMADRES" ,JOptionPane.INFORMATION_MESSAGE); return true; } catch (MessagingException | IOException e){ JOptionPane.showMessageDialog(null ,"No se pudo enviar mensaje, intentelo mas tarde" ,"Fatal Error" ,JOptionPane.ERROR_MESSAGE); return false; } } public void SMTP_SERVER(final String user,final String cuenta){ switch(cuenta){ case "gmail.com" : props.setProperty("mail.smtp.host", SMTP_SERVER_GMAIL); props.setProperty("mail.smtp.port", SMTP_PORT_GMAIL); break; case "hotmail.com" : case "live.com.mx" : props.setProperty("mail.smtp.host", SMTP_SERVER_LIVE); props.setProperty("mail.smtp.port", SMTP_PORT_GMAIL); break; } props.setProperty("mail.smtp.starttls.enable", "true"); props.setProperty("mail.smtp.user", user); props.setProperty("mail.smtp.auth", "true"); } }
Al final Solo agregamos la clase Main para terminar el programa:
public class Main { public static void main(String[] args) { Mail m = new Mail(); } }
Estas son las imágenes que utilice en el programa:
No hay comentarios:
Publicar un comentario