Re: Digests not working correctly
by Joel Lord
The May 4th digest that went out was _also_ size-triggered, so this may
have nothing to do with periodic digests at all, and possibly my
periodic digests aren't working. I'm not on any of my own lists in
digest mode, I'm slowly extracting diagnostic information out of people
who are. Also, since this is a ~2 month cycle, it's really difficult to
get data points to work with. I'll need to remember to go in and look
when this settles down again (new cycle of activity started last night)
to see if there's anything left pending.
(venv) root@host2:/home/lists/mailman/venv/bin# pip freeze | grep -i hyper
HyperKitty==1.3.7
On 6/4/2023 10:05 PM, Mark Sapiro wrote:
> On 6/4/23 18:35, Joel Lord wrote:
>>
>> The periodic digests do seem to be coming out. I also now have
>> confirmation that the one message in this morning's digest that was
>> from May 4th was also included in the last digest back on May 4th, so
>> it seems that the one message was left behind in the digest queue when
>> the periodic digest was sent.
>
> I don't see how that can happen. The process that sends a digest renames
> the var/lists/<list-id>/digest.mmdf mailbox file in which the messages
> are accumulated to var/lists/<list-id>/digest.<volume>.<issue>.mmdf,
> where <volume> and <issue> are the volume and issue numbers of that
> digest, and then queues a message in the `digest` queue to tell the
> digest runner to create the digest from the messages in that mbox and
> send it. Thus, it leaves no var/lists/<list-id>/digest.mmdf mailbox file
> behind and that is created anew when the next post arrives. Further, if
> there is a non-empty digest.mmdf file, its messages should be sent no
> later than the next 11 PM `cron digests`.
>
>
>> There was one earlier message to the list back on May 4th, before the
>> one that got duplicated, but I can't tell if that triggered a
>> size-based digest to be sent: the logs aren't clear enough on that
>> detail for me to tell >
>
> OK
>
>
>> Just to inform things:
>>
>> (venv) lists@host2:~/mailman/venv/bin$ pip freeze | grep mailman
>> django-mailman3==1.3.9
>> mailman==3.3.8
>> mailman-hyperkitty==1.2.1
>> mailman-web==0.0.6
>> mailmanclient==3.3.5
>> (venv) lists@host2:~/mailman/venv/bin$ pip freeze | grep hyper
>> mailman-hyperkitty==1.2.1
>
> Actually, it's HyperKitty, not hyperkitty, but I assume HyperKitty is up
> to date as are the others.
>
>> (venv) lists@host2:~/mailman/venv/bin$ pip freeze | grep post
>> postorius==1.3.8
>>
>>
>
--
Joel Lord
2 years, 10 months
using SSH/TLS with external MTA
by Roland Giesler
I have managed thus far to get things working on my new install, but I
need to use a secure logon to send mail from an external MTA. I have
set up:
/etc/mailman/mailman.cfg:
smtp_host: box2.gtahardware.co.za
smtp_port: 465
smtp_user: roland(a)giesler.za.net
smtp_pass: <hidden>
smtp_secure_mode: smtps
smtp_verify_cert: no
smtp_verify_hostname: no
I'll get a cert installed later, for now just want to get it going.
This error occurs when I try to create a new user in postorius.
ERROR 2024-07-24 15:29:45,572 2150 django.request Internal Server Error:
/accounts/login/
Traceback (most recent call last):
File
"/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line
47, in inner
response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py",
line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/views/generic/base.py",
line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/utils/decorators.py",
line 43, in _wrapper
return bound_method(*args, **kwargs)
File
"/usr/lib/python3/dist-packages/django/views/decorators/debug.py", line
89, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
146, in dispatch
return super(LoginView, self).dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
74, in dispatch
response = super(RedirectAuthenticatedUserMixin, self).dispatch(
File "/usr/lib/python3/dist-packages/django/views/generic/base.py",
line 98, in dispatch
return handler(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
102, in post
response = self.form_valid(form)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
159, in form_valid
return form.login(self.request, redirect_url=success_url)
File "/usr/lib/python3/dist-packages/allauth/account/forms.py", line
196, in login
ret = perform_login(
File "/usr/lib/python3/dist-packages/allauth/account/utils.py", line
175, in perform_login
send_email_confirmation(request, user, signup=signup, email=email)
File "/usr/lib/python3/dist-packages/allauth/account/utils.py", line
346, in send_email_confirmation
email_address.send_confirmation(request, signup=signup)
File "/usr/lib/python3/dist-packages/allauth/account/models.py", line
62, in send_confirmation
confirmation.send(request, signup=signup)
File "/usr/lib/python3/dist-packages/allauth/account/models.py", line
169, in send
get_adapter(request).send_confirmation_mail(request, self, signup)
File "/usr/lib/python3/dist-packages/allauth/account/adapter.py",
line 464, in send_confirmation_mail
self.send_mail(email_template,
emailconfirmation.email_address.email, ctx)
File "/usr/lib/python3/dist-packages/allauth/account/adapter.py",
line 136, in send_mail
msg.send()
File "/usr/lib/python3/dist-packages/django/core/mail/message.py",
line 284, in send
return self.get_connection(fail_silently).send_messages([self])
File
"/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.py", line
109, in send_messages
sent = self._send(message)
File
"/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.py", line
125, in _send
self.connection.sendmail(from_email, recipients,
message.as_bytes(linesep='\r\n'))
File "/usr/lib/python3.10/smtplib.py", line 901, in sendmail
raise SMTPRecipientsRefused(senderrs)
smtplib.SMTPRecipientsRefused: {'roland(a)giesler.za.net': (454, b'4.7.1
<roland(a)giesler.za.net>: Relay access denied')}
However, the mailserver is in daily use and accept logon all the time.
I believe I'm missing something that should be installed to make SMTPS
(SSL) work, but what?
1 year, 9 months
Re: Mass operations on large list - Internal Server Error
by Liam Reilly
Stephen J. Turnbull wrote:
> Reilly, Liam writes:
> > Here is an example error from the log for unsubscribe all
> > operation.
> > Which log is this? I would guess it's the mailmanweb.log.
> > [2025-12-15 15:41:02 +0000] [1022464] [ERROR] Error handling request /mailman3/lists/uclucu-members.ucl.ac.uk/unsubscribe_all
> > Traceback (most recent call last):
> > File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/sync.py", line 134, in handle
> > self.handle_request(listener, req, client, addr)
> > This is the front-end gunicorn WSGI server, handling a request for
> Postorius.
> > File "/data/mailman/venv/lib64/python3.12/site-packages/mailmanclient/restobjects/mailinglist.py", line 519, in unsubscribe
> > response, json = self._connection.call(path, data, method='DELETE')
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > This is mailman client translating to the REST API.
> > File "/usr/lib64/python3.12/socket.py", line 720, in readinto
> > return self._sock.recv_into(b)
> > ^^^^^^^^^^^^^^^^^^^^^^^
> > This is the Python socket library actually talking to the REST API of
> Mailman core. An unspecified error occurs in the C code. It is not
> handled.
> > File "/data/mailman/venv/lib64/python3.12/site-packages/gunicorn/workers/base.py", line 204, in handle_abort
> > sys.exit(1)
> > SystemExit: 1
> > This is the "Something's wrong, hope you have a clue 'cause I don't"
> last line of defense error handler.
> My guess is that it's a timeout on a socket.
> I think you should also see log messages and a traceback in the
> mailman.log.
> The timeout for the mailmanweb gunicorn is configured in the gunicorn
> conf file, usually in /etc/mailman3. This is relatively short (I
> think my installation is default at 120 seconds).
> The timeout for the REST API gunicorn is in
> site-packages/mailman/config/gunicorn.cfg. This is long (360 seconds)
> so if my conjecture about timeout is correct it's the mailmanweb
> gunicorn that's timing out. If you need to change this one, you may
> be able to simply put "timeout: 360" in the [webservice] section of
> your mailman.cfg file, but if that doesn't work you can copy
> gunicorn.cfg to /etc/mailman3/rest-wsgi.cfg, change the timeout in it,
> and add "configuration: /etc/mailman3/rest-wsgi.cfg" to the
> [webservice] section of mailman.cfg.
> --
> GNU Mailman consultant (installation, migration, customization)
> Sirius Open Source https://www.siriusopensource.com/
> Software systems consulting in Europe, North America, and Japan
As always, thank you for your prompt replies Stephen.
The entries are from error.log and are all I could find when grepping for the list name. I'll check the other logs for anything else and also try increasing the timeout config as you've suggested to see if it helps.
4 months, 1 week
Re: Updating from Ubuntu-20.04 LTE installation
by Abhilash Raj
On Sat, May 23, 2020, at 8:28 PM, Mark Sapiro wrote:
> On 5/23/20 7:02 PM, Peter Adebahr via Mailman-users wrote:
> >
> > Our installation was done by "apt-get install" in Ubuntu 20, thus still
> > running MM 3.2.2 (and python 3.8.2).
> >
> > Do you have any advise, how to upgrade from there to your current
> > version? I know this might be a bit dangerous, but with today's VMs the
> > risk is much less than it used to be:
>
>
> It shouldn't be difficult, but I can't give you details because I don't
> know exactly how the Debian/Ubuntu package installs things. Also I don't
> know whether "current version" refers to the 3.3.1 release or the head
> of the https://gitlab.com/mailman/mailman master branch.
>
>
> > Do you think it would be possible, just to replace the code and library
> > parts, keeping the database and config files as is?
>
>
> Yes. It should be fairly straightforward. You first need to find where
> the Mailman Core package is. You should be able to just replace the
> contents of the `mailman` package directory with ours. You may be able
> to do this via pip
>
> pip install --upgrade mailman
>
> globally or within Mailman's virtualenv if it is installed in a virtualenv.
This is probably not a good idea, global install quite often breaks a lot of stuff (Like I broke Yum on my work computer since I wanted something newer than 10yo python packages).
A better idea would be to install Mailman from scratch inside a virtualenv somewhere in /opt/mailman and then letting it consume the same configurations. I think Ubuntu/Debian have their configurations in `/etc/mailman3/` and Mailman Core installed anywhere should just pick that up without any special work.
Same goes for Postorius/Django stuff. You can switch to a different Django project and just point to Debian/Ubuntu's settings.py (location of which should be in README.debian of the Debian package I presume).
> However, there are caveats. There are Debian patches at
> <https://sources.debian.org/patches/mailman3/3.2.2-1/>. The big `0002`
> patch replaces importlib_resources with importlib.resources because
> importlib_resources is not available in Debian. Most of the patches
> apply to tests, and for the actual working code, we fixed this
> differently as of Mailman 3.3.1, so I don't think you need the Debian
> patches.
>
>
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
thanks,
Abhilash Raj (maxking)
5 years, 11 months
Hyperkitty issue(s)
by Bryan Loniewski
Hello --
I'm stuck trying to integrate Hyperkitty. I see the following errors in mailman.log and mailmansuite.log respectively:
<snipped>
[2020-05-27 16:42:11 -0400] [5140] [ERROR] Error handling request /3.1/lists/bry_test4.lists-test.rutgers.edu/archivers
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/rest/wsgiapp.py", line 193, in __call__
return super().__call__(environ, start_response)
File "falcon/api.py", line 274, in falcon.api.API.__call__
File "falcon/api.py", line 269, in falcon.api.API.__call__
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/rest/lists.py", line 406, in on_get
for archiver in archiver_set.archivers
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/rest/lists.py", line 407, in <dictcomp>
if archiver.system_archiver.is_enabled}
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/mailman/model/mailinglist.py", line 587, in system_archiver
raise AssertionError('Archiver not found: {}'.format(self.name))
AssertionError: Archiver not found: hyperkitty
and
<snipped>
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/postorius/middleware.py", line 42, in __call__
return self.get_response(request)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 36, in inner
response = response_for_exception(request, exc)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 90, in response_for_exception
response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 125, in handle_uncaught_exception
return debug.technical_500_response(request, *exc_info)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/views/debug.py", line 89, in technical_500_response
reporter = ExceptionReporter(request, exc_type, exc_value, tb)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/views/debug.py", line 254, in __init__
self.template_info = getattr(self.exc_value, 'template_debug', None)
File "/opt/mailman/mm/venv/lib/python3.6/tempfile.py", line 479, in __getattr__
file = self.__dict__['file']
KeyError: 'file'
Note that I've kinda followed the Virtualenv route along with using Mark's helpful webpage re: his experiences.
Some relevant? config files...
mailman.cfg:
<snip>
[archiver.prototype]
enable: yes
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /opt/mailman/mm/mailman-hyperkitty.cfg
<snip>
mailman-hyperkitty.cfg:
[general]
base_url: https://a_real_domain/mm3/hyperkitty
api_key: <movealong>
I can provide additional conf file setups if warranted? I am curious (and perhaps this is in fact the issue) why when I run mailman conf I don't see the archiver.hyperkittty section even though its in the mailman.cfg file? While at the same time I do see archiver.{mail_archive,mhonarc}? I know it's reading my mailman.cfg based on other sections I've already setup/manipulated.
Another data point:
$ grep -i hyperkitty requirements.txt
HyperKitty==1.3.2
mailman-hyperkitty==1.1.0
Any suggestions?
________________________
Bryan Loniewski
Rutgers University
OIT:EAS:Messaging and Collaboration Services
System Administrator
5 years, 11 months
Re: Why is it so difficult to setup Mailman3?
by Stephen J. Turnbull
alain williams writes:
> On Wed, Apr 08, 2026 at 11:07:42PM +0900, Stephen J. Turnbull wrote:
>
> > To the best of my knowledge, the recommended installation documents at
> > https://docs.mailman3.org/en/latest/install/virtualenv.html are
> > complete and straightforward for "typical" one-domain installations.
>
> No they are not. I struggled, part of the reason is that I am not imbued in
> the python mindset and the documentation is written assuming that background.
*shrug* This is Un*x server software. Core is configured in .ini
style. Most of the *necessary* configuration is basic mail stuff:
hosts and ports. Some of it is authentication for the REST API. I
can't think of anything that's really Python-specific. (And in fact,
Mailman 2's configuration was Python! mm_cfg.py)
The website configuration is done in Python because Django does it
that way. Pretty sure Barry would have preferred .ini (I don't think
TOML was a thing back then), but it would have been a lot of work to
write a translator, and probably even less intelligible, because so
much Django configuration is hierarchical. I'm surprised you talk
about "python mindset" though. The Django configuration is mostly
strings, nested lists and dicts, and ints -- which is basically JSON.
> So I used the Debian package
Which we recommend against, for good reason. We don't (can't, really)
do a good job of supporting other vendors' versions, and ... well,
they don't, either. :-(
> are still problems: it is a resource hog and parts crash -
> generating large numbers of incomprehensible emails (I have talked
> about here, no real help).
Pointers to those conversations?
I don't know about crashes besides the OOM-killer in resource-
constrained environments. Most exceptions are handled internally so
you get a traceback in the logs, but that normally doesn't kill
processes. And I don't know why crashes would generate "large numbers
of incomprehensible emails". I don't think Mailman sends email when
there is a problem. I think the default Django configuration may do
so, though.
> Mailman2 was a dream, simple to install and just worked.
I assure you 25 years ago it was no different from today's Mailman 3
(ie, a few years after the first production use of the software).
Back then, people complained that the CGIs were a resource hog, and it
sure didn't "just work" in the face of non-ASCII mail and spam --
that's why I got involved in Mailman, and later Python, development.
> MM3 has some nice features (eg using a SQL database) but is a pig
> -- far more than it should be.
I *really* don't want to hear "should" from someone who doesn't hack
Python. You're welcome to wish it was smaller, we all do. But if you
can't tell me *how* to do it, don't tell me we "should".
And, seriously, the "hardware" needed is a $24/month 4GB Linode.
Maybe less: I ran a (not-mission-critical) Mailman installation (and
not much else!) on a 2GB DigitalOcean droplet with Ubuntu for several
months. That's borderline -- I know because something would get
OOM-killed once or twice a week and I'd have to restart Mailman. So
something a little bit bigger than that would do. I think Linode with
Debian might stretch enough to run Mailman suite, PostgreSQL, and
nothing else in 2GB ($12/mo). Everyone I knew in university labs was
running it in 5 or 10 year old otherwise useless hardware with 8 or 16
GB of RAM. Overkill!! ;-)
Anyway, in 2012, we wanted to scale to Fortune 100 company-sized
installations without them having to hack the core. A couple years
ago I worked on a site with more than 50K users and 20K lists,
processing more than 1M messages (incoming) per month (heaven knows
how many outgoing). It requires $24/month worth of Linode (running
several extra processes to slice the out queue and a largish
PostgreSQL by dedicated-to-Mailman SQL standards -- they did use
HyperKitty and had several TB of archives). That's a lot of scaling
for very cheap compute!
So Barry split up the core processing into runners handling queues of
email messages, and of course HyperKitty and Postorius were split out
into separate applications. In core, thread-per-runner was not an
option then (Python had threads but the GIL was a problem), nor was
async (the keywords didn't exist, the alternatives were Twisted or
greenlets, and we only had one developer who could hack that stuff).
So Barry went with the tried and true multiprocess model. The problem
with that is that just getting the master process running gets you up
to 75MB on a 64-bit machine, so you end up forking up to 20 processes
x 75MB each, some of which might grow up to 125MB or so over time. At
most 15-20MB of that is shared. (I think like 2 of those processes
manage the web UIs and HyperKitty's background scheduler.) Doesn't
fit into a Nanode, I admit.
> I know other sysadmins who gave up and went with different list
> managers; if I was starting again I would do likewise.
That's always an option. At least with ListServs I have subscriptions
on you give up a lot of functionality. Don't know about Sympa. But
it's an option.
But I know that thousands of people have successfully installed
Mailman 3, I assume most have migrated lists from Mailman 2. Many
others are using Mailman 3 on hosting platforms.
> Help here has been good & responsive (thank you) but several times
> I was told that because I had not followed the virtualenv
> instructions help was limited.
Yes, that's true. We'll give what advice we can, but if it's not a
bug in our software (and it rarely is at installation, those usually
show up later!), we often end up working at cross-purposes with the
vendor's configuration software. Distros usually have reasons for
doing it their way, but we don't know about that, and so sometimes our
suggestions don't work as expected. And of course anything that
involves files requires figuring out where they are, which is quite
different in an FHS setup vs the virtual environment install where
they're all in one place, /opt-style.
> Oh: I wanted several domains, friends who also have mail list
> servers all seem to handle several domains so 'typical' is not what
> I see.
Well, single domain is a common use case from families to Fortune 100
companies. At the university where I used to work I knew of 7
single-domain installations, and I'm pretty sure there were several
others. The computing services department offered Mailman lists, but
that was also single-domain (still running Mailman 2 last I looked).
They would also let you run your own Mailman on a VM.
Sure, I would imagine that someone who bills themselves as a "mail
systems consultant" would know a lot of people managing multi-domain
systems :-) but I would expect multi-domain is something you see
mostly at hosting services. By nature that's going to be a relatively
small installed base although they probably handle a majority of
mailman lists, maybe a majority of mailman domains.
> Say Hi to Mark Taylor for me
Will do.
--
GNU Mailman consultant (installation, migration, customization)
Sirius Open Source https://www.siriusopensource.com/
Software systems consulting in Europe, North America, and Japan
3 weeks, 1 day
Re: Reg Archive Inactive Status
by Nirmal J
DNS Report for that list1.iitm.ac.in is 10.24.5.52
-----Original Message-----
From: Nirmal <nirmal(a)iitm.ac.in>
To: Nirmal <nirmal(a)iitm.ac.in>
Cc: Stephen <steve(a)turnbull.jp>; mailman-users <mailman-users(a)mailman3.org>
Date: Friday, 26 September 2025 3:28 PM IST
Subject: Re: [MM3-users] Re: Reg Archive Inactive Status
Yes I have it. I am also sharing that also settings_local.py file
# This file is imported by the Mailman Suite. It is used to override
# the default settings from /usr/share/mailman3-web/settings.py.
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'vWzgIJ1Hvjgy4yXJz7l71vpxX6+pJcBLMdv8mWNNAd0ajVr1'
ADMINS = (
('Mailman Suite Admin', 'nirmal(a)iitm.ac.in'),
)
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.8/ref/settings/#allowed-hosts
# Set to '*' per default in the Deian package to allow all hostnames. Mailman3
# is meant to run behind a webserver reverse proxy anyway.
ALLOWED_HOSTS = [
#"localhost", # Archiving API from Mailman, keep it.
# "lists.your-domain.org",
# Add here all production URLs you may have.
'*'
]
# Mailman API credentials
MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'restadmin'
MAILMAN_REST_API_PASS = '/EqNGU+Mj8udFpw4ueIkhWXzAy3kJIy17wwzChrXb3P8Vh4e'
MAILMAN_ARCHIVER_KEY = 'n/ZZnR5bRgNdUEyNK4p731C1+gWJLw0/'
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1', '10.24.5.52')
# Application definition
INSTALLED_APPS = (
'hyperkitty',
'postorius',
'django_mailman3',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor', 'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_mailman3.lib.auth.fedora',
#'allauth.socialaccount.providers.openid',
#'allauth.socialaccount.providers.github',
#'allauth.socialaccount.providers.gitlab',
#'allauth.socialaccount.providers.google',
#'allauth.socialaccount.providers.facebook',
#'allauth.socialaccount.providers.twitter',
#'allauth.socialaccount.providers.stackexchange',
)
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
'default': {
# Use 'sqlite3', 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'ENGINE': 'django.db.backends.sqlite3',
#'ENGINE': 'django.db.backends.postgresql_psycopg2',
#'ENGINE': 'django.db.backends.mysql',
# DB name or path to database file if using sqlite3.
'NAME': '/var/lib/mailman3/web/mailman3web.db',
# The following settings are not used with sqlite3:
'USER': '',
'PASSWORD': '',
# HOST: empty for localhost through domain sockets or '127.0.0.1' for
# localhost through TCP.
'HOST': '',
# PORT: set to empty string for default.
'PORT': '',
# OPTIONS: Extra parameters to use when connecting to the database.
'OPTIONS': {
# Set sql_mode to 'STRICT_TRANS_TABLES' for MySQL. See
# https://docs.djangoproject.com/en/1.11/ref/ # databases/#setting-sql-mode
#'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}
# If you're behind a proxy, use the X-Forwarded-Host header
# See https://docs.djangoproject.com/en/1.8/ref/settings/#use-x-forwarded-host
USE_X_FORWARDED_HOST = True
# And if your proxy does your SSL encoding for you, set SECURE_PROXY_SSL_HEADER
# https://docs.djangoproject.com/en/1.8/ref/settings/#secure-proxy-ssl-header
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_SCHEME', 'https')
# Other security settings
# SECURE_SSL_REDIRECT = True
# If you set SECURE_SSL_REDIRECT to True, make sure the SECURE_REDIRECT_EXEMPT
# contains at least this line:
# SECURE_REDIRECT_EXEMPT = [
# "archives/api/mailman/.*", # Request from Mailman.
# ]
# SESSION_COOKIE_SECURE = True
# SECURE_CONTENT_TYPE_NOSNIFF = True
# SECURE_BROWSER_XSS_FILTER = True
# CSRF_COOKIE_SECURE = True
# CSRF_COOKIE_HTTPONLY = True
# X_FRAME_OPTIONS = 'DENY'
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/ LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Set default domain for email addresses.
EMAILNAME = 'list1.iitm.ac.in'
# If you enable internal authentication, this is the address that the emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#default-from-email
# DEFAULT_FROM_EMAIL = "mailing-lists(a)you-domain.org"
DEFAULT_FROM_EMAIL = 'postorius@{}'.format(EMAILNAME)
# If you enable email reporting for error messages, this is where those emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-SERVER_EMAIL
# SERVER_EMAIL = 'root(a)your-domain.org'
SERVER_EMAIL = 'root@{}'.format(EMAILNAME)
# Django Allauth
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
#
# Social auth
#
SOCIALACCOUNT_PROVIDERS = {
#'openid': {
# 'SERVERS': [
# dict(id='yahoo',
# name='Yahoo',
# openid_url='http://me.yahoo.com'),
# ],
#},
#'google': {
# 'SCOPE': ['profile', 'email'],
# 'AUTH_PARAMS': {'access_type': 'online'},
#}, #'facebook': {
# 'METHOD': 'oauth2',
# 'SCOPE': ['email'],
# 'FIELDS': [
# 'email',
# 'name',
# 'first_name',
# 'last_name',
# 'locale',
# 'timezone',
# ],
# 'VERSION': 'v2.4',
#},
}
# On a production setup, setting COMPRESS_OFFLINE to True will bring a
# significant performance improvement, as CSS files will not need to be
# recompiled on each requests. It means running an additional "compress"
# management command after each code upgrade.
# http://django-compressor.readthedocs.io/en/latest/usage/#offline-compression
COMPRESS_OFFLINE = True
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
SITE_ID = 2
import ldap
from django_auth_ldap.config import LDAPSearch # LDAP server URI
AUTH_LDAP_SERVER_URI = "ldap://127.0.0.1"
# Bind DN & password (service account from IITM LDAP admin)
AUTH_LDAP_BIND_DN = "cn=ldapreader,ou=Services,dc=iitm,dc=ac,dc=in"
AUTH_LDAP_BIND_PASSWORD = "642126"
# Where to search for users
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"ou=People,dc=iitm,dc=ac,dc=in",
ldap.SCOPE_SUBTREE,
"(uid=%(user)s)"
)
# Map LDAP attributes to Django user fields
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "cn",
"last_name": "sn",
# "email": "mail" # optional if not present
}
# Authentication backends (LDAP first, fallback to Django DB)
AUTHENTICATION_BACKENDS = [
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend",
]
import logging
logger = logging.getLogger('django_auth_ldap')
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
-----Original Message-----
From: Nirmal <nirmal(a)iitm.ac.in>
To: Stephen <steve(a)turnbull.jp>
Cc: mailman-users <mailman-users(a)mailman3.org>
Date: Friday, 26 September 2025 3:27 PM IST
Subject: Re: [MM3-users] Re: Reg Archive Inactive Status
Yes I have it. I am also sharing that also settings_local.py
-----Original Message-----
From: Stephen <steve(a)turnbull.jp>
To: Nirmal <nirmal(a)iitm.ac.in>
Cc: mailman-users <mailman-users(a)mailman3.org>
Date: Friday, 26 September 2025 3:09 PM IST
Subject: [MM3-users] Re: Reg Archive Inactive Status
Nirmal J via Mailman-users writes:
> Hereby I am sharing the full settings.py file.
Are you sure this is the settings.py being used by your installation?
It appears to be the distribution file, unchanged.
> MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1')# Application definition
If this is from the installed settings.py, it isn't going to work,
since you specified a routable domain (I think, although
"list1.iitm.ac.in" is not in the public DNS), which will have a
routable address, not localhost.
What IP does your DNS report for "list1.iitm.ac.in"?
> HOSTNAME = 'localhost.local'
That isn't what you told Mailman via hyperkitty.cfg. I'm not sure it
matters, but I think you should make sure all the config files agree
on the name of the host.
> # If you enable email reporting for error messages, this is where those emails
> # will appear to be coming from. Make sure you set a valid domain name,
> # otherwise the emails may get rejected.
> # https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-SERVER_EMAIL
> # SERVER_EMAIL = 'root(a)your-domain.org'
> SERVER_EMAIL = 'root@{}'.format(HOSTNAME)
This can be problematic, at least if you enable error messages by email.
> try:
> from settings_local import *
> except ImportError:
> pass
Do you have a "settings_local.py" file?
--
GNU Mailman consultant (installation, migration, customization)
Sirius Open Source https://www.siriusopensource.com/
Software systems consulting in Europe, North America, and Japan
7 months
Re: HYPERKITTY_ATTACHMENT_FOLDER
by Ugnius S
Could You please confirm that this parameter should be placed in
mailman-hyperkitty.cfg file?
I have checked mailman/postorius/hyperkitty owner user can write files
there and web user group
has privileges to write and to read, but *no any files appear there*.
Mailman works, it is possible to download
attachments from hyperkitty. Mailman restarted, uwsgi restarted, runjobs
restarted. No files in
/full/path/to/folder/
File looks like:
[general]
base_url: https://flistserv.example.com/hyperkitty/
api_key: BlaBlabla
HYPERKITTY_ATTACHMENT_FOLDER = /full/path/to/folder/
BR
Ugnius
2019-09-11, tr, 21:21 Ugnius S <ugniusviln(a)gmail.com> rašė:
> Thank You so much.
>
> 1) https://hyperkitty.readthedocs.io/en/latest/install.html
> Close to the end before the "UPDATE" topic, chapter "Customization".
>
> 2)
> https://buildmedia.readthedocs.org/media/pdf/hyperkitty/stable/hyperkitty.p…
> Page 10, chapter 2.8 "Customization"
>
> BR
> Ugnius
>
> 2019-09-11, tr, 20:16 Abhilash Raj <maxking(a)asynchronous.in> rašė:
>
>>
>>
>> On Wed, Sep 11, 2019, at 9:52 AM, Ugnius S wrote:
>> > Hi.
>> >
>> > Can anybody send example how to set it? It is mentioned in
>> documentation,
>> > but very vaguely.
>>
>> If you can point out where did you find it in docs, I can update it.
>> Information is kind of duplicated in a few places.
>>
>> > HYPERKITTY_ATTACHMENT_FOLDER = /full/unix/path
>>
>> This is the right value.
>>
>> It is a path on the filesystem, where the user running Hyperkitty is
>> allowed to write.
>>
>> >
>> > HYPERKITTY_ATTACHMENT_FOLDER = http://localhost:8000/something
>> >
>> > HYPERKITTY_ATTACHMENT_FOLDER = ./var/data/something/
>> >
>> > Has anybody experience of using this, maybe have recommendations of
>> using
>> > it? Better under project user or better under web content owner where
>> the
>> > static content is. I would like to store attachments separately to avoid
>> > growing database.
>> > Hyperkitty documentation:
>> > By default, HyperKitty stores the email attachments in the database.
>> If
>> > you would rather have them stored on the filesystem, you can set the
>> > HYPERKITTY_ATTACHMENT_FOLDER configuration value to a directory.
>> > Make sure that the user running the Django process (for example, apache
>> or
>> > www-data) has the permissions to write in this directory.
>> >
>> > -------------
>> > _______________________________________________
>> > Mailman-users mailing list -- mailman-users(a)mailman3.org
>> > To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> >
>>
>> --
>> thanks,
>> Abhilash Raj (maxking)
>> _______________________________________________
>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>
>
6 years, 7 months
Re: Newbie hyperkitty question
by Stephen Daniel
Thanks. Very helpful.
On Tue, Jan 11, 2022 at 2:03 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 1/11/22 8:27 AM, Stephen Daniel wrote:
> > Mailman users --
> >
> > I am setting up a new mailman3 installation, and this is my first
> > experience with the suite. All of the software is up and running, but I
> > cannot tell if hyperkitty is actually running.
>
>
> In Postorius, in the list's `info` view can you click the Archives
> button and see archived messages? That's HyperKitty.
>
> If the messages aren't there with the hyperkitty archiving option
> enabled, check `mailman.log` for why.
>
> Also do messages from the list have an Archived-At: header?
>
>
> > When I look at my test mailing list, two archive options are available,
> > hyperkitty and "prototype", and both are enabled. I can see that my
> email
> > is being archived, but I think "prototype" is what is doing the
> archiving.
> > I see that a test message will end up in
> >
> /opt/mailman/mm/var/archives/prototype/<LISTNAME>@<LISTDOMAIN.org>/new/164....
> > and nowhere else. This suggests that "prototype" is archiving, but
> > hyperkitty is not.
>
>
> No this says the prototype archiver is working. It says nothing about
> Hyperkitty.
>
>
> > So, this opens up a raft of questions on hyperkitty:
>
>
> David Newman has answered some of this, but ...
>
>
> > - How do I tell if hyperkitty is actually running?
>
>
> It doesn't actually run. it is a Django web UI and a web API that serves
> things on request.
>
>
> > - Does hyperkitty have a web-UI for admins or users? How would I
> access
> > it?
>
> See above.
>
>
> > - I can not find any documentation on hyperkitty, other than
> > installation instructions and change logs. Does documentation exist?
>
> No, not really.
>
>
> > - How do I set policies on how long archives are kept?
> > - Assuming I want to back up my archives, what do I need to back up?
>
>
> Messages are kept forever unless you do something to delete them.
> HyperKitty's messages are stored in the database configured in the
> DATABASES setting in your Django settings. How you backup the database
> depends on the database manager. You already found the prototype
> archiver's messages.
>
>
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
4 years, 3 months
Re: About to Install MM3 -- Seeking clarification
by Onyeibo Oku
Help!
Regards
Onyeibo
On Thu Oct 13, 2022 at 6:03 AM WAT, Onyeibo Oku wrote:
> On Wed, 12 Oct 2022 17:52:47 -0700
> Mark Sapiro <mark(a)msapiro.net> wrote:
>
> Thanks Eggert and Sapiro.
>
> >
> > As Eggert suggests, see
> > https://docs.mailman3.org/en/latest/install/virtualenv.html and
> > follow that.
>
> I already started out on the above route. Its an adaptation because I
> am running Fedora. I had no problem with system-wide installations via
> dnf package management. However, some parts of the documentation does
> not add up.
>
> > You don't need to download the source from GitLab.
> > Following that doc will get the latest releases from PyPI via pip.
> > Those are still somewhat out of date - we really should make new
> > releases - so if you want the latest from GitLab, there are a couple
> > of ways to do it. Perhaps the easiest is to just run the various `pip
> > install` commands as documented and then upgrade Mailman core in your
> > venv with ```
> > pip install --upgrade git+https://gitlab.com/mailman/mailman@master
> > ```
> > and update the various mailman web packages with
> > ```
> > pip install --upgrade git+https://gitlab.com/mailman/xxx@master
> > ```
> > where xxx is mailman-web, mailman-hyperkitty, django-mailman3,
> > postorius, hyperkitty. I.e., run it 5 times, once for each value of
> > xxx.
> >
>
> I will come to this eventually (assuming that does not break things
> later). I aim to get it all working with regular pip packages first. I
> have installed mailman core already.
>
> Fedora expects mailman files to reside at /usr/lib/mailman. It appears
> to ship with a mailman unix user. I adapted to those system defaults.
>
> Now I observe that "su - mailman" gives me the proper prompt but
> .bashrc doesn't kick in. I still have to manually change to the
> virtual environment despite setting the automatic change in .bashrc.
> However, "su mailman" runs .bashrc but the prompt says "bash X.XX $".
> Is this normal?
>
> Subsequent parts of the doc show the path "/opt/mailman/mm/var/*" which
> should correspond to "/usr/lib/mailman/mm/var/*" on my instance.
> However, I don't see any instructions on how to get the "/mm" folder
> and the associated sub-folders. I just have "/usr/lib/mailman"
>
> I am lost
>
> "pip list" within the venv environment confirms that I have "mailman
> 3.3.5". What am I missing?
>
> Regards
> Onyeibo
>
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
3 years, 6 months