Veröffentlicht 3. September 201312 j 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!
3. September 201312 j Musst du den Pfad evtl. escapen oder anderweitig behandeln, damit er als gültig erkannt wird? Anführungszeichen oder sowas?
3. September 201312 j 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
3. September 201312 j Autor 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
3. September 201312 j edit1 war nicht mehr erlaubt: auch solltest du mal probieren ob du die \ mit \\ ersetzt.
3. September 201312 j 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.
5. September 201312 j Autor 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!
6. September 201312 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.