Exportando relatório criado com Ireport em java + jsf

Olá a todos!

Bom este é um post destinado a quem já trabalha com Ireport, pois será somente exibido como exportar esses relatórios para pdf com java e jsf.

Posteriormente será criando post com um passo a passo de como se construir um relatório completo usando Ireport.

O código abaixo é usado para realizar a exportação:


import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

	public void executeReport() {
		FacesContext facesContext = FacesContext.getCurrentInstance();

		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();

		InputStream reportStream = facesContext.getExternalContext().getResourceAsStream("caminho_arquivo.jasper");

		response.setContentType("application/pdf");

		response.setHeader("Content-disposition", "inline;filename=relatorio.pdf");

		try {
			ServletOutputStream servletOutputStream = response.getOutputStream();

			JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(arrayList);

			JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameters, datasource);

			servletOutputStream.flush();
			servletOutputStream.close();
		} catch (JRException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			facesContext.responseComplete();
		}
	}

É bom lembrar que na sua pagina.xhtml é preciso usar um link, pois se usado botões para chamar este método o resultado não será o esperado.

Abaixo segue um exemplo de como esse método deve ser chamado:


<h:commandLink id="exportReport" immediate="true" action="#{bean.executeReport()}" value="#{messages['report.export']}"/>

Espero que ajude.

Até mais…

Anúncios

Trabalhando com datas utilizando a API JodaTime – Parte 1

Olá a todos!

Trabalhar com datas parece ser um pouco complicado, realizar cálculos de diferenças, trabalhar com minutos, segundos e até milissegundos.

Para isso temos as classes java.util.Date e java.util.Calendar, mas agora existem um nova API JodaTime.

Bom, neste primeiro será mostrado que com o uso desta API é possível deixar seu código mais limpo efetuando cálculos com datas.

Abaixo segue um exemplo:


import java.util.Calendar;
import java.util.Date;

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Duration;
import org.joda.time.Hours;
import org.joda.time.Months;
import org.joda.time.Years;

public class JodaTimeExample {

	public static void main(String[] args) {
		
		Calendar calendarInitial = Calendar.getInstance();
		calendarInitial.set(Calendar.HOUR_OF_DAY, 1);
		calendarInitial.set(Calendar.MINUTE, 0);
		calendarInitial.set(Calendar.SECOND, 0);
		calendarInitial.set(Calendar.MILLISECOND, 0);
		
		Calendar calendarFinish = Calendar.getInstance();
		calendarFinish.add(Calendar.DAY_OF_MONTH, 37);
		calendarFinish.set(Calendar.HOUR_OF_DAY, 15);
		calendarFinish.set(Calendar.MINUTE, 0);
		calendarFinish.set(Calendar.SECOND, 0);
		calendarFinish.set(Calendar.MILLISECOND, 0);
		
		Date dateInitial = calendarInitial.getTime();
		Date dateFinish = calendarFinish.getTime();
		
		//--Exemplos que podem ajudar a deixar o código mais orgainzado
		
		System.out.println("\n");
		
		System.out.println(Duration.standardDays(1).getMillis() + " milliseconds.");
		System.out.println(Duration.standardDays(1).getStandardHours() + " hours.");
		System.out.println(Duration.standardDays(1).getStandardMinutes() + " minutes.");
		System.out.println(Duration.standardDays(1).getStandardSeconds() + " seconds.");

		System.out.println("\n");
		
		System.out.println(Duration.standardHours(48).getMillis() + " milliseconds.");
		System.out.println(Duration.standardHours(48).getStandardDays() + " days.");
		System.out.println(Duration.standardHours(48).getStandardMinutes() + " minutes.");
		System.out.println(Duration.standardHours(48).getStandardSeconds() + " seconds.");

		System.out.println("\n");
		
		System.out.println(Duration.standardMinutes(2880).getMillis() + " milliseconds.");
		System.out.println(Duration.standardMinutes(2880).getStandardDays() + " days.");
		System.out.println(Duration.standardMinutes(2880).getStandardHours() + " hours.");
		System.out.println(Duration.standardMinutes(2880).getStandardSeconds() + " seconds.");
		
		System.out.println("\n");

		System.out.println(Duration.standardSeconds(360000).getMillis() + " milliseconds.");
		System.out.println(Duration.standardSeconds(360000).getStandardDays() +" days.");
		System.out.println(Duration.standardSeconds(360000).getStandardHours() + " hours.");
		System.out.println(Duration.standardSeconds(360000).getStandardMinutes() + " minutes.");

		System.out.println("\n");

		//--Exemplos que podem ajudar a calcular diferenças entre datas
		
		System.out.println(Hours.hoursBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getHours() + " hours.");
		System.out.println(Days.daysBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getDays() + " days."); 
		System.out.println(Months.monthsBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getMonths() + " months.");
		System.out.println(Years.yearsBetween(new DateTime(dateInitial), new DateTime(dateFinish)).getYears() + " years.");
		
		System.out.println("\n");
		
	}
	
}

