Fórum Problema com anexo de arquivo xml #402714

09/06/2011

0

Bom dia. Estou enviando normalmente email com anexo baseado no código abaixo,
mas percebi que quando gero war e ponho em ambiente de producao
envio o email da mesma forma, mas o anexo fica com 0(zero)
bytes, alguem tem alguma dica, utilizo o tomcat6, jsf 1.2 segue o código: public class Email {
    // ENVIAR EMAIL
    public  void  enviaEmailAnexo(String from , String to,String fileName ,String auth, String mensagem, String assunto ){
 
  //INSTACIA A PROPRIEDADE
  Properties props =  new Properties();
 
  //DADOS DO SERVIDOR
  props.put("mail.debug"             , "true");               //Mostrar passo-a-passo no console  
  props.put("mail.transport.protocol", "smtp");               //Indica que será usado SMTPS  
  props.put("mail.smtp.host"         , "XX.XX.XX.XX");          //Host do servidor de envio  
  props.put("mail.smtp.port"         , "25");                 //Porta do servidor de envio  
  props.put("mail.smtp.auth"         , "false");              //Usa uma conta autenticada  
 
  try {
     
   Session session = Session.getInstance(props,null);                             //PEGA A SESSAO COM AS PRIPRIEDADES
   Message msg = new MimeMessage(session);
   msg.setFrom(new InternetAddress(from));                            //E-MAIL DE ORIGEM
   // ASSUNDO DO EMAIL
   msg.setSubject(assunto);
  
   //SETA O CORPO DA MENSAGEM
   //msg.setText(mensagem);
   msg.setRecipient(Message.RecipientType.TO,new InternetAddress(to));            //E-MAIL DE DESTINO
   msg.setSentDate(new Date());                //DATA ATUAL            
  
   BodyPart mbp1 = new MimeBodyPart();
   mbp1.setText(mensagem);
        
  BodyPart mbp2 = new MimeBodyPart();
  mbp2.setText("");
          
  FileDataSource fds = new FileDataSource(fileName);
  mbp2.setDataHandler(new DataHandler(fds));
  mbp2.setFileName(fds.getName());
                 
  Multipart mp = new MimeMultipart();
  mp.addBodyPart(mbp1);
  mp.addBodyPart(mbp2);
        
  msg.setContent(mp);
  Transport.send(msg);
  
  } catch (AddressException e) {
   // mensagem do e-mail invalido
   e.printStackTrace();
  } catch (MessagingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } finally {
   //excluir
   File f = new File(fileName);
   if (f.exists())
    f.delete();
  }
 } }
Chamada de método:
           Email email = new Email();
           
                String de = "origem@conta.br";
                String para = "destivo@conta.br";
                String doc = "\\\\XX.XX.XX.XX\\TEMP\\" +object()+ ".xml";
                String bol = "true";
                String assunto = "XXXXX";
                String mensagem = "XXXX";
                email.enviaEmailAnexo(de, para, doc, bol,mensagem, assunto);   Agradeço qualquer ajuda.
Atenciosamente, R. Barcelos.
Barcelos.java

Barcelos.java

Responder

Posts

09/06/2011

Davi Costa

Seguinte, como vc testou local sua máquina achou o fileName para instanciar o File passado como parametro.
No seu ambiente de produção não.
Existe muitas formas do seu sistema pegar esse file (o array de bytes e instanciar o file mesmo no cliente) e vc mandar seu arquivo como anexo.
A solução mas simples se bastar é só escolher arquivos que fikem na intranet. Porém se o cliente for linux e cliente windows vai ter que ter cuidado com as barras \  (windows) e linux (/), tem como tratar isso no seu código. E tb tem que se atentar se seu servidor tem alguma máscara nas pastas públicas de arquivos


att Davi 
Responder

Gostei + 0

09/06/2011

Barcelos.java

