import java.io.*;
import java.util.*;
import org.apache.commons.net.*;
import org.apache.commons.net.io.*;
import org.apache.commons.net.smtp.*;
import java.security.*;
import javax.net.ssl.*;


/************************************************************************
 * Ejemplo de uso de SMTP para mandar un mensaje a varios destinatarios
 * EL texto del mensaje lo saca de un fichero txt
*************************************************************************/

class SMTPMail{
    public static void main(String[] args){
        Scanner teclado=new Scanner(System.in);
        String sender, recipient, subject, mensaje, cc;
        List<String> ccList = new ArrayList<String>();
        BufferedReader stdin;
        FileReader fileReader = null;
        Writer writer;
        SimpleSMTPHeader header = null;

        String server = "smtp.gmail.com";
        String username="XX@gmail.com";
        String password="YYYY";
        int puerto=587;
        

        try {
            // Conectando con el servidor SMTP seguro con clave
            AuthenticatingSMTPClient client=new AuthenticatingSMTPClient();
            client.connect(server,puerto);
            KeyManagerFactory kmf=KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            kmf.init(null,null);
            KeyManager km=kmf.getKeyManagers()[0];
            client.setKeyManager(km);
            if (!SMTPReply.isPositiveCompletion(client.getReplyCode())) {
                client.disconnect();
                System.err.println("El servidor SMTP ha rechazado la conexion.");
                System.exit(1);
            }

            // Identificandonos en el servidor
            client.ehlo(server);
            client.execTLS();
            client.auth(AuthenticatingSMTPClient.AUTH_METHOD.PLAIN,username,password);
            
            // Pedimos los datos del mensaje
            sender = "jestepa64@gmail.com";
            recipient = "jmestepa@educa.jcyl.es";
            subject = "Prueba de super mail";
            
            // Cabecera del mensaje
            header = new SimpleSMTPHeader(sender, recipient, subject); 
            client.setSender(sender);
            client.addRecipient(recipient);
            
            // Se pueden añadir muchos cc (meter en un bucle)
            cc = "ninesramosvela@hotmail.com";
            header.addCC(cc);
            client.addRecipient(cc);
            
            // Fichero que contiene texto del mensaje
            mensaje = "adjunto.txt";
            fileReader = new FileReader(mensaje);

            // Enviando        
            writer = client.sendMessageData();
            writer.write(header.toString());
            Util.copyReader(fileReader, writer);
            writer.close();
            client.completePendingCommand();
            fileReader.close();

            // Despidiendo el cotarro
            client.logout();
            client.disconnect();
        }
        catch (Exception e){
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }
}


