2008-09-17 6 views
5

Ich möchte unsere Benutzer unserer RCP-Anwendung ermutigen, die Problemdetails an unsere Supportabteilung zu senden. Zu diesem Zweck habe ich ein "Contact support" -Widget zu unserem Standardfehlerdialog hinzugefügt.Wie sende ich einen E-Mail-Anhang mit dem angegebenen Client, programmgesteuert von Java

Ich habe es geschafft, URI-Header zu verwenden, um einen Stacktrace mit dem JDIC-Aufruf von Java 6 zu senden: Desktop.getDesktop().mail(java.net.URI). Dadurch wird der E-Mail-Client des Benutzers gestartet, damit sie ihre Kommentare hinzufügen und auf Senden klicken können.

Ich mag es, den E-Mail-Client zu feuern, weil es das ist, was der Benutzer gewohnt ist, es sagt Unterstützung eine ganze Menge über den Benutzer (sigs, Kontaktdaten usw.) und ich will nicht wirklich to ship with Java Mail.

Ich möchte die Protokolldatei und den Stacktrace als Datei anhängen, so dass keine maximale Länge erforderlich ist, und der Benutzer sieht eine nette, sauber aussehende E-Mail, und die Supportabteilung hat viele weitere Informationen arbeiten mit.

Kann ich dies mit meinem Ansatz machen? Oder gibt es einen besseren Weg?

Bearbeiten: Ich bin in einem OSGi-Kontext, so Bündelung JDIC wäre notwendig. Wenn möglich, würde ich gerne mit so wenig Abhängigkeiten wie möglich liefern, und die Bündelung der JDIC für mehrere Plattformen hört sich nicht lustig an, besonders für solch eine kleine Funktion.

JavaMail kann geeignet sein, aber für die Tatsache, dass dies auf den Desktops unserer Firmenkunden sein wird. Die Einrichtung/Entdeckung der Konfiguration müsste transparent, automatisch und zuverlässig sein. In Bezug auf JavaMail scheint die Konfiguration nur manuell zu sein. Ist das der Fall?

Die Antwort, die ich am meisten mag, ist die Verwendung der Desktop.open() für eine * .eml-Datei. Leider Outlook Express (anstelle von Outlook) öffnet Eml-Dateien. Ich habe keine Ahnung, ob das üblich ist oder Windows standardmäßig dafür konfiguriert ist, EML-Dateien wie diese zu öffnen. Ist das üblich? Oder gibt es ein anderes textbasiertes Format, das a) einfach zu generieren ist, b) standardmäßig im selben E-Mail-Client geöffnet wird, den Benutzer bereits verwenden?

Antwort

3

Sie könnten eine temporäre EML-Datei zu speichern, und Desktop.getDesktop(). open (emlFile)
Bearbeiten: Wie Sie darauf hinweisen, wird dies leider Outlook Express statt Outlook öffnen.
Wenn Sie jedoch Windows Live Mail installiert haben, wird es das verwenden.

+0

Das ist genial. Leider ist Outlook in dieser Entwicklungsumgebung der Standard-E-Mail-Client und Outlook Express ist die Standardanwendung für EML-Dateien. – jamesh

0

diese Methode verwenden, können Sie die Betreffzeile und Nachrichtentext mit einem URI gesetzt wie

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

Allerdings wird die Länge des Betreff und Text have some limitation

Es gibt keinen Weg, ich kann denken Sie an eine Datei mit dieser Methode oder etwas ähnliches attatch (ohne Ihre App das Hinzufügen Java Mail)

0

JDIC ist möglicherweise nicht immer auf der Plattform Ihres Benutzers verfügbar. Ein guter Weg, dies zu tun, ist die Javamail-API zu verwenden. Sie können eine mehrteiligen E-Mail-Nachricht senden, wie in diesem Tutorial von SUN erklärt:

Sending Attachments

1

Als eine völlig andere Art, das gleiche Problem zu behandeln, verwenden wir einen Bug-Tracker mit einer XML-RPC-Schnittstelle, und unsere (RCP auch, BTW) App spricht mit diesem einen benutzerdefinierten Einreichung Dialog. Das bedeutet, dass wir die Protokolldateien senden können, um das Problem zu diagnostizieren, ohne dass der Benutzer sie finden muss.

Ich bin sicher, die meisten Bug-Tracker haben so etwas zur Verfügung. Wir verwenden Jira, und es funktioniert großartig (offenbar haben sie gerade eine kostenlose Personal-Version veröffentlicht, die es einfach macht, es zu versuchen).

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

anhängen funktionieren nicht –

+0

das ist Betriebssystem abhängig – LZH

Verwandte Themen