DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Fórum DevMedia


Autor
Mensagem
Roger
 


País: Brasil
Estado: MG
Cidade: Pouso Alegre
Mensagens: 7
 Postado em: 15/4/2012 09:33:16 PM

Ola pessoal, estou desenvolvendo um projeto, e me deparei com a necessidade de gerar relatorios com struts 2 , até ae td bem , mas queria enviar o relatorio gerado por email .

segue meu codigo da minha action q gera o pdf usando anotations do Struts 2:

#Código

@Action(value=montaPdfFrota, results={ @Result(name=ok,type=jasper,
location=/pdf/frota.jasper,
params={dataSource,frotabanco,format,PDF}),
@Result(name=ok, type=redirectAction,
params={actionName, ActionEnviaEmail}),
@Result(name=input, location=/erro.jsp)

})





A outra action que envia o email



#Código


@Action(value=ActionEnviaEmail, results={
@Result(name=ok, location=/sucesso.jsp),
@Result(name=input, location=/cadastro-frota.jsp)
})

public String execute() {

// cria o anexo 1.


try {
EmailAttachment anexo1 = new EmailAttachment();
anexo1.setPath(C:/workspace/PortalBonanza/WebContent/pdf/frota.jasper); //caminho do arquivo (RAIZ_PROJETO/teste/teste.txt)
anexo1.setDisposition(EmailAttachment.ATTACHMENT);
anexo1.setDescription(Exemplo de arquivo anexo);

anexo1.setName(frota.jasper);



// configura o email
MultiPartEmail email = new MultiPartEmail();
email.setHostName(smtp.gmail.com); // o servidor SMTP para envio do e-mail
email.addTo(autopostobonanza@homail.com, Guilherme); //destinatário
email.setFrom(rogeriowebteste@gmail.com, Eu); // remetente
email.setSubject(Teste -> Email com anexos); // assunto do e-mail
email.setMsg(Teste de Email utilizando commons-email); //conteudo do e-mail
email.setAuthentication(rogeriowebteste, xxxxxxx);
email.setSmtpPort(465);
email.setSSL(true);
email.setTLS(true);

// adiciona arquivo(s) anexo(s)
email.attach(anexo1);

// envia o email
email.send();

return ok;






é enviado o email do arquivo jasper, e nao do pdf como faço pra mandar o arquivo PDF gerado por email alguem tem uma luz?
Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 16/4/2012 07:52:01 AM

Vc vai criar essa classe:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.activation.DataSource;

// statement DataSource
public class InputStreamDataSource implements DataSource {

private String name;
private String contentType;
private ByteArrayOutputStream baos;

InputStreamDataSource(String name, String contentType,
InputStream inputStream) throws IOException {
int read;
this.name = name;
this.contentType = contentType;

baos = new ByteArrayOutputStream();

byte[] buff = new byte[256];
while ((read = inputStream.read(buff)) != -1) {
baos.write(buff, 0, read);
}
}

public String getContentType() {
return contentType;
}

public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(baos.toByteArray());
}

public String getName() {
return name;
}

public OutputStream getOutputStream() throws IOException {
throw new IOException(Cannot write to this read-only resource);
}
}



E para mandar por email:

// cria e preenche a primeira parte da mensagem (Texto)
MimeBodyPart mbpTexto = new MimeBodyPart();
mbpTexto.setText(mensagem do email);
// Cria o Multipart e adiciona as partes da mensagem a ele
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbpTexto);
// cria e preenche a segunda parte da mensagem (arq. anexo)
//input stream foi passado por parametro é um InputStream que vc pode pegar
if (inputStream != null){
DataSource ids = new InputStreamDataSource(nomeDoArquivo.pdf, application/octet-stream, inputStream);
DataHandler dh = new DataHandler(ids);
MimeBodyPart anexo = new MimeBodyPart();
anexo.setDataHandler(dh);
anexo.setFileName(email.getFileName());
mp.addBodyPart(anexo);
}
// Depois vc usa um objeto Message para mandar seu email e nele vc seta e (import javax.mail.Message;)
// Adiciona o Multipart a mensagem message.setContent(mp);
//e envia email através de Transport.send(mensagem); (import javax.mail.Transport;)



Vai ter só que dar uma pesquisada
Com o Jasper vc consegue o inputStream

att Davi
Roger
 


País: Brasil
Estado: MG
Cidade: Pouso Alegre
Mensagens: 7
 Postado em: 16/4/2012 04:14:14 PM

Não entendi mto nao, mas vou da uma pesquisada sobre e posto aki!!!! por enquanto obrigado
Roger
 


País: Brasil
Estado: MG
Cidade: Pouso Alegre
Mensagens: 7
 Postado em: 16/4/2012 08:36:38 PM

teria como explicar melhor o uso dessa classe em relação ao meu problema?
Davi Gomes da Costa
 

 


