String an URI übergeben der ? = & enthällt

DStrohma

Bekanntes Mitglied
Hi,

ich will aus meiner Java-Anwendung eine Email mit meinem default Email-Client verfassen. Geht soweit auch alles. Dazu übergebe ich eben eine Adresse, ein Subjekt und den Body aber sobald z.B. der Body eines der folgenden Zeichen enthällt, gibt es Ärger...

& = ?

Deswegen weil die URI das interpretiert. ein "\" kann ich nicht machen und Unicode Formatierung der Zeichen geht auch nicht...

Das kann doch nicht sein dass ich diese Zeichen in einer generierten Email nicht verwenden kann oder???

Hier der relevante Code:

Code:
        Desktop desktop = Desktop.getDesktop();
        URI mailURI = new URI("mailto", email + "?SUBJECT=" + subject
                    + "&BODY=" + body, null);
            desktop.mail(mailURI);

wenn da jetzt wie gesagt "body" folgendes ist, dann geht es nicht:

Code:
String body = "Das ist der BODY mit & und = und ? und deswegen geht es nicht";

Irgendwelche Ideen??
Danke,
DS
 
Zuletzt bearbeitet:
Java:
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class Test  {

   public static void main(String[] args) throws UnsupportedEncodingException {

      String body = "Das ist der BODY mit & und = und ? und deswegen geht es nicht";
      System.out.println("Das kannst du sauber übertragen:");
      System.out.println(URLEncoder.encode(body, "UTF-8"));
   }

}
 
Sieht irgendwie nicht wirklich gut aus... Aber ich denke wir sind da schon auf dem richtigen Weg, irgendwie 😀

Code:
Das+ist+der+BODY+mit+%26+und+%3D+und+%3F+und+deswegen+geht+es+nicht
 
Java:
		String body = "Das ist der BODY mit %26 und %3D und %3F und deswegen geht es nicht";
		body = body.replace(" ", "%20");
		Desktop desktop = Desktop.getDesktop();
		URI mailURI = new URI("mailto:duke@sun.com?SUBJECT=hallo&BODY="+body);
		desktop.mail(mailURI);

(URL Encoding)
 
Das ist ja mal ne ganz komische Geschichte:

Code:
    public static void main(String[] args) {
        Desktop desktop = Desktop.getDesktop();
        String body = "Das ist der BODY mit %26 und %3D und %3F und deswegen geht es nicht";
        body = body.replace(" ", "%20");

        try {

            // Das geht nicht -----------------------------
            String email = "duke@sun.com";
            String subject = "hallo";
            URI mailURI = new URI("mailto:", email + "?SUBJECT=" + subject
                    + "&BODY=" + body, null);
            desktop.mail(mailURI);

            // Das geht -----------------------------------
            URI mailURI2 = new URI("mailto:duke@sun.com?SUBJECT=hallo&BODY="
                    + body);
            desktop.mail(mailURI2);

        } catch (Exception e) {
        }
    }
}

Der andere Konstruktor geht anders mit den Zeichen um... :shock: :autsch:
 
@eRaaaa

Wenn ich das so löse wie du es vorschlägst, dann geht es. Nur kann ich dann nicht mehr mit "\n" einen Zeilenumbruch im Body machen... Ich bin nicht auf "\n" fixiert aber auf jeden Fall auf den Zeilenumbruch. Kann ich den auch irgendwie anders darstellen???

Das "\n" kann ich leider nicht als HEX Code schreiben da das dann nicht mehr als Zeilenumbruch erkannt wird.

Code:
import java.awt.Desktop;
import java.net.URI;

public class TEST {
    public static void main(String[] args) {
        try {

            String body = "Das ist der BODY \n mit & und = und ? und deswegen geht es nicht";
            body = body.replace("&", "%26");
            body = body.replace(" ", "%20");
            // body = body.replace("\n", "%5Cn");

            String email = "duke@sun.com";
            String subject = "hallo";

            String uri = "mailto:" + email + "?SUBJECT=" + subject + "&BODY="
                    + body;

            Desktop desktop = Desktop.getDesktop();
            desktop.mail(new URI(uri));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
 
Zuletzt bearbeitet:
Klingt jetzt blöd aber ich arbeite ohne JavaDoc 😳
In der Arbeit werden die JavaDocs unter Eclipse nicht angezeigt und ich bin zu faul nach dem Grund zu suchen... Hab mich mittlerweile dran gewöhnt 😀
 
Das "\n" kann ich leider nicht als HEX Code schreiben da das dann nicht mehr als Zeilenumbruch erkannt wird.
Code:
  // body = body.replace("\n", "%5Cn");

->
Code:
 body = body.replace("\n", "%0a");
bzw.
Code:
body = body.replace("\n", "%3Cbr%3E");

wobei das jetzt alles ziemlich eklig wird so 🙂
(und liefert der URLEncoder nicht genau das selbe ?;/ bis auf dass er Spaces halt mit + darstellt... vllt wäre es besser URLEncoder zu benutzen und dann + durch %20 zu ersetzen? Keine Ahnung, klingt irgendwie aber auch :autsch: )
 
Zuletzt bearbeitet:
Wundervoll! Geht :toll::applaus:
Vielen vielen Dank!

Habs jetzt mit
Code:
body = body.replace("\n", "%0a");
gemacht. Einfach weil es wahrscheinlicher ist dass ein User ein "+" eingibt und das dann (falsch) als Space erkannt wird als dass er "%0a" eingibt.
 
Zuletzt bearbeitet:

Zurück
Oben