No próximo post será mostrado mais sobre essa API e sobre a persistências dessas datas na sua base de dados.

Até mais…

Criptografando senhas usando MD5 em Java

Olá a todos!

Quando se trabalha com sistemas com múltiplos usuários é interessante criptografar as senhas do usuários para uma maior confiabilidade e descrição dessas senhas, para isso uma boa opção é o MD5.

Uma senha criptografada com MD5 não pode ser novamente transformada no texto de origem, portanto a comparação deve ser feita por duas strings criptografadas.

Abaixo segue uma classe que vai ajudar na criação de MD5.


import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class ConvertPasswordToMD5 {

	public static String convertPasswordToMD5(String password) throws NoSuchAlgorithmException {
		MessageDigest md = MessageDigest.getInstance("MD5");

		BigInteger hash = new BigInteger(1, md.digest(password.getBytes()));

		return String.format("%32x";, hash);
	}

}

Bom, abaixo segue o código de teste desta classe que criptografa as senhas em MD5.


import java.security.NoSuchAlgorithmException;

public class Test {

	public static void main(String[] args) {
		String password1 = "Senha1";
		String password2 = "Senha2";

		try {
			String password1MD5 = ConvertPasswordToMD5.convertPasswordToMD5(password1);
			String password2MD5 = ConvertPasswordToMD5.convertPasswordToMD5(password2);

			String passwordCompareMD5 = ConvertPasswordToMD5.convertPasswordToMD5(password1);

			System.out.println("Password1: " + password1MD5);
			System.out.println("Password2: " + password2MD5);

			System.out.println("passwordCompareMD5: " + passwordCompareMD5);

			if (password1MD5.equals(passwordCompareMD5)) {
				System.out.println("Compare OK");
			} else {
				System.out.println("Compare NOK");
			}

			if (password2MD5.equals(passwordCompareMD5)) {
				System.out.println("Compare OK");
			} else {
				System.out.println("Compare NOK");
			}
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
	}
}

As saídas deste teste são:

Password1: be6b9084a5dcdb09af8f433557a2119c
Password2: 14621de3463eb7e1b3606d5514bbf800
passwordCompareMD5: be6b9084a5dcdb09af8f433557a2119c
Compare OK
Compare NOK

Em outro post será abordada a criptografia feita com RSA, onde é possível criptografar e descriptografar.

Até mais.

Convertendo objetos em array de bytes

Olá a todos!

Se você precisa converter seu objeto Java em array de bytes ou vice versa, abaixo segue uma classe que vai ajudar.


package com.danilo.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ConvertObjectToByteArray {
	
	/**
	 * Converte um Objeto para um array de bytes
	 * @param object
	 * @return byte[]
	 */
	public static byte[] convertObjectToByteArray(Object object) {
		byte[] bytes = null;
		try {
			ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
			ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
			objectOutputStream.writeObject(object);
			objectOutputStream.flush();
			objectOutputStream.close();
			byteArrayOutputStream.close();
			bytes = byteArrayOutputStream.toByteArray();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return bytes;
	}

	/**
	 * Converte um array de bytes para um objeto
	 * @param bytes
	 * @return object
	 */
	public static Object convertByteArrayToObject(byte[] bytes) {
		Object object = null;

		try {
			ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
			ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
			object = objectInputStream.readObject();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		return object;
	}
	
}


Até mais…

Enviando email utlizando a API Apache Commons

Olá a todos!

Abaixo segue o código para envio de emails usando a API Apache Commons.

Antes de iniciar, faça o download da API em http://commons.apache.org/proper/commons-email/download_email.cgi e coloque no seu projeto.

Para um código mais limpo e utilizando o recurso de orientação a objetos vamos dividir o envio de emails em duas classes, sendo uma para armazenar as informações e outra para realizar o envio.

Assim teremos as classes:

  • MailInformation.java – Responsável por armazenar todas as informações necessárias para o envio.
  • ApacheMailSender.java – Responsável por realizar o envio dos emails.

Abaixo a classe MailInformation.java:


package br.com.danilo.email;

import java.util.List;
import java.util.Map;

public class MailInformation {

     public static final String TYPE_TEXT_PLAIN = &quot;text/plain&quot;;
     public static final String TYPE_TEXT_HTML = &quot;text/html&quot;;

     private String smtpHostMail = null;
     private String smtpPortMail = null;
     private String smtpAuth = null;
     private String smtpStarttls = null;
     private String fromNameMail = null;
     private String userMail = null;
     private String passMail = null;
     private String subjectMail = null;
     private String bodyMail = null;
     private Map&lt;String, String&gt; toMailUsers = null;
     private List fileMails = null;
     private String chartSetMail = null;
     private String typeTextMail = null;

     public String getSmtpHostMail() {
         return smtpHostMail;
     }

     public void setSmtpHostMail(String smtpHostMail) {
         this.smtpHostMail = smtpHostMail;
     }

     public String getSmtpPortMail() {
         return smtpPortMail;
     }

    public void setSmtpPortMail(String smtpPortMail) {
        this.smtpPortMail = smtpPortMail;
    }

    public String getSmtpAuth() {
        return smtpAuth;
     }

     public void setSmtpAuth(String smtpAuth) {
         this.smtpAuth = smtpAuth;
     }

     public String getSmtpStarttls() {
         return smtpStarttls;
     }

     public void setSmtpStarttls(String smtpStarttls) {
         this.smtpStarttls = smtpStarttls;
     }

     public String getFromNameMail() {
        return fromNameMail;
     }

     public void setFromNameMail(String fromNameMail) {
         this.fromNameMail = fromNameMail;
     }

     public String getUserMail() {
         return userMail;
     }

     public void setUserMail(String userMail) {
         this.userMail = userMail;
     }

     public String getPassMail() {
         return passMail;
     }

     public void setPassMail(String passMail) {
         this.passMail = passMail;
     }

     public String getSubjectMail() {
        return subjectMail;
     }

     public void setSubjectMail(String subjectMail) {
         this.subjectMail = subjectMail;
     }

     public String getBodyMail() {
         return bodyMail;
     }

     public void setBodyMail(String bodyMail) {
        this.bodyMail = bodyMail;
     }

     public List getFileMails() {
         return fileMails;
     }

     public void setFileMails(List fileMails) {
         this.fileMails = fileMails;
     }

     public Map&lt;String, String&gt; getToMailUsers() {
         return toMailUsers;
     }

     public void setToMailUsers(Map&lt;String, String&gt; toMailUsers) {
         this.toMailUsers = toMailUsers;
     }

     public String getChartSetMail() {
         return chartSetMail;
     }

     public void setChartSetMail(String chartSetMail) {
         this.chartSetMail = chartSetMail;
     }

     public String getTypeTextMail() {
         return typeTextMail;
     }

    public void setTypeTextMail(String typeTextMail) {
        this.typeTextMail = typeTextMail;
     }

}

Abaixo a Classe ApacheMailSender.java


package br.com.danilo.email;

import java.util.Map;

import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

public class ApacheMailSender {

	public void senderMail(final MailInformation mailInformation) throws EmailException {
		try {
			Email email = new SimpleEmail();

			email.setHostName(mailInformation.getSmtpHostMail());
			email.setSmtpPort(Integer.valueOf(mailInformation.getSmtpPortMail()));
			email.setAuthenticator(new DefaultAuthenticator(mailInformation.getUserMail(), mailInformation.getPassMail()));
			email.setSSLOnConnect(true);

			email.setFrom(mailInformation.getUserMail(), mailInformation.getFromNameMail());

			for (Map.Entry&lt;String, String&gt; map : mailInformation.getToMailUsers().entrySet()) {
				email.addTo(map.getKey(), map.getValue());
			}

			email.setSubject(mailInformation.getSubjectMail());
			email.setMsg(mailInformation.getBodyMail());

			email.send();
		} catch (NumberFormatException e) {
			throw new NumberFormatException();
		} catch (EmailException e) {
			e.printStackTrace();
			throw new EmailException();
		}
	}

}

Abaixo segue um trecho de código mostrando como enviar email utilizando as classes MailInformation.java e ApacheMailSender.java.


try {

     MailInformation mailInformation = new MailInformation();

     mailInformation.setSmtpHostMail(&quot;yourHost&quot;); // Insira o seu host aqui
     mailInformation.setSmtpPortMail(&quot;yourPort&quot;); // Insira a porta usada pelo host aqui
     mailInformation.setSmtpStarttls(&quot;true&quot;); // Use true para o start tls
     mailInformation.setSmtpAuth(&quot;true&quot;); // Use true para Autenticação
     mailInformation.setUserMail(&quot;yourEmail&quot;); // Insira seu email aqui
     mailInformation.setPassMail(&quot;yourPassword&quot;); // Insira sua senha aqui
     mailInformation.setChartSetMail(&quot;UTF-8&quot;); // Geralmente se usa UTF-8

     mailInformation.setTypeTextMail(MailInformation.TYPE_TEXT_PLAIN);
     mailInformation.setFromNameMail(&quot;mailFrom&quot;); // Insira o nome do remetnente aqui
     mailInformation.setSubjectMail(&quot;mailTitle&quot;); // Insira o titulo do email aqui

     mailInformation.setBodyMail(&quot;BodyMail&quot;); // Insira o corpo do email aqui

     Map&lt;String, String&gt; toMailUsers = new HashMap&lt;String, String&gt;();

     //usando a variável toMailUsers, adicione a lista os usuários de email
     //de destinatários

     List&lt;String&gt; files = new ArrayList&lt;String&gt;();

     files.add(&quot;path&quot;); //É possível inserir anexos informando o caminho a files

     mailInformation.setFileMails(files); //Inserindo a lista anexos

     mailInformation.setToMailUsers(toMailUsers); //Inserindo a lista de Usuários

     ApacheMailSender mailSender = new ApacheMailSender();

     mailSender.senderMail(mailInformation); //Aqui o email é enviado.
} catch (BeansException e) {
 e.printStackTrace();
} catch (EmailException e) {
 e.printStackTrace();
}

Foram inseridos alguns comentários para auxiliar o entendimento do trecho que envia o email.

Espero que o post ajude.

Até mais.

Enviando email utlizando a API JavaMail

Olá a todos!

Abaixo segue o código para envio de emails usando a API JavaMail.jar.

Antes de iniciar, faça o download da API em http://www.oracle.com/technetwork/java/index-138643.html e coloque no seu projeto.

Para um código mais limpo e utilizando o recurso de orientação a objetos vamos dividir o envio de emails em duas classes, sendo uma para armazenar as informações e outra para realizar o envio.

Assim teremos as classes:

  • MailInformation.java – Responsável por armazenar todas as informações necessárias para o envio.
  • MailSender.java – Responsável por realizar o envio do email.

Abaixo a classe MailInformation.java:


package br.com.danilo.email;

import java.util.List;
import java.util.Map;

public class MailInformation {

     public static final String TYPE_TEXT_PLAIN = &amp;quot;text/plain&amp;quot;;
     public static final String TYPE_TEXT_HTML = &amp;quot;text/html&amp;quot;;

     private String smtpHostMail = null;
     private String smtpPortMail = null;
     private String smtpAuth = null;
     private String smtpStarttls = null;
     private String fromNameMail = null;
     private String userMail = null;
     private String passMail = null;
     private String subjectMail = null;
     private String bodyMail = null;
     private Map&amp;lt;String, String&amp;gt; toMailUsers = null;
     private List fileMails = null;
     private String chartSetMail = null;
     private String typeTextMail = null;

     public String getSmtpHostMail() {
         return smtpHostMail;
     }

     public void setSmtpHostMail(String smtpHostMail) {
         this.smtpHostMail = smtpHostMail;
     }

     public String getSmtpPortMail() {
         return smtpPortMail;
     }

    public void setSmtpPortMail(String smtpPortMail) {
        this.smtpPortMail = smtpPortMail;
    }

    public String getSmtpAuth() {
        return smtpAuth;
     }

     public void setSmtpAuth(String smtpAuth) {
         this.smtpAuth = smtpAuth;
     }

     public String getSmtpStarttls() {
         return smtpStarttls;
     }

     public void setSmtpStarttls(String smtpStarttls) {
         this.smtpStarttls = smtpStarttls;
     }

     public String getFromNameMail() {
        return fromNameMail;
     }

     public void setFromNameMail(String fromNameMail) {
         this.fromNameMail = fromNameMail;
     }

     public String getUserMail() {
         return userMail;
     }

     public void setUserMail(String userMail) {
         this.userMail = userMail;
     }

     public String getPassMail() {
         return passMail;
     }

     public void setPassMail(String passMail) {
         this.passMail = passMail;
     }

     public String getSubjectMail() {
        return subjectMail;
     }

     public void setSubjectMail(String subjectMail) {
         this.subjectMail = subjectMail;
     }

     public String getBodyMail() {
         return bodyMail;
     }

     public void setBodyMail(String bodyMail) {
        this.bodyMail = bodyMail;
     }

     public List getFileMails() {
         return fileMails;
     }

     public void setFileMails(List fileMails) {
         this.fileMails = fileMails;
     }

     public Map&amp;lt;String, String&amp;gt; getToMailUsers() {
         return toMailUsers;
     }

     public void setToMailUsers(Map&amp;lt;String, String&amp;gt; toMailUsers) {
         this.toMailUsers = toMailUsers;
     }

     public String getChartSetMail() {
         return chartSetMail;
     }

     public void setChartSetMail(String chartSetMail) {
         this.chartSetMail = chartSetMail;
     }

     public String getTypeTextMail() {
         return typeTextMail;
     }

    public void setTypeTextMail(String typeTextMail) {
        this.typeTextMail = typeTextMail;
     }

}

Abaixo a Classe MailSender.java


package br.com.danilo.email;

import java.io.UnsupportedEncodingException;
import java.util.Map;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;

public class MailSender {

    public void senderMail(final MailInformation mail) throws                                                                          UnsupportedEncodingException, MessagingException {
    Properties properties = new Properties();

    properties.setProperty(&amp;quot;mail.transport.protocol&amp;quot;, &amp;quot;smtp&amp;quot;);
    properties.setProperty(&amp;quot;mail.host&amp;quot;, mail.getSmtpHostMail());
    properties.setProperty(&amp;quot;mail.smtp.auth&amp;quot;, mail.getSmtpAuth());
    properties.setProperty(&amp;quot;mail.smtp.starttls.enable&amp;quot;, mail.getSmtpStarttls());
    properties.setProperty(&amp;quot;mail.smtp.port&amp;quot;, mail.getSmtpPortMail());
    properties.setProperty(&amp;quot;mail.mime.chartset&amp;quot;, mail.getChartSetMail());

    properties.setProperty(&amp;quot;mail.smtp.ssl.trust&amp;quot;, &amp;quot;*&amp;quot;);

    Authenticator authenticator = new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(mail.getUserMail(), mail.getPassMail());
        }
    };

    Session session = Session.getDefaultInstance(properties, authenticator);
    session.setDebug(false);

    Message message = new MimeMessage(session);

    message.setFrom(new InternetAddress(mail.getUserMail(), mail.getFromNameMail()));

    boolean first = true;

     for (Map.Entry&amp;lt;String, String&amp;gt; map : mail.getToMailUsers().entrySet()) {
         if (first) {
             message.addRecipient(Message.RecipientType.TO, new InternetAddress(map.getKey(), map.getValue()));
         first = false;
         } else {
             message.addRecipient(Message.RecipientType.CC, new InternetAddress(map.getKey(), map.getValue()));
         }
     }

     message.setSubject(mail.getSubjectMail());

     MimeBodyPart mimeBodyPart = new MimeBodyPart();

     mimeBodyPart.setContent(mail.getBodyMail(), mail.getTypeTextMail());

     Multipart multipart = new MimeMultipart();

     for (int i = 0; i &amp;lt; mail.getFileMails().size(); i++) {
         MimeBodyPart bodyPart = new MimeBodyPart();

         FileDataSource dataSource = new FileDataSource(mail.getFileMails().get(i));

         bodyPart.setDataHandler(new DataHandler(dataSource));
         bodyPart.setFileName(dataSource.getName());

         multipart.addBodyPart(bodyPart, i);
     }
         multipart.addBodyPart(mimeBodyPart);
         message.setContent(multipart);
         Transport.send(message);

     }

}

Abaixo segue um trecho de código mostrando como enviar email utilizando as classes MailInformation.java e MailSender.java.

try {

 MailInformation mailInformation = new MailInformation();

 mailInformation.setSmtpHostMail("yourHost"); // Insira o seu host aqui
 mailInformation.setSmtpPortMail("yourPort"); // Insira a porta usada pelo host aqui
 mailInformation.setSmtpStarttls("true"); // Use true para o start tls
 mailInformation.setSmtpAuth("true"); // Use true para Autenticação
 mailInformation.setUserMail("yourEmail"); // Insira seu email aqui
 mailInformation.setPassMail("yourPassword"); // Insira sua senha aqui
 mailInformation.setChartSetMail("UTF-8"); // Geralmente se usa UTF-8

 mailInformation.setTypeTextMail(MailInformation.TYPE_TEXT_PLAIN);
 mailInformation.setFromNameMail("mailFrom"); // Insira o nome do remetnente aqui
 mailInformation.setSubjectMail("mailTitle"); // Insira o titulo do email aqui

 mailInformation.setBodyMail("BodyMail"); // Insira o corpo do email aqui

 Map<String, String> toMailUsers = new HashMap<String, String>();

 //usando a variável toMailUsers, adicione a lista os usuários de email
 //de destinatários lembrando que a partir do primeiro email os demais são
 //considerados cópias.

 List<String> files = new ArrayList<String>();

 files.add("path"); //É possível inserir anexos informando o caminho a files

 mailInformation.setFileMails(files); //Inserindo a lista anexos

 mailInformation.setToMailUsers(toMailUsers); //Inserindo a lista de Ususários

 MailSender mailSender = new MailSender();
				
 mailSender.senderMail(mailInformation); // Aqui o email é enviado

} catch (BeansException e) {
    e.printStackTrace();
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
} catch (MessagingException e) {
    e.printStackTrace();
}