Im folgenden Beitrag gibt es wieder mal ein kleines Code-Snippet, mittels welchem das Standard Mailprogramm in Java aufgerufen werden kann.
Um die Standard-Mail-Applikation in nahezu beliebigen Betriebssystemen zu öffnen, eignet sich ein URI mit dem mailto-Protkoll. So muss der folgende Java-Code dazu in der Lage sein den mailto-URI zusammenzusetzen.
Die zweite Schwierigkeit liegt nun darin, diesen URI aufzulösen bzw. auszuführen. Dieser kann leider nicht direkt per Runtime.getRuntime().exec()-Befehl ausgeführt werden, sondern muss als Parameter über ein systemspezifisches Programm gestartet werden. Unser Java-Snippet muss also zwischen den Betriebssystemen unterscheiden können.
Standard Mail in Java öffnen
Der Beispiel-Code kann so wie er ist ausgeführt werden und öffnet das Standard-Mailprogramm mit ein paar Test-Parametern. Im wesentlichen besteht das Snippet aus zwei Funktionen: Zum einen aus der composeEmail-Funktion, welche den mailto-URI erstellt, den Betriebssystem-spezifischen Aufrufbefehl erzeugt und diesen ausführt und zum anderen aus der uriEncode-Funktion, welche als Hilfsfunktion dient und die Parameter des mailto-URI enkodiert.
Wie die Unterscheidung der Betriebssysteme funktioniert, könnt ihr hier nachlesen. Nachfolgend lasse ich den Code bzw. dessen Kommentare für sich sprechen:
public class MailHelper { public static void main(String[] args) { try { //Mailprogramm öffnen mit "Empfänger", "Betreff", "Nachricht" composeEmail("webmaster@code-bude.net", "Danke für das Snippet!", "Hallo Raffael,\r\ndiese Mail wurde per Java-Snippet versendet."); } catch (Exception err) { err.printStackTrace(); } System.out.println("Done!"); } public static void composeEmail(String receiver, String subject, String body) throws Exception { //Mailto-URI zusammensetzen. Betreff und Body müssen encodiert werden String mailto = "mailto:" + receiver; mailto += "?subject=" + uriEncode(subject); mailto += "&body=" + uriEncode(body); //Run-Befehl je nach Betriebssystem erzeugen String cmd = ""; String os = System.getProperty("os.name").toLowerCase(); if (os.contains("win")){ cmd = "cmd.exe /c start \"\" \"" + mailto + "\""; } else if (os.contains("osx")){ cmd = "open " + mailto; } else if (os.contains("nix") || os.contains("aix") || os.contains("nux")){ cmd = "xdg-open " + mailto; } //Mail-Client mit Parametern starten Runtime.getRuntime().exec(cmd); } private static String uriEncode(String in) { String out = new String(); for (char ch : in.toCharArray()) { out += Character.isLetterOrDigit(ch) ? ch : String.format("%%%02X", (int)ch); } return out; } }
Sollte etwas unklar sein, scheut euch nicht einen Kommentar zu hinterlassen. Wenn ihr noch Ideen habt, wie man den Code verbessern kann, bin ich ebenfalls für jeden Kommentar dankbar. Ansonsten – viel Spaß beim Programmieren!
If you’re still on the fence: grab your favorite earphones, head down to a Best Buy and ask to plug them into a Zune then an iPod and see which one sounds better to you