Zum Inhalt springen

Den Default Mail Client aufrufen und eine Datei anhängen


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Gast runtimeterror
Geschrieben

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.

Geschrieben

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

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...