Estou utilizando essa linha
FileWriter arquivo = new FileWriter(new File("c:/temp/"+ aObjeto()+ "arquivo.xml"));
enviando o arquivo para o servidor. estou utilizando esse mesmo caminho
String doc = "\\\\XX.XX.XX.XX\\TEMP\\" +object()+ ".xml"; para pegar o arquivo já criado
e esse mesmo eu anexo. o servidor é windows.
Responder

Gostei + 0

09/06/2011

Barcelos.java

vou te passar o stack trace   DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "10.1.1.40", port 25, isSSL false
220 svrzimbra.isgh.org.br ESMTP Postfix
DEBUG SMTP: connected to host "10.1.1.40", port: 25 EHLO NTI-023.hgwa.org.br
250-svrzimbra.isgh.org.br
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "SIZE", arg "10240000"
DEBUG SMTP: Found extension "VRFY", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<compras.hgwa@isgh.org.br>
250 2.1.0 Ok
RCPT TO:<arquivo.hgwa@isgh.org.br>
250 2.1.5 Ok
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   arquivo.hgwa@isgh.org.br
DATA
354 End data with <CR><LF>.<CR><LF>
java.io.FileNotFoundException: \\10.1.1.50\TEMP\3607-11arquivoBionexo.xml (O sistema não pode encontrar o arquivo especificado)
 at java.io.FileInputStream.open(Native Method)
 at java.io.FileInputStream.<init>(Unknown Source)
 at javax.activation.FileDataSource.getInputStream(Unknown Source)
 at javax.activation.DataHandler.writeTo(Unknown Source)
 at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383)
 at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:852)
 at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:453)
 at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:98)
 at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source)
 at javax.activation.DataHandler.writeTo(Unknown Source)
 at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383)
 at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1743)
 at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:888)
 at javax.mail.Transport.send0(Transport.java:191)
 at javax.mail.Transport.send(Transport.java:120)
 at br.org.isgh.compras.util.Email.enviaEmailBionexoAnexo(Email.java:172)
 at br.org.isgh.compras.util.XmlGeral.geraXml(XmlGeral.java:186)
 at br.org.isgh.compras.forms.SolicitacaoItemForm.concluiSolicitacao(SolicitacaoItemForm.java:193)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
 at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
 at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
 at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
 at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
 at javax.faces.component.UICommand.broadcast(UICommand.java:387)
 at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
 at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:324)
 at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:299)
 at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:256)
 at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:469)
 at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
 at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
 at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
 at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
 at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
 at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 at java.lang.Thread.run(Unknown Source)
javax.mail.MessagingException: IOException while sending message;
  nested exception is:
 java.io.FileNotFoundException: \\10.1.1.50\TEMP\3607-11arquivoBionexo.xml (O sistema não pode encontrar o arquivo especificado)
 at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:930)
 at javax.mail.Transport.send0(Transport.java:191)
 at javax.mail.Transport.send(Transport.java:120)
 at br.org.isgh.compras.util.Email.enviaEmailBionexoAnexo(Email.java:172)
 at br.org.isgh.compras.util.XmlGeral.geraXml(XmlGeral.java:186)
 at br.org.isgh.compras.forms.SolicitacaoItemForm.concluiSolicitacao(SolicitacaoItemForm.java:193)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
 at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
 at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
 at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
 at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
 at javax.faces.component.UICommand.broadcast(UICommand.java:387)
 at org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
 at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:324)
 at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:299)
 at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:256)
 at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:469)
 at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
 at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
 at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
 at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
 at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
 at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
 at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: \\10.1.1.50\TEMP\3607-11arquivoBionexo.xml (O sistema não pode encontrar o arquivo especificado)
 at java.io.FileInputStream.open(Native Method)
 at java.io.FileInputStream.<init>(Unknown Source)
 at javax.activation.FileDataSource.getInputStream(Unknown Source)
 at javax.activation.DataHandler.writeTo(Unknown Source)
 at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383)
 at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:852)
 at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:453)
 at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:98)
 at javax.activation.ObjectDataContentHandler.writeTo(Unknown Source)
 at javax.activation.DataHandler.writeTo(Unknown Source)
 at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1383)
 at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1743)
 at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:888)
 ... 42 more
