====== MailService in OSGi ====== OSGi itself doesn't provide you with a mail service and most osgi container don't provide one either. But it is not very difficult to write a simple mail service yourself. ===== Step 1: Install Apache Commons Email ===== Apache Commons Email does the heavy lifting when it comes to sending emails. install mvn:org.apache.commons/commons-email/1.3.3 ===== Step 2: MailService ===== This sample service is all you need for a start: public class MailService { public void send(String subject, String message, String receiver) { // backup classloader ClassLoader cl = Thread.currentThread().getContextClassLoader(); try { // switch to tccl so that javamail can resolve data content handlers Thread.currentThread().setContextClassLoader(javax.mail.Session.class.getClassLoader()); Email email = new SimpleEmail(); email.setHostName(mailHost); email.setSmtpPort(mailPort); email.setFrom(mailSender); email.addTo(receiver); email.setSubject(subject); email.setMsg(message); email.send(); } catch(Exception e) { logger.error("E-mail konnte nicht versandt werden.", e); } finally { // set original classloader Thread.currentThread().setContextClassLoader(cl); } } } You need to take of classloaders as the javax.mail package from Sun/Oracle does some assumptions on classloaders which are not met in an OSGi environment. ===== Step 3 : Configuration ===== You probably want to keep the service configurable. So you best use the ConfigAdmin for configuration and implement the ManagedService interface. public class MailService implements IMailService, ManagedService { ... @Override public void updated(Dictionary properties) throws ConfigurationException { if (properties == null || properties.isEmpty()) { return; } Object value = properties.get("mail.host"); if (value != null) { mailHost = value.toString(); } value = properties.get("mail.port"); if (value != null) { mailPort = Integer.parseInt(value.toString()); } value = properties.get("mail.sender"); if (value != null) { mailSender = value.toString(); } } } {{tag>java osgi}}