views:

181

answers:

2

Can anyone recommend a good gem or library for managing a mailing list with Ruby? No Rails solutions, if possible, please (I don't want to have ActionWhatever dependencies, this will most likely be done with Ramaze).

I just need basic features, like management of the list itself (CRUD operations on the user list), plus being able to send notifications, welcome messages, and also auto respond to basic things like subscribe and unsubscribe.

Optimally, people should be able to subscribe via both a Ramaze web page (i.e. I'd have Ramaze call/access the lib's API), as well as by sending an email to a specific email address. But I am willing to forego the operations by email.

I'm willing to entertain non-Ruby, or non-programmatic solutions, if they are good, but the ability to subscribe from a web page [under my control] is a must.

EDIT: Sorry, one important detail I forgot to add: This is intended to be a one-way mailing list. That is, people should be able to subscribe and unsubscribe alright, but only one person should be allowed to send to the list for broadcasting.

+2  A: 

I'm not exactly sure about your requirements. If you only need basic features, why do you care what language it is implemented in? You would only need to know this if you need advanced features that you have to implement yourself!

Given your requirements, pretty much any mailing list server will fit the bill.

However, there is a specific suggestion I would like to make, just because I think it is an extremely cool example of a refreshing take on e-mail applications: Lamson.

Lamson is not a mailing list server, rather it is an e-mail application development framework (similar to how Rails is a web application development framework). Lamson is not written in Ruby, but in Python, but it is quite simply the best thing that has happened to e-mail since, well, ever. It was written by Zed Shaw (of Mongrel fame), and is based on the premise that just like Rails proved that web development doesn't have to be a PITA, e-mail development doesn't have to be, either. (In that way it is similar to Adhearsion, which also took the ideas of Rails and applied to a totally different domain, in this case telephony.)

There is already a mailing list service based on Lamson, called Libre List, which (naturally) hosts the Lamson mailing lists, among others. The source code to Libre List is included in the Lamson source distribution as an example.

Jörg W Mittag
The reason I care about the language it's written in is that I want to be able to subscribe email addresses programmatically. If that can be done via some kind of specially-formulated GET or POST request, that would do, too. I'll check out Lamson; thanks for the suggestion.
Pistos
Many popular mailing list managers use a database for storage. You could just write the addresses into the database with a bit of Sequel / DataMapper / ActiveRecord code. Note that Lamson / Libre List can use a whole bunch of different storage options, including (but not limited to) plain text files, Django models, SQLite. Again, it should be trivial to write to such a thing from Ruby. And lastly, if you end up using Lire List, adding a single simple REST action to it which lets you `POST` an address in order to subscribe should not be too hard, even if you don't know Python and/or Django.
Jörg W Mittag
Sounds good, Jörg! Thanks. I'm not against writing Python, but if it can accept a simple POST to subscribe, then that should be doable from any language.
Pistos
Okay, I looked at LibreList, and it looks fabulous... except I forgot to add one important detail. See the comment I just added to my original question.
Pistos
A: 

I ended up going with Google Groups. (If silky would care to add an official answer to this effect, I would gladly mark it as the official accepted answer.)

Google Groups lets you alter settings so that you can have a "newsletter" like I wanted (i.e. single sender, multiple recipients). It also has an embeddable HTML snippet ready to go for quick subscription from a web page under your control.

Pistos