Responder

Gostei + 0

09/06/2011

Davi Costa

É puro e simplesmente o que te falei. Vc passa um caminho local mas o programa está sendo rodado de um servidor.

Att Davi
Responder

Gostei + 0

09/06/2011

Davi Costa

Nesse acminho no seu servidor vc não tem esse arquivo:

FileWriter arquivo = new FileWriter(new File("c:/temp/"+ aObjeto()+ "arquivo.xml"));


Tanto é que vc pode testar uma linha acima dessa:

File aux = new File("c:/temp/"+ aObjeto()+ "arquivo.xml");
if(!aux.exist()){
   System.out.println("arquivo não encontrado");
}
Responder

Gostei + 0

09/06/2011

Barcelos.java

Entendi.   agora eu preciso que envie esse arquivo somente para a pasta temp do meu servidor servidor.   tem uma forma de fixar isso?   Att. R. Barcelos.
Responder

Gostei + 0

09/06/2011

Davi Costa

Já havia falado isso tb, vc pode pegar o array de bytes ou o InputStream e criar esse arquivo na pasta que vc quiser no servidor recomendo até a criar um tempFile (pesquise caso não conheça) pq daí ele cria um arquivo temporário que logo vai se estinguir. Agoar como fazer isso é que vai ser o seu trabalho.. vai depender de muita coisa.. qual framework usa     e por aí vai.. mas não é tão difícil não.. agora existe muitas soluções vai só ter que usar a que serve para vc... para jsf ou struts, ou Vraptor..... qual implementação jsf vc usa e por aí vai...


Porém se vc garantir que esse arquivo está em um lugar público da rede que seu servidor encherga bsta vc recuperá-lo pegando o caminho sem vc engessar o caminho como vc fez e mandar esse arquivo como anexo mole mole.... o problema é que amarra o caminho do arquivo para auqele c:\temp... vc deve amarrar se usar a estratégia de cima para criar os temp files... mas só para criar de onde vai pegar o arquivo.. não deve ser amarrado


Att Davi
Responder

Gostei + 0

10/06/2011

Barcelos.java

Bom dia.   Obrigado pelas dicas.   Estou quase lá.     consegui enviar o arquivo xml para um diretorio que está compartilhado na rede,   agora na hora de enviar email não estou conseguindo buscar o arquivo xml completo   ele anexa porém o arquivo anexado está com byte zero e o arquivo tem 1k   estou precisando fazer isso agora "Porém se vc garantir que esse arquivo está em um lugar público da rede que seu servidor encherga bsta vc recuperá-lo pegando o caminho sem vc engessar o caminho como vc fez e mandar esse arquivo como anexo mole mole.... o problema é que amarra o caminho do arquivo para auqele c:\temp... vc deve amarrar se usar a estratégia de cima para criar os temp files... mas só para criar de onde vai pegar o arquivo.. não deve ser amarrado
" Davi     vc tem alguma dica de como pego esse arquivo completo nesse diretorio da rede.   Att. R. Barcelos. 
Responder

Gostei + 0

10/06/2011

Davi Costa

No código do seu primeiro post, vc tem essa linha:

FileDataSource fds = new FileDataSource(fileName);

essa String fileName tem que ser o caminho completo do seu arquivo onde vc está guardando no servidor.
Já testou assim, coloca aquele if que postei anteriormente para ver se ele tá pegando o arquivo de lá mesmo.


att Davi
Responder

Gostei + 0

10/06/2011

Barcelos.java

Consegui localizar o arquivo, agora não consigo anexa-lo.   Att R.Barcelos
Responder

Gostei + 0

10/06/2011

Davi Costa

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);
                           
                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();

         

adapta tua solução para essa

att Davi
Responder

Gostei + 0

15/06/2011

Dyego Carmo

Resolvido ?

Se sim , poderia fechar ?

Valeu !
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar