Wie kann ich eine E-Mail Anhang unter Verwendung des bestimmten Client, programmatisch von Java senden

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

  •  09-06-2019
  •  | 
  •  

Frage

Ich möchte unsere Nutzer unserer RCP-Anwendung ermutigen, die Problemdetails an unsere Supportabteilung zu senden. Zu diesem Zweck habe ich einen „Support kontaktieren“ Widget unseren Standardfehlerdialog hinzugefügt.

Ich habe es geschafft URI-Header zu verwenden, um einen Stacktrace mit Java 6 des JDIC Aufruf zu senden: Desktop.getDesktop().mail(java.net.URI) . Dadurch wird der Benutzer-Mail-Client, bereit anwerfen, damit sie ihre Kommentare zu schreiben, und drücken Sie senden.

Ich mag Notfeuerungssystem den E-Mail-Client, denn es ist das, was der Benutzer verwendet wird, sagt es eine ganze Menge über den Benutzer unterstützen (sigs, Kontaktdaten etc.) und ich weiß nicht wirklich will, mit Java Mail- zu versenden.

Was möchte ich zu tun ist, um die Protokolldatei und die Stacktrace als Datei anhängen, so dass es keine maximale Länge Anforderung, und der Benutzer sieht eine schöne saubere suchen E-Mail, und die Support-Abteilung hat viel mehr Informationen arbeiten.

Kann ich das mit dem Ansatz, den ich nehmen werde? Oder gibt es einen besseren Weg?

Bearbeiten : Ich bin in einem OSGi-Kontext, so JDIC Bündelung notwendig wäre. Wenn möglich, möchte ich mit möglichst wenigen Abhängigkeiten wie möglich versenden und die JDIC Bündeln für mehrere Plattformen nicht Spaß klingen, vor allem für ein so kleines Feature.

Java Mail kann geeignet sein, aber für die Tatsache, dass diese auf Desktops unserer Firmenkunden sein wird. Die setup / Entdeckung der Konfiguration würde transparent, automatisch und zuverlässig. In Bezug auf Java Mail, Konfiguration scheint nur manuell zu sein. Ist dies der Fall ist?

Die Antwort, die ich am meisten mag, ist die Desktop.open() für eine * EML-Datei. Leider Outlook Express (statt Outlook) öffnet eml-Dateien . Ich habe keine Ahnung, ob dies üblich ist oder Standard für Windows konfiguriert hat, wie diese zu öffnen EML-Dateien. Ist das üblich? Oder gibt es einen anderen textbasierten Format, das a) ist leicht zu erzeugen, b) öffnet standardmäßig in der gleichen E-Mail-Client als Benutzer bereits verwenden würde?

War es hilfreich?

Lösung

Sie können eine temporäre EML-Datei speichern, und Desktop.getDesktop (). Open (emlFile)
Edit:. Wie Sie darauf hinweisen, wird dies leider offen Outlook Express statt Ausblick
Allerdings, wenn Sie Windows Live Mail installiert haben, wird es diese verwenden.

Andere Tipps

Wenn Sie mit JDK 6 (Sie sollten wirklich), ist der Desktop-API jetzt Teil der JRE. Siehe http://java.sun.com/developer/technicalArticles/ J2SE / Desktop / javase6 / desktop_api / für weitere Informationen.

Als eine ganz andere Art und Weise das gleiche Problem der Handhabung, verwenden wir einen Bug-Tracker mit einem XML-RPC-Schnittstelle und unsere (RCP auch, btw) App spricht mit, dass eine benutzerdefinierte Vorlage Dialog verwenden. Das heißt, wir können die Protokolldateien senden, das Problem zu diagnostizieren, ohne dass der Benutzer sie zu finden.

Ich bin sicher, die meist Bug-Tracker so etwas wie diese zur Verfügung hat. Wir verwenden Jira, und es funktioniert super (anscheinend, sie haben gerade eine kostenlose Personal-Version veröffentlicht, die es einfach zu versuchen, macht).

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

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

Allerdings ist die Länge des Betreff und Text haben einige Einschränkung

Es gibt keine Art, wie ich mir vorstellen kann, eine Datei mit dieser Methode oder etwas ähnliches attatch (ohne Ihre App das Hinzufügen Java Mail)

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

Attachments

Senden
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();
        }
    }

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top