Como envio um anexo de e-mail usando o cliente designado, programaticamente a partir de Java

StackOverflow https://stackoverflow.com/questions/81862

  •  09-06-2019
  •  | 
  •  

Pergunta

Gostaria de incentivar nossos usuários do nosso aplicativo RCP a enviar os detalhes do problema ao nosso departamento de suporte.Para esse fim, adicionei um widget "Entre em contato com o suporte" à nossa caixa de diálogo de erro padrão.

Consegui usar cabeçalhos URI para enviar um stacktrace usando a chamada JDIC do Java 6: Desktop.getDesktop().mail(java.net.URI).Isso iniciará o cliente de e-mail do usuário, pronto para que ele adicione seus comentários e clique em enviar.

Gosto de ativar o cliente de e-mail, porque é com o que o usuário está acostumado, ele informa muito ao suporte sobre o usuário (assinaturas, dados de contato etc.) e eu realmente não quero para enviar com Java Mail.

O que eu gostaria de fazer é anexar o arquivo de log e o stacktrace como um arquivo, para que não haja nenhum requisito de comprimento máximo, e o usuário veja um e-mail bonito e limpo, e o departamento de suporte tenha muito mais informações para trabalhar.

Posso fazer isso com a abordagem que estou adotando?Ou há um jeito melhor?

Editar:Estou em um contexto OSGi, portanto, seria necessário agrupar o JDIC.Se possível, gostaria de enviar com o mínimo de dependências possível, e agrupar o JDIC para múltiplas plataformas não parece divertido, especialmente para um recurso tão pequeno.

JavaMail pode ser adequado, exceto pelo fato de estar nos desktops de nossos clientes corporativos.O configuração/descoberta de configuração teria que ser transparente, automático e confiável.Em relação ao JavaMail, a configuração parece ser apenas manual.É este o caso?

A resposta que mais gosto é usar o Desktop.open() para um arquivo *.eml.Infelizmente Outlook Express (em vez de Outlook) abre arquivos eml.Não tenho ideia se é normal ou padrão ter o Windows configurado para abrir arquivos EML como este.Isso é normal?Ou existe outro formato baseado em texto que a) seja fácil de gerar, b) abra por padrão no mesmo cliente de e-mail que os usuários já estariam usando?

Foi útil?

Solução

Você pode salvar um arquivo .eml temporária, e Desktop.getDesktop (). Open (emlFile)
Editar: Como salienta, isso vai outlook infelizmente aberta expressar em vez do Outlook
. No entanto, se você tiver o Windows Live Mail instalado, ele vai usar isso.

Outras dicas

Se você estiver usando o JDK 6 (você realmente deveria), a API Desktop é agora parte do JRE. Consulte http://java.sun.com/developer/technicalArticles/ J2SE / desktop / javase6 / desktop_api / para obter mais informações.

Como uma forma completamente diferente de lidar com o mesmo problema, usamos um bug tracker com uma interface XML-RPC, e nossa (RCP também, btw) fala aplicativo para que o uso de um diálogo a apresentação personalizada. Isso significa que pode enviar os arquivos de log para ajudar a diagnosticar o problema, sem que o usuário ter que encontrá-los.

Eu tenho certeza que a maioria dos seguidores de bugs ter algo como isto disponível. Usamos Jira, e ele funciona muito bem (aparentemente, eles acabaram de lançar uma versão pessoal livre que torna mais fácil para tentar).

Usando esse método, você pode definir a linha de assunto e corpo de texto com um URI como

mailto:me@here.com?SUBJECT=Support mail&BODY=This is a support mail

No entanto, o comprimento do texto do assunto e corpo vai ter algum limitação

Não há nenhuma maneira que eu posso pensar para attatch um arquivo usando este método ou algo semelhante (sem adição de javamail ao seu app)

JDIC pode não estar sempre disponível na plataforma do usuário. Uma boa maneira de fazer isso é usar a API javamail. Você pode enviar uma mensagem multi-parte e-mail como explicado neste tutorial pela SUN:

Enviar anexos

import java.awt.Desktop;
import java.io.File;
import java.net.URI;


public class TestMail {

    public static void main(String[] args) {
        try {       
         Runtime.getRuntime().exec(
                  new String[] {"rundll32", "url.dll,FileProtocolHandler",
                        "mailto:a@a.de?subject=someSubject&cc=a@a.de&bcc=a@a.de&body=someBodyText&Attach=c:\\test\\test.doc"}, null
                  );


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top