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!