Para poder crear un archivo pdf sencillo desde el codigo de JAVA vamos a usar la libreria iTextPDF, simplemente agregando el nuevo jar a nuestro proyecto o dejandoselo en manos de un gestor de dependencias como maven, que ademas te da la opcion de descargarlo manualmente para un proyecto pequeño.
Para hacer nuestro 'Hola mundo' solamente se requieren 6 pasos:
Creamos virtualmente el documento que vamos a trabajar, a través de la clase Document propia de iTextPDF:
Document documento = new Document();
Creamos un FileOutputStream pasando como parametro un String que será el path donde se va a generar el PDF. Esto puede traer aparejado algunos pequeños problemas, como que la ruta no exista, que no contemos con permisos para escribir, etc De encontrarse el archivo, se sobreescribe:
FileOutputStream fos = new FileOutputStream();
Nuestro próximo paso es llamar al escritor de PDF de itextPDF(PdfWriter) a tráves de su método estático pasandole el documento y un OutputStream como parámetro y tmb indicandole el nivel de espacio entre líneas que va a acontener el documento como un Integer:
Ahora estamos listos para 'abrir' nuestro documento, que virtualmente ya tiene forma, y comenzar a introducir contenido en él:
documento.open();
Para introducir texto como el 'hola mundo', vamos a de crear un objeto Paragraph, propio de iTextPDF, inicializandolo con el String que vayamos a introducir como parámetro del constructor:
Paragraph paragraph = new Paragraph("Hola PDF"); documento.add(paragraph );
Para poder leer correos de nuestro mail como cualquier servicio de web mail pero en hecho en java vamos a necesitar importar la dependencia de Java Mail, crear un conjunto de propiedades, crear la sesion, y ahora contamos con los objetos Store y Folder, ademas de la clase Message para cada email.
Crear un conjunto de propiedades, a las cuales hay que setearle las propiedades:
Creamos una sesion, con las properties recién definidas:
Session sesion = Session.getInstance(prop);
Pasamos a crear los objetos, Store y Folder. Store vendria a ser como la cuenta de mail que guarda los diversos correos, Folder la carpeta donde se guardan estos(EJ: recibidos, enviados, spam, etc)
Store store;
Folder folder;
Inicializamos estos objetos dentro de un try-catch, pidiéndole a la Session que obtenga el 'almacen' y lo conecte, pasando el host, usuario y contraseña.
Luego a este 'almacen' le pedimos que obtenga la carpeta y la abra con una propiedad de READ_ONLY para no marcar los correos como leido. Caso contrario usamos READ_WRITE:
Realizamos una pequeña comprobación con un if, ya que vamos a pedirle al Folder que nos obtenga el 'tipo', que es un número y solo nos interesa que sea el '3' (Ya que tambien existe un tipo '2' que no contiene 'folders' válidos).
Con la pequeña particularidad que al objeto MimeMessage no le setearemos un String (con el contenido del mensaje) sino en su lugar un objeto MimeMultipart, a las cuales habrá que agregarles otros objetos MimeBodyPart que representan el texto (contenido del mensaje) por un lado y el archivo adjunto por otro.
El procedimiento es idéntico al envio de un mail normal hasta setearle al MimeMessage el mensaje, en lugar de usar el metodo setText(String) usaremos este otro setContent(MultiPart)
setDebug(true) es una buena opción para mirar en la consola o en los archivos de logeos que es lo que va haciendo la sesión para construir e enviar el mensaje.
El objeto misPropiedades deberemos crearlo con las propiedades del servidor de correo electronico, para el caso de 'gmail':
Properties misPropiedades = new Properties();
// NOMBRE DEL HOST DEL CORREO, es smtp.gmail.com misPropiedades.setProperty(mail.smtp.host", "smtp.gmail.com");
// TLS SI ESTA DISPONIBLE misPropiedades.setProperty("mail.smtp.starttls.enable", "true");
// NUMERO DE PUERTO SMTP misPropiedades.setProperty("mail.smtp.port", "587");
// NUESTRO CORREO ELECTRONICO misPropiedades.setProperty("mail.smtp.user", "dar10comyr@gmail.com");
// AUTENTICACION PARA CONECTARSE, USUARIO Y CONTRASEÑA misPropiedades.setProperty("mail.smtp.auth", "true");
Para otros servidores de correos electronicos las propiedades prodrian ser:
YAHOO MAIL
OUTLOOK
mail.smtp.host
smtp.mail.yahoo.com
smtp-mail.outlook.com
mail.smtp.starttls.enable
Si(Si está disponible.)
Si
mail.smtp.port
465 o 587
587 (También se puede usar el puerto 25 como alternativa)
constructor por defecto. Se crea un objeto MimeMessage vacío. El campo 'headers' se establece en un objeto InternetHeader vacío. El campo 'flag' se establece en un objeto Flags vacío. La bandera modified se establece en true.
Parámetros:
La session creada recientemente
Devuelve:
Una instancia de la clase MimeMessage para setear.
MimeMessage message = new MimeMessage(session);
3- Seteamos las opciones de envio
A este objeto hay que setearle los datos basicos para enviar un correo electronico, de la misma forma que otros clientes de correos electronicos ofrecen con una interfaz visual:
En nuestro codigo simplemente podriamos poner:
1
2
3
4
5
6
7
8
9
10
11
12
try{
message.setFrom(new InternetAddress("dar10comyr@gmail.com"));
message.addRecipient(Message.RecipientType.TO,new InternetAddress("Destinatario@ejemplo.com"));
message.addRecipient(Message.RecipientType.CC,new InternetAddress("CarbonCopy@ejemplo.com"));
message.addRecipient(Message.RecipientType.BCC,new InternetAddress("BlindCarbonCopy@ejemplo.com"));
message.setSubject("Hola");
message.setText("Correo enviado con Java Mail =)");}catch(AddressException e){
e.printStackTrace();}catch(MessagingException e){
e.printStackTrace();}
4- Crear objeto Transport
Para crear nuestro boton de 'enviar', le pedimos a la session que hemos creado que obtenga el transporte pasando por parámetro un string identificando 'Simple Mail Transfer Protocol'
1
2
3
4
5
6
7
8
9
10
try{
Transport t = session.getTransport("smtp");
t.connect("dar10comyr@gmail.com","lacontraseñadelmail");
t.sendMessage(message, message.getAllRecipients());
t.close();}catch(NoSuchProviderException e){
e.printStackTrace();}catch(MessagingException e){
e.printStackTrace();}
Con el metodo connect identificamos quienes somos(correo y pass)
El metodo snedMessage hará la magia de enviar nuestro correo usando la libreria de JavaMail
No olvidemos cerrar la conexión con el método close