Como enviar relatórios por e-mail

15 respostas
M

Ola pessoal,

Sou aluno da ETEC Hortolandia , do curso de informatica,
e gostaria de saber com se envia relatorios por email , atraves de um botao.
pois estou desenvolvendo um sistema , e a parte de java e gerar relatorios de entrada e saida e envia-los por email.
estou ultililizando quatro clases, uma para conexao com o banco , outra chamada formulario , uma principal somente para executar
a classe formulario, e uma outra chamada usa relatorio onde criarei os get e set.

15 Respostas

P

para relatórios utilize ireport.
para envio de emails utiliza java mail.

att,

M

Então eu ja criei os relatórios iReport,
ja criei uma telinha com os botões, so falta progrmar o botão enviar relatorio por e-mail,
q eu naw sei como faz , so sei q é feito pelo java email , mas como faz eu não sei.
Peço q vcs me ajudem.

P

http://www.guj.com.br/search?cx=partner-pub-9448585618971060%3A4001950301&cof=FORID%3A10&ie=UTF-8&q=enviar+email+com+anexo&x=0&y=0&siteurl=www.guj.com.br%2F#1344

eu criaria o arquivo físico e anexaria no email.

att,

M

Ola amigo,
eu ja criei uma arquivi fisico .pdf no iReport,
só q eu naw sei agora como anexalo e envia-lo por email.

att.

P

usar a busca do fórum pode ajudar:

http://www.guj.com.br/search?cx=partner-pub-9448585618971060%3A4001950301&cof=FORID%3A10&ie=UTF-8&q=email+com+anexo&x=0&y=0&siteurl=www.guj.com.br%2F#1311

dúvidas posta seu código e/ou erro.

att,

M

Aqui segue o código da parte dos botões da clase formulario:

this .setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e){

if (e.getSource()==sair) {

System.exit(0);

}

//neste botão ira gerar o relatorio

if (e.getSource()==gera){

/<em>conex.geraRelatorio();</em>/
}

//Aqui esta a parte em que eu naw sei como fazer , q é anexar esse relatório e envia-lo por e-mail
if(e.getSource()==envia){

}

}
}

M

Esta é a classe conexao onde coloquei a conexao com o banco, e o metodo geraRelatorio , ja com todas as bibliotecas geradas.

public class Conexao {

private String servidor ="com.mysql.jdbc.Driver";

            private String urlBanco = "jdbc:mysql://localhost:3306/EmpresaR";

private String usuarioBanco = "root";

private String senhaBanco = "";

//esta ultima linha seria a senha , q no meu caso no mysql aqui da escola naw tem senha.

public Connection conecta () {
Connection conex = null;

try {
		
		Class.forName(servidor);
	
		conex = DriverManager.getConnection(urlBanco, usuarioBanco, senhaBanco);
		
	}
	catch (ClassNotFoundException e) {
		e.printStackTrace();
	}
    catch (SQLException e) {
	e.printStackTrace();
    }
    
    return conex;

}

public void geraRelatorio(){
Connection conex = conecta();

try{
	Statement stmt = conex.createStatement();
	String sql = "select * from Aluno";
	
	ResultSet rs = stmt.executeQuery(sql);
	
	
	JRResultSetDataSource jrRs = new JRResultSetDataSource(rs);
	
	
	JasperCompileManager.compileReportToFile("relatorios/report3.jrxml", "relatorios/report3.jasper");
	
	
	JasperFillManager.fillReportToFile("relatorios/report3.jasper", null,jrRs);
	
	
	JasperExportManager.exportReportToPdfFile("relatorios/report3.jrprint");
	
	
	JasperPrint print = (JasperPrint) JRLoader.loadObject("relatorios/report3jrprint");

	JasperViewer.viewReport(print);
	

	rs.close();

} 
	catch (SQLException e) {
	e.printStackTrace();
} 
catch (JRException e) {
	e.printStackTrace();
} 
finally{
	try{
		conex.close();
		
	}catch(Exception e){
		e.printStackTrace();
	}
}

}
}