País: Brasil
Estado: CE
Cidade: Fortaleza
Mensagens: 1770
 Postado em: 17/4/2012 06:51:47 AM

Com ela é possível vc fazer um meio de campo para passar o inputStream que o relatório do jasper gera para enviar por email.

De qualquer forma passando outra implementação mais simples para vc:

public void validarEmail(String email) throws Exception {
if(email == null || email.isEmpty()){
throw new Exception(E-mail não preenchido.);
}
Pattern padraoEmail = Pattern.compile(^[\\w-]+(\\.[\\w-]+)*@([\\w-]+\\.)+[a-zA-Z]{2,7}$);
Matcher ocorrencias = padraoEmail.matcher(email);
if (!ocorrencias.matches()) {
throw new Exception(O e-mail \ + email + \ é inválido.);
}
}

private InternetAddress[] criarListaInternetAddress(List<String> destinatarios) throws Exception {
InternetAddress[] lListaAddress = new InternetAddress[destinatarios.size()];
for (int i = 0; i < destinatarios.size(); i++) {
lListaAddress[i] = new InternetAddress(destinatarios.get(i));
}
return lListaAddress;
}

public void enviarEmail(List<String> destinatarios, String assunto, String conteudo, Map<String, InputStream> anexos) throws Exception {
configurarEmail();
validarEmail(emailOrigem);
//Foi comentado para validar somente na criação do contato para evitar o não envio dos destinatarios validos.
/*for (String destinatario : destinatarios) {
validarEmail(destinatario);
}*/
try {
// E-mail de Origem:
InternetAddress lAddressOrigem = new InternetAddress(emailOrigem, nomeUsuarioOrigem);
// E-mail(s) de Destino:
InternetAddress[] lListaAddressDestino = criarListaInternetAddress(destinatarios);

Session lSession = Session.getInstance(configuracaoEmail, null);
MimeMessage lMineMessage = new MimeMessage(lSession);
lMineMessage.setSentDate(new Date());
lMineMessage.setFrom(lAddressOrigem);
lMineMessage.addRecipients(Message.RecipientType.BCC, lListaAddressDestino);

// Assunto do e-mail:
lMineMessage.setSubject(assunto);
// add handlers for main MIME types
if (anexos == null || anexos.isEmpty()) {
// Conteúdo do e-mail:
lMineMessage.setContent(conteudo, text/html);

} else {
MimeMultipart lMultiPartRoot = new MimeMultipart(mixed);

// Cria o BodyPart do conteúdo do e-mail:
MimeBodyPart lBodyPartCorpo = new MimeBodyPart();
lBodyPartCorpo.setContent(conteudo, text/html);
lMultiPartRoot.addBodyPart(lBodyPartCorpo);

// Cria os BodyParts para os anexos do e-mail:
for (String nomeArquivo : anexos.keySet()) {
// Cria um arquivo temporário para o anexo:
File lArquivoTemporario = criarArquivoTemporario(anexos.get(nomeArquivo));
DataSource lFileDataSource = new FileDataSource(lArquivoTemporario);
// Cria o BodyPart do anexo:
MimeBodyPart lBodyPartAnexo = new MimeBodyPart();
lBodyPartAnexo.setDisposition(Part.ATTACHMENT);
lBodyPartAnexo.setDataHandler(new DataHandler(lFileDataSource));
lBodyPartAnexo.setFileName(nomeArquivo);
lMultiPartRoot.addBodyPart(lBodyPartAnexo);
}
lMineMessage.setContent(lMultiPartRoot);
}
lMineMessage.saveChanges();

// Conecta-se ao servidor e envia o e-mail:
Transport lTranportEnvio = lSession.getTransport(smtp);
lTranportEnvio.connect(smtpHost, smtpPort, emailOrigem, senhaUsuarioOrigem);
lTranportEnvio.sendMessage(lMineMessage, lMineMessage.getAllRecipients());
lTranportEnvio.close();
} catch (Exception pEx) {
throw new Exception(MSG_ERRO_INESPERADO, pEx);
}
}

