¿Cómo envío un archivo adjunto de correo electrónico utilizando el cliente designado, mediante programación desde Java?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

Me gustaría animar a nuestros usuarios de nuestra aplicación RCP a enviar los detalles del problema a nuestro departamento de soporte.Con este fin, agregué un widget de "Contactar con soporte" a nuestro diálogo de error estándar.

Me las arreglé para usar encabezados URI para enviar un seguimiento de pila usando la llamada JDIC de Java 6: Desktop.getDesktop().mail(java.net.URI).Esto activará el cliente de correo del usuario, listo para que agregue sus comentarios y presione enviar.

Me gusta activar el cliente de correo electrónico, porque es a lo que el usuario está acostumbrado, le dice mucho al soporte técnico sobre el usuario (firmas, detalles de contacto, etc.) y realmente no quiero enviar con Java Mail.

Lo que me gustaría hacer es adjuntar el archivo de registro y el seguimiento de pila como un archivo, de modo que no haya un requisito de longitud máxima, el usuario vea un correo electrónico limpio y agradable y el departamento de soporte tenga mucha más información con la que trabajar.

¿Puedo hacer esto con el enfoque que estoy adoptando?¿O hay un mejor camino?

Editar:Estoy en un contexto OSGi, por lo que sería necesario agrupar JDIC.Si es posible, me gustaría enviarlo con la menor cantidad de dependencias posible, y agrupar el JDIC para múltiples plataformas no suena divertido, especialmente para una característica tan pequeña.

JavaMail puede ser adecuado, pero estará en los escritorios de nuestros clientes corporativos.El instalación/descubrimiento de configuración tendría que ser transparente, automático y fiable.En cuanto a JavaMail, la configuración parece ser sólo manual.¿Es este el caso?

La respuesta que más me gusta es usar el Desktop.open() para un archivo *.eml.Desafortunadamente Outlook Express (en lugar de Outlook) abre archivos eml.No tengo idea de si es habitual o predeterminado tener Windows configurado para abrir archivos EML como este.¿Es esto habitual?¿O existe otro formato basado en texto que a) sea fácil de generar, b) se abra de forma predeterminada en el mismo cliente de correo electrónico que los usuarios ya estarían usando?

¿Fue útil?

Solución

Puede guardar un archivo .eml temporal y Desktop.getDesktop().open(emlFile)
Editar: Como usted señala, desafortunadamente esto abrirá Outlook Express en lugar de Outlook.
Sin embargo, si tiene instalado Windows Live Mail, lo utilizará.

Otros consejos

Si está utilizando JDK 6 (realmente debería hacerlo), la API de escritorio ahora forma parte del JRE.Ver http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/ para más información.

Como una forma completamente diferente de manejar el mismo problema, utilizamos un rastreador de errores con una interfaz XML-RPC, y nuestra aplicación (RCP también, por cierto) se comunica con eso mediante un diálogo de envío personalizado.Significa que podemos enviar los archivos de registro para ayudar a diagnosticar el problema, sin que el usuario tenga que encontrarlos.

Estoy seguro de que la mayoría de los rastreadores de errores tienen algo como esto disponible.Usamos Jira y funciona muy bien (aparentemente, acaban de lanzar una versión Personal gratuita que facilita la prueba).

Con ese método, puede configurar la línea de asunto y el texto del cuerpo con un URI como

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

Sin embargo, la longitud del asunto y del cuerpo del texto tener alguna limitación

No se me ocurre ninguna manera de adjuntar un archivo usando este método o algo similar (sin agregar javamail a su aplicación)

Es posible que JDIC no siempre esté disponible en la plataforma de su usuario.Una buena forma de hacerlo es utilizar la API de javamail.Puede enviar un mensaje de correo electrónico de varias partes como lo explica SUN en este tutorial:

Envío de archivos adjuntos

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top