2008-09-17 21 views
5

Me gustaría alentar 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 "Contacto de soporte" a nuestro diálogo de error estándar.Cómo envío un archivo adjunto de correo electrónico utilizando el cliente designado, programáticamente desde Java

He logrado usar encabezados de URI para enviar una stacktrace usando la llamada JDIC de Java 6: Desktop.getDesktop().mail(java.net.URI). Esto activará el cliente de correo del usuario, listo para que ellos agreguen sus comentarios, y presionar enviar.

Me gusta encender el cliente de correo electrónico, porque es a lo que el usuario está acostumbrado, dice apoyar mucho sobre el usuario (sigs, detalles de contacto, etc.) y realmente no quiero to ship with Java Mail.

Lo que me gustaría hacer es adjuntar el archivo de registro y stacktrace como un archivo, por lo que no hay un requisito de longitud máxima y el usuario ve un bonito correo electrónico limpio y el departamento de soporte tiene mucha más información trabajar con.

¿Puedo hacer esto con el enfoque que estoy tomando? ¿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 enviar con el menor número posible de dependencias, y agrupar el JDIC para múltiples plataformas no suena divertido, especialmente para una característica tan pequeña.

JavaMail puede ser adecuado, pero por el hecho de que será en los escritorios de nuestros clientes corporativos. La configuración/descubrimiento de la configuración debería ser transparente, automática y confiable. Con respecto a JavaMail, la configuración parece ser solo 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 los archivos eml. No tengo idea si esto es habitual o predeterminado para tener Windows configurado para abrir archivos EML como este. Es esto usual? ¿O hay otro formato basado en texto que a) es fácil de generar, b) se abre de manera predeterminada en el mismo cliente de correo electrónico que los usuarios ya estarían utilizando?

Respuesta

3

Usted puede guardar un archivo .eml temporal, y Desktop.getDesktop(). abierta (emlFile)
Editar: Como usted señala, desafortunadamente abrirá outlook express en lugar de outlook.
Sin embargo, si tiene Windows Live Mail instalado, lo usará.

+0

Esto es ingenioso. Desafortunadamente, en este cuadro de desarrollo, Outlook es el cliente de correo electrónico predeterminado, y Outlook Express es la aplicación predeterminada para los archivos eml. – jamesh

0

Usando ese método, se puede establecer la línea de asunto y el cuerpo con un URI como

mailto:[email protected]?SUBJECT=Support mail&BODY=This is a support mail 

Sin embargo, la longitud del texto del asunto y el cuerpo se have some limitation

No hay manera de que pueda pensar para attatch un archivo usando este método o algo similar (sin añadir Javamail a su aplicación)

0

JDIC puede no estar siempre disponible en la plataforma de su usuario. Una buena forma de hacerlo es usar la API de javamail. Puede enviar un mensaje de varias partes de correo electrónico como se explica en este tutorial por SUN:

Sending Attachments

1

Como una forma completamente diferente de manejar el mismo problema, usamos un rastreador de errores con una interfaz XML-RPC, y nuestra aplicación (RCP también, btw) 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 fallos tienen algo como esto disponible. Usamos Jira, y funciona muy bien (al parecer, acaban de lanzar una versión personal gratuita que hace que sea fácil de probar).

0
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:[email protected]?subject=someSubject&[email protected]&[email protected]&body=someBodyText&Attach=c:\\test\\test.doc"}, null 
       ); 


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

} 
+1

attach no funciona –

+0

esto depende del sistema operativo – LZH

Cuestiones relacionadas