Mailing list
Mailing lists are very useful communication and coordination tool. FSCI provides mailing lists to Free Libre Open Source (FLOSS) groups and non profit organizations. If you want to open a new public list, please drop a mail at postmaster(at)lists.fsci.org.in.
Environment
Machine Summary
We are on scaleway virtual cloud server.
* Cores | : 2 x86 cores |
* Memory | : 2GB |
* Disk | : 50GB |
* OS | : Debian GNU/Linux |
* Web Server | : Nginx |
* List manager | : Mailman3 |
* Host name | : lists.fsci.org.in |
Coordination
- Hangout with us in our Matrix room #mailman:poddery.com
- issue tracker - we use this to track progress of tasks
Admins
Abhijith PA, Prinz Piuz, Balasankar C
Admin Documentation
Verify DKIM and other settings for new domains
Create a text file, dkim-test.txt (replace To address with random address generated by https://dkimvalidator.com or https://www.mail-tester.com/)
From: "Test" <test-dkim@mm.gnu.org.in> To: <random-address>@dkimvalidator.com Subject: Testing DKIM and other settings for this domain Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit This email is to test email settings for a domain is correct
and use sendmail command to send it
/usr/sbin/sendmail -t < dkim-test.txt
Remove spam confirmation requests
Too many pending subscription requests can slow down[1] list index. Updating postorius is how to fix this. But in case there's no other way, and removing those requests through frontend [2] is impossible, this can be done (GNU Mailman 3.2.2 (La Villa Strangiato)):
$ sudo mailman shell -l listname.lists.fsci.org.in Welcome to the GNU Mailman shell The variable 'm' is the listname@lists.fsci.org.in mailing list >>> from zope.component import getUtility >>> from mailman.interfaces.pending import IPendings >>> pendings = getUtility(IPendings) >>> plist = [] >>> for p in pendings.find(m): ... plist.append(p) ... >>> len(plist) 2047 >>> # Let us save the spammer email and when they signed up for analysis >>> import csv >>> with open('spam.csv', 'w', newline=) as csvfile: ... spamwriter = csv.writer(csvfile, delimiter=',') ... for p in plist: ... spammer = p[1] ... spamwriter.writerow([spammer.get('email'), spammer.get('when'), spammer.get('display_name')]) ... >>> # Now on to actually removing spam >>> from mailman.interfaces.workflow import IWorkflowStateManager >>> workflow = getUtility(IWorkflowStateManager) >>> for p in plist: ... token = p[0] ... pendings.confirm(token) ... workflow.discard(token) ... >>> # Now, we have to commit this transaction to database >>> from mailman.config import config >>> config.db.commit()