public void enviarEmail(List<String> destinatarios, String assunto, String conteudo, InputStream anexo, String filename) throws Exception {
configurarEmail();
validarEmail(emailOrigem);
//Foi comentado para validar somente na criação do contato para evitar o não envio dos destinatarios validos.
/*for (String destinatario : destinatarios) {
validarEmail(destinatario);
}*/
try {
// E-mail de Origem:
InternetAddress lAddressOrigem = new InternetAddress(emailOrigem, nomeUsuarioOrigem);
// E-mail(s) de Destino:
InternetAddress[] lListaAddressDestino = criarListaInternetAddress(destinatarios);

Session lSession = Session.getInstance(configuracaoEmail, null);
MimeMessage lMineMessage = new MimeMessage(lSession);
lMineMessage.setSentDate(new Date());
lMineMessage.setFrom(lAddressOrigem);
lMineMessage.addRecipients(Message.RecipientType.BCC, lListaAddressDestino);

// Assunto do e-mail:
lMineMessage.setSubject(assunto);
// add handlers for main MIME types
if (anexo == null) {
// Conteúdo do e-mail:
lMineMessage.setContent(conteudo, text/html);

} else {
MimeMultipart lMultiPartRoot = new MimeMultipart(mixed);

// Cria o BodyPart do conteúdo do e-mail:
MimeBodyPart lBodyPartCorpo = new MimeBodyPart();
lBodyPartCorpo.setContent(conteudo, text/html);
lMultiPartRoot.addBodyPart(lBodyPartCorpo);

// Cria o BodyPart para o anexo do e-mail:
DataSource ids = new InputStreamDataSource(filename, application/octet-stream, anexo);
DataHandler dh = new DataHandler(ids);
MimeBodyPart lBodyPartAnexo = new MimeBodyPart();
lBodyPartAnexo.setDataHandler(dh);
lBodyPartAnexo.setFileName(filename);
lMultiPartRoot.addBodyPart(lBodyPartAnexo);
lMineMessage.setContent(lMultiPartRoot);
}
lMineMessage.saveChanges();

// Conecta-se ao servidor e envia o e-mail:
Transport lTranportEnvio = lSession.getTransport(smtp);
lTranportEnvio.connect(smtpHost, smtpPort, emailOrigem, senhaUsuarioOrigem);
lTranportEnvio.sendMessage(lMineMessage, lMineMessage.getAllRecipients());
lTranportEnvio.close();
} catch (Exception pEx) {
throw new Exception(MSG_ERRO_INESPERADO, pEx);
}
}

public void enviarEmail(List<String> destinatarios, String assunto, String conteudo, byte[] anexo, String filename) throws Exception {
configurarEmail();
validarEmail(emailOrigem);
//Foi comentado para validar somente na criação do contato para evitar o não envio dos destinatarios validos.
/*for (String destinatario : destinatarios) {
validarEmail(destinatario);
}*/
try {
// E-mail de Origem:
InternetAddress lAddressOrigem = new InternetAddress(emailOrigem, nomeUsuarioOrigem);
// E-mail(s) de Destino:
InternetAddress[] lListaAddressDestino = criarListaInternetAddress(destinatarios);

Session lSession = Session.getInstance(configuracaoEmail, null);
MimeMessage lMineMessage = new MimeMessage(lSession);
lMineMessage.setSentDate(new Date());
lMineMessage.setFrom(lAddressOrigem);
lMineMessage.addRecipients(Message.RecipientType.BCC, lListaAddressDestino);

// Assunto do e-mail:
lMineMessage.setSubject(assunto);
// add handlers for main MIME types
if (anexo == null) {
// Conteúdo do e-mail:
lMineMessage.setContent(conteudo, text/html);

} else {
MimeMultipart lMultiPartRoot = new MimeMultipart(mixed);

// Cria o BodyPart do conteúdo do e-mail:
MimeBodyPart lBodyPartCorpo = new MimeBodyPart();
lBodyPartCorpo.setContent(conteudo, text/html);
lMultiPartRoot.addBodyPart(lBodyPartCorpo);

// Cria o BodyPart para o anexo do e-mail:
DataSource ids = new InputStreamDataSource(filename, application/octet-stream, anexo);
DataHandler dh = new DataHandler(ids);
MimeBodyPart lBodyPartAnexo = new MimeBodyPart();
lBodyPartAnexo.setDataHandler(dh);
lBodyPartAnexo.setFileName(filename);
lMultiPartRoot.addBodyPart(lBodyPartAnexo);
lMineMessage.setContent(lMultiPartRoot);
}
lMineMessage.saveChanges();

// Conecta-se ao servidor e envia o e-mail:
Transport lTranportEnvio = lSession.getTransport(smtp);
lTranportEnvio.connect(smtpHost, smtpPort, emailOrigem, senhaUsuarioOrigem);
lTranportEnvio.sendMessage(lMineMessage, lMineMessage.getAllRecipients());
lTranportEnvio.close();
} catch (Exception pEx) {
throw new Exception(MSG_ERRO_INESPERADO, pEx);
}
}


/**
* Cria um arquivo temporário a partir do inputStream
*
* @param inputStream
* @return Arquivo temporário.
* @throws Exception
*/
private File criarArquivoTemporario(InputStream inputStream) throws Exception {
File arquivoTemporario = File.createTempFile(sgp, null);
arquivoTemporario.deleteOnExit();
FileOutputStream lFos = new FileOutputStream(arquivoTemporario);
int readByte;
while ((readByte = inputStream.read()) != -1) {
lFos.write(readByte);
}
lFos.close();
return arquivoTemporario;
}


att Davi

web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03