Standard Mail Client in Java aufrufen

Open standard mail in Java 300x150 Standard Mail Client in Java aufrufenIm 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!

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.