Fórum salvar Relatorio gerado pelo jasper via anottation do struts 2 no banco #415448
15/04/2012
0
segue meu codigo da minha action q gera o pdf usando anotations do Struts 2:
@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
@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?
Rogerio Reis
Curtir tópico
+ 0Posts
16/04/2012
Davi Costa
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
Gostei + 0
16/04/2012
Rogerio Reis
Gostei + 0
16/04/2012
Rogerio Reis
Gostei + 0
17/04/2012
Davi Costa
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)