I read a couple of RSS feeds regularly. Unfortunately, I work across a couple of machines: my laptop, the machine in the office, my wife’s laptop. This rules out using a local RSS reader as I’d have to manage the redundant subscriptions let alone I’d have to remember which feed entries I have already read and which one not. Sure, I could use Google’s feed reader but being mostly eMail centric anyway I’d love to see RSS feed entries in my INBOX. But wait! Mule has RSS support and it can send emails … why not hack this together in Mule?
Polling the feed
Retrieving an RSS feed is easy using the
This config snippet polls the feed URL every 10 seconds.
Parsing the feed
The RSS module handles all the parsing and splitting. All we need is a feed splitter:
This will parse the payload of the HTTP request and split the RSS feed into individual
SyndEntry instances. Each
SyndEntry will be sent as a separate
Preparing the message
The SMTP transport expects the sender, recipient and subject as properties of the
MuleMessage that’s being sent to the endpoint. Let’s add a message properties transformer to enrich the message:
The fromAddress and toAddresses are hardcoded for now. The subject is extracted from the message’s payload using the Groovy expression evaluator. Remember that the payload is actually a
Before we can finally send out an eMail we must give it a body. The SMTP transport uses the payload of the
MuleMessage it receives as the mail body. It would have a hard time converting the
SyndEntry into a meaningful text – that’s our job. Again, Mule’s expression language comes in handy to transform the payload:
This extracts the description of the
SyndEntry which is actually a
SyndContent instance. We want the value of that content object as payload of the
Sending the message
Now that the
MuleMessage is in shape we can actually route it to an SMTP outbound endpoint:
Note that the SMTP transport expects a
MimeMessage as the payload of the
MuleMessage, hence the
That’s it. We have implemented a simple bridge from RSS to eMail in Mule without actually writing code.
I have put a working project up on github so you can download and try it out locally.
You’ll notice that running this service can pretty quick become a spambot. While the RSS feed splitter makes sure it sends out each feed entry only once it does not persist that information. So when you restart the rss2mail application you’ll get eMail for feed entries you most probably have already read. I’ll leave the fix for this issue for the next blog post, though.