Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Den Default Mail Client aufrufen und eine Datei anhängen

Empfohlene Antworten

Veröffentlicht

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:

post-88019-14430449667485_thumb.jpg

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! :)

  • 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 :)

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.

  • 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!

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

Und? Erfolg gehabt?

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.