<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Anthony R. Thompson&#039;s Blog &#187; conversion</title>
	<atom:link href="http://blog.anthonyrthompson.com/tag/conversion/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.anthonyrthompson.com</link>
	<description>Helpful Things</description>
	<lastBuildDate>Tue, 26 Oct 2010 17:47:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Listserv to Mailman Part 3.3: Tips, Tricks, and Notes</title>
		<link>http://blog.anthonyrthompson.com/2010/07/listserv-to-mailman-tips-tricks-notes/</link>
		<comments>http://blog.anthonyrthompson.com/2010/07/listserv-to-mailman-tips-tricks-notes/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 03:18:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech Tips]]></category>
		<category><![CDATA[bookmarks]]></category>
		<category><![CDATA[commands]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[inodes]]></category>
		<category><![CDATA[listserv]]></category>
		<category><![CDATA[mailman]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://blog.anthonyrthompson.com/?p=29</guid>
		<description><![CDATA[An appendix listing some commands I found useful, some notes I made along the way that are worth reading through, and some other pages I found helpful and which hadn't been mentioned already.]]></description>
			<content:encoded><![CDATA[<p>During our Listserv to Mailman migration, I started keeping a tips file to remind myself of the syntax for helpful commands, so I wanted to share those tidbits here as an appendix along with some notes/caveats and useful pages on other sites.</p>
<h1>Commands</h1>
<ul>
<li>To see all the settings for a mailman list: /usr/lib/mailman/bin/config_list -o &#8211; &#8216;listname&#8217;  (outputs to screen; use -o filename to output to a file)</li>
<li>To see a list&#8217;s settings minus comments and whitespace: config_list -o &#8211; &#8216;listname&#8217; | perl -ne &#8216;print unless /(^#|^\s*$)/&#8217;</li>
<li>To change the password for a list: /usr/lib/mailman/bin/change_pw -l &#8216;listname&#8217; -p &#8216;newpass&#8217; -q (the -q prevents a notice going to the list owners)</li>
<li>To show the subscribers of a list: /usr/lib/mailman/bin/list_members -f &#8216;listname&#8217; (the -f shows full names for subscribers)</li>
<li>To show the owners of a list: /usr/lib/mailman/bin/list_owners &#8216;listname&#8217; (if you use list_admins instead, it seems to do the same thing)</li>
<li>To rebuild all list archives (in bash): for list in `/usr/lib/mailman/bin/list_lists -b | egrep -v &#8216;^mailman$&#8217;`; do /usr/lib/mailman/bin/arch &#8211;wipe $list; done</li>
<li>To restart Mailman (as root or mailman user): /etc/init.d/mailman restart</li>
<li>To one or more list settings for a list: config_list -o &#8211; &#8216;listname&#8217; &gt; tmp.txt; then edit tmp.txt to leave only the setting you want to change; config_list -i tmp.txt &#8216;listname&#8217;</li>
<li>To apply a setting change to multiple lists, use config_list -o &#8211; &#8216;listname&#8217; &gt; tmp.txt and edit tmp.txt as above, but then use shell looping: or list in adf-foo adf-bar etc; do config_list -i setting.txt $list ; done</li>
</ul>
<h1>Notes</h1>
<p>I&#8217;d intended to list here each code file I&#8217;m making available along with a description, but instead I put the <a href="/listserv-to-mailman/code/">code descriptions</a> in the Apache directory pages so just look there.</p>
<p>The Mailman logs on our server are in /var/log/mailman and /var/log/mailman/error contains the most recent errors.</p>
<p><strong>Important</strong>: Our list host informed me that the default &#8220;mailman&#8221; list <em><strong>must</strong></em> be kept around, you can&#8217;t just delete it or important Mailman things will (apparently) break. So you&#8217;ve been warned <img src='http://blog.anthonyrthompson.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>To increase the max # of recipients for a message to be able to get posted (in case you have lists where legitimate posts get rejected due to having too many recipients), see the max_num_recipients setting, which is in the Privacy Options -&gt; Recipient Filters part of the web interface.</p>
<p>I created the <a href="/listserv-to-mailman/code/utils/arch_wipe_all">arch_wipe_all</a> script because I&#8217;d tried running the commands in it from the shell but it took so many hours (70+ lists and 10+ years of archives) that my shell would get disconnected and I&#8217;d have to start over completely. By putting the commands in a script I could preface it with <a href="http://en.wikipedia.org/wiki/Nohup">nohup</a> so it would keep running even if I got disconnected.</p>
<p>I noticed in /etc/mailman/postfix-to-mailman.py that if DEB_LISTMASTER isn&#8217;t set in /etc/mailman/mm_cfg.py or /usr/lib/mailman/Mailman/Defaults.py that error mail will go to postmaster@localhost, but I wanted it sent to another address in our organization so I added <strong>DEB_LISTMASTER = &#8216;addr@ourhost.org&#8217;</strong> to the bottom of /etc/mailman/mm_cfg.py.</p>
<p>Pre-migration messages in people&#8217;s mailboxes had links to the old Listserv archives  in the footer, so even though we changed the footer for Mailman, we needed to provide redirects in case someone used an old link. We did this with an <a href="http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html">Apache URL Rewrite rule</a> to redirect http://lists.ourhost.org/archives/listname.html to http://lists.ourhost.org/cgi-bin/mailman/private/listname/:</p>
<blockquote><p>RewriteEngine on<br />
RewriteRule ^archives/(.+)\.html$ http://lists.us.org/cgi-bin/mailman/private/$1/ [R]</p></blockquote>
<p>(the second line, the RewriteRule, needs to be all on one line)</p>
<p>During one part of our disk issues converting our archives, our server admin said we&#8217;d maxed out our number of inodes (files and directories), probably because of the large number of archive related files (70+ lists for 10+ years). If you see errors like &#8220;unable to write file&#8221;, you can check the inodes used on the disk itself with <strong>df -i</strong>, and check inodes for your user with <strong>quota -sv username</strong>.</p>
<h1>Bookmarks</h1>
<p>The following pages weren&#8217;t listed in other parts of the guide and may be useful:</p>
<ul>
<li><a href="http://wiki.list.org/display/DOC/4.09+Summary+of+the+mailman+bin+commands">Summary of the Mailman bin command line programs</a></li>
<li><a href="http://staff.imsa.edu/~ckolar/mailman/mailman-administration-v2.html">Mailman List Management Guide</a> (2001 though, but has good settings descriptions)</li>
<li><a href="http://8help.osu.edu/3794.html">Changing List Owners On A Mailman Mailing List</a></li>
<li><a href="http://wiki.list.org/pages/viewpage.action?pageId=4030648">How do I integrate Mailman with PHP, or any other web technology?</a></li>
<li><a href="http://www.gnu.org/software/mailman/mailman-install/">Mailman Installation Manual</a></li>
<li><a href="http://www.list.org/mailman-member/">Mailman List Member Manual</a></li>
<li><a href="http://therowes.net/~greg/2007/09/03/regenerating-large-mailman-archives/">Regenerating Large Mailman Archives</a> (I did not have to do the steps in this page even though our archives are 10+ years)</li>
<li><a href="http://wiki.list.org/pages/viewpage.action?pageId=7602232">How to edit the archives of a Mailman List</a></li>
<li><a href="http://wiki.list.org/pages/viewpage.action?pageId=4030681">How to remove a post from a Mailman list archive, or an entire archive</a> (Note: to remove a post completely, I prefer to use <a href="http://kb.mozillazine.org/Importing_and_exporting_your_mail">Thunderbird to edit the mbox file</a>)</li>
<li><a href="http://www.esosoft.com/support/mailinglist/mailman/bounce.html">Mailman bounce processing explanations</a></li>
<li><a href="http://listserv.du.edu/faq.html">Mailman Frequently Asked Questions</a></li>
</ul>
<p><strong>Up</strong>: <a href="/listserv-to-mailman/">Table of Contents</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonyrthompson.com/2010/07/listserv-to-mailman-tips-tricks-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listserv to Mailman Part 3.1: Converting Listserv Archives to Mailman</title>
		<link>http://blog.anthonyrthompson.com/2010/06/listserv-to-mailman-converting-listserv-archives-to-mailman/</link>
		<comments>http://blog.anthonyrthompson.com/2010/06/listserv-to-mailman-converting-listserv-archives-to-mailman/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 07:52:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech Tips]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[archives]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[listserv]]></category>
		<category><![CDATA[mailman]]></category>
		<category><![CDATA[mbox]]></category>
		<category><![CDATA[notebook]]></category>

		<guid isPermaLink="false">http://blog.anthonyrthompson.com/?p=22</guid>
		<description><![CDATA[Converting Listserv's proprietary notebook files to Mailman's mbox format, generating web-viewable archive pages from the mbox files, and an important note about disk space.]]></description>
			<content:encoded><![CDATA[<p>Note: You could end up using <em>ten times</em> as much disk space as your uncompressed Listserv archives, after converting them to Mailman&#8217;s mbox format and using Swish to index them for searching. If that amount of disk space could be an issue for you, see &#8220;A Word About Disk Space&#8221; at the end of this page.</p>
<h1>Introduction</h1>
<p>If you&#8217;re converting Listserv lists to Mailman, you probably want to keep your list archives too. The good news is that the Listserv archive format is plain text and is actually <a href="http://www.lsoft.com/manuals/1.8d/qs/editlogs.html">pretty well documented</a>. The bad news is that it&#8217;s a custom proprietary format, not something common like the Unix &#8220;mbox&#8221; format, so conversion will be necessary.</p>
<p>Mailman actually <em>wanted</em> the archives to be in mbox format, so that&#8217;s what we converted the Listserv archives to. In fact, one of our lists had a lot of spam in its archives so after we did the conversion, but before we imported into Mailman, we <a href="http://kb.mozillazine.org/Importing_and_exporting_your_mail">opened the mbox file in Thunderbird</a>, deleted the spam messages, and then saved the file back to mbox for importing into Mailman.</p>
<p>After converting the Listserv archives to mbox format, we had to move the mbox files to the right locations for Mailman to generate HTML archive pages, and then use Swish to index the HTML pages and do a little Mailman fiddling to keep private archives private (including search results). But first, more about the archive conversion process.</p>
<h1>Converting the Archive Files</h1>
<p>My archive conversion journey began with a Perl script called <a href="/listserv-to-mailman/code/ls2mail.pl">ls2mail.pl</a> that was <a href="http://www.hypermail-project.org/archive/99/1216.html">posted in 1999</a> and claimed to convert from Listserv&#8217;s archive format to mbox for Mailman.</p>
<p>The admin of our old Listserv modified it a bit to fix an unspecified &#8220;potentially nasty bug&#8221;, and I modified it further to 1) skip messages with dates earlier than the earliest legitimate post and later than the current year (to weed out spam messages with invalid dates), and 2) better match the <a href="http://en.wikipedia.org/wiki/Mbox">mboxrd</a> format (by quoting body lines beginning with &#8220;From&#8221;).</p>
<p>First, our Listserv archives were broken up into weekly archive files named <em>listname</em>.log<em>YYMMw</em> where <em>YY</em> is the year of the archive file, <em>MM</em> is the month, and <em>w</em> is the week (a = first week, b = second, up to e for a month with five weeks). For example, listname.log0901a was the Listserv archive file for the first week of January, 2009.</p>
<p>I decided it would be better to rename the files to use four digit years instead of two (i.e., <em>listname</em>.log<em>YYYYMMw</em>), so I used a small Perl utility called <a href="/listserv-to-mailman/code/utils/perlren">perlren</a> to rename the files according to  a Perl regular expression. So for each list I did:</p>
<pre>perlren 's#log1#log201#' *.log*
perlren 's#log9#log199#' *.log*
perlren 's#log0#log200#' *.log*</pre>
<p>Then I wanted a master file for each list which would have a sorted listing of all archive files (and because of the rename above, an alpha sorting was also a date sorting):</p>
<pre>ls -1 *.log* &gt; archive-files.txt</pre>
<p>(I used a general name like archive-files.txt since all the log files for each list were grouped into a separate directory for each list.)</p>
<p>Then I used that file as a basis of making a file containing <strong>all</strong> the Listserv log files combined into one big file, in order:</p>
<pre>perl -ne 'print "Processing $_"; chomp; print `cat $_ &gt;&gt; abc-listname.ls`;' \
  archive-files.txt
</pre>
<p>Finally, I ran the <a href="/listserv-to-mailman/code/ls2mail.pl">ls2mail.pl</a> conversion script on the master Listserv log file to convert it to mbox format:</p>
<pre>perl ~/mailman/ls2mail.pl &lt; abc-listname.ls &gt; abc-listname.mbox</pre>
<h1>Generating Mailman&#8217;s HTML Archive Pages</h1>
<p>To generate the viewable HTML pages for Mailman&#8217;s web archive, I just had to move this new mbox file to the appropriate Mailman list archive directory (e.g., /var/lib/mailman/archives/private/abc-listname.mbox/) and run the Mailman bin &#8220;arch&#8221; command to generate the HTML archive pages from the mbox file:</p>
<pre>mv abc-listname.mbox /var/lib/mailman/archives/private/abc-listname.mbox/
/usr/lib/mailman/bin/arch --wipe abc-listname \
  /var/lib/mailman/archives/private/abc-listname.mbox/abc-listname.mbox</pre>
<p>(the &#8211;wipe option tells arch to overwrite any existing HTML pages with newly-generated ones from the mbox file, but since this was a new list that wasn&#8217;t a problem)</p>
<p>Once I&#8217;d tested this with one list, I repeated the process automatically with the other lists by doing something like the following (using command looping in the bash shell again):</p>
<pre>cd /var/lib/mailman/archives/private
for list in abc-list1 abc-list2 abc-list3 etc;
do cd $list;
perlren 's#log1#log201#' *.log*;
perlren 's#log9#log199#' *.log*;
perlren 's#log0#log200#' *.log*;
ls -1 *.log* &gt; archive-files.txt;
perl -ne 'print "Processing $_"; chomp; print `cat $_ &gt;&gt; archive.ls`;' \
  archive-files.txt;
perl ~/mailman/ls2mail.pl &lt; archive.ls &gt; $list.mbox;
mv $list.mbox ../$list.mbox/;
/usr/lib/mailman/bin/arch --wipe $list ../$list.mbox/$list.mbox;
cd ..;
done</pre>
<p>By doing this, all the existing list archives were converted from Listserv archives (combined into .ls files) to Mailman .mbox archive files, and HTML web-viewable archives pages were generated by Mailman&#8217;s arch command.</p>
<h1>A Word About Disk Space<strong><br />
</strong></h1>
<p>I ran into disk space limits several times during this conversion process.</p>
<p>First, our old list host gave us the Listserv archives as one large compressed .tar.gz file—which expanded to triple the size, requiring 4x the size to accommodate both the gzip file and its uncompressed files.</p>
<p>Furthermore, I found that after concatenating all the individual Listserv .log files into one giant Listserv notebook archive .ls file (so, disk space times two for that step), the conversion to mbox format caused the resulting mbox file to take up about 60% more space than the .ls files.</p>
<p>Then running the Mailman arch command on the mbox files generated HTML pages that took up about twice as much space as the corresponding mbox files.</p>
<p>And <em>then</em> the Swish search index files took up about 55% of the size of the HTML archive pages, so that was another bunch of disk space.</p>
<p>The following table shows, step by step, how a 350MB compressed Listserv archive file ballooned up to almost 10GB:</p>
<table cellpadding="5" width="100%">
<tbody>
<tr>
<th>Item/Action</th>
<th>Item Size</th>
<th>Total GB</th>
</tr>
<tr>
<td>Original Gzipped (compressed) Listserv archive files, as one big .tar.gz file</td>
<td>0.35GB</td>
<td>0.35GB</td>
</tr>
<tr>
<td>Uncompressed Listserv archives, indiv .log files (gzip file x 3 due to 1/3 comp ratio)</td>
<td>1.05GB</td>
<td>1.40GB</td>
</tr>
<tr>
<td>Concatenate .log files for each list into .ls Listserv archives (same size as .log files)</td>
<td>1.05GB</td>
<td>2.45GB</td>
</tr>
<tr>
<td>Convert .ls Listserv archive files to mbox files (about 60% bigger than .ls files)</td>
<td>1.68GB</td>
<td>4.13GB</td>
</tr>
<tr>
<td>Run arch on mbox files to generate HTML pages (about 2x size of mbox files)</td>
<td>3.36GB</td>
<td>7.49GB</td>
</tr>
<tr>
<td>Create Swish indexes from HTML pages (about 55% of HTML pages)</td>
<td>1.85GB</td>
<td>9.34GB</td>
</tr>
</tbody>
</table>
<p>You can mitigate some of those increases by deleting interim files (e.g., deleting the individual .log files after creating the concatenated .ls Listserv archive files), but the overall disk usage still ends up a lot more than you might think because the mbox files take more space than the Listserv notebooks, the HTML archive files are twice the size of the mbox files, and the Swish search index files are even more space.</p>
<p>We filled our disk up several times during the conversion, and one of the times this happened caused all mail delivery for all our just-converted lists to stop completely until some disk space was freed up and Mailman was restarted (actually it required a server restart, not just Mailman, which they&#8217;d tried with &#8220;/etc/init.d/mailman restart&#8221;).</p>
<p>By the way, after filling the disk a few times I created a script called <a href="/listserv-to-mailman/code/utils/disk_space_check">disk_space_check</a> and installed a daily cron job to send an email if disk usage was too high:</p>
<pre>/bin/df -h | $HOME/bin/disk_space_check</pre>
<p>In the next section we&#8217;ll add searching to Mailman&#8217;s archives, and make it so search on private lists (and search results) are limited to just subscribers.</p>
<p><strong>Next</strong>: <a href="/2010/07/listserv-to-mailman-setting-up-archive-search/">Setting Up Archive Search</a> or <strong>Up</strong>: <a href="/listserv-to-mailman/">Table of Contents</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonyrthompson.com/2010/06/listserv-to-mailman-converting-listserv-archives-to-mailman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listserv to Mailman Part 1.0: Overview</title>
		<link>http://blog.anthonyrthompson.com/2010/02/listserv-to-mailman-overview/</link>
		<comments>http://blog.anthonyrthompson.com/2010/02/listserv-to-mailman-overview/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 05:29:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech Tips]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[introduction]]></category>
		<category><![CDATA[listserv]]></category>
		<category><![CDATA[mailman]]></category>
		<category><![CDATA[overview]]></category>

		<guid isPermaLink="false">http://blog.anthonyrthompson.com/?p=6</guid>
		<description><![CDATA[Overview of the Listserv to Mailman project this guide is about, the specific problems of our situation and how we explored our options, and finally a note about our development vs production list servers.]]></description>
			<content:encoded><![CDATA[<h1>Preface and Disclaimer</h1>
<p>This guide was written in short bursts over several months, sometimes at the same time as performing our conversion from Listserv (pricey commercial mailing list manager) to Mailman (free software mailing list manager) and sometimes after the fact. (If you stumbled across this page and don&#8217;t know the difference, see <a href="http://wiki.list.org/display/DOC/Mailman+is+not+Listserv">Mailman is not Listserv</a>.)</p>
<p>So it is not by any means perfect or even necessarily free from mistakes, and it certainly needs editing and cleaning up. In particular you may find the narrative/explanatory style <a title="Saturday Night Live: Lothar of the Hill People" href="http://www.hulu.com/watch/4108/saturday-night-live-lothar-of-the-hill-people">vexing</a>, along with occasional changes in person/tense.</p>
<p>For these flaws I can only apologize in advance. I will try to clean them up and improve these pages over time, but even with its current shortcomings, it is still the guide (and code!) I wish had been available when I started my own conversion of 70+ Listserv lists to Mailman.</p>
<p><strong>Note</strong>: This guide and the <a href="/listserv-to-mailman/code/">code I&#8217;m making available</a> were both written against Mailman version <strong>2.1.12</strong>. I&#8217;d hope that future versions of Mailman wouldn&#8217;t change the API functions I called, but obviously there is no guarantee that won&#8217;t happen, so if you use my code with a later version of Mailman it might not work. In particular, if you&#8217;re going to use the <a href="/listserv-to-mailman/code/mailman_admin_cmd_handler.py">administrative command handler</a>, I&#8217;d recommend running its <a href="/listserv-to-mailman/code/test_mailman_admin_cmd_handler.py">test program</a> first to see if anything breaks.</p>
<h1>The Problem<strong><br />
</strong></h1>
<p>The problem: A small non-profit organization which had more than 70 <a href="http://www.lsoft.com/products/listserv.asp">Listserv</a> mailing lists, most with 10+ years of archives, needed to convert all of the lists and archives to <a href="http://www.gnu.org/software/mailman/">GNU Mailman</a> because its Listserv host was going to cease all operations within a year&#8217;s time (i.e., we got 9 months&#8217; warning).</p>
<p>The old Listserv list host had had a special, grandfathered non-profit site license for Listserv, and LSoft was unwilling to allow that license to transfer with our organization to another host, so sticking with Listserv simply wasn&#8217;t an option.</p>
<p>(If you hunt around the LSoft website and finally dig up their <a href="http://www.lsoft.com/products/listserv_license.asp">pricing</a>, you&#8217;ll see that for most small organizations even the cheapest Listserv license is prohibitively expensive; it certainly was for us, a non-profit org with 70 lists and a total annual IT budget of about $1000/year.)</p>
<p>Searching for other hosts that already had Listserv lists proved fruitless as well. I could hardly find any that had Listserv, and the few that did have it were way too pricey.</p>
<p>Also, it seems that in the modern Internet age, &#8220;mailing list&#8221; means &#8220;email marketing newsletter&#8221;, not &#8220;discussion list&#8221;. This distinction was important, and came up repeatedly as a problem because almost all of our our 70 lists were <em>discussion</em> lists.</p>
<p>I bring this up because early on someone in our organization pointed out that our website host already provided &#8220;mailing list&#8221; software called <a href="http://en.wikipedia.org/wiki/Dada_Mail">DadaMail</a>&#8230; which is actually just meant for one-way marketing newsletter emails.</p>
<p>In fact, one of DadaMail&#8217;s main features is that it has <em>email throttling</em>. Why? Because most ISPs now limit customers&#8217; outgoing email to a maximum number of messages per hour. Why? Probably because spammers crack people&#8217;s websites through common application vulnerabilities and then use the victims&#8217; sites to send spam.</p>
<p>Why did the hourly email limit on our web host matter? Because if you have 1000 customers and want to send them all a single newsletter message, that&#8217;s fine—if your host limits you to 500 messages/hour then you set DadaMail or your mailing script to send one message every 2-3 seconds.</p>
<p>The problem arises when you have an actual <em>discussion</em> list (and we had 70 of them!). If you have a discussion list with 600 subscribers and someone sends a post to the list, the ISP tries to send that post to 600 subscribers and hits the hourly limit.</p>
<p>You could spread delivery of the post over two hours but what happens when someone who gets it <em>replies</em>? That&#8217;s another 600 messages going out, when some people haven&#8217;t even gotten the first one yet! Clearly, if there is actual <em>discussion</em> (i.e., replies), email thottling (as with DadaMail and other announcement-oriented programs) just won&#8217;t work.</p>
<p>So what I learned from my research into mailing list software and hosts was that there are really two problems: 1) The cost of the mailing list software itself, and 2) the difficulty finding a list host which won&#8217;t cap/throttle your email message output at a certain number per hour.</p>
<h1>The Solution</h1>
<p>The answer to the problem of the exorbitant cost of Listserv was fairly simple. I had noticed <a href="http://www.gnu.org/software/mailman/">GNU Mailman</a> years before, and it seemed to be an open source replacement for Listserv which was reasonably mature and somewhat Listserv-like. I was right about this, but it required a lot of customization which is why this documentation exists.</p>
<p>For the second problem, there just didn&#8217;t seem to be any affordable hosts offering mailing lists, especially for 70+ lists.</p>
<p>One possible solution would have been to get a dedicated server and install Mailman on it. That solution wouldn&#8217;t have worked for my non-profit because they just don&#8217;t have the resources to manage a dedicated server—they barely have enough manpower to manage their website and membership database.</p>
<p>So we basically had to find a host that would already have Mailman, or allow us to install it, would not have a per-hour message throttling/limit, would let us have command line (shell) access to run the Mailman &#8220;bin&#8221; commands and extend Mailman&#8217;s functionality (such as adding an administrative command handler), and would otherwise manage the server (backups, security updates, performance tweaking, etc.). And all for a price within our small budget, of course.</p>
<p>After a <strong>lot</strong> of searching we eventually found one, <a href="http://www.binhost.com/listserve.html">Binhost</a>, which we&#8217;ve been pretty happy with so far. If you set up an account with them, please mention me—I won&#8217;t personally get anything for it, but my non-profit org will get a small account credit for the referral. Or if you have any questions about our experiences with them, feel free to <a href="/contact/">contact me</a>.</p>
<h1>Development and Production Servers<strong><br />
</strong></h1>
<p>Due to the long time it took to find a list host, I&#8217;d already started playing with Mailman on our main web server just to learn it, even knowing that we couldn&#8217;t actually have our lists on that server.</p>
<p>So in effect, our web host became my development server for playing with Mailman and determining what kinds of customizations we&#8217;d need for a smooth transition from Listserv when we did find a list host.</p>
<p>I only mention this because there were a few differences between the dev box setup (a shared web host) and the list host we ultimately settled on (really a special case managed server), and this guide will occasionally mention differences between these two servers so I wanted to describe their setup a bit here.</p>
<h1>Files for Downloading</h1>
<p>I&#8217;ve tried to link to relevant code files in the text, but you can also <a href="/listserv-to-mailman/code/">browse all the code at once</a>. The <a href="/listserv-to-mailman/code/utils/">utils/</a> subdirectory has scripts I found helpful, and used indirectly in the project, but which weren&#8217;t directly related to the conversion. For example, <a href="/listserv-to-mailman/code/utils/tgrep">tgrep</a> searches through files like grep, but ignores non-text (binary) files.</p>
<p><strong>Next</strong>: <a href="/2010/02/listserv-to-mailman-installing-mailman/">Installing Mailman</a> or <strong>Up</strong>: <a href="/listserv-to-mailman/">Table of Contents</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonyrthompson.com/2010/02/listserv-to-mailman-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

