<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>The blog of Jonathan Rudenberg.

GitHubTwitter</description><title>Titanous</title><generator>Tumblr (3.0; @titanous)</generator><link>http://blog.titanous.com/</link><item><title>Mailman 0.3.0 released</title><description>&lt;p&gt;&lt;a href="http://github.com/titanous/mailman"&gt;Mailman&lt;/a&gt; 0.3.0 has been released. There
are three new features:&lt;/p&gt;

&lt;h3&gt;CC condition&lt;/h3&gt;

&lt;p&gt;Messages can now be matched based on the CC header:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;cc 'bob@example.com' do
  # Process message
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Class routing&lt;/h3&gt;

&lt;p&gt;You can now use instance methods as well as blocks to process
messages. This allows you to use a #receive method in a Rails mailers:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Notifier &lt; ActionMailer::Base
  default :from =&gt; 'notifier@example.com'
  # Regular mailer setup and methods here

  def receive(message, params)
    # Process reply to notification messages
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Mailman app:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Mailman::Application.run do
  to 'notifier@example.com', Notifier
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;POP3 SSL&lt;/h3&gt;

&lt;p&gt;SSL is now supported by the POP3 receiver, which means that you can use
Gmail out of the box with Mailman:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Mailman.config.pop3 = {
  :username =&gt; 'chunkybacon@gmail.com',
  :password =&gt; 'foobar',
  :server   =&gt; 'pop.gmail.com',
  :port     =&gt; 995,
  :ssl      =&gt; true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For more information on these features, and how to use Mailman, take a look
at the &lt;a href="http://rubydoc.info/github/titanous/mailman/master/file/USER_GUIDE.md"&gt;User Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As always if you have any problems or feature requests, please open an issue
on the &lt;a href="http://github.com/titanous/mailman/issues"&gt;GitHub issue tracker&lt;/a&gt;.
Even better, if you can fix it or write the feature yourself, then fork the
project, and send me a pull request (please remember to write specs for
features).&lt;/p&gt;

&lt;p&gt;This is the last release under the sponsorship of the &lt;a href="http://rubysoc.org/"&gt;Ruby Summer of
Code&lt;/a&gt;. I’d like to thank all the sponsors and my mentor, &lt;a href="http://blog.stevensoroka.ca/"&gt;Steven
Soroka&lt;/a&gt; for helping me to create Mailman.&lt;/p&gt;</description><link>http://blog.titanous.com/post/1054629263</link><guid>http://blog.titanous.com/post/1054629263</guid><pubDate>Thu, 02 Sep 2010 16:07:35 -0400</pubDate></item><item><title>Mailman Released!</title><description>&lt;p&gt;I just released my &lt;a href="http://rubysoc.org"&gt;Ruby Summer of Code&lt;/a&gt; project,
&lt;a href="http://github.com/titanous/mailman"&gt;Mailman&lt;/a&gt; as a gem. You can install
it by running &lt;code&gt;gem install mailman&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;What is Mailman?&lt;/h3&gt;

&lt;p&gt;Mailman is an incoming email processing microframework. You point it at a
source of email, such as a POP3 account or a Maildir, and it will execute
routes based on the messages that come in.&lt;/p&gt;

&lt;p&gt;For instance if you had a ticketing system, and wanted to add replies via
email to the database, this application would be a good start:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;require 'mailman'

Mailman.config.maildir = '~/Maildir'

Mailman::Application.run do
  to 'ticket-%id%@vipsupport.com' do 
    Ticket.find(params[:id]).add_reply(message)
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;For more information take a look at the &lt;a href="http://yardoc.org/docs/titanous-mailman/file:USER_GUIDE.md"&gt;User
Guide&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;How can I help?&lt;/h3&gt;

&lt;p&gt;If you are already processing incoming email for an app using a different
system, please give Mailman a try, and let me know where the docs are thin,
what features are missing, and any bugs you run into.&lt;/p&gt;

&lt;p&gt;If you are starting a new project with incoming email, please use Mailman
for it, and give me feedback.&lt;/p&gt;

&lt;p&gt;The best way to leave feedback is through the GitHub &lt;a href="http://github.com/titanous/mailman/issues"&gt;Issue
Tracker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have some spare time and want to write documentation or patches,
feel free to write them, and send me a pull request on GitHub.&lt;/p&gt;

&lt;h3&gt;Thanks!&lt;/h3&gt;

&lt;p&gt;This project is sponsored by the &lt;a href="http://rubysoc.org"&gt;Ruby Summer of Code&lt;/a&gt;.
My mentor is &lt;a href="http://blog.stevensoroka.ca/"&gt;Steven Soroka&lt;/a&gt;. I’ve been
working from a desk that &lt;a href="http://www.shopify.com/"&gt;Shopify&lt;/a&gt; is kindly
providing in their office.&lt;/p&gt;</description><link>http://blog.titanous.com/post/867488976</link><guid>http://blog.titanous.com/post/867488976</guid><pubDate>Tue, 27 Jul 2010 16:59:00 -0400</pubDate></item><item><title>Mailman Midterm Update</title><description>&lt;p&gt;&lt;a href="http://github.com/titanous/mailman" title="GitHub repo"&gt;Mailman&lt;/a&gt; is my &lt;a href="http://rubysoc.org"&gt;Ruby
Summer of Code&lt;/a&gt; project. It’s an incoming email
processing microframework. The basic functionality is to receive
messages, and route them to blocks of code based on conditions.&lt;/p&gt;

&lt;p&gt;Before Mailman, there was no standard way of processing incoming emails in
Ruby. Many Rails apps use one-off IMAP or POP3 pollers. Mailman aims to
replace them with its Rails integration, and upcoming ActionMailer
integration.&lt;/p&gt;

&lt;p&gt;The DSL is inspired by &lt;a href="http://www.sinatrarb.com"&gt;Sinatra&lt;/a&gt;. For example,
here is a Mailman route that takes a reply via email to a support ticket,
and adds it to the database:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;to 'ticket-%id%@vipsupport.com' do 
  Ticket.find(params[:id]).add_reply(message)
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Conditions (like &lt;code&gt;to&lt;/code&gt;) and matchers like the &lt;code&gt;StringMatcher&lt;/code&gt; above are all
modular, and it is very easy to write more. Currently there are &lt;code&gt;String&lt;/code&gt; and
&lt;code&gt;Regexp&lt;/code&gt; matchers and conditions for most basic email components.&lt;/p&gt;

&lt;h3&gt;Features&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Complete&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Router&lt;/li&gt;
&lt;li&gt;Basic Conditions&lt;/li&gt;
&lt;li&gt;Matchers&lt;/li&gt;
&lt;li&gt;DSL&lt;/li&gt;
&lt;li&gt;Configuration system&lt;/li&gt;
&lt;li&gt;POP3 Receiver&lt;/li&gt;
&lt;li&gt;Standard input receiver&lt;/li&gt;
&lt;li&gt;Maildir receiver&lt;/li&gt;
&lt;li&gt;Rails environment loading&lt;/li&gt;
&lt;li&gt;Basic Documentation&lt;/li&gt;
&lt;li&gt;Debug logging&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Incomplete&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;ActionMailer integration&lt;/li&gt;
&lt;li&gt;Bounce Detection&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Thanks&lt;/h3&gt;

&lt;p&gt;I’d like to thank these organizations/people:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://rubysoc.org"&gt;Ruby Summer of Code&lt;/a&gt; and all their sponsors for the
financial support that allows me to put time into the project.&lt;/p&gt;

&lt;p&gt;My mentor &lt;a href="http://twitter.com/ssoroka"&gt;Steven Soroka&lt;/a&gt; for the motivation
and advice that has helped me get this far.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.shopify.com/"&gt;Shopify&lt;/a&gt; for providing a desk to work at and great
developers to bounce ideas off of.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.engineyard.com/"&gt;Engine Yard&lt;/a&gt; for their donation of RailsConf
tickets to RSoC.&lt;/p&gt;</description><link>http://blog.titanous.com/post/833114382</link><guid>http://blog.titanous.com/post/833114382</guid><pubDate>Mon, 19 Jul 2010 15:38:00 -0400</pubDate></item></channel></rss>

