Note: Currently new registrations are closed, if you want an account Contact us
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
Generate DKIM for new domains
We use 'opendkim'[1] to implement DKIM.
To generate DKIM keys, use opendkim-genkey -b 4096 -h rsa-sha256 -r -s <selector_name> -d <domain_name_of_this_list> -v`
We don't have any format on selector naming. Pick something related to this list(for eg: the selector for the domain lists.fsci.org.in is lists
what we used).
After generating the DKIM keys, we will get two files.
- <selector_name>.private - which contains the private signing key.
- <selector_name>.txt - which contains the DKIM TXT DNS record for that domain.
<be />
Now, create a folder under /etc/opendkim/keys/<domain_name_for_this_list>/ and move the above file to that location.
Create an entry for the newly created domain in /etc/opendkim/KeyTable as well as /etc/opendkim/SigningTable
<be />
On /etc/opendkim/KeyTable
<selector_name._domainkey.<domain_name_of_this_list> <domain_name_of_this_list>:<selector_name>:/etc/opendkim/keys/<domain_name_of_this_list>/<selector_name>.private eg: lists._domainkey.lists.fsci.org.in lists.fsci.org.in:lists:/etc/opendkim/lists.private
On /etc/opendkim/SigningTable
<domain_name_of_this_list> <selector_name>._domainkey.<domain_name_of_this_list> eg: lists.fsci.org.in lists._domainkey.lists.fsci.org.in
More on DKIM keys, formating etc: [DomainKeys Identified Mail], Setup DKIM with OpenDKIM on Debian: [How To Install and Configure DKIM with Postfix on Debian]
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[2] list index. Updating postorius is how to fix this. But in case there's no other way, and removing those requests through frontend [3] 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()