P

arruma seus 2 últimos posts:

1° insira o código dentro das tags code
2° explique qual o problema ou dúvida q vc esta tendo, só de tentar ler os códigos não entendi rsrs.

usando a busca do fórum vc consegue encontrar ajuda tb:
http://www.guj.com.br/articles/21
http://www.guj.com.br/java/71082-enviar-email-com-anexo
http://www.guj.com.br/java/220004-rotina-em-java-para-enviar-email-com-anexo
http://www.guj.com.br/java/237608-problema-com-java-mail-com-anexo-de-arquivotxt
http://www.guj.com.br/java/104331-enviar-email-com-anexo-resolvido
http://www.guj.com.br/java/135877-java-mail-anexo-com-problemas-resolvido
http://www.guj.com.br/java/215117-email-com-anexo
http://www.guj.com.br/java/106280-melhor-maneira-de-enviar-e-mail-com-java
http://www.guj.com.br/java/132516-nao-estou-conseguindo-enviar-email-com-anexo-e-mensagem-juntos
http://www.java2s.com/Code/Java/Email/HowtousetheFileDataSourcetosendafileviamail.htm

att,

M
Esta é a minha clase conexao onde fiz a conexao com o banco de dados, e o metodo gerar relatorio.
public class Conexao {

	private String servidor ="com.mysql.jdbc.Driver";
	
    private String urlBanco = "jdbc:mysql://localhost:3306/EmpresaR";
	
	private String usuarioBanco = "root";
	
	private String senhaBanco = "";
	
	public Connection conecta () {
		Connection conex = null;
		
		try {
			
			Class.forName(servidor);
		
			conex = DriverManager.getConnection(urlBanco, usuarioBanco, senhaBanco);
			
		}
		catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	    catch (SQLException e) {
		e.printStackTrace();
	    }
	    
	    return conex;
	
}
//Este e metodo q gera o relatorio	
public void geraRelatorio(){
Connection conex = conecta();
		
		try{
		Statement stmt = conex.createStatement();
		String sql = "select * from Aluno";
		
		ResultSet rs = stmt.executeQuery(sql);
		
		
		JRResultSetDataSource jrRs = new JRResultSetDataSource(rs);
		
		
		JasperCompileManager.compileReportToFile("relatorios/report3.jrxml", "relatorios/report3.jasper");
		
		
		JasperFillManager.fillReportToFile("relatorios/report3.jasper", null,jrRs);
		
		
		JasperExportManager.exportReportToPdfFile("relatorios/report3.jrprint");
		
		
		JasperPrint print = (JasperPrint) JRLoader.loadObject("relatorios/report3jrprint");
	
		JasperViewer.viewReport(print);
		

		rs.close();
	
	} 
		catch (SQLException e) {
		e.printStackTrace();
	} 
	catch (JRException e) {
		e.printStackTrace();
	} 
	finally{
		try{
			conex.close();
			
		}catch(Exception e){
			e.printStackTrace();
		}
	}
 }		
}
ficou faltando o metodo enviar relatorio , q seria aplicado apos este metodo acima, pois como ja disse , ja criei os relatorios no iReport , foi criado um arquivo fisico .pdf, so naw sei como fazer para anexar este realtório envia-lo por e-mail q seria feito no metodo enviar relatorio.
P

nos links q eu postei tem classes prontas para enviar email com anexo.

vc viu?

att,

M

Eu dei uma olhada nos codigos, eo que mais se adpta ao meu caso éo
www.java2s.com/Code/Java/Email/HowtousetheFileDataSourcetosendafileviamail.htm

porém eu irei precisar das seguintes biblitecas q no eclpse q eu ultilizo naw tem:
[code]import javax.mail.*;
import javax.mail.internet.*;
[code]
Eu queria tambem q voce me explicasse esse codigo pois naw entedim muito bem ,
so entedi q vou ter criar uma outra classe.

P

Download javamail:
http://www.oracle.com/technetwork/java/index-138643.html

