E = m c²
Extensible Message Checker

Introduction

E = m c² is a utility that can check various sources for messages, then filter and redistribute them.

A typical example is checking your mailbox and showing you a popup window if there are new messages, but it goes far beyond that since it's fully extensible using plugins. For example, you can check RSS files for new blog posts, monitor when a server comes online or goes offline, play a soundfile when new messages arrive, send a summary email, run a program, write to an RSS file, ...

Basically, you can make E = m c² do all you can think of! And it can do your laundry too (Pro version only)!

E = m c² Balloon

Features

Runtime

  • Fully extensible using plugins.
  • Settings are saved to an xml file so you can easily edit and copy it.
  • Certain settings can be encrypted if needed by plugins (e.g. passwords).
  • Runs in the background, it's basically just an icon in the system notification area.
  • Easy to install, set up and remove (if you could live without it).

Plugins

  • Check POP3 and IMAP email.
  • Check Outlook Web Access (OWA) and Outlook Mobile Access (OMA) email.
  • Check RSS 2.0 feeds.
  • Monitor the file system, i.e. get notified when directories or files change.
  • Monitor the network, i.e. get notified when the network or IP address changes.
  • Monitor server status (by ping or by checking a url).
  • Filter messages by content.
  • Write new messages to a text file or an RSS 2.0 feed.
  • Show a desktop alert, a message box or a rich message viewer when messages arrive.
  • Run a program, change the desktop background, play a sound or send an email when messages arrive.
  • ...And you can easily write your own!

Concepts

Runtime

The E = m c² runtime is the heart of the application. It basically does nothing else than drive the available plugins and allow you to configure them.

Plugins

Plugins come in five kinds: Triggers, Sources, Filters, Publishers and Hosted Plugins.

Triggers will initiate a message cycle. Sources will then check a certain source for new messages, which will be handed over to available Filters so unwanted items can be removed. Afterwards, the remaining messages will be sent to Publishers so they can publish them to some destination.

Hosted Plugins are a simpler kind of plugin that do not participate in the message cycle described above, but can still have their own settings and commands and will be loaded into E = m c² like the other types of plugins. This can be convenient for small pieces of functionality that would otherwise require a standalone application. Now they can just run inside the E = m c² host.

Channels (Advanced)

After a Trigger, the system will collect all messages from all enabled Sources, then send these through Filters to finally reach Publishers. The exact flow of these messages is defined by distribution channels. If you do not explicitly define channels, the messages will be sent through all enabled Filters to all enabled Publishers. If you do define distribution channels then you can specify the exact paths which the messages will follow.

Profiles (Advanced)

You can group different configurations in "Profiles", which are collections of plugins that are activated together. Adding profiles can help you configure different scenarios (e.g. during the day versus at night). The context menu in the system notification area allows you to quickly switch to another profile.

Getting Started

Installation

Before this application can be used, the .NET Framework Version 2.0 must be installed. It is available for free at Microsoft's download page for the .NET Framework. The application can be installed by executing the installer or by just copying it to a destination directory of your choice. Uninstalling can be done through the Windows control panel or (if you simply copied it) is just a matter of deleting the files again - there are no registry settings or other external items that are modified by the application.

E = m c² Overview

After installation, you can then run the application and configure the plugins you want to run (e.g. to check your mailbox and show a popup window when new mails arrive) in the Settings page. The screenshot below shows the overall layout of the application with the following sections:

  • Section 1: Actions. Contains application-wide actions and all actions that can be executed for the current view (depends on the selection in the Main Menu).
  • Section 2: Main Menu. Contains links to switch the current view between the E = m c² Configuration, the runtime Status, the application Options and the About screen.
  • Section 3: Quick Links. Contains links to the most common actions: to save all settings, control the runtime, and exit the application.
  • Section 4: Current View. Contains the user interface for the currently selected view in the Main Menu, e.g. to edit the configuration. Most of the time, additional help information is provided at the bottom of the screen.

Getting started with E = m c²

Adding Plugins

All you need to do to add a third-party plugin is to drop it into the program's folder (even while the program is running!) and it will automatically become available in the settings page. You can then create different instances of the plugin (e.g. to check multiple mailboxes) and configure their settings.

Developing Plugins

The program is written in .NET so all you need is any .NET compiler to create your own plugin classes. The only assembly you will need to reference is called "JelleDruyts.Emc.Common.dll", in which you will find the necessary base classes to inherit from. Please look at the developer documentation (help file) for more information on the available classes and how to use them to create your own plugins.

What's New?

