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!
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?
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
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
hbspike Geschrieben 3. September 2013 Geschrieben 3. September 2013 edit1 war nicht mehr erlaubt: auch solltest du mal probieren ob du die \ mit \\ ersetzt.
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.
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!
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
CSSNinja Geschrieben 13. September 2013 Autor Geschrieben 13. September 2013 Jup, so hat es jetzt geklappt! Danke nochmal
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden