Come faccio a inviare un allegato di posta elettronica, utilizzando l'apposito client, a livello di programmazione in Java
-
09-06-2019 - |
Domanda
Vorrei incoraggiare i nostri utenti della nostra applicazione RCP per inviare i dettagli del problema al nostro servizio di assistenza.A tal fine, ho aggiunto un "Contatta il supporto" widget per il nostro standard della finestra di dialogo di errore.
Sono riuscito a usare URI intestazioni per inviare un stacktrace utilizzo di Java 6 JDIC chiamata: Desktop.getDesktop().mail(java.net.URI)
.Questo sarà il fuoco dell'utente client di posta elettronica, pronto per loro di aggiungere i loro commenti, e premi invio.
Mi piace la cottura il client di posta elettronica, perché è quello che l'utente è abituato, racconta il supporto di un intero lotto su l'utente (sigs, dati di contatto, ecc) e non ho molta voglia per la spedizione con Posta Java.
Quello che vorrei fare è collegare il file di log e il stacktrace come un file, quindi non c'è la lunghezza massima, e l'utente vede una bella pulita alla ricerca email, e l'ufficio di supporto ha un sacco di informazioni in più per lavorare con.
Posso fare questo con l'approccio che sto prendendo?O c'è un modo migliore?
Modifica:Io sono in un OSGi contesto, in modo da impacchettare JDIC sarebbe necessario.Se possibile, mi piacerebbe nave con pochi dipendenze possibili, e impacchettare il JDIC per più piattaforme, non è divertente, soprattutto per una piccola caratteristica.
JavaMail può essere adatto, ma per il fatto che questo sarà sul desktop dei nostri clienti aziendali.Il installazione/scoperta di configurazione dovrebbe essere trasparente, automatico e affidabile.Per quanto riguarda JavaMail, la configurazione sembra essere solo manuale.È questo il caso?
La risposta che mi piace di più è che utilizza il Desktop.open()
per un *.file eml.Purtroppo Outlook Express (invece di Outlook) apre i file eml.Non ho idea se questo è di solito di default di Windows configurato per aprire file EML come questo.È questo solito?Oppure c'è un altro basato su testo, il formato che è facile da ottenere, b) si apre per impostazione predefinita nella stessa client di posta elettronica che gli utenti potrebbero essere in uso già?
Soluzione
Si potrebbe risparmiare un temporaneo .file eml, e Desktop.getDesktop().open(emlFile)
Edit: Come dici tu, questo, purtroppo, aprire outlook express, invece di outlook.
Tuttavia, se si dispone di Windows Live Mail, saranno usate.
Altri suggerimenti
Se si utilizza il JDK 6 (si dovrebbe), il Desktop API è ora parte di JRE.Vedere http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/ per ulteriori informazioni.
Come un modo completamente diverso di gestire lo stesso problema, usiamo un bug tracker con XML-RPC interface, e i nostri (PCR, inoltre, btw) app parla di uso di una presentazione personalizzata dialogo.Siamo in grado di inviare i file di log per aiutare a diagnosticare il problema, senza che l'utente debba trovare loro.
Sono sicuro che la maggior parte dei bug tracker qualcosa di simile a questa disposizione.Usiamo Jira, e funziona alla grande (a quanto pare, hanno appena rilasciato una libera e Personale versione che lo rende facile da provare).
Utilizzando questo metodo, è possibile impostare la riga dell'oggetto e il corpo del testo con un URI come
mailto:me@here.com?SUBJECT=Support mail&BODY=This is a support mail
Tuttavia, la lunghezza di un oggetto e il corpo del testo hanno alcune limitazioni
Non c'è nessun modo che posso pensare di attatch un file utilizzando questo metodo o qualcosa di simile (senza aggiunta di javamail per il vostro app)
JDIC potrebbero non essere sempre disponibili per l'utente della piattaforma.Un buon modo per farlo è quello di utilizzare il javamail API.È possibile inviare una sorta di messaggio di posta elettronica, come spiegato in questo tutorial della SUN:
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();
}
}
}