CSSNinja Geschrieben 3. September 2013 Geschrieben 3. September 2013 Hallo zusammen, Ich versuche mit Java automatisch eine E-Mail zu generieren, die aber über den Default Mail Client laufen soll. Der User soll sich die Mail (z.B. in Outlook) noch einmal anschauen, bevor er sie endgültig abschickt. Neben Adresse, Betreff und Nachricht der E-Mail soll aber auch noch eine Datei angehängt werden. Das letzte ist es, was mir Schwierigkeiten bereitet. Mein bisheriger Code sieht folgendermaßen aus: private static void standardClientCall (String email, String betreff, String nachricht, String dateipfad){ String outlookCmd = "mailto:" + email + "&subject=" + betreff + "&body=" + nachricht; if (dateipfad != null && dateipfad != ""){ outlookCmd = outlookCmd + "&Attach=" + dateipfad; } try { Desktop.getDesktop().mail( new URI( outlookCmd)); } catch (Exception e) { e.printStackTrace(); } } Wenn ich der Methode nur Adresse, Betreff und nachricht mitgebe, öffnet sich (in meinem Falle) Outlook und ich kann die E-Mail verschicken. Gebe ich allerdings einen Dateipfad an, bekomme ich folgende Fehlermeldung: Mir ist schon klar, dass es scheinbar daran liegt, dass die Datei nicht geöffnet werden kann, allerdings weiß ich nicht warum. Der Dateipfad stimmt (Ich weiß nicht mehr, wie oft ich den jetzt schon überprüft hab...) Hoffe, irgendwer kann mir weiterhelfen. Danke schonmal! Zitieren
Goulasz Geschrieben 3. September 2013 Geschrieben 3. September 2013 Musst du den Pfad evtl. escapen oder anderweitig behandeln, damit er als gültig erkannt wird? Anführungszeichen oder sowas? Zitieren
hbspike Geschrieben 3. September 2013 Geschrieben 3. September 2013 Ggf. hilft dir to open outlook mail from java program and to attach file to the mail from directory - Stack Overflow oder Attachment to Email Java - Stack Overflow Zitieren
CSSNinja Geschrieben 3. September 2013 Autor Geschrieben 3. September 2013 Musst du den Pfad evtl. escapen oder anderweitig behandeln, damit er als gültig erkannt wird? Anführungszeichen oder sowas? Das hab ich auch schon probiert, aber das hat leider nichts verändert Danke für die Links Zitieren
hbspike Geschrieben 3. September 2013 Geschrieben 3. September 2013 edit1 war nicht mehr erlaubt: auch solltest du mal probieren ob du die \ mit \\ ersetzt. Zitieren
Gast runtimeterror Geschrieben 3. September 2013 Geschrieben 3. September 2013 In URIs sollte man alle Begriffe durch das Percent-Escaping schicken, damit keine Fehler oder Sicherheitslücken auftreten. In deinem Fall sind das die Begriffe: "subject", betreff, "body", nachricht, "Attach", dateipfad Java stellt dafür eine fast hilfreiche Funktion bereit, dies sich leider nicht an die gängigen RFCs hält. Ich verwende daher für sowas folgende Funktion: static String urlEncode(String s) { try { return URLEncoder.encode(s, "UTF-8").replace("+", "%20"); } catch (UnsupportedEncodingException e) { return "<encoding error>"; // Kann eigentlich nicht auftreten } } [/PHP] Für deinen Fall also (ungetestet und inklusive sonstiger Kommentare : [PHP] private static void standardClientCall(String email, String betreff, String nachricht, String dateipfad){ String outlookCmd = "mailto:" + email; // probier auch hier mal ein urlEncode() - bin mir nicht sicher, ob das da hin darf outlookCmd += "&" + urlEncode("subject") + "=" + urlEncode(betreff); outlookCmd += "&" + urlEncode("body") + "=" + urlEncode(nachricht); if (dateipfad != null && dateipfad != ""){ outlookCmd += "&" + urlEncode("Attach") + "=" + urlEncode(dateipfad); } try { Desktop.getDesktop().mail(new URI(outlookCmd)); } catch (Exception e) { // <-- das ist ein wenig zu allgemein, bitte an den Aufrufer durchreichen oder false zurückliefern e.printStackTrace(); } } ps: Da es sich um Outlook (-> Microsoft) handelt, kann es sein, dass das alles ganz ander funktioniert. Wäre nicht das erste Mal, dass sich Microsoft rausnimmt eigene "Standards" zu definieren. pps: anstelle von String sollte man mittlerweile für Pfadangaben ein Path-Objekt verwenden - das ist dann wieder plattformunabhängig und nimmt einem jedem Menge Arbeit ab. Zitieren
CSSNinja Geschrieben 5. September 2013 Autor Geschrieben 5. September 2013 Danke für den Tip, das werde ich gleich mal versuchen! Ich hatte es zwischenzeitlich mit dem Parameter "/a" plus den Dateipfad hinbekommen, allerdings hatte ich dann NUR den Anhang und keine Adresse, usw. ... Das ist jetzt eine akzeptable Zwischenlösung, aber ich versuche deinen Vorschlag umzusetzen! Zitieren
Gast runtimeterror Geschrieben 6. September 2013 Geschrieben 6. September 2013 Ich habe mir nochmal die zugehörigen RFCs angesehen: Auch der Adressat/die Adressaten (email) muss durch die urlEncode()-Methode kodiert werden - nicht jedoch das @-Zeichen Zitieren
Gast runtimeterror Geschrieben 13. September 2013 Geschrieben 13. September 2013 Und? Erfolg gehabt? Zitieren
CSSNinja Geschrieben 13. September 2013 Autor Geschrieben 13. September 2013 Jup, so hat es jetzt geklappt! Danke nochmal Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.