import java.awt.*; import java.awt.event.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import java.io.*; /** * Clase para implementar el dialogo de configuracion de correo */ public class Dialogo implements ActionListener { private JDialog dialogo; private JFrame owner; private JPanel panel; private JTextField smtp, user, mailAdd; private JLabel smtpL, userL, mailAddL, passL; private JCheckBox check; private JPasswordField pass; private JButton ok = new JButton("Aceptar"); private JButton cancel = new JButton("Cancelar"); private String mailMsg, filename; private SendMailUsingAuthentication smtpMailSender; private boolean rec; private final int width = 270; private final int height = 300; private final int size = 20; /** * Construye un Dialogo dependiente de un marco dado. * @param frame El marco del cual depende * @param sss El mensaje que se enviara * @param name El nombre de archivo para adjuntar */ public Dialogo(JFrame frame, String sss, String name) { owner = frame; mailMsg = sss; filename = name; rec = true; common(); smtp = new JTextField(size); user = new JTextField(size); pass = new JPasswordField(size); common2(); } /** * Construye un Dialogo dependiente de un marco dado. * @param frame El marco del cual depende * @param s Un arreglo con informacion acerca del servidor SMTP, * el username y la password. * @param sss El mensaje que se enviara * @param name El nombre de archivo para adjuntar */ public Dialogo(JFrame frame, String[] s, String sss, String name) { owner = frame; mailMsg = sss; filename = name; rec = true; common(); smtp = new JTextField(s[0], size); user = new JTextField(s[1], size); pass = new JPasswordField(s[2], size); common2(); } /** * Construye un Dialogo dependiente de un marco dado. * @param frame El marco del cual depende * @param sss El mensaje que se enviara */ public Dialogo(JFrame frame, String sss) { owner = frame; mailMsg = sss; rec = false; common(); smtp = new JTextField(size); user = new JTextField(size); pass = new JPasswordField(size); common2(); } /** * Construye un Dialogo dependiente de un marco dado. * @param frame El marco del cual depende * @param s Un arreglo con informacion acerca del servidor SMTP, * el username y la password. * @param sss El mensaje que se enviara */ public Dialogo(JFrame frame, String[] s, String sss) { owner = frame; mailMsg = sss; rec = false; common(); smtp = new JTextField(s[0], size); user = new JTextField(s[1], size); pass = new JPasswordField(s[2], size); common2(); } /** * Metodo interno para agrupar acciones de configuracion grafica comunes * a los 4 constructores */ protected void common() { dialogo = new JDialog(owner, "Configuracion de Correo", true); panel = new JPanel(); smtpL = new JLabel("Servidor SMTP"); userL = new JLabel("Nombre de Usuario"); passL = new JLabel("Password"); check = new JCheckBox("Recordar estos datos"); mailAddL = new JLabel("Direccion de E-mail"); mailAdd = new JTextField(size); } /** * Metodo interno para agrupar acciones de configuracion grafica comunes * a los 4 constructores */ protected void common2() { panel.add(smtpL); panel.add(smtp); panel.add(userL); panel.add(user); panel.add(passL); panel.add(pass); panel.add(check); panel.add(mailAddL); panel.add(mailAdd); panel.add(ok); panel.add(cancel); ok.addActionListener(this); cancel.addActionListener(this); dialogo.setSize(width, height); dialogo.setDefaultCloseOperation(dialogo.EXIT_ON_CLOSE); dialogo.getContentPane().add(panel); dialogo.setVisible(true); } /** * Atiende los eventos de botones Aceptar y Cancelar. Además, lee * el contenido del CheckBox para almacenar o no los datos de correo * @param e El ActionEvent asociado a los botones */ public void actionPerformed(ActionEvent e) { if (e.getSource() == ok) { if (check.isSelected()) { try { makeDataFile(); } catch (IOException et) { /*nada aun*/ } } String[] mailAddArray = {mailAdd.getText()}; if (rec) { smtpMailSender = new SendMailUsingAuthentication(smtp.getText(), user.getText(), new String(pass.getPassword()), mailMsg, mailAddArray, filename); } else { smtpMailSender = new SendMailUsingAuthentication(smtp.getText(), user.getText(), new String(pass.getPassword()), mailMsg, mailAddArray); } try { smtpMailSender.postMail(); } catch (MessagingException et) { /*System.err.println("Info: "+et.getNextException().getMessage());*/ } dialogo.dispose(); } if (e.getSource() == cancel) { dialogo.dispose(); } } /** * Genera un archivo de datos de configuracion de correo * cuando el usuario lo escoge. Serializa los campos de texto * y el PasswordField */ protected void makeDataFile() throws IOException { File saveDataFile = new File("mailConfig.cfg"); FileOutputStream fstream = new FileOutputStream(saveDataFile); ObjectOutputStream oosout = new ObjectOutputStream(fstream); oosout.writeObject(smtp.getText()); oosout.writeObject(user.getText()); oosout.writeObject(pass.getPassword()); oosout.close(); } }