v2.1 (December 28, 2007)

  • Added support for trigger plugins to provide a list of messages of their own when they trigger. This allows non-pull scenarios to be supported as well (i.e. not only receiving messages by "pulling" Source plugins, but "pushing" to deliver messages from within a trigger immediately).
  • Added support for "hosted" plugins, which don't actively participate in the message cycle but are just running in the context of E = m c². This means they don't handle messages but they can still have their own settings and commands. This can be convenient to host small pieces of functionality with settings that would otherwise require a standalone application.
  • Duplicated the "Change Background" as a separate "hosted" plugin so you can also use it as is, outside of the message cycle.
  • The "Change Background" plugins now support other background styles than just "stretch". The new StretchedWithAspectRatio option retains the aspect ratio of the original image while stretching it to fit the screen.
  • Added "Yahoo! Mail" plugin that retrieves messages from Yahoo! Mail (but you need to make sure that your account is still using the "classic" user interface for this to work).
  • Added "Network Changed" trigger, which triggers when the network changes (e.g. when you plug in or out of a network).
  • Added "Debug" publisher, which writes messages to the Windows debug stream.
  • The "Viewer" can now have message styles to color rows depending on certain message properties, e.g. the source of a message or its subject.
  • The "Viewer" can now be configured to have an initial window state, e.g. to make it start as maximized.
  • The template processor can now also use reflected properties, so not just the built-in tokens as before - e.g. $(Sender) - but also tokens that are taken from the value of a property on the (optionally subclassed) message at runtime. This provides better templating support for messages that are subclassed from the base EmcMessage class.
  • The "RSS Source" plugin now attempts to remember the read items between sessions of the application.
  • The "RSS Publisher" plugin now also writes the message recipients to the RSS feed so that a client also has access to the original message recipients.

v2.0 (April 15, 2007)

  • Completely rewrote the application, which means there may be breaking changes from the previous version. However, mostly the same functionality - and lots of extra features - should be available.
  • Added a Web host, which allows you to deploy the E = m c² runtime onto a Web server.
  • Added support for templates, which allows plugin settings to use tokens that are replaced with fields from messages (e.g. $(Sender) gets replaced by the message sender).
  • Added "Popup", "Desktop Alert", "Outlook Web Access", "Outlook Mobile Access" and "Change Background" plugins.

v1.3 (October 11, 2005)

  • Added checkbox "Add to all distribution channels" next to "Add Plugin" button so you can opt out of the default behaviour.
  • Fixed bug where plugins weren't disposed when new settings were applied.
  • Made the plugin properties panel show categories.
  • Made sure the Filters treenode in the settings screen is now always in between the Publishers and Subscribers nodes.
  • System notification area icon is now gray when the application is disabled.
  • Added Categories to the plugin settings.
  • Content Filter now works in Block or Pass mode and can be made case sensitive.
  • Renamed "Ping" source to "Server Status" because it now also supports checking an url to see if a certain server is online.
  • Added XslFileName to RSS Feed publisher.

v1.2 (May 31, 2003)

  • Added Distribution Channels.
  • Settings are now serialized without version information.
  • Updated the system notification area icon: when there are errors, it shows a white exclamation mark on a red background (as before) but when the last message cycle didn't cause any errors it becomes a red exclamation mark on a white background.
  • Messages are not distributed in a separate thread for each Subscriber anymore, a complete message cycle happens in only one worker thread.
  • Fixed bug where messages were checked when applying new settings while the application was not enabled.
  • Plugin properties window now shows the default value in the right-click popup menu to reset the value.
  • Added "Run Program", "Ping" and "Send Email" plugins.
  • Fixed bug where RSS Feed source wasn't reset properly after initialization.
  • Various enhancements to the Viewer publisher.

v1.1 (May 16, 2003)

  • Added Profiles.
  • Fixed "major" bug (thanks Doggi, how could I have missed this?): Einstein's formula is 'E = m c²' with a lowercase 'c'!
  • Fixed minor bug where the status screen didn't always show the right time messages would be checked next.
  • About screen is fancier :-)
  • Merged all plugins into one assembly.
  • Email source now supports top x lines of the email body.
  • RSS Feed source now supports secured websites with a username and password.

v1.0 (May 2, 2003)

  • Initial release.

License

© 2003-2007, Jelle Druyts

This software is licensed as freeware.

Copyright (c) 2003-2007, Jelle Druyts (http://jelle.druyts.net/)
All rights reserved.
 
Redistribution and use in source and binary forms, with or without modification, are permitted 
provided that the following conditions are met: 
 
(1) Redistributions of source code must retain the above copyright notice, this list of 
conditions and the following disclaimer. 
(2) Redistributions in binary form must reproduce the above copyright notice, this list of 
conditions and the following disclaimer in the documentation and/or other materials 
provided with the distribution. 
(3) The name of Jelle Druyts may not be used to endorse or promote products derived from
this software without specific prior written permission.
     
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS 
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.