Fórum Problemas com anexo *.xml #402083

31/05/2011

0

Boa noite. preciso de uma dica,
seguinte Estou utilizando esse metodo para enviar email com anexo,
consigo enviar corretamente, apenas com um problema,
quanto tento abrir o anexo me aparece está mensagem: A página XML não pode ser exibida
Não é possível exibir a entrada XML usando a folha de estilos . Corrija o erro e clique no botão Atualizar ou tente novamente mais tarde. -------------------------------------------------------------------------------- O documento XML deve ter um elemento de nível superior. Erro ao processar o recurso 'http://webmail.isgh.org.br/service/hom... ou seja o corpo do arquivo xml não está sendo exibido.
metodo utilizado:     public  void  enviaEmailAnexo(String arquivo){
    //Endereço de SMTP para enviar o email
   String smtpServer   = "192.168.33.22";    String toMail       = "teste@teste.org.br";
   String toName       = "Nome Destinatario";    String fromMail     = "teste@teste.org.br";
   String fromName     = "Nome Remetente";    String subject      = "Mensagem com arquivo anexo";
   String body         = "Esta mensagem contém um arquivo anexo.";
   String fileToSend   =  arquivo;    try {      Properties props = new Properties();
     props.setProperty("mail.transport.protocol","smtp");
     props.setProperty("mail.host",smtpServer);
     props.setProperty("mail.user",fromMail);
     props.setProperty("mail.password","");      Session mailSession = Session.getDefaultInstance(props, null);      Message msg = new MimeMessage(mailSession);
     msg.setFrom( new InternetAddress(fromMail,fromName) );
     msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail,toName) );
     msg.setSubject( subject );      // Adiciona o texto do corpo do email
     MimeBodyPart textPart = new MimeBodyPart();
     textPart.setContent(body,"text/plain");     
     // Abre e anexa o arquivo
     MimeBodyPart attachFilePart = new MimeBodyPart();
     FileDataSource fds = new FileDataSource(fileToSend);
     attachFilePart.setDataHandler(new DataHandler(fds));
     attachFilePart.setFileName(fds.getName());      // Monta a mensagem SMTP
     Multipart mp = new MimeMultipart();
     mp.addBodyPart(textPart);
     mp.addBodyPart(attachFilePart);
     msg.setContent(mp);      Transport.send(msg);      System.out.println("Email enviado...");      } catch (Exception e) {
       e.printStackTrace();
   }
    }
a chamada do metodo:
  try {
   // Criando o arquivo de saida
   FileWriter arquivo = new FileWriter(new File("c:/temp/arquivo.xml"));
   // Imprimindo o XML no arquivo
   //Format f = Format.getRawFormat();
   //f.setEncoding("ISO-8859-1");
   //XMLOutputter xout = new XMLOutputter(f);             Email email = new Email();
             email.enviaEmailAnexo(arquivo);
            xout.output(documento, arquivo);
   return true;
  
  
  } catch (IOException e) {
   e.printStackTrace();
   return false;
  }
 }
  return false;
Agradeço qualquer dica. Atenciosamente,
R. Barcelos.
Barcelos.java

Barcelos.java

Responder

Posts

01/06/2011

Davi Costa

Cara seria interessante se vc postasse o stack Trace inteiro.


att Davi
Responder

Gostei + 0

01/06/2011

Barcelos.java

Bom dia Davi.   não dá erro, apenas o anexo fica com 0(zero) byte, como se estivesse corrompido.   ontem pensei numa solução mas não sei como fazer.   buscaria o arquivo xml que foi criado no diretório e depois o anexava,   acho que dessa maneira não iria anexar o arquivo corrompido.   o que vc acha?   Desde já agradeço.   Atenciosamente,      
Responder

Gostei + 0

01/06/2011

Davi Costa

Vc já testou com outro tipode arquivo sem ser xml....

alguns exemplos de código:


private String emailOrigem;
    private String nomeUsuarioOrigem;
    private String senhaUsuarioOrigem;
    private String smtpHost;
    private int smtpPort;
    private Properties configuracaoEmail;


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 = new File(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("Mensagem validação", pEx);
        }
    }



public void configurarEmail() throws Exception {
        if (configuracaoEmail == null) {
           //aqui é pq guardo meus parâmetros no banco
            List<Parametro> parametros = parametroService.findAll();
            if (parametros == null || parametros.isEmpty()) {
                throw new Exception("Mensagem validação");
            }
            Parametro parametro = parametros.get(0);
            nomeUsuarioOrigem = parametro.getNomeUsuarioOrigem();
            senhaUsuarioOrigem = parametro.getSenhaUsuarioOrigem();
            emailOrigem = parametro.getEmailOrigem();

            smtpHost = parametro.getSmtpHost();
            smtpPort = parametro.getSmtpPort();
           
            if (nomeUsuarioOrigem == null || emailOrigem == null || smtpHost == null) {
                throw new Exception("Mensagem validação");
            }
           
            Properties lProperties = new Properties();
            lProperties.put("mail.smtp.host", smtpHost);
            lProperties.put("mail.smtp.port", smtpPort);
            lProperties.put("mail.debug", "true");
            if (senhaUsuarioOrigem != null){
                lProperties.put("mail.smtp.auth", "true");
            }else{
                lProperties.put("mail.smtp.auth", "false");
            }
            if (smtpHost.equals("smtp.gmail.com")) {
                lProperties.put("mail.smtp.starttls.enable", "true");
                lProperties.put("mail.smtp.socketFactory.port", "465");
                lProperties.put("mail.smtp.socketFactory.fallback", "false");
                lProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            }

            configuracaoEmail = lProperties;
        }
    }


public void validarEmail(String email) throws Exception {
        if(email == null || email.isEmpty()){
            throw new AptaException("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.");
        }
    }



Espero que te ajude. é só adaptar para sua necessidade


att Davi



Responder

Gostei + 0

01/06/2011

Barcelos.java

Ainda não, apenas xml,   nesse código que vc enviou, onde eu anexo?   Att R. Barcelos.
Responder

Gostei + 0

01/06/2011

Davi Costa

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()) {
                    // arquivo anexo
                    File lArquivoTemporario = new File(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);   
            }


Att Davi
Responder

Gostei + 0

01/06/2011

Barcelos.java

Olá Davi. Obrigado pelo código, foi crucial para meu aprendizado e solução do problema, baseado no código que vc enviou pude observar algumas funcionalidades e adaptei o código a minha necessidade, ou seja deixei ele um pouco menor.    Segue o código caso para os colegas que sintam a mesma dificuldade   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);   Atenciosamente, R. Barcelos.
Responder

Gostei + 0

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

Aceitar