code: @Override
  	public void send(Message message) throws MessagingException {
  		try {
  			delegate.send(message);
  		} catch (MessagingException e) {
  			throw e; // this is wanted to avoid wrapping MessagingException with
  						// MessagingException
  		} catch (IllegalArgumentException e) {
  			throw new MessagingException("Message can't be sent due to precondition not met. Cause: " + e.getMessage(), e);
  		} catch (IllegalStateException e) {
  			throw new MessagingException("Message can't be sent due to some illegal use. Cause: " + e.getMessage(), e);
  		} catch (Exception e) {
  			throw new MessagingException("Message can't be sent due to uncaught exception. Cause: " + e.getMessage(), e);
  		}
  	}
docs: Sends the message. The message can be anything with any content and that
  must be delivered to something or someone.
  
  If there is any exception, it caught and translated in
  {@link MessagingException}.
  
  @param message
  the message to send
  @throws MessagingException
  when the message couldn't be sent