Eu queria tambem q voce me explicasse esse codigo pois naw entedim muito bem ,
so entedi q vou ter criar uma outra classe.

ai vc força a amizade, rs.

basicamente essa classe recebe alguns parametros(destinatario,emitente,nome do arquivo,hostname,etc), monta um email(monta o corpo do email, cabecalho,etc) e envia.

faz alguns testes e especifique melhor sua dúvida.

att,

M
eu iserir o codigo na classe conexao, eo tranformei em um metodo . segue o codigo abaixo:
public void enviaEmail() {



  	  String to = "[email removido]";
  	  String from = "[email removido]";;
  	  String host = "gmail.com";
  	  String filename = "/teste.bmp";

  	  String msgText1 = "Sending a file.\n";
  	  String subject = "Sending a file";
  	  
  	  // create some properties and get the default Session
  	  Properties props = System.getProperties();
  	  props.put("mail.smtp.host", host);
  	  
  	  Session session = Session.getInstance(props, null);

  	  
  	  try {
  	      // create a message
  	      MimeMessage msg = new MimeMessage(session);
  	      msg.setFrom(new InternetAddress(from));
  	      InternetAddress[] address = {new InternetAddress(to)};
  	      msg.setRecipients(Message.RecipientType.TO, address);
  	      msg.setSubject(subject);

  	      // create and fill the first message part
  	      MimeBodyPart mbp1 = new MimeBodyPart();
  	      mbp1.setText(msgText1);

  	      // create the second message part
  	      MimeBodyPart mbp2 = new MimeBodyPart();

  	            // attach the file to the message
  	        FileDataSource fds = new FileDataSource(filename);
  	      mbp2.setDataHandler(new DataHandler(fds));
  	      mbp2.setFileName(fds.getName());

  	      // create the Multipart and add its parts to it
  	      Multipart mp = new MimeMultipart();
  	      mp.addBodyPart(mbp1);
  	      mp.addBodyPart(mbp2);

  	      // add the Multipart to the message
  	      msg.setContent(mp);

  	      // set the Date: header
  	      msg.setSentDate(new Date());
  	      /*esta linha esta dando problema*/
  	      // send the message
  	      Transport.send(msg);
  	      
  	  } catch (MessagingException mex) {
  	      mex.printStackTrace();
  	      Exception ex = null;
  	      if ((ex = mex.getNextException()) != null) {
  	    ex.printStackTrace();
  	      }
  	  }
  	    

}
so q esta com um problema,
M

Aqui e o erro q aparece na linha 52 do post acima.

javax.mail.MessagingException: Could not connect to SMTP host: gmail.com, port: 25, response: 421 at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1922) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638) at javax.mail.Service.connect(Service.java:295) at javax.mail.Service.connect(Service.java:176) at javax.mail.Service.connect(Service.java:125) at javax.mail.Transport.send0(Transport.java:194) at javax.mail.Transport.send(Transport.java:124) at Conexao.enviaEmail(Conexao.java:161) at Formulario.actionPerformed(Formulario.java:87) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

P

gmail tem q autenticar.

achei isso, espero q ajude:

import java.util.List;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class EmailImpl {

	private String mailSMTPServer;
	private String mailSMTPServerPort;

	/*
	 * quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL e
	 * a porta usada por ele
	 */
	public EmailImpl() { // Para o GMAIL
		mailSMTPServer = "smtp.gmail.com";
		mailSMTPServerPort = "465";
	}

	/*
	 * caso queira mudar o servidor e a porta, so enviar para o contrutor os
	 * valor como string
	 */
	public EmailImpl(String mailSMTPServer, String mailSMTPServerPort) { // Para
																			// outro
		// Servidor
		this.mailSMTPServer = mailSMTPServer;
		this.mailSMTPServerPort = mailSMTPServerPort;
	}

	public void sendMail(String from, List&lt;String&gt; to, String subject,
			String message) {

		Properties props = new Properties();

		// quem estiver utilizando um SERVIDOR PROXY descomente essa parte e
		// atribua as propriedades do SERVIDOR PROXY utilizado
		/*
		 * props.setProperty(&quot;proxySet&quot;,&quot;true&quot;);
		 * props.setProperty(&quot;socksProxyHost&quot;,&quot;192.168.155.1&quot;); // IP do
		 * Servidor Proxy props.setProperty(&quot;socksProxyPort&quot;,&quot;1080&quot;); // Porta
		 * do servidor Proxy
		 */

		props.put(&quot;mail.transport.protocol&quot;, &quot;smtp&quot;); // define protocolo de
														// envio como SMTP
		props.put(&quot;mail.smtp.starttls.enable&quot;, &quot;true&quot;);
		props.put(&quot;mail.smtp.host&quot;, mailSMTPServer); // server SMTP do GMAIL
		props.put(&quot;mail.smtp.auth&quot;, &quot;true&quot;); // ativa autenticacao
		props.put(&quot;mail.smtp.user&quot;, from); // usuario ou seja, a conta que esta
											// enviando o email (tem que ser do
											// GMAIL)
		//props.put(&quot;mail.debug&quot;, &quot;false&quot;);
		props.put(&quot;mail.smtp.port&quot;, mailSMTPServerPort); // porta
		props.put(&quot;mail.smtp.socketFactory.port&quot;, mailSMTPServerPort); // mesma
																		// porta
																		// para
																		// o
																		// socket
		props.put(&quot;mail.smtp.socketFactory.class&quot;,
				&quot;javax.net.ssl.SSLSocketFactory&quot;);
		props.put(&quot;mail.smtp.socketFactory.fallback&quot;, &quot;false&quot;);

		// Cria um autenticador que sera usado a seguir
		SimpleAuth auth = null;
		auth = new SimpleAuth(&quot;[email removido]&quot;, &quot;senha&quot;);

		// Session - objeto que ira realizar a conexão com o servidor
		/*
		 * Como há necessidade de autenticação é criada uma autenticacao que é
		 * responsavel por solicitar e retornar o usuário e senha para
		 * autenticação
		 */
		Session session = Session.getDefaultInstance(props, auth);
		session.setDebug(true); // Habilita o LOG das ações executadas durante o
								// envio do email

		// Objeto que contém a mensagem
		Message msg = new MimeMessage(session);

		try {
			// Setando o destinatário
			for (String email : to) {
				msg.addRecipient(Message.RecipientType.TO, new InternetAddress(
						email));
			}

			// Setando a origem do email
			msg.setFrom(new InternetAddress(from));
			// Setando o assunto
			msg.setSubject(subject);
			// Setando o conteúdo/corpo do email
			msg.setContent(message, &quot;text/plain&quot;);

		} catch (Exception e) {
			System.out.println(&quot;&gt;&gt; Erro: Completar Mensagem&quot;);
			e.printStackTrace();
		}

		// Objeto encarregado de enviar os dados para o email
		Transport tr;
		try {
			tr = session.getTransport(&quot;smtp&quot;); // define smtp para transporte
			/*
			 * 1 - define o servidor smtp 2 - seu nome de usuario do gmail 3 -
			 * sua senha do gmail
			 */
			tr.connect(mailSMTPServer, &quot;[email removido]&quot;,
					&quot;senha&quot;);
			msg.saveChanges(); // don't forget this
			// envio da mensagem
			tr.sendMessage(msg, msg.getAllRecipients());
			tr.close();
		} catch (Exception e) {
			System.out.println(&quot;&gt;&gt; Erro: Envio Mensagem&quot;);
			e.printStackTrace();
		}

	}
}

// clase que retorna uma autenticacao para ser enviada e verificada pelo
// servidor smtp
class SimpleAuth extends Authenticator {
	public String username = null;
	public String password = null;

	public SimpleAuth(String user, String pwd) {
		username = user;
		password = pwd;
	}

	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(username, password);
	}
}

att,

Criado 20 de junho de 2011
Ultima resposta 28 de jun. de 2011
Respostas 15
Participantes 2