Search results for query "sapiro"
- 6320 messages
[MM3-users] Re: Mailman installation results in KeyError: 'env_py'
by Abhilash Raj
On Sun, Oct 22, 2017, at 09:36 AM, Marvin Gülker wrote:
> Am 22. October 2017 um 07:49 Uhr -0700 schrieb Mark Sapiro
> <mark(a)msapiro.net>:
> > or you can install the fix at
>
> Thanks. Applying this patch makes it work. Now I've got a different
> problem, though. I can't get it to connect to Postfix for sending
> emails it appears. After I created a superuser account using
>
> $ python manage.py createsuperuser
>
> as described on <http://postorius.readthedocs.io/en/latest/setup.html>,
> I tried to login using this credentials into Postorius. It then reported
> it sent a confirmation email to me (for an account I created on
> commandline?!), but Postfix' logs reveal that it didn't; there's not
> even a sign of an attempted delivery in /var/log/mail.log. I've
> configured the Postfix configuration in mailman.cfg like this:
>
> [mta]
> incoming: mailman.mta.postfix.LMTP
> outgoing: mailman.mta.deliver.deliver
> lmtp_host: 127.0.0.1
> lmtp_port: 8024
> smtp_host: localhost
> smtp_port: 25
> configuration: python:mailman.config.postfix
>
> as was outlined on
> <http://mailman.readthedocs.io/en/latest/src/mailman/docs/mta.html>.
>
> mailman-suite's settings.py contains:
>
> # Change this when you have a real email backend
> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
> EMAIL_HOST = 'localhost'
> EMAIL_PORT = 25
>
> which was described on <http://docs.list.org/en/latest/config-web.html>.
>
> For completeness, the following is in Postfix' main.cf, but is not the
> cause of the problem as it affects the incoming direction, whereas I
> refer to the outgoing one:
>
> transport_maps = hash:/home/mailman/var/data/postfix_lmtp
> local_recipient_maps = hash:/home/mailman/var/data/postfix_lmtp
>
> I failed to locate any kind of logging information about the failed
> email, so I don't even know where I should start looking for the
> problem. var/logs/smtp.log is empty in the mailman directory, and
> likewise is logs/mailmansuite.log in the mailman-suite_project
> directory.
As Simon mentioned, try using DEBUG=False, if you don't already have
that. With DEBUG=True, you should see emails printed in a `emails`
directory under `mailman-suite_project` directory.
This is a confirmation email to verify the email addresses, which
happens even if you create an account from command line.
> That being said, the enormous number of configuration files to consider
> and dozens of cross-references to other pages in the docs make the
> installation guide hard to follow; it also lacks logical structure in my
> opinion, when it refers to parts of the configuration which are later
> explained. For someone like me who never programmed a Django application
> (Ruby dev) this is all pretty cryptic. Especially, that some parts of
> information are on <http://docs.list.org/en/latest/index.html> whereas
> other parts are scattered over readthedocs.io makes it very
> complicated.
There are only two primary configuration files (there are a few more for
finer configurations ;-):
- mailman.cfg: This is the configuration for the Core engine and can be
located any of the places mentioned in [1] or pointed to by environment
var MAILMAN_CONFIG_FILE.
- settings.py: This is the configuration file for Django under
`mailman-suite_project` and controls the frontend (Postorius &
Hyperkitty). Django is a huge framework with literally 1000s of options.
It would be impossible to copy that information from Django's
documentation and keep it updated in our docs. Hence, we have links to
appropriate places when needed. Same goes out for the rest of the
libraries that we use.
All the settings mentioned in the documentation go to either of these
files, except, when configuring web server and mail server. Please open
an issue[2] if it is not clear where a particular configuration snippet
goes and we will fix it.
[1]: http://docs.mailman3.org/en/latest/config-core.html
[2]: https://gitlab.com/mailman/mailman-suite-doc/issues
Hope that helps!
--
Abhilash Raj
maxking(a)asynchronous.in
9 years
[MM3-users] mailman-web migrate fails: KeyError: 'django'
by David Newman
Following the venv installation docs on a Debian 10 system, the command
"mailman-web migrate" fails with a "KeyError: 'django'" error.
Output pasted below [1].
There's an earlier thread on this error [2] but I think the cause may be
different. Even so, per Mark Sapiro's suggestion I changed STATIC_ROOT
to /opt/mailman/mm/var/static in settings.py. In mailman.cfg, var_dir is
at the default setting of /opt/mailman/mm/var/static.
I previously had tried creating /opt/mailman/mm/web/logs and chown'ing
it to mailman, but "mailman-web migrate" failed with the same error.
FWIW, mailman-web and hyperkitty installation initially failed with the
suggesting that I upgrade pip, which I did using " pip install --upgrade
pip".
Thanks in advance for troubleshooting clues.
dn
[1]
(venv) mailman@somehost:~$ mailman-web migrate
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/utils.py", line
66, in __getitem__
return self._engines[alias]
KeyError: 'django'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/backends/django.py",
line 121, in get_package_libraries
module = import_module(entry[1])
File "/usr/lib/python3.7/importlib/__init__.py", line 127, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in
_call_with_frames_removed
File
"/opt/mailman/venv/lib/python3.7/site-packages/hyperkitty/templatetags/decorate.py",
line 4, in <module>
from hyperkitty.lib.renderer import markdown_renderer, text_renderer
File
"/opt/mailman/venv/lib/python3.7/site-packages/hyperkitty/lib/renderer.py",
line 7, in <module>
from mistune.scanner import escape_html, escape_url
ImportError: cannot import name 'escape_html' from 'mistune.scanner'
(/opt/mailman/venv/lib/python3.7/site-packages/mistune/scanner.py)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/venv/bin/mailman-web", line 8, in <module>
sys.exit(main())
File
"/opt/mailman/venv/lib/python3.7/site-packages/mailman_web/manage.py",
line 30, in main
execute_from_command_line(sys.argv)
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/management/__init__.py",
line 401, in execute_from_command_line
utility.execute()
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/management/__init__.py",
line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/management/base.py",
line 328, in run_from_argv
self.execute(*args, **cmd_options)
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/management/base.py",
line 366, in execute
self.check()
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/management/base.py",
line 395, in check
include_deployment_checks=include_deployment_checks,
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/management/commands/migrate.py",
line 64, in _run_checks
issues.extend(super()._run_checks(**kwargs))
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/management/base.py",
line 382, in _run_checks
return checks.run_checks(**kwargs)
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/core/checks/registry.py",
line 72, in run_checks
new_errors = check(app_configs=app_configs)
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/contrib/admin/checks.py",
line 76, in check_dependencies
for engine in engines.all():
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/utils.py", line
90, in all
return [self[alias] for alias in self]
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/utils.py", line
90, in <listcomp>
return [self[alias] for alias in self]
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/utils.py", line
81, in __getitem__
engine = engine_cls(params)
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/backends/django.py",
line 25, in __init__
options['libraries'] = self.get_templatetag_libraries(libraries)
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/backends/django.py",
line 43, in get_templatetag_libraries
libraries = get_installed_libraries()
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/backends/django.py",
line 108, in get_installed_libraries
for name in get_package_libraries(pkg):
File
"/opt/mailman/venv/lib/python3.7/site-packages/django/template/backends/django.py",
line 125, in get_package_libraries
"trying to load '%s': %s" % (entry[1], e)
django.template.library.InvalidTemplateLibrary: Invalid template library
specified. ImportError raised when trying to load
'hyperkitty.templatetags.decorate': cannot import name 'escape_html'
from 'mistune.scanner'
(/opt/mailman/venv/lib/python3.7/site-packages/mistune/scanner.py)
[2]
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
4 years, 11 months
[MM3-users] Re: Badsignature on uwsgi-error.log
by David Partain
Hi Mark & all,
Thanks for the response. Just picking up where we are at the moment to provide a bit more info, in case you have ideas. Thanks, Stephen T. as well for the idea of turning on DEBUG. We might resort to that in the end.
This is what our system is running right now:
Mailman Core Version GNU Mailman 3.3.9 (Tom Sawyer)
Mailman Core API Version 3.1
Mailman Core Python Version 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
As previously noted, we moved this off of an old Ubuntu package-based installation that has delivered mail reliably but many other things haven't worked well, so we're happy to be on something that might improve that situation.
Right now, archiving is not working on the new installation, both building the archive on the new installation after the move and for new messages.
uwsgi-error.log is getting blasted with constant errors along the lines of what follows. I suspect that these errors are why archiving isn't working, but I obviously don't know that:
Message: BadSignature('Signature "ZWBXqQmWZwHTfa390lLIacpp8NQ" does not match')
Arguments: ('Traceback (most recent call last):
File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 356, in pusher
task = SignedPackage.loads(task[1])
File "/local/mailman/venv/lib/python3.10/site-packages/django_q/signing.py", line 25, in loads
return signing.loads(
File "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py", line 35, in loads
base64d = force_bytes(TimestampSigner(key, salt=salt).unsign(s, max_age=max_age))
File "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py", line 70, in unsign
result = super(TimestampSigner, self).unsign(value)
File "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py", line 55, in unsign
raise BadSignature(\'Signature "%s" does not match\' % sig)
django.core.signing.BadSignature: Signature "ZWBXqQmWZwHTfa390lLIacpp8NQ" does not match',)
What we have in our config files on the old installation and new installation are (the quotes are exactly as they are in the files):
Old installation:
mailman-web.py
SECRET_KEY = 'somerandomstringiaintputtinginmail'
MAILMAN_ARCHIVER_KEY = 'somerandomstringiaintputtinginmail'
mailman-hyperkitty.cfg
api_key: somerandomstringiaintputtinginmail
New installation:
settings.py
SECRET_KEY = 'somerandomstringiaintputtinginmail'
MAILMAN_ARCHIVER_KEY = 'somerandomstringiaintputtinginmail'
mailman-hyperkitty.cfg
api_key: somerandomstringiaintputtinginmail
All of that says that the value is the same for all three (whether I should have done so or not...) and those settings were carried along to the new installation as well.
Django is a big scary beast as I've not had to manage django apps before. Would it make sense that the error above is because what I _think_ django believes is the SECRET_KEY (in the config files above) is in fact not what django believes? Maybe it was set during installation (which I didn't do)? I don't believe anyone has purposefully changed it.
I suppose I could do something like https://medium.com/django-unleashed/securing-django-applications-best-pract… to reset the secret key, but I'm not doing that on Friday afternoon :)
If anyone has other thoughts, please holler. Wishing you all a good weekend from lighter-by-the-day Sweden.
Cheers,
David
-----Original Message-----
From: Mark Sapiro <mark(a)msapiro.net<mailto:Mark%20Sapiro%20%3cmark@msapiro.net%3e>>
To: mailman-users(a)mailman3.org<mailto:mailman-users@mailman3.org>
Subject: [MM3-users] Re: Badsignature on uwsgi-error.log
Date: Wed, 20 Mar 2024 18:12:20 -0700
On 3/20/24 14:25, Helio Loureiro wrote:
Hi,
I keep receiving a lot of errors like this:
--- Logging error ---
Traceback (most recent call last):
...
"/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
line 55, in unsign
raise BadSignature('Signature "%s" does not match' % sig)
django.core.signing.BadSignature: Signature "F6V0Dr_SvBsx5-cY8vcvLXrX8tA"
does not match
...
The api_key on mailman-hypperkitty.cfg, SECRET_KEY and MAILMAN_ARCHIVE_KEY
on setting.py are the same.
Of those three, the api_key on mailman-hypperkitty.cfg and
MAILMAN_ARCHIVE_KEY must match. SECRET_KEY is different. It is a Django
thing and has nothing to do with the others. See https://docs.djangoproject.com/en/5.0/ref/settings/#secret-key
If you changed it, that's the issue. If you know what it was previously,
you could set the previous value in SECRET_KEY_FALLBACKS, see https://docs.djangoproject.com/en/5.0/ref/settings/#secret-key-fallbacks
2 years, 7 months
[MM3-users] Re: Fwd: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/search
by Odhiambo Washington
On Sat, Jan 28, 2023 at 7:44 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 1/27/23 23:53, Odhiambo Washington wrote:
> >
> > I have reread what you wrote now and I'm beginning to get the hang of
> this
> > method.
> > My observation is that it can only be _obvious_ to someone very familiar
> > with Python config
> > to decipher that *additional* settings *that can be augmented or
> overridden
> > in /etc/mailman3/settings.py* can be obtained from:
> > /PATH-TO/mailman_web/settings/{base|mailman}.py after they have noticed
> > these two lines in
> > the sample settings given in /etc/mailman3/settings.py:
> >
> > from mailman_web.settings.base import *from
> > mailman_web.settings.mailman import *
>
>
> This is how it was always done in Mailman 2.1 and how it should have
> been done in Mailman 3's Django web UI from the start, but wasn't.
>
> MM 2.1 had mm_cfg.py which had
> ```
> from Defaults import *
>
> ##################################################
> # Put YOUR site-specific settings below this line.
> ```
>
>
> > [At first instance, it is not obvious that mailman_web.settings.base and
> > mailman_web.settings.mailman are
> > actually paths in Python - which magically translates to
> > mailman_web/settings/base.py and mailman_web/settings/mailman.py]
>
> This is very basic Python.
>
>
> > Granted, I am a slow learner, and perhaps already so mixed up after
> reading
> > the myriad HOWTOs for
> > installing MM3 that are available online. I am tempted to say there are
> > many like me who are likely to
> > miss "where to obtain" other settings from.
> >
> > For example, my mind all along has been tuned to having a
> settings_local.py
> > for overriding the settings.py.
> > However, with this particular documentation, it would appear that
> > everything is intended to just go into /etc/mailman3/settings.py.
>
>
> In that method you had the defaults in settings.py which at the end
> imported settings_local.py.
>
> This method has defaults in
> /PATH-TO/mailman_web/settings/{base|mailman}.py and those are imported
> at the beginning of settings.py which then has overrides. This is
> preferable because it allows things in settings.py like
> ```
> HAYSTACK_CONNECTIONS['default']['PATH'] = 'some path'
> ```
> to just override that one thing rather than having to redefine all of
> HAYSTACK_CONNECTIONS or import it from settings in settings_local.py.
>
>
> > Is it possible to modify the documentation to somehow make it obvious
> (in a
> > language that a layman can easily understand,
> > that those two "import *" _DO establish a base set of settings that can
> be
> > augmented or overridden in /etc/mailman3/settings.py_
> > and that those settings are in what file(s) ?
>
>
> Again, this is very basic Python, but if you submit a merge request to
> update
>
> https://gitlab.com/mailman/mailman-suite-doc/-/blob/master/source/install/v…,
>
> we'll certainly consider it.
>
Hi Mark,
Before I wrote this email that you have responded to, I was in the process
of writing another email to you offlist. I kept it in abbeyance.
Now that you have mentioned
https://gitlab.com/mailman/mailman-suite-doc/-/blob/master/source/install/v…,,
please show me how to import it, edit. Then I can submit a diff.
Alternatively, I'd love to be given access to edit that document (and the
edit can be reviewed before getting published) to make it easy to follow by
someone with zero python background.
I am willing to invest some time in improving it for laymen.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
3 years, 9 months
[MM3-users] Re: Migrating mailman3 to latest ubuntu lts
by Helio Loureiro
Hi,
Indeed it was the configuration. It was placed into
/etc/mailman3/mailman-web.py. After a I changed to
/etc/mailman3/settings.py a few things advanced a little bit more.
I had to figure out how to fix mysqlclient installation since there isn't a
mention about it and the simple "pip install mysqclient" was breaking with
pkg-config issues. But it did work at the end.
Now I can see further messages on mailman3-web than before.
(venv) mailman@new-server ~ (v3.3.9)> mailman-web migrate
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you don't care
about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't care
about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying account.0004_alter_emailaddress_drop_unique_email...Traceback
(most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 257, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (2013, 'Lost connection to MySQL server during
query')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
sys.exit(main())
File
"/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
line 90, in main
execute_from_command_line(sys.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 446, in execute_from_command_line
utility.execute()
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 402, in run_from_argv
self.execute(*args, **cmd_options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 448, in execute
output = self.handle(*args, **options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 96, in wrapped
res = handle_func(*args, **kwargs)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/migrate.py",
line 349, in handle
post_migrate_state = executor.migrate(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 135, in migrate
state = self._migrate_all_forwards(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 167, in _migrate_all_forwards
state = self.apply_migration(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 252, in apply_migration
state = migration.apply(state, schema_editor)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/migration.py",
line 130, in apply
operation.database_forwards(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py",
line 235, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 788, in alter_field
self._alter_field(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 858, in _alter_field
self.execute(self._delete_unique_sql(model, constraint_name))
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 199, in execute
cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/utils.py", line
91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 257, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server
during query')
Which seems to be complaining with DB credentials. But they're properly
set and it works via mysql command line.
(venv) mailman@new-server ~ (v3.3.9)> mysql -umailman3web -p mailman3web
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
MariaDB [mailman3web]> show tables;
+-------------------------------+
| Tables_in_mailman3web |
+-------------------------------+
| account_emailaddress |
| account_emailconfirmation |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_mailman3_maildomain |
| django_mailman3_profile |
| django_migrations |
| django_q_ormq |
| django_q_schedule |
| django_q_task |
| django_session |
| django_site |
| hyperkitty_attachment |
| hyperkitty_email |
| hyperkitty_favorite |
| hyperkitty_lastview |
| hyperkitty_mailinglist |
| hyperkitty_profile |
| hyperkitty_sender |
| hyperkitty_tag |
| hyperkitty_tagging |
| hyperkitty_thread |
| hyperkitty_threadcategory |
| hyperkitty_vote |
| socialaccount_socialaccount |
| socialaccount_socialapp |
| socialaccount_socialapp_sites |
| socialaccount_socialtoken |
+-------------------------------+
34 rows in set (0.000 sec)
On the /etc/mailman3/settings.py:
(venv) mailman@seliius26224 ~ (v3.3.9)> cat /etc/mailman3/settings.py |
grep -v "#" | grep -v '^$'
from mailman_web.settings.base import *
from mailman_web.settings.mailman import *
ADMINS = (
('Mailman Suite Admin', 'root@localhost'),
)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mailman3web',
'USER': 'mailman3web',
'PASSWORD': '*******************',
'HOST': 'localhost',
'PORT': '3306',
}
}
STATIC_ROOT = '/local/mailman/web/static'
COMPRESS_ENABLED = True
LOGGING['handlers']['file']['filename'] =
'/local/mailman/web/logs/mailmanweb.log'
ALLOWED_HOSTS = [
"127.0.0.1",
"*"
]
CSRF_TRUSTED_ORIGINS = [
]
SITE_ID = 1
SECRET_KEY = '****************************************'
DEFAULT_FROM_EMAIL = 'admin(a)mailman.domain.com'
SERVER_EMAIL = 'admin(a)mailman.domain.com'
MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'restadmin'
MAILMAN_REST_API_PASS = '***************************'
MAILMAN_ARCHIVER_KEY = '****************************'
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1', '1.2.3.4')
HAYSTACK_CONNECTIONS = {
'default': {
'PATH': "/opt/mailman/web/xapian_index",
'ENGINE': 'xapian_backend.XapianEngine'
},
}
And /local/mailman/web/logs/mailmanweb.log is empty.
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Sun, 17 Dec 2023 at 16:35, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/16/23 10:12 AM, Helio Loureiro wrote:
> > Hi,
> >
> > Well... not that good. Now it is mailman3-web that doesn't work.
> >
> > mailman@new-machine ~ (v3.3.9)> source venv/bin/activate.fish
> > (venv) mailman@new-machine ~ (v3.3.9)> mailman-web
> >
> > Type 'mailman-web help <subcommand>' for help on a specific subcommand.
> >
> > Available subcommands:
> >
> > [django]
> > check
> > compilemessages
> > createcachetable
> > dbshell
> > diffsettings
> > dumpdata
> > flush
> > inspectdb
> > loaddata
> > makemessages
> > makemigrations
> > migrate
> > optimizemigration
> > runserver
> > sendtestemail
> > shell
> > showmigrations
> > sqlflush
> > sqlmigrate
> > sqlsequencereset
> > squashmigrations
> > startapp
> > startproject
> > test
> > testserver
>
> This response indicates that `mailman-web` is not getting settings.py.
> Have you configured /etc/mailman3/settings.py? See
> <
> https://docs.mailman3.org/en/latest/install/virtualenv.html#initial-configu…
> >.
>
> > (venv) mailman@new-machine ~ (v3.3.9)> mailman-web check
> > System check identified no issues (0 silenced).
> > (venv) mailman@new-machine ~ (v3.3.9)> mailman-web check migrate
>
> You should run `mailman-web migrate` not `mailman-web check migrate`
> plus others. See
> <
> https://docs.mailman3.org/en/latest/install/virtualenv.html#run-database-mi…>
>
> et.seq. but first you need the appropriate settings so `mailman-web`
> returns something like
> ```
> $ mailman-web
>
> Type 'mailman-web help <subcommand>' for help on a specific subcommand.
>
> Available subcommands:
>
> [account]
> account_unsetmultipleprimaryemails
>
> [auth]
> changepassword
> createsuperuser
>
> [compressor]
> compress
> mtime_cache
>
> [contenttypes]
> remove_stale_contenttypes
>
> [django]
> check
> compilemessages
> createcachetable
> dbshell
> diffsettings
> dumpdata
> flush
> inspectdb
> loaddata
> makemessages
> makemigrations
> migrate
> optimizemigration
> sendtestemail
> shell
> showmigrations
> sqlflush
> sqlmigrate
> sqlsequencereset
> squashmigrations
> startapp
> startproject
> test
> testserver
>
> [django_extensions]
> admin_generator
> clean_pyc
> clear_cache
> compile_pyc
> create_command
> create_jobs
> create_template_tags
> delete_squashed_migrations
> describe_form
> drop_test_database
> dumpscript
> export_emails
> find_template
> generate_password
> generate_secret_key
> graph_models
> list_model_info
> list_signals
> mail_debug
> managestate
> merge_model_instances
> notes
> pipchecker
> print_settings
> print_user_for_session
> raise_test_exception
> reset_db
> reset_schema
> runjob
> runjobs
> runprofileserver
> runscript
> runserver_plus
> set_default_site
> set_fake_emails
> set_fake_passwords
> shell_plus
> show_template_tags
> show_urls
> sqlcreate
> sqldiff
> sqldsn
> sync_s3
> syncdata
> unreferenced_files
> update_permissions
> validate_templates
>
> [django_q]
> qcluster
> qinfo
> qmemory
> qmonitor
>
> [haystack]
> build_solr_schema
> clear_index
> haystack_info
> rebuild_index
> update_index
>
> [hyperkitty]
> attachments_to_file
> hyperkitty_import
> hyperkitty_warm_up_cache
> mailman_sync
> update_index_one_list
>
> [postorius]
> mmclient
> reset_passwords
>
> [rest_framework]
> generateschema
>
> [sessions]
> clearsessions
>
> [staticfiles]
> collectstatic
> findstatic
> runserver
> ```
>
>
> --
> 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/
> Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to helio(a)loureiro.eng.br
>
2 years, 10 months
[MM3-users] Re: Apache+mod_wsgi issue
by Odhiambo Washington
On Thu, Dec 22, 2022 at 8:02 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/22/22 03:49, Odhiambo Washington wrote:
> >
> > My challenge now is to get Apache+mod_uwsgi to serve my pages,
>
> I assume that's a typo. I.e, mod_wsgi, not mod_uwsgi.
>
That's right :)
> > but I am hitting the error below which has gotten me stuck.
> > Thanking you in advance for your advice on how to overcome this.
> >
> ...> [Thu Dec 22 14:21:23.041064 2022] [wsgi:error] [pid 4288] [remote
> > 197.232.81.246:15107] ModuleNotFoundError: No module named 'settings'
>
>
> Django can't import your settings.py. Is the directory that contains it
> in your Python path and does that directory contain (an empty) __init__.py?
>
Here is the VHOST...
<CUT> vhost ---8<
[00:53 mm ]$ less /usr/local/etc/apache24/Includes/mailman3-uwsgi.cf
# mm3-lists.kictanet.or.ke
<VirtualHost *:80>
ServerName mm3-lists.kictanet.or.ke
ServerAdmin odhiambo(a)gmail.com
Redirect permanent / https://mm3-lists.kictanet.or.ke
</VirtualHost>
# This goes in a global section.
WSGIDaemonProcess mailman-web display-name=mailman-web
maximum-requests=1000 umask=0002 user=mailman group=mailman
python-path=/opt/mailman/mm/venv/lib/python3.9/site-packages:/opt/mailman/mm/venv/lib/python3.9
python-home=/opt/mailman/mm/venv home=/opt/mailman/mm/var
WSGIRestrictSignal Off
<VirtualHost *:443>
ServerName mm3-lists.kictanet.or.ke
ServerAdmin odhiambo(a)gmail.com
SSLEngine on
SSLCipherSuite
ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/letsencrypt/live/
mm3-lists.kictanet.or.ke/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/
mm3-lists.kictanet.or.ke/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/
mm3-lists.kictanet.or.ke/chain.pem"
CustomLog /var/log/mm3-lists-access.log combined
ErrorLog /var/log/mm3-lists-error.log
LogLevel info
Alias /favicon.ico /opt/mailman/mm/static/hyperkitty/img/favicon.ico
# (I'm not sure that WSGIRestrictSignal Off is required, but it was in the
# provided example so I kept it. I also made changes to WSGIDaemonProcess
# based on my own mod_wsgi experience elsewhere.)
# This goes in the VirtualHost block for the domain.
# Mailman 3 stuff
Alias /static "/opt/mailman/mm/static"
<Directory "/opt/mailman/mm/static">
Require all granted
</Directory>
WSGIScriptAlias /mailman3 /opt/mailman/mm/wsgi.py
<Directory "/opt/mailman/mm/">
<Files wsgi.py>
Order deny,allow
Allow from all
Require all granted
</Files>
WSGIProcessGroup mailman-web
</Directory>
</VirtualHost>
</CUT>
And here is the path - or maybe there is something I am missing in the
VHOST?
[00:53 ~ ]$ cd /opt/mailman/mm/
[00:53 mm ]$ ls -al
total 116
drwxr-xr-x 9 mailman mailman 512 Dec 22 13:54 .
drwxr-xr-x 6 mailman mailman 512 Dec 21 07:54 ..
-rw-r--r-- 1 mailman mailman 0 Sep 29 2021 __init__.py
drwxr-xr-x 2 mailman mailman 512 Dec 22 14:18 __pycache__
-rw-r--r-- 1 mailman mailman 15574 Dec 20 18:16 _settings.py
drwxr-xr-x 3 mailman mailman 512 Dec 20 19:47 bin
drwxr-xr-x 5 mailman mailman 512 Dec 8 10:32 etc
drwxr-xr-x 2 mailman mailman 1536 Dec 21 11:54 fulltext_index
-rw-r--r-- 1 mailman mailman 317 Dec 21 16:53 gunicorn.conf
lrwxr-xr-x 1 mailman mailman 13 Dec 21 16:55 gunicorn.conf.py ->
gunicorn.conf
-rw-r--r-- 1 mailman mailman 0 Dec 5 18:10 init.py
lrwxr-xr-x 1 mailman mailman 24 Dec 5 17:38 logs ->
/opt/mailman/mm/var/logs
-rw-r--r-- 1 mailman mailman 592 Oct 2 2021 mailman-crontab
-rw-r--r-- 1 mailman mailman 409 Dec 20 16:32 mailman-hyperkitty.cfg
-rw-r--r-- 1 mailman mailman 1330 Dec 20 16:24 mailman.cfg
-rw-r--r-- 1 mailman mailman 183 Dec 2 15:17 main.py
-rwxr-xr-x 1 mailman mailman 243 Sep 29 2021 manage.py
-rw-r--r-- 1 mailman mailman 510 Dec 11 14:11 modify-db.sql
-rw-r--r-- 1 mailman mailman 15844 Dec 22 14:18 settings.py
-rw-r--r-- 1 mailman mailman 6622 Dec 22 11:27 settings_local.py
drwxr-xr-x 10 mailman mailman 512 Dec 5 17:38 static
-rw-r--r-- 1 mailman mailman 1453 Dec 20 16:32 urls.py
-rw-r--r-- 1 mailman mailman 1266 Dec 22 13:55 uwsgi.ini
drwxr-xr-x 12 mailman mailman 512 Dec 22 14:21 var
drwxr-xr-x 7 mailman mailman 512 Dec 6 15:35 venv
-rw-r--r-- 1 mailman mailman 1173 Sep 29 2021 wsgi.py
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
3 years, 10 months
[MM3-users] Re: Post-installation documentation?
by David Newman
On 11/24/21 2:36 PM, Mark Sapiro wrote:
> On 11/24/21 9:40 AM, David Newman wrote:
>>
>> IMO post-installation docs for list admins would be a big help in
>> Mailman3 adoption. I'm willing to help with this.
>
>
> Thank you for being willing to contribute. I think the place for list
> admin docs would be in the https://gitlab.com/mailman/mailman-suite-doc
> project which is the source for https://docs.mailman3.org/en/latest/.
> There is currently a userguide there at source/userguide.rst and
> referenced from source/index.rst. the addition of an adminguide.rst
> would be welcom if you want to work on that.
Thanks, will get into this ASAP. Am happy to contribute once I acquire a
bit more clue.
>
>
>> When I say "working": I'm looking to migrate Mailman2 mailing lists to
>> Mailman3, but am struggling with even basic setup tasks before we
>> attempt list migtration.
>>
>> For example, on admin page I've set up two lists, one public and one
>> private (each with unique list IDs), but neither appear in the site's
>> list index.
>
>
> Here are the steps to migrate a 2.1 list named `alist(a)example.com` and
> its archives.
>
> run Mailman's `bin/mailman create alist(a)example.com`
>
> follow that with
> ```
> bin/mailman import21 alist(a)example.com
> /path/to/mailman2.1/lists/alist/config.pck
> ```
> That will create the list and import its members and settings.
>
> To import archives run the Django admin command with arguments
> ```
> hyperkitty_import -l alist(a)example.com
> /path/to/mailman2.1/archives/private/alist.mbox/alist.mbox
Good up to here, but ... hyperkitty_import not found.
This wasn't covered in the venv docs:
https://docs.mailman3.org/en/latest/install/virtualenv.html
or in the web frontend docs [1]:
https://docs.mailman3.org/en/latest/config-web.html
or in the howto Brian Carpenter (RIP) wrote for Debian 10:
https://wiki.list.org/DOC/Howto_Install_Mailman3_On_Debian10
Also, I had previously created two other lists under the site admin
page. These do not appear in the site's mailing lists page, nor does the
list I successfully imported from MM 2.1 appear in the admin page, under
mailing lists.
> ```
>
>> And I don't know where to add list members.
>
>
> For imported lists, they are already added, but for new lists, you can
> add them in Postorius under Mass operations -> Mass subscribe or via the
> bin/mailman commands `addmembers` or `syncmembers`. See
> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/commands/d…
>
>
>
>> And clicking the site archives link throws this error:
>>
>> django.urls.exceptions.NoReverseMatch: Reverse for 'hk_list_overview'
>> with keyword arguments '{'mlist_fqdn': 'wheee'}' not found. 1
>> pattern(s) tried: ['archives/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/$']
>
>
> Did you specify the list's fqdn as in
> https://www.example.com/archives/list/list@example.com/
No. I clicked the archives icon at the top of a Postorious page. This is
possibly related to the hyperkitty_import issue above.
Thanks again.
dn
[1] In addition to the web frontend docs, there is also a hyperkitty
docs page:
https://docs.mailman3.org/projects/hyperkitty/en/latest/install.html
I found this page unhelpful. For example it starts with this command:
sudo python setup.py install
but doesn't say where setup.py resides, or which directory the command
should be run from. (And yes, different OSs use different locations. I'd
setting for one being named, along with a YMMV disclaimer.)
Then this doc goes to database setup, with this example:
django-admin migrate --pythonpath example_project --settings settings
Again, this is unclear. I don't know what "example_project" is, or in
what context it's used here.
This doc also describes a different, and less straightforward,
import-from-2.1 procedure than Mark described above.
It's possible the hyperkitty doc is now outdated. I'd be glad to help
bring the various different install guides together and update them --
once I better understand how they work. Thanks.
4 years, 11 months
[MM3-users] Re: hyperkitty threads by month question
by Bryan Fields
On 7/26/24 4:01 PM, Mark Sapiro wrote:
> Yes, I suspect this bad date is part of the issue.
>
> I would do a few things. First,
>
> SELECT message_id FROM hyperkitty_email WHERE thread_id = 35670;
mailmanweb=> SELECT message_id FROM hyperkitty_email WHERE thread_id = 35670;
message_id
-------------------------------------
200204151506953.SM01412(a)sunchar.com
Yep, that matches the bad date message ID.
> If this returns just the one message_id, I would then
>
> DELETE FROM hyperkitty_thread WHERE id = 35670;
> DELETE FROM hyperkitty_email WHERE id = 150555;
It's giving an error due to a fk constraint on another table. I'm not
familiar with the db structure enough to be certain how to clean/fix it.
mailmanweb=> DELETE FROM hyperkitty_thread WHERE id = 35670;
ERROR: update or delete on table "hyperkitty_thread" violates foreign key constraint "hyperkitty_lastview_thread_id_5bd4f0ad_fk_hyperkitty_thread_id" on table "hyperkitty_lastview"
DETAIL: Key (id)=(35670) is still referenced from table "hyperkitty_lastview".
mailmanweb=> DELETE FROM hyperkitty_email WHERE id = 150555;
ERROR: update or delete on table "hyperkitty_email" violates foreign key constraint "hyperkitty_thread_starting_email_id_fa7c55f5_fk_hyperkitt" on table "hyperkitty_thread"
DETAIL: Key (id)=(150555) is still referenced from table "hyperkitty_thread".
> and see if that fixes the internal server error when accessing the
> archive. I would also
>
> SELECT * FROM hyperkitty_email WHERE id = 136872;
mailmanweb=> SELECT * FROM hyperkitty_email WHERE id = 136872;
id | message_id | message_id_hash | subject | content | date | timezone | in_reply_to | archived_date | thread_depth | thread_order | mailinglist_id | parent_id | sender_id | thread_id | sender_name
--------+------------------------------------------+----------------------------------+------------------+-------------------------------------------------------------------+------------------------+----------+-------------+------------------------+--------------+--------------+----------------+-----------+-------------------------+-----------+---------------
136872 | 200001010102.BAA05112(a)genesis.domino.org | SGZJVBCSRYSHGHR4BB2632INFGYWOJYH | UK GMT roll over | +| 0100-01-01 01:02:34+00 | 0 | | 1999-12-31 20:20:13+00 | 0 | 0 | 3 | | neil(a)genesis.domino.org | 31067 | Neil J. McRae
| | | | GMT and CET rolled over without any major incidents. The cellular+| | | | | | | | | | |
| | | | networks were busy but thats to be expected. +| | | | | | | | | | |
| | | | +| | | | | | | | | | |
| | | | Regards, +| | | | | | | | | | |
| | | | Neil. +| | | | | | | | | | |
| | | | -- +| | | | | | | | | | |
| | | | Neil J. McRae - Alive and Kicking. +| | | | | | | | | | |
| | | | neil(a)DOMINO.ORG +| | | | | | | | | | |
| | | | +| | | | | | | | | | |
| | | | | | | | | | | | | | |
That message had "Date: Sat, 1 Jan 100 01:02:34 +0000 (GMT)" in the mbox.
It looks like it should be year 2000 from the rest of the headers
This message was found by your script too:
Date: changed at line 13785764
Date: Sat, 1 Jan 100 01:02:34 +0000 (GMT)
Date: Fri, 31 Dec 1999 20:20:13 -0000
> and maybe update the `date` in that entry.
I'm actually thinking I need to fix the archive mbox, then delete them and
re-import them once they are cleaned.
> Also, FYI, assuming those messages with very old Date: headers had
> reasonable unix from dates, the hyperkitty/contrib/cleanarch3 script
> would fix them, except you have to get the script from
> https://gitlab.com/mailman/hyperkitty/-/blob/master/hyperkitty/contrib/clea…
> or https://www.msapiro.net/scripts/cleanarch3 because the script in the
> latest release has a bug.
I tried the dry run option on your script and it gave a bunch of output for bad
dates. This was absent on the one shipping with the source. What's interesting
is that pipermail seems to have no issue with this, detecting the date
correctly.
https://mailman.nanog.org/pipermail/nanog/2000-January/137630.html
One other thing, I did notice a number of archives not showing up in sequence
due to missing "In-Reply-To:" headers from the source. The first message in
this is one like this, and pipermail in mmm2 seems to handle this by referencing
the subject, https://mailman.nanog.org/pipermail/nanog/2002-April/151325.html,
where as in hyperkitty it's an orphaned thread.
Is the archive tool in pipermail's import more robust in this manner? I'd argue
it's common to have missing In-Reply-To: headers where the subject and time
would need to be used to infer the likely thread. I'll agree this is a major
violation of the relevant RFC's to be missing this, but many MUA's (M$) are
famous for doing just this.
Thank you,
--
Bryan Fields
727-409-1194 - Voice
http://bryanfields.net
2 years, 3 months
[MM3-users] Re: Database permission problem?
by Bill Oliver
On Tue, 2024-10-15 at 17:13 -0700, Mark Sapiro wrote:
> On 10/15/24 15:24, Bill Oliver wrote:
> >
> > Yeah, I saw that, too. The double db files are created by
> > postmap. I
> > haven't worried about it too much yet, since the permissions are
> > the
> > same. I don't know why postmap does this, but it's next on my
> > list of
> > things to fix.
>
>
> You should not be running postmap manually and never on a *.db file
> in
> any case. Mailman should be creating postfix_domains, postfix_lmtp
> and
> postfix_vmap and calling postmap on those to create the .db files.
>
> > In my main.cf postfix_lmtp is mentioned four times:
> >
> > virtual_mailbox_maps =
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
> >
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_map
> > s.cf
> > #added 20241009 for mailman
> > hash:/opt/mailman/mm/var/data/postfix_lmtp ${dovecot}
> >
> > virtual_alias_maps =
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
> >
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
> >
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_ma
> > ps.c
> > f
> > #added 20241009 for mailman
> > hash:/opt/mailman/mm/var/data/postfix_vmap
> >
> > #Mailman transport stuff
> > transport_maps =
> > hash:/opt/mailman/mm/var/data/postfix_lmtp
> > local_recipient_maps =
> > hash:/opt/mailman/mm/var/data/postfix_lmtp ${dovecot}
>
>
> Are you adding ${dovecot} to the local_recipient_maps and
> virtual_mailbox_maps mailman entries or was that there before?
Thanks. The reason I created them by hand is that they are not being
created automatically it seemed. If I remove them and restart things, I
get the following errors in /var/log/mail.err:
2024-10-15T12:43:31.060478-04:00 mail postfix/smtpd[961837]: error:
open database /opt/mailman/mm/var/data/postfix_domains.db: No such file
or directory
2024-10-15T12:43:31.060874-04:00 mail postfix/smtpd[961837]: error:
open database /opt/mailman/mm/var/data/postfix_lmtp.db: No such file or
directory
2024-10-15T12:43:31.069450-04:00 mail postfix/smtpd[961837]: error:
open database /opt/mailman/mm/var/data/postfix_vmap.db: No such file or
directory
However.... I just looked at the /opt/mailman/mm/var/data directory and
the (single) db files are now there, and that error occurs only once.
So, I probably over-reacted to it.
Unfortunately, I'm back to the permission declined error:
2024-10-15T22:31:31.973125-04:00 mail postfix/virtual[3497]: error:
open database /opt/mailman/mm/var/data/postfix_lmtp.db: Permission
denied
As far as the addition of ${dovecot} goes, I did it myself because of
the instructions at:
https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/mta.h…
Dovecot is having a hard time authenticating mailinglist users. I
figured that problem arose because it can't use any of the mailman .db
files, but I don't know. In any case, a dovecot error message that
happens when a user (who has an account on the local machine) sends
mail to the mailing list includes:
2024-10-15T21:50:45.231465-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): lookup service=dovecot
2024-10-15T21:50:45.234036-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): #1/1 style=1 msg=Password:
2024-10-15T21:50:46.716360-04:00 mail dovecot: auth-worker(5669): conn
unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): pam_authenticate() failed:
Authentication failure (Password mismatch?) (given password: XXXXXXX)
2024-10-15T21:50:46.716497-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): Finished passdb lookup
2024-10-15T21:50:46.716562-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
Finished: password_mismatch
It should be noted that mail works fine for that user, and this error
arises *only* when mail is sent to the mailinglist address. Dovecot
does not complain if I send mail elsewhere. Mail is received and
delivered to and from this address without a problem.
The other thing I did was add an alias domain when I set up the domain
in postorius, again because it seemed from reading the instructions
that this was advisable on a server with multiple virtual domains.
Thanks.
2 years
[MM3-users] Re: The doubled entries issue
by Lars Bjørndal
Hi!
The problem seesm to be solved. Anyway, here's the answer to questions:
On Sun, Nov 12, 2023 at 08:07:59AM -0800, Mark Sapiro wrote:
> On 11/11/23 23:56, Lars Bjørndal wrote:
> >
> > Thank you. The script I try to run, is found here: https://gitlab.com/mailman/mailman/-/issues/657
> >
> > I named the script fix-doubled-entries.py. When I try
> >
> > `mailman shell --run ./fix-doubled-entries.py` I get:
>
> This is not the way to run a script with `mailman shell`. See
> ```
> mailman shell --details
> ```
> for info. However, that script cannot be run as is by `mailman shell --run`.
> It can be run by invoking `mailman shell` interactively and copying and
> pasting it,
Yes, that worked, e.g. no error messages.
> or if your Mailman is installed in a venv it can be run with the
> venv active by `python ./fix-doubled-entries.py`.
I have mailman installed in venv, but got the following when trying that:
"python fix-doubled-entries.py" need the IListManager interface but can't find it.
> However, that script will not fix your issue because you don't have multiple
> mhonarc entries for a list. See https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
> and as it says, Tell us more about the "duplicate entries" error, and if
> possible copy it exactly from where you found it originally, including any
> traceback.
Here's the entries in the mailman.log file:
[11/Nov/2023:09:18:41 +0100] "GET /3.1/addresses/lars(a)lamasti.net HTTP/1.1" 200 365 "-" "GNU Mailman REST client v3.3.5"
[11/Nov/2023:09:18:42 +0100] "GET /3.1/lists/annonsering.hodr.no/roster/moderator HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.5"
Nov 11 09:18:43 2023 (1709) HyperKitty archived message <m3sf5cd7ok.fsf(a)dalen.lamasti.net> to https://hodr.no/archives/list/annonsering@hodr.no/message/NL5LTYANYLKOF5N33…
[11/Nov/2023:09:18:44 +0100] "GET /3.1/users/lars(a)lamasti.net HTTP/1.1" 200 259 "-" "GNU Mailman REST client v3.3.5"
Nov 11 09:18:47 2023 (1715) Uncaught runner exception: Multiple rows were found when one or none was required
Nov 11 09:18:47 2023 (1715) Traceback (most recent call last):
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/core/runner.py", line 179, in _one_iteration
self._process_one_file(msg, msgdata)
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/core/runner.py", line 272, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/runners/outgoing.py", line 111, in _dispose
self._func(mlist, msg, msgdata)
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/mta/deliver.py", line 89, in deliver
refused = agent.deliver(mlist, msg, msgdata)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/mta/base.py", line 167, in deliver
callback(mlist, message_copy, msgdata_copy)
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/mta/decorating.py", line 32, in decorate
decorator.process(mlist, msg, msgdata)
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/handlers/decorate.py", line 250, in process
process(mlist, msg, msgdata)
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/handlers/decorate.py", line 73, in process
for archiver in IListArchiverSet(mlist).archivers:
^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/zope/component/_api.py", line 167, in adapter_hook
return sitemanager.queryAdapter(object, interface, name, default)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/zope/interface/registry.py", line 351, in queryAdapter
return self.adapters.queryAdapter(object, interface, name, default)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/database/transaction.py", line 106, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/mailman/model/mailinglist.py", line 653, in __init__
ListArchiver.name == archiver_name).one_or_none()
^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/sqlalchemy/orm/query.py", line 2769, in one_or_none
return self._iter().one_or_none() # type: ignore
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/sqlalchemy/engine/result.py", line 1813, in one_or_none
return self._only_one_row(
^^^^^^^^^^^^^^^^^^^
File "/opt/mailman3/venv/lib64/python3.11/site-packages/sqlalchemy/engine/result.py", line 816, in _only_one_row
raise exc.MultipleResultsFound(
sqlalchemy.exc.MultipleResultsFound: Multiple rows were found when one or none was required
Nov 11 09:18:47 2023 (1715) SHUNTING: 1699690727.810848+3b6f3baba5576f3d87d3ff392aba2715d4dda793
[11/Nov/2023:10:00:02 +0100] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 4061 "-" "GNU Mailman REST client v3.3.5"
I don't know what fixed the problem, but when I did `mailman unshunt` the message went through.
Will mailman notify when there's shunted messages?
Lars
3 years
[MM3-users] Re: Disable Sign-up per domain
by Mark
On 2025-08-01 01:37, Mark Sapiro wrote:
>> raise self.model.DoesNotExist(
>> django.contrib.sites.models.Site.DoesNotExist: Site matching query
>> does not exist.
> That error will occur when settings.py contains
>
> SITE_ID = 0
>
> and the host in the http request is not one of the hosts in the
> django_site table in the database or in Sites in the Django admin web
> UI.
> Is that possibly the case here?
The SITE_ID and database table check okay. The SITE_ID is supposed to be
"0"? No?
SITE_ID
Test server - settings.py: SITE_ID = 0
Prod server - settings.py: SITE_ID = 0
HTTP_HOST
Test server DB - mailmanweb.django_site table: domain and name fields OK
Prod server DB - mailmanweb.django_site table: domain and name fields
OK
And the hosts are displayed in Sites in the admin UI.
I also checked the ALLOWED_HOSTS in the Test and Prod servers. Both
have:
...
"localhost",
"127.0.0.1",
"<IP4 ADDRESS OF HOST>",
"<MY.DOMAIN.COM>"
"<OTHER.DOMAINNAME.COM>",
...
> Is there a complete traceback preceding the log snippet you report. If
> so, what is it?
The traceback does suggest that the SITE does not exist...
======================= TRACEBACK =====================
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/contrib/sites/models.py",
line 39, in _get_site_by_request
SITE_CACHE[host] = self.get(domain__iexact=host)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/manager.py",
line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 637, in get
raise self.model.DoesNotExist(
django.contrib.sites.models.Site.DoesNotExist: Site matching query does
not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/core/handlers/exception.py",
line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/core/handlers/base.py",
line 197, in _get_response
response = wrapped_callback(request, *callback_args,
**callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/postorius/views/list.py",
line 1158, in list_index
return render(
^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/shortcuts.py",
line 24, in render
content = loader.render_to_string(template_name, context, request,
using=using)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/template/loader.py",
line 62, in render_to_string
return template.render(context, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/template/backends/django.py",
line 61, in render
return self.template.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/template/base.py",
line 173, in render
with context.bind_template(self):
File "/usr/lib/python3.11/contextlib.py", line 137, in __enter__
return next(self.gen)
^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/template/context.py",
line 254, in bind_template
updates.update(processor(self.request))
^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django_mailman3/context_processors.py",
line 32, in common
context["site_name"] = get_current_site(request).name
^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/contrib/sites/shortcuts.py",
line 16, in get_current_site
return Site.objects.get_current(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/contrib/sites/models.py",
line 61, in get_current
return self._get_site_by_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/contrib/sites/models.py",
line 45, in _get_site_by_request
SITE_CACHE[domain] = self.get(domain__iexact=domain)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/manager.py",
line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 637, in get
raise self.model.DoesNotExist(
django.contrib.sites.models.Site.DoesNotExist: Site matching query does
not exist.
ERROR 2025-08-01 05:21:46,176 2030595 django.request Internal Server
Error: /owa/auth/logon.aspx
ERROR 2025-08-01 05:21:46,176 2030595 django.request Internal Server
Error: /owa/auth/logon.aspx
============= END TRACEBACK =================
>> ... -- "whatever is proxying to Django setting the appropriate
>> HTTP_HOST header." -- which I don't understand.
> This is in the configuration of the web server. It should be
> configured to pass the host of the incoming request to the proxy
> target in the HTTP_HOST header. In nginx this is `proxy_set_header
> Host $host;`. In apache it is `ProxyPreserveHost On`, but again the
> change to user_adapter shouldn't affect this.
>
That all looks good for both the Prod and Test servers.
...
location /static/ {
alias /opt/mailman/web/static/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
...
1 year, 3 months
[MM3-users] Re: A little stuck with installation of MM3 - ModuleNotFoundError: No module named 'flufl.lock'
by Odhiambo Washington
On Sun, 26 Jul 2020 at 18:48, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 7/26/20 3:15 AM, Odhiambo Washington wrote:
>
> > There is still some confusion on my part about the directives in the file
> > so allow me to seek some clarifications.
> >
> > The following are the contents of a file I have created and placed in my
> > Apache Includes/ directory.
> > I was hoping that with it, I can now access http://lists.my.server/mm3
> and
> > get the UI.
> >
> > <CUT>
> >
> > # Global section
> > WSGIDaemonProcess mailman-web display-name=mailman-web
> > maximum-requests=1000 umask=0002 user=mailman3 \
> > group=mailman3
> >
> python-path=/opt/mailman/mm/venv/lib/python3.7/site-packages:/opt/mailman/mm/venv/lib/python3.7
> > \
> > python-home=/opt/mailman/mm/venv home=/opt/mailman/mm/var
> > WSGIRestrictSignal Off
> >
> > <VirtualHost *:80>
> > ServerName lists.my.server
> > ServerAdmin odhiambo(a)gmail.com
> >
> > # (I'm not sure that WSGIRestrictSignal Off is required, but it was in
> the
> > # provided example so I kept it. I also made changes to WSGIDaemonProcess
> > # based on my own mod_wsgi experience elsewhere.)
> >
> > ErrorLog /var/log/myserver-error.log
> > LogLevel debug
> >
> > # This goes in the VirtualHost block for the domain.
> >
> > # Mailman 3 stuff
> > Alias /static "/var/spool/mailman-web/static" *<----- Where is this
> > directory supposed to be and what/who creates it and with what
> permissions?*
>
>
> It is created/updated by the mailman-post-update script based on CONFDIR
> and STATIC_DIR.
>
The fact that I have run the mailman-post-update script and these
directories aren't created means there is a problem in my setup, yes?
> > <Directory "/var/spool/mailman-web/static">
>
> With the settings in the sample, the above should be
>
> <Directory "/opt/mailman/mm/static">
>
> and the alias
>
> Alias /static "/opt/mailman/mm/static"
>
> Clearly
> <
> https://wiki.list.org/DOC/Mailman%203%20installation%20experience?action=At…
> >
> doesn't match some other files. I'll review abd update that.
>
Okay. I am anxiously waiting.
>
> > Require all granted
> > </Directory>
> > WSGIScriptAlias /mm3 /opt/mailman/mm/wsgi.py
> > <Directory "/opt/mailman/mm/">
> > <Files wsgi.py>
> > Order deny,allow
> > Allow from all
> > Require all granted
> > </Files>
> > WSGIProcessGroup mailman-web
> > </Directory>
> > </VirtualHost>
> >
> > </CUT-HERE>
> >
> > I end up with an "Internal server error" and from the error log I see:
> >
> ...
> > [Sun Jul 26 12:04:44.093265 2020] [wsgi:error] [pid 6444] [remote
> > 197.232.81.246:53383] ModuleNotFoundError: No module named 'settings'
>
>
> Django is trying to import your settings.py file and can't find it. Is
> it at /opt/mailman/mm/settings.py and also local settings at
> /opt/mailman/mm/settings_local.py?
Yes, I have these files:
(venv) [root@gw /opt/mailman/mm]# ls -al /opt/mailman/mm/settings*
-rw-r--r-- 1 mailman3 wheel 15518 Jul 25 14:34
/opt/mailman/mm/settings.py
-rw-r--r-- 1 mailman3 wheel 15773 Jul 26 10:33
/opt/mailman/mm/settings_local.py
PS: I made my /opt/mailman to be owned by mailman3:wheel because of a
confusion with the instructions at some point in the reading
of some documentation previously (in my previous attempt last year!) and
had noted that in my NOTES. I'll change this once things get clear for me.
Also, the fact that one of the init scripts
<https://wiki.list.org/DOC/Mailman%203%20installation%20experience?action=At…>
in your "reflection" page was calling sudo :)
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", grep ^[^#] :-)
6 years, 3 months
[MM3-users] Re: SPF check fails for lists subdomain
by Jan Eden
On 2023-01-04 15:07, Mark Sapiro wrote:
> On 1/4/23 14:02, Jan Eden via Mailman-users wrote:
> > Although I could specify the IP address in my SPF records directly (as
> > you suggested), I do hope that my understanding of DNS records laid out
> > above is not entirely misguided. My current setup does work as expected
> > for eden.one, after all.
>
> As I said at <https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…>
> I was misreading your DNS and now I am as puzzled as you about the failure.
It gets even more mysterious. I tried sending messages from both
lists.eden.one and janeden.net (my other domain) to a gmail account and
to another mail provider. Both messages passed the SPF checks on both
services (s. the relevant headers quoted below). Now because I send
those messages via my SMTP user (smtpuser(a)eden.one) and use SRS, the SPF
check operates (and succeeds) on e.g.
srs0=jdm+=5c=lists.eden.one=testlist-bounces+gmailuser=googlemail.com(a)eden.one
(and not on somethingsomething(a)lists.eden.one or
somethingsomething(a)janeden.net) Could this be the reason for the failed
SPF checks in Yahoo's and Google's DMARC reports?
- Jan
==============================
Authentication-Results: posteo.de; dmarc=pass (p=quarantine dis=none) header.from=lists.eden.one
Authentication-Results: posteo.de; spf=pass smtp.mailfrom=eden.one
Authentication-Results: posteo.de;
dkim=pass (2048-bit key) header.d=lists.eden.one header.i=(a)lists.eden.one header.b=8FtNB1m3;
dkim-atps=neutral
------------------------------
Delivered-To: gmailuser(a)gmail.com
Received: by 2002:a05:7022:4584:b0:4b:2a9c:6c6f with SMTP id cf4csp83532dlb;
Wed, 4 Jan 2023 23:29:12 -0800 (PST)
ARC-Authentication-Results: i=1; mx.google.com;
dkim=pass header.i=(a)lists.eden.one header.s=s42 header.b=lrjRRPic;
spf=pass (google.com: domain of srs0=jdm+=5c=lists.eden.one=testlist-bounces+gmailuser=googlemail.com(a)eden.one designates 123.123.123.123 as permitted sender) smtp.mailfrom="SRS0=JDm+=5C=lists.eden.one=testlist-bounces+gmailuser=googlemail.com(a)eden.one";
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=lists.eden.one
Received-SPF: pass (google.com: domain of srs0=jdm+=5c=lists.eden.one=testlist-bounces+gmailuser=googlemail.com(a)eden.one designates 123.123.123.123 as permitted sender) client-ip=123.123.123.123;
Authentication-Results: mx.google.com;
dkim=pass header.i=(a)lists.eden.one header.s=s42 header.b=lrjRRPic;
spf=pass (google.com: domain of srs0=jdm+=5c=lists.eden.one=testlist-bounces+gmailuser=googlemail.com(a)eden.one designates 123.123.123.123 as permitted sender) smtp.mailfrom="SRS0=JDm+=5C=lists.eden.one=testlist-bounces+gmailuser=googlemail.com(a)eden.one";
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=lists.eden.one
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lists.eden.one; s=s42; t=1672903751; h=from:from:reply-to:reply-to:subject:subject:date:date:
message-id:message-id:to:to:cc:mime-version:mime-version:
content-type:content-type:list-id:list-help:list-owner:
list-unsubscribe:list-subscribe:list-post; bh=q4JtVWzFRbBZ12C26k1xKRRVOBGue+2uV43xiHohi3M=; b=lrjRRPicpiyGUP11wjj76yIg8qHib1aUAS99+RNhSwYE9HzXctedXbdMXeY7WJyUc1gE2Z PFkDPZD6YMGIAY9N35fzgzoMgrgNAWkTLqDF7i5d0kEXEhEuQ+hLbRHKMcsD8XDVff41iY vLnygg85AKj5L4dvq/p5o4TEjmfaXHadRJ6ZI6qY67Yys1D+LqZzbfIQyvgUH+U986d0Ed SO3POUWJLcYNwwQk0UzTc4iIenM7042alew/wXoncDc1lnMQrAYHY/lPwGHFyqqyPebkLZ bE3nM4g8pM9ODXBbn0Vs7602SzCFkHs2l1QScFtV9+pZbPaKgYL5TW6Q8BT0MA==
Received: from client.eden.one (unknown [195.37.242.24]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
Date: Thu, 5 Jan 2023 08:29:05 +0100
To: testlist(a)lists.eden.one
Subject: [Testlist] Test (Listenmail)
From: Jan Eden via Testlist <testlist(a)lists.eden.one>
Reply-To: Jan Eden <mailuser(a)eden.one>
==============================
==============================
Authentication-Results: posteo.de; dmarc=pass (p=quarantine dis=none) header.from=janeden.net
Authentication-Results: posteo.de; spf=pass smtp.mailfrom=eden.one
Authentication-Results: posteo.de;
dkim=pass (2048-bit key) header.d=janeden.net header.i=(a)janeden.net header.b=VV5k+gN7;
dkim-atps=neutral
------------------------------
Delivered-To: gmailuser(a)gmail.com
ARC-Authentication-Results: i=1; mx.google.com;
dkim=pass header.i=(a)janeden.net header.s=s42 header.b=B8NPELsC;
spf=pass (google.com: domain of srs0=xtlx=5c=janeden.net=mailuser(a)eden.one designates 123.123.123.123 as permitted sender) smtp.mailfrom="SRS0=Xtlx=5C=janeden.net=mailuser(a)eden.one";
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=janeden.net
Received-SPF: pass (google.com: domain of srs0=xtlx=5c=janeden.net=mailuser(a)eden.one designates 123.123.123.123 as permitted sender) client-ip=123.123.123.123;
Authentication-Results: mx.google.com;
dkim=pass header.i=(a)janeden.net header.s=s42 header.b=B8NPELsC;
spf=pass (google.com: domain of srs0=xtlx=5c=janeden.net=mailuser(a)eden.one designates 123.123.123.123 as permitted sender) smtp.mailfrom="SRS0=Xtlx=5C=janeden.net=mailuser(a)eden.one";
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=janeden.net
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janeden.net; s=s42; t=1672903599; h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type; bh=wE7NXSkgnx9PGiavN4OZhJztvkqPDlemV3OGuEnLwNo=; b=B8NPELsC7r7WI62YOpEFUhESxumSjhP/aQNOlWRmusnTHgbHgjEHeCKNRhEDUeh+fRRVZw JnRVZx9WAU58/3UXx0XJIN6ivLYJnOtJ9vw3r1nVAzU6wk7RCE1Zx6zTJLybwHNijHcCn4 A2cRJZc1IUfJTAok3RHclBB8c10difp5SNPKVGRtNEPAOEFnG5vaNecPvQWc0+4EyHNCYX WSEARKApxpL31gBcojCEHjtdAFgmcknReosUN9I3PUiQQIxqFQ6uU9hA6XWyg6qCsEAll7 E1sGL9HopGIHQA2pHXPanQ9FZxOFou8BcjwN4w65Vygr78hAO5e2Ru6tDFwr4g==
Date: Thu, 5 Jan 2023 08:26:37 +0100
From: Jan Eden <mailuser(a)janeden.net>
To: gmailuser(a)googlemail.com
Subject: Test
==============================
3 years, 10 months
[MM3-users] Re: New releases
by Danil Smirnov
On Tue, 9 Jun 2020 at 00:05, Mark Sapiro <mark(a)msapiro.net> wrote:
> The first row of horizontal tabs is unchanged, but the `Settings` tab
> used to have a second horizontal row and now has a vertical list on the
> left.
>
Yeah Mark, thanks - now I see it :)
> After you upgraded did you run these django-admin commands?
> ```
> django-admin collectstatic --clear --noinput --verbosity 0
> django-admin compress
> django-admin compilemessages
> django-admin migrate
> ```
> These 4 commands should be run after every update to Postorius,
> HyperKitty or django_mainlman3.
>
Hm, interesting... Could you point me to some related docs please?
To upgrade, I've just bumped app versions in my Dockerfiles, built and
restarted...
Mailman-core worked right away with no issues.
Mailman-web (Hyperkitty) failed with the error:
----------
ERROR 2020-06-08 19:46:41,942 14 django.request Internal Server Error:
/hyperkitty/
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/compressor/base.py", line 282, in
precompile
mod = import_module(mod_name)
File "/usr/lib/python3.6/importlib/__init__.py", line 126, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'sassc -t compressed {infile}
{outfile}'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/usr/lib/python3.6/site-packages/django/core/handlers/exception.py", line
34, in inner
response = get_response(request)
File "/usr/lib/python3.6/site-packages/django/core/handlers/base.py",
line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/lib/python3.6/site-packages/django/core/handlers/base.py",
line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3.6/site-packages/hyperkitty/views/index.py", line
118, in index
return render(request, "hyperkitty/index.html", context)
File "/usr/lib/python3.6/site-packages/django/shortcuts.py", line 36, in
render
content = loader.render_to_string(template_name, context, request,
using=using)
File "/usr/lib/python3.6/site-packages/django/template/loader.py", line
62, in render_to_string
return template.render(context, request)
File
"/usr/lib/python3.6/site-packages/django/template/backends/django.py", line
61, in render
return self.template.render(context)
File "/usr/lib/python3.6/site-packages/django/template/base.py", line
171, in render
return self._render(context)
File "/usr/lib/python3.6/site-packages/django/template/base.py", line
163, in _render
return self.nodelist.render(context)
File "/usr/lib/python3.6/site-packages/django/template/base.py", line
937, in render
bit = node.render_annotated(context)
File "/usr/lib/python3.6/site-packages/django/template/base.py", line
904, in render_annotated
return self.render(context)
File "/usr/lib/python3.6/site-packages/django/template/loader_tags.py",
line 150, in render
return compiled_parent._render(context)
File "/usr/lib/python3.6/site-packages/django/template/base.py", line
163, in _render
return self.nodelist.render(context)
File "/usr/lib/python3.6/site-packages/django/template/base.py", line
937, in render
bit = node.render_annotated(context)
File "/usr/lib/python3.6/site-packages/django/template/base.py", line
904, in render_annotated
return self.render(context)
File
"/usr/lib/python3.6/site-packages/compressor/templatetags/compress.py",
line 143, in render
return self.render_compressed(context, self.kind, self.mode,
forced=forced)
File
"/usr/lib/python3.6/site-packages/compressor/templatetags/compress.py",
line 119, in render_compressed
rendered_output = compressor.output(mode, forced=forced,
basename=file_basename)
File "/usr/lib/python3.6/site-packages/compressor/css.py", line 46, in
output
ret.append(subnode.output(*args, **kwargs))
File "/usr/lib/python3.6/site-packages/compressor/css.py", line 48, in
output
return super(CssCompressor, self).output(*args, **kwargs)
File "/usr/lib/python3.6/site-packages/compressor/base.py", line 314, in
output
output = '\n'.join(self.filter_input(forced))
File "/usr/lib/python3.6/site-packages/compressor/base.py", line 254, in
filter_input
for hunk in self.hunks(forced):
File "/usr/lib/python3.6/site-packages/compressor/base.py", line 228, in
hunks
precompiled, value = self.precompile(value, **options)
File "/usr/lib/python3.6/site-packages/compressor/base.py", line 287, in
precompile
return True, filter.input(**kwargs)
File "/usr/lib/python3.6/site-packages/compressor/filters/base.py", line
239, in input
return super(CachedCompilerFilter, self).input(**kwargs)
File "/usr/lib/python3.6/site-packages/compressor/filters/base.py", line
206, in input
raise FilterError(err)
compressor.exceptions.FilterError: Error: It's not clear which file to
import for '@import "../libs/bootstrap/stylesheets/bootstrap"'.
Candidates:
../libs/bootstrap/stylesheets/_bootstrap.scss
../libs/bootstrap/stylesheets/bootstrap.scss
Please delete or rename all but one of these files.
on line 4 of
../mailman-web-data/static/hyperkitty/sass/hyperkitty.scss
>> @import "../libs/bootstrap/stylesheets/bootstrap";
----------
I've fixed the error by removing the older file which is
/opt/mailman-web-data/static/hyperkitty/libs/bootstrap/stylesheets/_bootstrap.scss
After that everything seems to be working fine.
My best regards,
Danil Smirnov
6 years, 5 months
[MM3-users] Re: templates
by Christian
It seems like something about my SPF or DKIM records are upsetting to gmail,
hence the bounces I'm guessing. That aside, this is what mail.log says:
May 5 08:02:50 zarathustra postfix/smtpd[14110]: AF07B1004A4:
client=localhost[127.0.0.1]
May 5 08:02:50 zarathustra postfix/cleanup[26614]: AF07B1004A4:
message-id=<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
May 5 08:02:50 zarathustra postfix/cleanup[26614]: AF07B1004A4: warning:
header Subject: [Degrowcali] test - please ignore from localhost[127.0.0.1];
from=<degrowcali-bounces+eappiah=dons.usfca.edu(a)lists.ccalternatives.org>
to=<eappiah(a)dons.usfca.edu> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:02:50 zarathustra postfix/qmgr[2262]: AF07B1004A4:
from=<degrowcali-bounces+eappiah=dons.usfca.edu(a)lists.ccalternatives.org>,
size=6812, nrcpt=1 (queue active)
May 5 08:04:06 zarathustra postfix/smtp[25955]: AF07B1004A4:
to=<eappiah(a)dons.usfca.edu>,
relay=mxb-00277301.gslb.pphosted.com[148.163.158.109]:25, delay=76,
delays=0.01/0/61/15, dsn=2.0.0, status=sent (250 2.0.0 3qcf1p3wf4-1 Message
accepted for delivery)
May 5 08:04:06 zarathustra postfix/qmgr[2262]: AF07B1004A4: removed
May 5 08:05:01 zarathustra postfix/smtpd[14110]: C263A1004A4:
client=localhost[127.0.0.1]
May 5 08:05:01 zarathustra postfix/cleanup[27274]: C263A1004A4:
message-id=<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
May 5 08:05:01 zarathustra postfix/cleanup[27274]: C263A1004A4: warning:
header Subject: [Degrowcali] test - please ignore from localhost[127.0.0.1];
from=<degrowcali-bounces+adga=ucdavis.edu(a)lists.ccalternatives.org>
to=<adga(a)ucdavis.edu> proto=ESMTP helo=<zarathustra.ccalternatives.org>
May 5 08:05:01 zarathustra postfix/qmgr[2262]: C263A1004A4:
from=<degrowcali-bounces+adga=ucdavis.edu(a)lists.ccalternatives.org>,
size=6806, nrcpt=1 (queue active)
May 5 08:05:04 zarathustra postfix/smtp[25955]: C263A1004A4:
to=<adga(a)ucdavis.edu>,
relay=ucdavis-edu.mail.protection.outlook.com[104.47.66.10]:25, delay=2.5,
delays=0.01/0/0.15/2.3, dsn=2.6.0, status=sent (250 2.6.0
<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
[InternalId=117626269340390,
Hostname=BN8PR08MB6290.namprd08.prod.outlook.com] 16054 bytes in 0.131,
119.439 KB/sec Queued mail for delivery)
May 5 08:05:04 zarathustra postfix/qmgr[2262]: C263A1004A4: removed
May 5 08:07:12 zarathustra postfix/smtpd[14110]: D3CCE1004A4:
client=localhost[127.0.0.1]
May 5 08:07:12 zarathustra postfix/cleanup[27925]: D3CCE1004A4:
message-id=<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
May 5 08:07:12 zarathustra postfix/cleanup[27925]: D3CCE1004A4: warning:
header Subject: [Degrowcali] test - please ignore from localhost[127.0.0.1];
from=<degrowcali-bounces+chris.hebdon=yale.edu(a)lists.ccalternatives.org>
to=<chris.hebdon(a)yale.edu> proto=ESMTP helo=<zarathustra.ccalternatives.org>
May 5 08:07:12 zarathustra postfix/qmgr[2262]: D3CCE1004A4:
from=<degrowcali-bounces+chris.hebdon=yale.edu(a)lists.ccalternatives.org>,
size=6811, nrcpt=1 (queue active)
May 5 08:07:13 zarathustra postfix/smtp[27926]: D3CCE1004A4:
to=<chris.hebdon(a)yale.edu>,
relay=yale-edu.mail.protection.outlook.com[104.47.59.138]:25, delay=0.77,
delays=0.01/0.02/0.07/0.67, dsn=2.6.0, status=sent (250 2.6.0
<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
[InternalId=16887811415117,
Hostname=PH0PR08MB6757.namprd08.prod.outlook.com] 16093 bytes in 0.121,
129.491 KB/sec Queued mail for delivery)
May 5 08:07:13 zarathustra postfix/qmgr[2262]: D3CCE1004A4: removed
May 5 08:09:23 zarathustra postfix/cleanup[28574]: E394C1005BA:
message-id=<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
May 5 08:09:23 zarathustra postfix/cleanup[28574]: E394C1005BA: warning:
header Subject: [Degrowcali] test - please ignore from localhost[127.0.0.1];
from=<degrowcali-bounces+vortexanthony=hotmail.com(a)lists.ccalternatives.org>
to=<vortexanthony(a)hotmail.com> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:09:23 zarathustra postfix/qmgr[2262]: E394C1005BA:
from=<degrowcali-bounces+vortexanthony=hotmail.com(a)lists.ccalternatives.org>
, size=6815, nrcpt=1 (queue active)
May 5 08:09:24 zarathustra postfix/smtp[28575]: E394C1005BA:
to=<vortexanthony(a)hotmail.com>,
relay=hotmail-com.olc.protection.outlook.com[104.47.17.161]:25, delay=0.58,
delays=0.01/0.02/0.41/0.14, dsn=5.7.1, status=bounced (host
hotmail-com.olc.protection.outlook.com[104.47.17.161] said: 550 5.7.1
Unfortunately, messages from [192.46.218.224] weren't sent. Please contact
your Internet service provider since part of their network is on our block
list (S3140). You can also refer your provider to
http://mail.live.com/mail/troubleshooting.aspx#errors.
[VI1EUR05FT042.eop-eur05.prod.protection.outlook.com
2023-05-05T15:09:24.433Z 08DB4D70FA71385D] (in reply to MAIL FROM command))
May 5 08:09:24 zarathustra postfix/smtp[28575]: E394C1005BA: lost
connection with hotmail-com.olc.protection.outlook.com[104.47.17.161] while
sending RCPT TO
May 5 08:09:24 zarathustra postfix/cleanup[28574]: 7C9B31005EB:
message-id=<20230505150924.7C9B31005EB(a)zarathustra.ccalternatives.org>
May 5 08:09:24 zarathustra postfix/qmgr[2262]: 7C9B31005EB: from=<>,
size=9884, nrcpt=1 (queue active)
May 5 08:09:24 zarathustra postfix/bounce[28579]: E394C1005BA: sender
non-delivery notification: 7C9B31005EB
May 5 08:09:24 zarathustra postfix/bounce[28579]: E394C1005BA: sender
non-delivery notification: 7C9B31005EB
May 5 08:09:24 zarathustra postfix/bounce[28579]: E394C1005BA: sender
non-delivery notification: 7C9B31005EB
May 5 08:09:24 zarathustra postfix/qmgr[2262]: E394C1005BA: removed
May 5 08:09:24 zarathustra postfix/lmtp[28581]: 7C9B31005EB:
to=<degrowcali-bounces+vortexanthony=hotmail.com(a)lists.ccalternatives.org>,
relay=127.0.0.1[127.0.0.1]:8024, delay=0.04, delays=0/0.01/0/0.02,
dsn=2.0.0, status=sent (250 Ok)
May 5 08:09:24 zarathustra postfix/qmgr[2262]: 7C9B31005EB: removed
May 5 08:11:35 zarathustra postfix/smtpd[14110]: 016931005BA:
client=localhost[127.0.0.1]
May 5 08:11:35 zarathustra postfix/cleanup[29218]: 016931005BA:
message-id=<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
May 5 08:11:35 zarathustra postfix/cleanup[29218]: 016931005BA: warning:
header Subject: [Degrowcali] test - please ignore from localhost[127.0.0.1];
from=<degrowcali-bounces+alaitz.aritza=gmail.com(a)lists.ccalternatives.org>
to=<alaitz.aritza(a)gmail.com> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:11:35 zarathustra postfix/qmgr[2262]: 016931005BA:
from=<degrowcali-bounces+alaitz.aritza=gmail.com(a)lists.ccalternatives.org>,
size=6813, nrcpt=1 (queue active)
May 5 08:11:35 zarathustra postfix/smtp[29219]: 016931005BA:
to=<alaitz.aritza(a)gmail.com>,
relay=gmail-smtp-in.l.google.com[142.251.116.26]:25, delay=0.43,
delays=0.01/0.02/0.03/0.37, dsn=5.7.1, status=bounced (host
gmail-smtp-in.l.google.com[142.251.116.26] said: 550-5.7.1 [192.46.218.224
12] Our system has detected that this message is 550-5.7.1 likely
unsolicited mail. To reduce the amount of spam sent to Gmail, 550-5.7.1 this
message has been blocked. Please visit 550-5.7.1
https://support.google.com/mail/?p=UnsolicitedMessageError 550 5.7.1 for
more information. m12-20020a0568080f0c00b00389455db611si4492291oiw.127 -
gsmtp (in reply to end of DATA command))
May 5 08:11:35 zarathustra postfix/cleanup[29218]: 6ACFD1005EB:
message-id=<20230505151135.6ACFD1005EB(a)zarathustra.ccalternatives.org>
May 5 08:11:35 zarathustra postfix/qmgr[2262]: 6ACFD1005EB: from=<>,
size=9885, nrcpt=1 (queue active)
May 5 08:11:35 zarathustra postfix/bounce[29222]: 016931005BA: sender
non-delivery notification: 6ACFD1005EB
May 5 08:11:35 zarathustra postfix/qmgr[2262]: 016931005BA: removed
May 5 08:11:35 zarathustra postfix/lmtp[29224]: 6ACFD1005EB:
to=<degrowcali-bounces+alaitz.aritza=gmail.com(a)lists.ccalternatives.org>,
relay=127.0.0.1[127.0.0.1]:8024, delay=0.03, delays=0/0.01/0/0.01,
dsn=2.0.0, status=sent (250 Ok)
May 5 08:11:35 zarathustra postfix/qmgr[2262]: 6ACFD1005EB: removed
May 5 08:13:46 zarathustra postfix/smtpd[14110]: 1522D1004A4:
client=localhost[127.0.0.1]
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 1522D1004A4:
message-id=<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org>
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 1522D1004A4: warning:
header Subject: [Degrowcali] test - please ignore from localhost[127.0.0.1];
from=<degrowcali-bounces+kamccammon=ucdavis.edu(a)lists.ccalternatives.org>
to=<kamccammon(a)ucdavis.edu> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:13:46 zarathustra postfix/qmgr[2262]: 1522D1004A4:
from=<degrowcali-bounces+kamccammon=ucdavis.edu(a)lists.ccalternatives.org>,
size=6812, nrcpt=1 (queue active)
May 5 08:13:46 zarathustra postfix/smtpd[14110]: disconnect from
localhost[127.0.0.1] ehlo=1 mail=25 rcpt=25 data=25 quit=1 commands=77
May 5 08:13:46 zarathustra postfix/smtpd[14110]: connect from
localhost[127.0.0.1]
May 5 08:13:46 zarathustra postfix/smtpd[14110]: 1D3FB1005DA:
client=localhost[127.0.0.1]
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 1D3FB1005DA: warning:
header Subject: Degrowcali mailing list probe message from
localhost[127.0.0.1];
from=<degrowcali-bounces+6397d6fde210be0b39dbf22a9868e61d6e2d0f23(a)lists.ccal
ternatives.org> to=<juliankrauspolk(a)gmail.com> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 1D3FB1005DA:
message-id=<168329874052.765.12737190159456781981(a)zarathustra.ccalternatives
.org>
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 1D3FB1005DA: warning:
header Subject: Undelivered Mail Returned to Sender from
localhost[127.0.0.1];
from=<degrowcali-bounces+6397d6fde210be0b39dbf22a9868e61d6e2d0f23(a)lists.ccal
ternatives.org> to=<juliankrauspolk(a)gmail.com> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 1D3FB1005DA: warning:
header Subject: [Degrowcali] test - please ignore from localhost[127.0.0.1];
from=<degrowcali-bounces+6397d6fde210be0b39dbf22a9868e61d6e2d0f23(a)lists.ccal
ternatives.org> to=<juliankrauspolk(a)gmail.com> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:13:46 zarathustra postfix/qmgr[2262]: 1D3FB1005DA:
from=<degrowcali-bounces+6397d6fde210be0b39dbf22a9868e61d6e2d0f23(a)lists.ccal
ternatives.org>, size=11949, nrcpt=1 (queue active)
May 5 08:13:46 zarathustra postfix/smtpd[14110]: disconnect from
localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
May 5 08:13:46 zarathustra postfix/smtpd[14110]: connect from
localhost[127.0.0.1]
May 5 08:13:46 zarathustra postfix/smtpd[14110]: 2707E1005EB:
client=localhost[127.0.0.1]
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 2707E1005EB: warning:
header Subject: Degrowcali mailing list probe message from
localhost[127.0.0.1];
from=<degrowcali-bounces+62749dfe16f9d39e2cd0c3e94754723efbe8169d(a)lists.ccal
ternatives.org> to=<baronchadg(a)gmail.com> proto=ESMTP
helo=<zarathustra.ccalternatives.org>
May 5 08:13:46 zarathustra postfix/cleanup[29884]: 2707E1005EB:
message-id=<168329886073.765.17844938860507947692(a)zarathustra.ccalternatives
.org>
-----Original Message-----
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Friday, May 5, 2023 5:43 PM
To: mailman-users(a)mailman3.org
Subject: [MM3-users] Re: templates
On 5/5/23 17:04, Christian via Mailman-users wrote:
>>From bounce.log
>
> May 05 07:59:00 2023 (765) Member juliankrauspolk(a)gmail.com
<mailto:juliankrauspolk@gmail.com> on list
> degrowcali.lists.ccalternatives.org, bounce score = 5.
> May 05 07:59:00 2023 (765) Member juliankrauspolk(a)gmail.com
<mailto:juliankrauspolk@gmail.com> on list
> degrowcali.lists.ccalternatives.org, bounce score 5 >= threshold 5,
> sending probe.
> May 05 08:01:00 2023 (765) Member baronchadg(a)gmail.com
<mailto:baronchadg@gmail.com> on list
> degrowcali.lists.ccalternatives.org, bounce score = 5.
> May 05 08:01:00 2023 (765) Member baronchadg(a)gmail.com
<mailto:baronchadg@gmail.com> on list
> degrowcali.lists.ccalternatives.org, bounce score 5 >= threshold 5,
> sending probe.
> May 05 08:11:01 2023 (765) Member vortexanthony(a)hotmail.com
<mailto:vortexanthony@hotmail.com> on list
> degrowcali.lists.ccalternatives.org, bounce score = 1.
> May 05 08:13:01 2023 (765) Member alaitz.aritza(a)gmail.com
<mailto:alaitz.aritza@gmail.com> on list
> degrowcali.lists.ccalternatives.org, bounce score = 5.
> May 05 08:13:01 2023 (765) Member alaitz.aritza(a)gmail.com
<mailto:alaitz.aritza@gmail.com> on list
> degrowcali.lists.ccalternatives.org, bounce score 5 >= threshold 5,
> sending probe.
> May 05 08:15:01 2023 (765) Probe bounce received for member
> juliankrauspolk(a)gmail.com <mailto:juliankrauspolk@gmail.com> on list
degrowcali.lists.ccalternatives.org.
> May 05 08:15:01 2023 (765) Disabling delivery for
> juliankrauspolk(a)gmail.com <mailto:juliankrauspolk@gmail.com> on list
degrowcali.lists.ccalternatives.org
> by bounce May 05 08:15:02 2023 (765) Probe bounce received for member
> alaitz.aritza(a)gmail.com <mailto:alaitz.aritza@gmail.com> on list
degrowcali.lists.ccalternatives.org.
> May 05 08:15:02 2023 (765) Disabling delivery for
> alaitz.aritza(a)gmail.com <mailto:alaitz.aritza@gmail.com> on list
degrowcali.lists.ccalternatives.org by
> bounce May 05 08:15:02 2023 (765) Probe bounce received for member
> baronchadg(a)gmail.com <mailto:baronchadg@gmail.com> on list
degrowcali.lists.ccalternatives.org.
> May 05 08:15:02 2023 (765) Disabling delivery for baronchadg(a)gmail.com
<mailto:baronchadg@gmail.com>
> on list degrowcali.lists.ccalternatives.org by bounce May 05 08:17:02
> 2023 (765) Residual bounce received for member
> juliankrauspolk(a)gmail.com <mailto:juliankrauspolk@gmail.com> on list
degrowcali.lists.ccalternatives.org.
> May 05 08:17:02 2023 (765) Residual bounce received for member
> alaitz.aritza(a)gmail.com <mailto:alaitz.aritza@gmail.com> on list
degrowcali.lists.ccalternatives.org.
> May 05 08:17:02 2023 (765) Residual bounce received for member
> baronchadg(a)gmail.com <mailto:baronchadg@gmail.com> on list
degrowcali.lists.ccalternatives.org.
So some of your user's, but not 24, are bouncing. If your list's bounce
processing settings have Notify owner on disable = Yes, the owner should
receive a notice including the DSN. If Notify owner on bounce increment =
Yes, the owner will also get notices when a user's score is incremented as
for vortexanthony(a)hotmail.com <mailto:vortexanthony@hotmail.com> above.
This still doesn't answer the other users. Have you looked at the MTA logs?
--
Mark Sapiro <mark(a)msapiro.net <mailto:mark@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
<mailto:mailman-users@mailman3.org> To unsubscribe send an email to
mailman-users-leave(a)mailman3.org <mailto:mailman-users-leave@mailman3.org>
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Archived at:
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message/
IFXPEUII4TCT5OIH7V3YKPTAIWSEQIGA/
This message sent to csa(a)web-analysts.net <mailto:csa@web-analysts.net>
3 years, 6 months
[MM3-users] Re: Postorius no connection to REST API
by Richard Rosner
Mark Sapiro wrote:
> On 8/12/21 12:01 AM, Richard Rosner wrote:
> > All the mailman processes should run as list and all mailman related
> things should be readable and writable by list.
I have set both /usr/bin/uwsgi-core and /usr/share/mailman3-web to be owned by lists, no changes yet. But at least mailman3-web now can actually be started without throwing an error.
> > Yes, I meant if you want those URLs to work, you have to pass them to
> uwsgi. You don't need all of them. mailman2 and postorius are
> synonyms as are archives and hyperkitty
> However, you could try using TCP to communicate with uwsgi rather than a
> Unix socket.
> This means replacing
> uwsgi-socket = /run/mailman3-web/uwsgi.sock
> with
> uwsgi-socket = 0.0.0.0:8000
> in your uwsgi.ini file and using directives like
> ProxyPass "/postorius" "http://127.0.0.1:8000/postorius"
> ProxyPass "/hyperkitty" "http://127.0.0.1:8000/hyperkitty"
> ProxyPass "/accounts" "http://127.0.0.1:8000/accounts"
> ProxyPass "/django" "http://127.0.0.1:8000/django"
> ProxyPass "/user-profile" "http://127.0.0.1:8000/user-profile"
> ProxyPass "/mailman3" "http://127.0.0.1:8000/mailman3"
> ProxyPass "/archives" "http://127.0.0.1:8000/archives"
>
>
> in apache.
I tried that switch and got ERR_HTTP2_PROTOCOL_ERROR.
From the apache log:
[Fri Aug 13 16:08:38.871462 2021] [mpm_event:notice] [pid 27808:tid 140008999584896] AH00489: Apache/2.4.48 (Debian) OpenSSL/1.1.1d mod_wsgi/4.6.5 \
Python/3.7 configured -- resuming normal operations
[Fri Aug 13 16:08:38.871603 2021] [core:notice] [pid 27808:tid 140008999584896] AH00094: Command line: '/usr/sbin/apache2'
[Fri Aug 13 16:08:42.881615 2021] [proxy_http:error] [pid 27809:tid 140008751261440] (20014)Internal error (specific information not available): [c\
lient 134.61.99.193:36563] AH01102: error reading status line from remote server 127.0.0.1:8000
[Fri Aug 13 16:08:44.072665 2021] [proxy_http:error] [pid 27809:tid 140008751261440] (20014)Internal error (specific information not available): [c\
lient 134.61.99.193:36563] AH01102: error reading status line from remote server 127.0.0.1:8000
[Fri Aug 13 16:08:49.277000 2021] [proxy_http:error] [pid 27810:tid 140008709297920] (20014)Internal error (specific information not available): [c\
lient 134.61.99.193:36696] AH01102: error reading status line from remote server 127.0.0.1:8000
I set them all to https. which solved the https error. But I still get Error 500.
From apache log:
[Fri Aug 13 15:47:58.833305 2021] [mpm_event:notice] [pid 26720:tid 139986206332032] AH00489: Apache/2.4.48 (Debian) OpenSSL/1.1.1d mod_wsgi/4.6.5 \
Python/3.7 configured -- resuming normal operations
[Fri Aug 13 15:47:58.833436 2021] [core:notice] [pid 26720:tid 139986206332032] AH00094: Command line: '/usr/sbin/apache2'
[Fri Aug 13 15:49:41.673108 2021] [ssl:error] [pid 26722:tid 139985899259648] [remote 127.0.0.1:8000] AH01961: SSL Proxy requested for lists.fsmuw.\
rwth-aachen.de:443 but not enabled [Hint: SSLProxyEngine]
[Fri Aug 13 15:49:41.905868 2021] [proxy:error] [pid 26722:tid 139985899259648] AH00961: https: failed to enable ssl support for 127.0.0.1:8000 (12\
7.0.0.1)
[Fri Aug 13 15:59:25.049708 2021] [ssl:error] [pid 26722:tid 139985899259648] [remote 127.0.0.1:8000] AH01961: SSL Proxy requested for lists.fsmuw.\
rwth-aachen.de:443 but not enabled [Hint: SSLProxyEngine]
[Fri Aug 13 15:59:25.059217 2021] [proxy:error] [pid 26722:tid 139985899259648] AH00961: https: failed to enable ssl support for 127.0.0.1:8000 (12\
7.0.0.1)
From the mailman-web log:
uwsgi socket 0 bound to TCP address 0.0.0.0:8000 fd 4
Python version: 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0]
Python main interpreter initialized at 0x561db180adf0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 166752 bytes (162 KB) for 2 cores
*** Operational MODE: threaded ***
WSGI app 0 (mountpoint='') ready in 3 seconds on interpreter 0x561db180adf0 pid: 26851 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 26851)
spawned uWSGI worker 1 (pid: 26861, cores: 2)
[uwsgi-daemons] spawning "python3 manage.py qcluster" (uid: 38 gid: 38)
13:48:04 [Q] INFO Q Cluster-26864 starting.
13:48:04 [Q] INFO Process-1:1 ready for work at 26866
13:48:04 [Q] INFO Process-1:2 ready for work at 26867
13:48:04 [Q] INFO Process-1:3 monitoring at 26868
13:48:04 [Q] INFO Process-1 guarding cluster at 26865
13:48:04 [Q] INFO Q Cluster-26864 running.
13:48:04 [Q] INFO Process-1:4 pushing tasks at 26869
So at least that seems to be fine now
> I am not familiar enough with apache/uwsgi configuration to be of more
> help. Have you seen https://wiki.list.org/x/12812344 and have you asked
> Debian for help with their package. They are the ones who should be
> supporting it https://www.debian.org/support.
I'll open an error report on mailman3-web. Maybe they have some input to that.
5 years, 3 months
[MM3-users] Re: Non-ascii characters missing from Pipermail archive txt and gz downloads
by Ruth Ivimey-Cook
Hi Mark
I'm not sure, but I think the problems are to do with the program you
are using to view the txt file.
A modern mail reader understands the Content-type: header and will
adjust its character processing accordingly, but a .txt file has no
default character encoding, so any text editor will have to "use its
best judgement". Some will default to utf-8, because that is compatible
with 7-bit ASCII (NOT Latin1) while others will just put characters out
and hope for the best (esentially leaving the result to the encoding of
the font).
In theory, a UTF-encoded text file can begin with the "BOM" marker, a
sequence of characters which is supposed to indicate which variety of
Unicode is in use, but this is rarely present, especially for UTF-8.
Try looking at your text file with a UTF-8 capable text editor **and
ensure that you tell the editor to use the UTF-8 encoding**. I expect it
will look ok then.
Hope this helps,
Ruth
On 09/04/2021 13:52, Mark Dale via Mailman-users wrote:
> Mailman 2.1.34
> Debian 10
> Postfix
>
> Hi
>
> I'm hoping someone can shine a light on character encoding issue I've encountered.
>
> A plain-text email with non-ascii characters in the body gets posted to the list.
>
> As per Mark Sapiro's guide I've captured the incoming message to file.
>
> - https://www.mail-archive.com/mailman-users@python.org/msg73469.html
>
> The message is received by Mailman with the non-ascii characters displaying correctly.
>
> The header of that message has:
>
> User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101
> Thunderbird/78.9.0
> MIME-Version: 1.0
> Content-Type: text/plain; charset=utf-8
> Content-Language: en-AU
> Content-Transfer-Encoding: 8bit
>
> In the list's mbox file and archive webpage, the message displays the non-ascii characters correctly.
>
> In the archive's downloaded .txt (and also .gz) file, the non-ascii characters are missing and displayed as "?".
>
> I've copied the message text in below, from both the correct one from the email and the erroneous .txt file. Hopefully they won't get scrambled up when I send this.
>
> Any advice on getting the non-ascii characters written into the archive .txt file would be gratefully received.
>
> Thanks,
> Mark
>
>
> === Message text as okay in mbox and as shown on the archive webpage ===
>
> If one goes by the definition of veḷippaṭai as given in the Tamil Lexicon that the meaning of an ambiguous word should be disambiguated by a qualifying word, then aruvi āmpal does not conform to that definition since in the case of aruvi āmpal in Patiṟṟuppattu 63, aruvi is really made up of aru+vi, a compound. Moreover, the expression aṭai aṭuppu aṟiyā is already there to clarify that āmpal is a number and not a flower. Thus, aruvi simply provides information in addition to aṭai aṭuppu aṟiyā that āmpal is not a flower. The modern commentator Aruḷampalavaṉār also does not call it veḷippaṭai.
>
> ===
>
> === Message text with missing characters in te archive's txt and gz downloads ==
>
> If one goes by the definition of ve?ippa?ai as given in the Tamil Lexicon that the meaning of an ambiguous word should be disambiguated by a qualifying word, then aruvi ?mpal does not conform to that definition since in the case of aruvi ?mpal in Pati??uppattu 63, aruvi is really made up of aru+vi, a compound. Moreover, the expression a?ai a?uppu a?iy? is already there to clarify that ?mpal is a number and not a flower. Thus, aruvi simply provides information in addition to a?ai a?uppu a?iy? that ?mpal is not a flower. The modern commentator Aru?ampalava??r also does not call it ve?ippa?ai.
>
> ===
> _______________________________________________
> 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/
--
Software Manager & Engineer
Tel: 01223 414180
Blog: http://www.ivimey.org/blog
LinkedIn: http://uk.linkedin.com/in/ruthivimeycook/
5 years, 7 months
[MM3-users] Re: Confirmation emails to Users has wrong domain name (example.com!)
by Odhiambo Washington
On Thu, Sep 30, 2021 at 4:09 PM Abhilash Raj <maxking(a)asynchronous.in>
wrote:
>
>
> On Thu, Sep 30, 2021, at 2:20 AM, Odhiambo Washington wrote:
> > On Thu, Sep 30, 2021 at 1:59 AM Abhilash Raj <maxking(a)asynchronous.in>
> > wrote:
> >
> >>
> >>
> >> > On Sep 29, 2021, at 2:34 PM, Odhiambo Washington <odhiambo(a)gmail.com>
> >> wrote:
> >> >
> >> > On Wed, Sep 29, 2021 at 8:31 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> >> >
> >> >> On 9/29/21 9:50 AM, Odhiambo Washington wrote:
> >> >>> 1. Confirmation emails to Users has wrong domain name (example.com
> !)
> >> >>> <https://docs.mailman3.org/en/latest/faq.html#id1>
> >> >>> <
> >> >>
> >>
> https://docs.mailman3.org/en/latest/faq.html#confirmation-emails-to-users-h…
> >> >>>
> >> >>>
> >> >>> This happens when your reverse (SSL) proxy isn’t setting up the
> correct
> >> >>> headers when proxying requests. Fix this by setting the right
> >> >>> proxy_set_header directives:
> >> >> ...
> >> >>> How is this supposed to be mitigated in Apache when using WSGI?
> >> >>>
> >> >>> My config:
> >> >>>
> >> >>> WSGIDaemonProcess hyperkitty threads=25
> python-path=/usr/local/mailman
> >> >>> user=mailman group=mailman
> >> >>> WSGIPythonHome "/usr/local"
> >> >>> WSGIProcessGroup hyperkitty
> >> >>
> >> >>
> >> >> You are using mod_wsgi and not proxying at all, so this is not
> relevant
> >> >> in your case.
> >> >>
> >> >> Are you actually seeing this issue? If so, it might be related to
> >> >>
> >> >>
> >>
> https://docs.mailman3.org/en/latest/faq.html#the-domain-name-displayed-in-h…
> >> >>
> >> >
> >> > My issue is related to this, but the documentation referred to is not
> for
> >> > the faint-hearted!
> >> > I can't make head or tails of it.
> >>
> >> Click on “Domain” in Postorius from the top bar, which should take you
> to
> >> the Domains page.
> >>
> >> For your domain (in the “Mail Host” column), see the corresponding “Web
> >> Host” column, it should look something like:
> >>
> >> lists.mailman3.org (lists.mailman3.org)
> >> (Edit)
> >> SITE_ID = 1
> >>
> >
> > Mine looks different, slightly. But there is no example.com at all.
> >
> > [image: Abhilash.png]
> >
> >
> >
> >>
> >> on a new-ish version of Postorius.
> >>
> >
> > I have the newest versions of everything, having installed only
> yesterday.
> >
> >
> >>
> >> If it doesn’t show the right values and instead shows “example.com” for
> >> you, click on the “Edit” link, which will take
> >> you to a page that will allow you to edit both the values.
> >>
> >
> > It shows the right values, but with "SITE_ID = 2". In my
> settings_local.py
> > I have SITE_ID = 1.
> > I suppose the example.com is the one tied to SITE_ID = 1 and that is
> what I
> > have in my settings_local.py.
>
> That is most likely what is happening.
>
> > Should I edit my settings_local.py?
>
> Yes, please update it to have SITE_ID = 2 to correspond to the site you
> want and restart.
>
Thank you very much.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' :-)
5 years, 1 month
[MM3-users] Re: lmtp runner not starting
by Guillermo Hernandez (Oldno7)
El 1/4/23 a las 21:00, Guillermo Hernandez (Oldno7) via Mailman-users
escribió:
>
> El 1/4/23 a las 20:44, Mark Sapiro escribió:
>> ...
>> lmtp runner did not start because at some point it had died and
>> restarting Mailman won't restart a runner that died and was marked to
>> not restart.
>>
>> You need to stop Mailman and make sure when mailman is stopped that
>> there are no files in mailman's var/locks/ directory (remove any that
>> are there) and then start Mailman and lmtp runner should start.
>>
> I stopped mailman and removed all that was in there (there were many
> locked registers). Restarted mailman, and it shows the same error that
> in my previous mail.
>
> Now there is two new locked files, one (master.lck) which its content
> is the name of the other file. And the second one has the same content:
>
> master.lck|www.proteccion-civil.eu|9389|7022761192045613065
>
> will try deleting the content of var/locks and restarting the server
same results lmtp runner is diying. Now I know thata part of the lock
file is the pid of the master runner.
Apr 01 21:03:03 2023 (11548) Master started
Apr 01 21:03:11 2023 (11563) virgin runner started.
Apr 01 21:03:13 2023 (11553) bounces runner started.
Apr 01 21:03:14 2023 (11561) retry runner started.
Apr 01 21:03:15 2023 (11560) rest runner started.
[2023-04-01 21:03:15 +0200] [11560] [INFO] Starting gunicorn 20.1.0
[2023-04-01 21:03:15 +0200] [11560] [INFO] Listening at:
http://10.0.1.42:8001 (11560)
[2023-04-01 21:03:15 +0200] [11560] [INFO] Using worker: sync
[2023-04-01 21:03:15 +0200] [11567] [INFO] Booting worker with pid: 11567
[2023-04-01 21:03:15 +0200] [11568] [INFO] Booting worker with pid: 11568
Apr 01 21:03:16 2023 (11564) digest runner started.
Apr 01 21:03:17 2023 (11562) task runner started.
Apr 01 21:03:17 2023 (11562) Task runner evicted 0 expired pendings
Apr 01 21:03:17 2023 (11562) Task runner deleted 0 orphaned workflows
Apr 01 21:03:17 2023 (11562) Task runner deleted 0 orphaned requests
Apr 01 21:03:17 2023 (11562) Task runner deleted 0 orphaned messages
Apr 01 21:03:17 2023 (11562) Task runner evicted expired cache entries
Apr 01 21:03:18 2023 (11559) pipeline runner started.
Apr 01 21:03:19 2023 (11555) in runner started.
Apr 01 21:03:19 2023 (11554) command runner started.
Apr 01 21:03:20 2023 (11558) out runner started.
Apr 01 21:03:22 2023 (11557) nntp runner started.
Apr 01 21:03:23 2023 (11552) archive runner started.
a ps ax output:
11548 - IsJ 0:01.92 /usr/local/bin/python3.9 /usr/local/bin/master
--force -C /usr/local/mailman3/var/etc/mailman.cfg
11552 - SJ 0:01.97 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=archive:0:1
11553 - IJ 0:02.10 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=bounces:0:1
11554 - SJ 0:01.94 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=command:0:1
11555 - SJ 0:01.94 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=in:0:1
11556 - ZJ 0:02.21 <defunct>
11557 - SJ 0:01.95 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=nntp:0:1
11558 - SJ 0:01.93 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=out:0:1
11559 - SJ 0:01.94 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=pipeline:0:1
11560 - SJ 0:02.02 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=rest:0:1
11561 - IJ 0:01.94 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=retry:0:1
11562 - IJ 0:02.02 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=task:0:1
11563 - SJ 0:01.95 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=virgin:0:1
11564 - SJ 0:01.93 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=digest:0:1
11567 - IJ 0:00.01 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=rest:0:1
11568 - IJ 0:00.01 /usr/local/bin/python3.9 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailman.cfg --runner=rest:0:1
>
>
>
>
>
>> As to why it died in the first place, there should be something in
>> mailman.log from the time it died.
>>
--
___________________________________________
Mailman's content filtering has removed the
following MIME parts from this message.
Content-Type: image/png
Name: firma-GHP-emails.png
Replaced multipart/alternative part with first alternative.
3 years, 7 months
[MM3-users] Re: Prototype import [was: Re: Setup Question: Disk-Layout (Migrating from Mailman 2.1)]
by Mihai Moldovan
* On 4/18/25 04:23, Mark Sapiro wrote:
> On 4/17/25 11:35 AM, Mihai Moldovan wrote:
>>
>> New incoming messages will have the correct data, of course, but
>> imported ones wouldn't, so I'll have to use a more sophisticated
>> approach to handle them, probably by going through mailman's email
>> wrapper, figuring out how to generate a msgdata object for a message,
>> using RFC2369.process and maybe more.
>
> Here's an example script. You need to run this with
> /opt/mailman/mm/venv/bin/python to get access to the mailman imports.
> ```
> from mailbox import Maildir, mbox
> from mailman.email.message import Message
> from mailman.handlers.rfc2369 import process
> from mailman.interfaces.listmanager import IListManager
> from mailman.utilities.email import add_message_hash
> from zope.component import getUtility
> mb = mbox('path/to/mbox', factory=Message, create=False)
> md = Maildir('path/to/maildir', create=False)
> mlist = getUtility(IListManager).get_by_list_id('your.list.id')
> for msg in mb:
> add_message_hash(msg)
> process(mlist, msg, {})
> md.add(msg)
> mb.close()
> md.close()
> ```
Thank you.
Unfortunately, I'm having a hard time getting this to work correctly. My current
approach is (which is modified from yours, for instance to use
Prototype.archive_message() instead of writing directly to a Maildir):
```py
import copy
import sys
from mailbox import mbox
from mailman.archiving.prototype import Prototype
from mailman.core import initialize
from mailman.email.message import Message
from mailman.handlers.rfc_2369 import process
from mailman.interfaces.listmanager import IListManager
from mailman.interfaces.mailinglist import IMailingList
from mailman.utilities.email import add_message_hash
from zope.component import getUtility
initialize.initialize()
if (len(sys.argv) < 3):
print('Usage: {0} <list-id> <mbox-file>'.format(sys.argv[0]), file=sys.stderr)
exit(1)
mb = mbox(sys.argv[2], factory=Message, create=False)
mlist = getUtility(IListManager).get_by_list_id(sys.argv[1])
for msg in mb:
try:
add_message_hash(msg)
process(mlist, msg {})
Prototype.archive_message(mlist, msg)
except Exception as e:
print("Error when adding {0}: {1}".format(msg['message-id'], str(e)),
file=sys.stderr)
mb.close()
```
This returns "Error when adding None: '_PartialFile' object has no attribute
'header_max_count'" for each message.
This, including getting None for the Message-ID, stumped me and I got on to
debugging this.
Indeed, even something as simple as
```py
for msg in mb:
print(type(msg))
print(msg['message-id'])
print(msg)
exit(0)
```
results in getting a None for the Message-ID and a stack trace:
<class 'mailman.email.message.Message'>
None
Traceback (most recent call last):
File "/root/mailman3/prototype-import.py", line 29, in <module>
print(msg)
File "/usr/lib/python3.12/email/message.py", line 165, in __str__
return self.as_string()
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/mailman/email/message.py", line 55, in
as_string
value = email.message.Message.as_string(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/email/message.py", line 188, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/lib/python3.12/email/generator.py", line 98, in flatten
policy = policy.clone(max_line_length=self.maxheaderlen)
^^^^^^^^^^^^
AttributeError: '_PartialFile' object has no attribute 'clone'. Did you mean:
'close'?
This eventually led me to realize that passing mailman.email.message.Message as
the factory to mbox() internally calls factory(msg), and the base class of
Message (email.message.Message) has an __init__ function that takes the policy
parameter, so it looks as if it's registering the mailbox message incorrectly as
the policy handler, which is totally wrong of course.
If I change the call to mb = mbox(sys.argv[2], factory=None, create=False), the
output looks more promising, so converting the data to
mailman.email.message.Message first seems to have been the wrong idea on my part:
```
<class 'mailbox.mboxMessage'>
<mailman.1.1399151409.10314.x2go-i18n(a)lists.x2go.org>
Return-Path: <mailman-bounces(a)lists.x2go.org>
[...]
```
and indeed, if I let the import actually happen, it works.
The imported messages, do have a Message-ID-Hash, but the Archived-At and
List-Archive headers are empty (literally <>).
Do you have an example message that was archived through Prototype? What are the
proper header values for this module? I believe that Archived-At should be the
Message-ID-Hash and the List-Archive header contain... well, given that the
Prototype archiver is not meant to be publicly available, probably a file:// URL?
Mihai
1 year, 6 months
[MM3-users] Re: error changed after restart (was: KeyError: 'get_requests_count' after an upgrade)
by Abhilash Raj
On Sat, Feb 6, 2021, at 3:04 AM, Guillermo Hernandez (Oldno7) via Mailman-users wrote:
> I restarted de server and the error changed. Now the log shows
> "KeyError: 'subscription_mode'":
Did you also restart Mailman Core after the upgrade?
>
> ERROR 2021-02-06 11:47:49,015 26798 django.request Internal Server
> Error: /mailman3/mailman3/lists/name_and_domain.of.the.list
> Traceback (most recent call last):
> File
> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> line 119, in __getattr__
> return self._get(name)
> File
> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> line 86, in _get
> raise KeyError(key)
> KeyError: 'subscription_mode'
>
> During handling of the above exception, another exception occurred:
>
> Traceback (most recent call last):
> File
> "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py",
> line 34, in inner
> response = get_response(request)
> File
> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
> line 115, in _get_response
> response = self.process_exception_by_middleware(e, request)
> File
> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
> line 113, in _get_response
> response = wrapped_callback(request, *callback_args, **callback_kwargs)
> File
> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
> line 71, in view
> return self.dispatch(request, *args, **kwargs)
> File
> "/usr/local/lib/python3.7/site-packages/postorius/views/generic.py",
> line 74, in dispatch
> return super(MailingListView, self).dispatch(request, *args, **kwargs)
> File
> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
> line 97, in dispatch
> return handler(request, *args, **kwargs)
> File
> "/usr/local/lib/python3.7/site-packages/postorius/views/list.py", line
> 295, in get
> member.subscription_mode ==
> File
> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> line 124, in __getattr__
> self.__class__.__name__, name))
> AttributeError: 'Member' object has no attribute 'subscription_mode'
> ***********************
> some info about the installed versions via pip list:
> pip list | grep django
> django-allauth 0.44.0
> django-appconf 1.0.4
> django-compressor 2.4
> django-extensions 3.1.0
> django-gravatar2 1.4.4
> django-haystack 3.0
> django-mailman3 1.3.5
> django-picklefield 3.0.1
> django-q 1.3.4
> djangorestframework 3.12.2
>
> pip list | grep mailman
> django-mailman3 1.3.5
> mailman 3.3.3
> mailman-hyperkitty 1.1.0
> mailmanclient 3.3.2
>
> pip list | grep postorius
> postorius 1.3.4
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> On 6/2/21 11:12, Guillermo Hernandez (Oldno7) via Mailman-users wrote:
> > I've just upgrade mailman 3 installation following Mr. Sapiro advice:
> > did a
> >
> > pip install --upgrade django-mailman3 hyperkitty mailman mailmanclient
> > mailman-hyperkitty postorius
> >
> > I did a "python3 manage.py migrate" after, too.
> >
> > And all seemed to run well.
> >
> > All the lists showed in postorius via web, but when I try to accesss
> > into one of them the browser shows an error.
> >
> > In the log you can see:
> >
> > *-*-*-*-*-*-*
> >
> > Traceback (most recent call last):
> > File
> > "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> > line 119, in __getattr__
> > return self._get(name)
> > File
> > "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> > line 86, in _get
> > raise KeyError(key)
> > KeyError: 'get_requests_count'
> >
> > ... (And after all the traceback lines)
> >
> > AttributeError: 'MailingList' object has no attribute
> > 'get_requests_count'
> >
> > *-*-*-*-*-*-*-*
> >
> > The lists seem to be distributing messeages well.. but I cannot acces
> > via web administration (django/postorius)
> >
> > Can anyone point me in the right direction to solve this, please?
> >
> > _______________________________________________
> > 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/
> >
> _______________________________________________
> 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, 9 months
[MM3-users] Re: Held messages: Long time waiating for response of the Mailman API
by Stephan Krinetzki
Mark Sapiro wrote:
> On 1/29/22 05:48, Jacob Sievert via Mailman-users wrote:
> > Hello,
> > we seem to have the same problem right now.
> > We are still on python3.6 and postgresql 12.9
> > I looked at our Table pendedkeyvalue and we have roughly 35k rows in
> > that table,
> > is that normal or shouldn't those get cleaned up after a while?
> > Yes they should. This is https://gitlab.com/mailman/mailman/-/issues/257
> fixed in Mailman core 3.3.5. Also in Mailman 3.3.5 is a new Task runner
> that runs periodic tasks, one of which is to remove orphaned pendings.
> This may also be the issue for the OP in this thread if that
> pendedkeyvalue table is also large.
I can confirm this. We have a total of ~580000 Rows in the pendedkeyvalue table. Since last wednsday even the hourly job quits (Out of memory exception)
> Here is a mailman shell script that will clean that up.
> # Prior to Mailman 3.3.5, some tokens for user confirmations were pended
> with
> # too long a lifetime. This script removes those pendings based on when
> they
> # were pended and the configured pending_request_life rather than their
> # expiration.
>
> # Also prior to Mailman 3.3.5, pended held_message tokens for email handling
> # of the message were not removed when the message was handled via REST.
> This
> # script removes those pendings too.
>
> # This is run with
> # mailman shell -r delete_orphans_expireds
> # after saving it as
> # /opt/mailman/mm/venv/bin/delete_orphans_expireds.py
>
> from datetime import datetime
> from lazr.config import as_timedelta
> from mailman.config import config
> from mailman.database.transaction import transactional
> from mailman.interfaces.pending import IPendings
> from zope.component import getUtility
>
> pendings = getUtility(IPendings)
>
> def is_request(id):
> if config.db.store.execute(
> 'SELECT * FROM _request WHERE id = {};'.format(id)).rowcount > 0:
> return True
> return False
>
> then = datetime.now() - as_timedelta(config.mailman.pending_request_life)
> thenm = datetime.now() - as_timedelta(config.mailman.moderator_request_life)
>
> def fromisoformat(x):
> if hasattr(datetime, 'fromisoformat'):
> return datetime.fromisoformat(x)
> try:
> return datetime.strptime(x, '%Y-%m-%dT%H:%M:%S.%f')
> except ValueError:
> return datetime.strptime(x, '%Y-%m-%dT%H:%M:%S')
>
> @transactional
> def delete_orphans_expireds():
> count = 0
> for token, data in pendings.find(pend_type='held message'):
> if data and not is_request(data['id']):
> result = pendings.confirm(token, expunge=True)
> count += 1
> print(f'expunged {count} orphaned pended held messages')
>
> count = 0
> for token, data in pendings.find(pend_type='data'):
> if data and data['_mod_hold_date']:
> when = data['_mod_hold_date']
> if isinstance(when, str):
> when = fromisoformat(when)
> if when < thenm:
> result = pendings.confirm(token, expunge=True)
> count += 1
> print(f'expunged {count} expired held messages')
>
> pends = list(pendings.find(pend_type='subscription'))
> pends += list(pendings.find(pend_type='unsubscription'))
> count = 0
> for token, values in pends:
> if values and values['token_owner'] == 'subscriber':
> when = values['when']
> if isinstance(when, str):
> when = fromisoformat(when)
> if when < then:
> result = pendings.confirm(token, expunge=True)
> count += 1
> print(f'expunged {count} expired (un)subscription confirmations')
>
> The above says to save the script at
> /opt/mailman/mm/venv/bin/delete_orphans_expireds.py but that path may
> need to be adjusted based in where Mailman's bin/ directory is in your
> installation.
Thanks for the Script Mark! WIth the Script, the result is:
mailman shell -r delete_orphans_expireds
Jan 31 09:15:46 2022 (7980) Database url: postgres://mailman:XXXXXXXX@127.0.0.1/YYYYYYY
expunged 95918 orphaned pended held messages
expunged 7958 expired held messages
expunged 22372 expired (un)subscription confirmations
And the pendedkeyvalue table has significant lower entries (~ 92000) and now the process to accept or decline a held message ist a lot of faster. Maybe we will take the database to a seperate server to get more speed - but for the moment it is fast enough.
Thanks again and thanks to Jacob Sievert for the pointer to the size of the pendedkeyvalue table.
4 years, 9 months
[MM3-users] Re: integrating mm3 with postfix / lmtp
by Abhilash Raj
On Nov 13 2017, at 1:34 am, Thor Atle Rustad <thor.rustad(a)gmail.com> wrote:
> There is a way around it!
>
> I have had two issues with the the maxking docker image. One is that the regexp is not working properly. I reported that, and it has been fixed in newer code. My other problem is that the docker image creates a user, mailman, that receives uid 103. Well, uid 103 on my system is already taken by systemd-bus-proxy (grep 103 /etc/passwd returns "systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false").
Containers usually run with uid namespace, so it doesn't really matter what uid is used outside of container.
Unless, you mount /etc/shadow from host in to the container, which isn't really needed for the images.
>
> My solution includes downloading the corrected postfix.py, and replacing the Dockerfile. I put the postfix.py in <docker-mailman>/core/assets/.
>
> My Dockerfile:
> FROM maxking/mailman-core
>
> RUN grep mailman /etc/passwd && grep mailman /etc/group \
> && deluser mailman \
> && addgroup -S -g900 mailman \
> && adduser -S -u900 mailman mailman \
> && grep mailman /etc/passwd && grep mailman /etc/group
> COPY assets/postfix.py /usr/local/lib/python3.6/site-packages/mailman/mta/postfix.py
>
>
> I then run docker build (with -t parameter, you must look up that yourself). I use a different name for my images, so I end up with (note, there are two tags per image):
> root@mailer:/home/mailman/docker/docker-mailman_mods/core# docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> local/mailman_core_900 20171110_2 9649e84767e1 2 days ago 176MB
> local/mailman_core_900 latest 9649e84767e1 2 days ago 176MB
> local/mailman_web_900 20171110_2 07a9b3d7ddd6 2 days ago 247MB
> local/mailman_web_900 latest 07a9b3d7ddd6 2 days ago 247MB
>
>
> I do the same with the web image, as I need to change the user there, too.
>
> Then, in docker-compose.yaml, I change the line(s) referring to the image name(s):
>
> services:
> mailman-core:
> image: local/mailman_core_900
> container_name: mailman-core
> hostname: mailman-core
>
>
>
> mailman-web:
> image: local/mailman_web_900
> container_name: mailman-web
> hostname: mailman-web
>
>
> I don't know if this is a good solution, but at least it fixes some serious issues with the 3.1's postfix integration that wouldn't otherwise be fixed until the 3.2 release. The bottom line is that it works for me, but it adds an additional layer of complication.
>
> 2017-11-03 19:40 GMT+01:00 Abhilash Raj <maxking(a)asynchronous.in (mailto:maxking@asynchronous.in)>:
> > On Fri, Nov 3, 2017, at 08:29 AM, Fabian A. Santiago wrote:
> > > October 26, 2017 11:07 PM, "Mark Sapiro" <mark(a)msapiro.net (mailto:mark@msapiro.net)> wrote:
> > >
> > > > On October 26, 2017 7:30:35 PM PDT, "Fabian A. Santiago" <fsantiago(a)garbage-juice.com (mailto:fsantiago@garbage-juice.com)> wrote:
> > > >
> > > >> That was it. Perfect. I manually modified my regexp map and it works
> > > >> now. Excellent and Thank you. You're the man. Does mm3 ever refresh
> > > >> those maps or only as I add new domains / lists?
> > > >
> > > > Only when you make changes to domains or lists.
> > > >
> > > > --
> > > > Mark Sapiro <mark(a)msapiro.net (mailto:mark@msapiro.net)>
> > > > Sent from my Not_an_iThing with standards compliant, open source software.
> > >
> > > Mark,
> > >
> > > I've noticed that even simply restarting the mm3 components those alias
> > > maps get rewritten and the problem returns until I can manually edit it.
> >
> > Yeah, that is true. Transport maps are re-generated everytime the
> > container restarts.
> >
> > I don't think think there is any way around this right now :(
> >
> >
> > --
> > Abhilash Raj
> > maxking(a)asynchronous.in (mailto:maxking@asynchronous.in)
> > _______________________________________________
> > Mailman-users mailing list
> > mailman-users(a)mailman3.org (mailto:mailman-users@mailman3.org)
> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
9 years
[MM3-users] Re: mail loops back to myself
by Florian Sukup
On 6/9/25 05:05, Mark Sapiro wrote:
> On 6/8/25 16:04, Florian Sukup wrote:
>>
>> I set up mailman, created a site/domain (lists.yyy.com) My hostname
>> is host.xxx.com . My IP has a RDNS entry: reverse.rrr.com .
>
> Why is the RDNS to reverse.rrr.com and not host.xxx.com. It is important
> for mail delivery to have full circle DNS. I.e. the sending server
> should have an A record for its IP and revers DNS for that IP should
> point back to the sending server's name. I'm guessing that rrr.com is a
> hosting provider and you don't control the rDNS for that IP, but you
> should try to get them to change it for you. Without that change,
> delivery of your outbound mail, at least to large ISPs, will be
> problematic at best.
>
The setup has historic reasons. However I can eliminate reverse.rrr.com
completely and replace it by host.xxx.com. Right now reverse.rrr.com has
an A-record pointing to the host's ip address.
>
>> When I send an email to my mailing list mylist(a)lists.yyy.com I receive
>> an error email. The logfile says the following:
>>
>> ...
>> Jun 9 00:23:38 arvak postfix/relay/smtp[]: 094895FADB:
>> to=<mylist(a)lists.yyy.com>, relay=reverse.rrr.com[m.y.i.p]:25,
>> delay=0.06, delays=0.03/0.01/0.02/0, dsn=5.4.6, status=bounced (mail
>> for lists.yyy.com loops back to myself)
>
> What is the output from `postconf -n`?
>
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 2
inet_interfaces = all
inet_protocols = all
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
hash:/var/lib/mailman3/data/postfix_lmtp
mailbox_size_limit = 0
message_size_limit = 0
mydestination = localhost, localhost.localdomain, arvak
myhostname = host.xxx.com
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 192.168.77.0/24
myorigin = /etc/mailname
owner_request_special = no
readme_directory = no
recipient_delimiter = +
relay_domains = ${{$compatibility_level} < {2} ? {$mydestination} : {}}
hash:/var/lib/mailman3/data/postfix_domains
relayhost =
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_cert_file = /etc/letsencrypt/live/host.xxx.com/fullchain.pem
smtp_tls_key_file = /etc/letsencrypt/live/host.xxx.com/privkey.pem
smtp_tls_loglevel = 3
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_use_tls = yes
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated
defer_unauth_destination
smtpd_tls_cert_file = /etc/letsencrypt/live/host.xxx.com/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/host.xxx.com/privkey.pem
smtpd_tls_loglevel = 3
smtpd_tls_security_level = may
smtpd_use_tls = yes
transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp
virtual_alias_domains = 9 different domains, however not host.xxx.com,
lists.yyy.com or reverse.rrr.com
virtual_alias_maps = hash:/etc/postfix/virtual
>> Jun 9 00:23:38 arvak postfix/smtpd[114119]: disconnect from
>> host.xxx.com[m.y.i.p] ehlo=1 quit=1 commands=2
>> ...
>>
>> The MX record of lists.yyy.com points to reverse.rrr.com. Not sure if
>> this is the best idea?
>
> reverse.rrr.com has no A or AAAA record. An MX MUST point to a domain
> that has an A or AAAA record. The MX should point to host.xxx.com.
>
Will be resolved (s. above).
>> Can anyone give me a hint where to search for this error?
>
> The output from `postconf -n` would help. Also, have you set up postfix
> per
> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/mta.h… ?
>
Basically yes, but I see a few differences which all worked on my test
installation. Here comes my mailman.cfg:
[mailman]
site_owner: mailman@...
noreply_address: noreply
default_language: en
sender_headers: from from_ reply-to sender
email_commands_max_lines: 10
pending_request_life: 3d
cache_life: 7d
pre_hook:
post_hook:
layout: debian
filtered_messages_are_preservable: no
html_to_plain_text_command: /usr/bin/lynx -dump $filename
listname_chars: [-_.0-9a-z]
[shell]
prompt: >>>
banner: Welcome to the GNU Mailman shell
use_ipython: no
history_file:
[paths.debian]
var_dir: /var/lib/mailman3
queue_dir: $var_dir/queue
bin_dir: /usr/lib/mailman3/bin
list_data_dir: $var_dir/lists
log_dir: /var/log/mailman3
lock_dir: $var_dir/locks
data_dir: $var_dir/data
cache_dir: $var_dir/cache
etc_dir: /etc/mailman3
ext_dir: $var_dir/ext
messages_dir: $var_dir/messages
archive_dir: $var_dir/archives
template_dir: $var_dir/templates
pid_file: /run/mailman3/master.pid
lock_file: $lock_dir/master.lck
[database]
class: mailman.database.sqlite.SQLiteDatabase
url: sqlite:///$DATA_DIR/mailman.db
debug: no
[logging.debian]
format: %(asctime)s (%(process)d) %(message)s
datefmt: %b %d %H:%M:%S %Y
propagate: no
level: info
path: mailman.log
[webservice]
hostname: localhost
port: 8001
use_https: no
show_tracebacks: yes
api_version: 3.1
admin_user: ...
admin_pass: ...
[mta]
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
smtp_host: localhost
smtp_port: 25
smtp_user:
smtp_pass:
lmtp_host: 127.0.0.1
lmtp_port: 8024
configuration: python:mailman.config.postfix
Thanks for your help,
Florian.
1 year, 5 months
[MM3-users] Re: Member Issue Discovered
by Brian Carpenter
On 10/20/20 11:19 PM, Mark Sapiro wrote:
> On 10/20/20 6:54 AM, Brian Carpenter wrote:
>> Respectively, I think you are asking the wrong question here. The real
>> question is why isn't a display_name being removed when a list
>> subscriber is unsubscribed.
>
> I'd like to understand the real requirement. It seems to me that this
> issue has come up because a list admin wanted to change the display name
> shown in the membership roster for a user. Since there is currently no
> UI to do this, the list admin tried to do it by unsubscribing and
> resubscribing the user. That didn't work which led to this
> "unsubscribing a user should remove the user's information" thread, but
> the real issue is the lack of a UI for changing display names. It seems
> if that UI existed and was available, the "unsubscribing a user should
> remove the user's information" issue would never have been raised.
There are two real requirements. One is to be able to do something as
easy as changing a name for a list member. I did a lot of testing with
the relationship between a name used for a subscription versus a name
used for registering via the U.I. (Postorius/Django) and it is very
confusing. I still am having a very difficult time understanding the
logic presented here for the way Mailman 3 handles user information.
The second requirement is ALL data should be removed if someone
unsubscribes from a list that is just a list member of a single list. I
feel very strongly about that. I don't really care for the reasoning
behind why the data is retained. I just think it should be removed for a
list member who has no need for an account that manages multiple email
address and is subscribed to multiple lists.
I host many single lists. So it is very important to me, and as an
advocate for my clients, I will state very clearly how important it is
to me (and my clients) regards of other user scenarios out there
(looking at you Mr. Turnbull). I care about my own.
> So perhaps what we should be talking about is UIs for changing user
> information, what they would look like and who should be able to change
> what.
That is a start and I thought I brought that up. We also need a separate
conversation on the retention of data apparently.
> Note that I personally am a member of many lists, an admin of multiple
> lists and a site admin for multiple mailman installations. I am well
> aware of the frustrations of list admins who wind up just doing it
> because it's way easier than instruction some users as to how to do it
> themselves. However, I don't think that is necessarily sufficient reason
> to hand over control of global, non-list specific user information to
> the admin of one particular list that the user happens to be a member of.
I never asked for global control for list owners. You have made that
almost a necessity with the multiple email address per user account
feature that you brought in. I don't think List owners should have
global control but server owners certainly do. But the rightful
avoidance of such control for List owners, I think has resulted in a
wrongful limiting of what they can do currently.
I so disagree with S. Turnbull's disparaging comments that I think we
ought to be designing for List owners primarily and not list
members/users when it comes to user interfaces. From what I see, it is
mostly server and list owners that are interacting with this
(mailman-user) list and not list members/users. In my experience, I
never hear from list members. Just list owners. Whatever issue list
owners have with their own list members are easily handled by them when
it comes to Mailman 2. Not so much with Mailman 3.
>
> Even in mailman 2.1, while a list admin could go to a user's options
> page for the list and change things, the "change globally" check boxes
> only worked for the user, not for the list admin.
>
--
Brian Carpenter
Harmonylists.com
Emwd.com
6 years
[MM3-users] Re: signup / registration error - permissions and cert chains
by David Newman
On Dec 31, 2021, at 03:43, Victoriano Giralt <victoriano(a)uma.es> wrote:
>
> El viernes, 31 de diciembre de 2021 1:48:38 (CET) David Newman escribió:
>> I'd like for regular (non-admin) list subscribers to be able to manage
>> their subscription preferences and view list archives.
>
> That's a good way to go :-)
>
> My response is more of a (very) old sysadmin and Django user (since 2008)
> hunch that a proper one based on code and documentation review, but I've been
> trying to contribute several times and always (super) Mark Sapiro beats me :-)
>
>> If I'm reading the error correctly, this is related to an inability to
>> verify the cert chain. The /etc/mailman3/settings.py file points to the
>> same cert and key files used by Nginx, Postfix, and Dovecot.
>
> You are right in your diagnose but not in your interpretation (see my comment
> below inside the traceback). It is certificate related, but not for server
> TLS, but for CLIENT authentication.
>
>
>> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
>> EMAIL_HOST = 'localhost'
>> EMAIL_PORT = 25
>> EMAIL_HOST_USER = 'dnewman(a)networktest.com'
>> EMAIL_HOST_PASSWORD = 'wouldnt-you-like-to-know'
>> EMAIL_USE_TLS = 'True'
>> EMAIL_SSL_CERTFILE = '/etc/ssl/certs/myhost.crt'
>> EMAIL_SSL_KEYFILE = '/etc/ssl/private/myhost.key'
>
> All these settings above are used for SENDING messages and, if I'm not
> mistaken, the SSL key and cert are used for authenticating the user sending
> the email. Actually, using TLS and SMTP Auth for localhost is a bit too much.
> I've been configuring SMTP servers since 1990 and my mail servers just accept
> mail form localhost, if they are broken into, the user and password have
> already been exposed :-)
>
>> But this might only be for email, not Postorius/Django.
>
> You are right (if I also am)
>
>> What additional configuration is needed to allow regular users to create
>> and manage their own accounts?
>
> I'd say that is more what is not needed (the SMTP TLS authentication)
>
> I'll remove the "noise". These are the tell tale lines:
>
>> "/opt/mailman/venv/lib/python3.9/site-packages/django/core/mail/backends/smt
>> p.py", line 67, in open
>> self.connection.starttls(keyfile=self.ssl_keyfile,
>> certfile=self.ssl_certfile)
>
> The SMTP Django backend is trying to connect to the mail server to send the
> Mailman account confirmation message and failing, probably because the user
> Django runs as cannot open the private key (which is a very sensible thing if
> that private key is the one used for the web facing TLS certificate, I can
> tell you how bad in private or search for my name, wasd, apache and VMS ;-))
>
> That certificate is not needed for sending email from Django, and, as I said,
> not even SMTP Auth for sending via localhost. Actually, doing SMTP Auth on
> port 25 is not even recommended practice.
Hi Victoriano,
Thanks for this. I could use some clarification on what specific changes you are suggesting. I *think* you are saying to remove the EMAIL_USE_TLS stuff and also move to another port (maybe 587), but I am not sure.
Also, the reason I added the TLS in the first place was that I was getting errors without it. And I am unclear why the cert / private key pair do not work for Django when they do work OK for Postfix, Nginx, and Dovecot.
Thanks for clarifying — and happy and safe 2022 to you as well!
dn
>
> Happy, healthy, safe and well ventilated New Year to all.
>
> --
> Victoriano Giralt Innovation Director
> Digital Transformation Vicerectorate University of Malaga
> +34952131415 SPAIN
> ==================================================================
> Note: signature.asc is the electronic signature of present message
> A: Yes.
>> Q: Are you sure ?
>>> A: Because it reverses the logical flow of conversation.
>>>> Q: Why is top posting annoying in email ?
>
>
>
> _______________________________________________
> 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, 10 months
[MM3-users] Re: urls.py location on venv install
by Torsten
Am 2026-08-10 01:41, schrieb Mark Sapiro:
> On 8/9/26 09:08, Torsten wrote:
>>
>> In fact, my settings.py does contain these import lines:
>>
>> import os
>
> This should not be needed unless something further down references os.
>
I have removed this line (s. other mail where Odhiambo suggested to take
the config from the documentation and adjust it)
>> from mailman_web.settings.base import *
>> from mailman_web.settings.mailman import *
>>
>> BASE_DIR = ('/var/lib/mailman3/web')
>>
>> SECRET_KEY = '<MYSECRETKEY>'
>> DEBUG = False
>>
>> #: Default list of admins who receive the emails from error logging.
>> ADMINS = ( ('Mailman Suite Admin', 'torsten(a)bbadmin.de'),)
>>
>> ALLOWED_HOSTS = ['localhost', '127.0.0.1',]
>
> You may also want your public facing web domain here.
>
They are there, I have just omitted them here.
>> INSTALLED_APPS = [
>> 'django_mailman3',
>> 'postorius',
>> 'hyperkitty',
>> # Uncomment the next line to enable the admin:
>> 'django.contrib.admin',
>
>
> I'm hoping there's more to this file, but in any case unless you're
> adding or deleting something from the definition in
> mailman-web/settings/base.py, this is redundant and if you are adding,
> it's better to do
> ```
> INSTALLED_APPS.append('app.to.add')
> ```
> or to remove something, for example
> ```
> del INSTALLED_APPS[INSTALLED_APPS.index(django.contrib.admin')]
> ```
>
Yes, there's more in this config and also more in INSTALLED_APPS.
>> And I have the mailman_web/urls.py in the venv where mailman was
>> installed.
>
> If you are using gunicorn as your wsgi server, I think there is an
> issue in the documentation.
> <https://docs.mailman3.org/en/latest/install/virtualenv.html#setting-up-guni…>
> says etc/mailman3/gunicorn.conf should contain `chdir =
> "/opt/mailman/mm"`. I think this is wrong. It should be `chdir =
> "/etc/mailman3"`.
I am using uwsgi.
Here's the complete settings.py, I have in /etc/mailman3 now:
# Mailman Web configuration file.
# /etc/mailman3/settings.py
# Get the default settings.
from mailman_web.settings.base import *
from mailman_web.settings.mailman import *
# Settings below supplement or override the defaults.
#: Default list of admins who receive the emails from error logging.
ADMINS = (
('Mailman Suite Admin', 'torsten(a)bbadmin.de'),
)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '/var/lib/mailman3/web/mailman3web.db',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': '',
}
}
# 'collectstatic' command will copy all the static files here.
# Alias this location from your webserver to `/static`
STATIC_ROOT = '/var/lib/mailman3/web/static'
# enable the 'compress' command.
COMPRESS_ENABLED = True
# Make sure that this directory is created or Django will fail on start.
LOGGING['handlers']['file']['filename'] =
'/var/log/mailman3/web/mailmanweb.log'
#: See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
ALLOWED_HOSTS = [
"localhost", # Archiving API from Mailman, keep it.
"127.0.0.1",
"mail.<MYDOMAIN1>",
"<MYDOMAIN1>",
"<MYDOMAIN2>",
# "lists.your-domain.org",
# Add here all production domains you have.
]
#: See
https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins
#: For Django <4.0 these are of the form 'lists.example.com' or
#: '.example.com' to include subdomains and for Django >=4.0 they
include
#: the scheme as in 'https://lists.example.com' or
'https://*.example.com'.
CSRF_TRUSTED_ORIGINS = [
# "lists.your-domain.org",
"https://*.<MYDOMAIN1>",
"https://*.<MYDOMAIN2>",
# Add here all production domains you have.
]
#: Current Django Site being served. This is used to customize the web
host
#: being used to serve the current website. For more details about
Django
#: site, see: https://docs.djangoproject.com/en/dev/ref/contrib/sites/
SITE_ID = 1
# Set this to a new secret value.
SECRET_KEY = '<MYSECRETKEY>'
# Set this to match the api_key setting in
# /opt/mailman/mm/mailman-hyperkitty.cfg (quoted here, not there).
MAILMAN_ARCHIVER_KEY = '<ANOTHERSECRETKEY>'
# The sender of emails from Django such as address confirmation
requests.
# Set this to a valid email address.
EMAILNAME = '<MYDOMAIN1>'
DEFAULT_FROM_EMAIL = 'postorius@{}'.format(EMAILNAME)
# The sender of error messages from Django. Set this to a valid email
# address.
SERVER_EMAIL = 'root@{}'.format(EMAILNAME)
3 months
[MM3-users] Re: Customise Postorius templates?
by Abhilash Raj
> On Feb 7, 2022, at 4:35 AM, Duane Raymond <duane(a)fairsay.com> wrote:
>
> On Mon, 7 Feb 2022 at 00:56, Abhilash Raj <maxking(a)asynchronous.in> wrote:
>
>>> On Feb 1, 2022, at 11:01 AM, Mark Sapiro <mark(a)msapiro.net> wrote:
>>>
>>> On 2/1/22 09:47, Duane Raymond wrote:
>>>> Hi,
>>>> I'm looking to do some radical customisation of the Postorius (and
>> Hyperkitty) templates over the next 6 ish months and was wondering if there
>> is a 'best practice' way to do this that will survive updates to MM3. I've
>> searched around and not found much and also tested copying
>>>>
>> venv/lib/python3.7/site-packages/postorius/templates/postorius/lists/summary.html
>>>> to
>>>> var/templates/lists/summary.html
>>>> As suggested in some posts - but it didn't seem to pick up the
>> customisation - only customisations in the venv path worked - and they get
>> overwritten on update.
>
>
>> The best way to do this would be utilize Django’s template loader. See
>> here[1] for the documentation on how you can do this. You want to put the
>> path where you are putting the templates under `DIRS` option of the
>> `TEMPLATES` section.
>>
>> Do make sure that you are keeping the directory structure correct so that
>> Django can discover them. Like, Hyperkitty’s base.html should be in
>> `/custom/path/hyperkitty/base.html`, where `/custom/path` is what you’ve
>> setup in DIRS setting above.
>>
>
I hadn’t tried it when I sent email, but when I tried it locally on Postorius,
it seems to work for me.
> This looks promising! I've not got it working yet, but this is what I've
> tried:
>
> 1. Created folder 'custom' in the mm root (in my case: /opt/mailman/mm/)
> 2. Copied the files and folders from postorius/templates/postorius/* and
> hyperkitty/templates/hyperkitty/* to the custom/ folder (not the
> full postorius/templates/postorius/ match, just evening in the
> second postorius/ dirrectory)
Note that you want to copy from “src/postorius/templates” directory to your
"/opt/mailman/mm/custom” directory. It is important that you retain the “postorius”
and “hyperkitty” directories.
Here is what I have in my settings.py:
- 'DIRS': [],
+ 'DIRS': ['/Users/maxking/Documents/mm3/postorius/example_project/templates’],
And here is the structure of the templates directory you are seeing above:
$ tree /Users/maxking/Documents/mm3/postorius/example_project/templates
/Users/maxking/Documents/mm3/postorius/example_project/templates
└── postorius
└── lists
└── summary.html
Note that I am only overriding the Summary page here.
> 3. Recursive update of permissions of the custom/ folder and files to be
> mailman
> 4. Updated /opt/mailman/mm/settings.py by changing "'DIRS': []"
> to "'DIRS': [BASE_DIR, '/custom/']" in the "TEMPLATES =" section
Note that you don’t want [“BASE_DIR”, “/custom/“] here, the comma is the
wrong value here. The docs I mentioned have a “/“.
Although, it is possible that even “/“ since that needs BASE_DIR to be a
Path datatype and not string.
Easiest thing with least surprise would be to use the full path, atleast to
ensure that template discovery works as expected.
> 5. Edited the original AND copied postorius/lists/summary.html to have a
> small change in the footer of each so I know what version it is serving
Since I was running a dev server, it doesn’t need restart, but simply restarting
gunicorn should should do it. You don’t need to restart anything else.
> 6. Restarted: gunicorn qcluster mailman nginx and cleared browser cache
> 7. Reloaded the 'info' page of a few lists to see which version ti was
> serving
>
> Variants: I've also changed the DIRS value to the hard-coded path:
> /opt/mailman/mm/custom
>
> Result: it is still serving the default/original Postorius template vs the
> custom one.
>
> Any suggestions for things I should do to make it use the /custom/ folder
> instead? Any recompiling or other actions beyond just restarting? (I
> probably don't need to restart qcluster and maybe not even mailman core for
> this to take effect but I do it just in case!)
Hope that helps.
--
thanks,
Abhilash Raj (maxking)
4 years, 9 months
[MM3-users] Re: Does hyperkitty show JPEGs in line and what about attachments?
by tlhackque
On 12-Jul-17 12:39, Mark Sapiro wrote:
>
> Also, with respect to Mailman 2.1, if you want the scrubber to preserve
> file names and extensions, set the following in mm_cfg.py
>
> SCRUBBER_DONT_USE_ATTACHMENT_FILENAME = False
> SCRUBBER_USE_ATTACHMENT_FILENAME_EXTENSION = True
>
> and if you want scrubbed HTML to not be HTML escaped so it renders
> rather than looking like raw html, set
>
> ARCHIVE_HTML_SANITIZER = 3
>
> but note this comment from Defaults.py
>
>> # 3 - Remove text/html as attachments but don't HTML-escape them. Note: this
>> # is very dangerous because it essentially means anybody can send an HTML
>> # email to your site containing evil JavaScript or web bugs, or other
>> # nasty things, and folks viewing your archives will be susceptible. You
>> # should only consider this option if you do heavy moderation of your list
>> # postings.
>
> This is an issue with HyperKitty as it appears this is what HyperKitty
> does and there's no way to turn it off.
>
This warning seems a bit dated, though it's not completely wrong. It
comes from the days when HTML was new, browsers were fragile, and
javascript treated with suspicion. And virus/spam scanners for email
were non-existent.
Today, it's a very rare website that doesn't rely on javascript
(Postorious and Hyperkitty use JS). Browsers, while they still have
bugs, are much more defensive. And there are plenty of truly evil sites
that they have to defend against.
It is certainly true that archived e-mail can turn your site into an
unknowing distributor of malware: FLASH bugs, documents with embedded
buffer overflows, cross-site scripting and the other many ills of the
day. Wikis deal with this frequently.
However, in these cases, your mailing list has distributed the same bits
to your subscribers - a community that you probably care more about than
a random visitor to your (open) archive.
I wouldn't run a list - public or private - where the traffic doesn't go
through SPAM and virus filtering before Mailman sees it. (SpamAssassin
and ClamAV are good open-source solutions.) And once you've done that
(and Mailman 3's optional DMARC), most of these attacks are
defanged/mitigated. This is essentially automated moderation - to a point.
Note that all the Djano authentication schemes packaged with Mailman
(facebook, google, etc) rely on javascript and are sites littered with
what the comment refers to as "webbugs" - Google Analytics, tracking
cookies, browser fingerprinting, 0 size images (the original webbug).
They make money (and have become mainstream) using technologies that
were considered anti-social when that warning was written. (Personally,
I still think of them as anti-social, but the public has chosen to pay
for services with privacy...)
While some may elect to stick with the highly restrictive policies of
"plain text only", this limits the information content and applicability
of the the platform. Whether this is acceptable depends on the
community that you serve. Mailman can be an effective mechanism to
deliver rich media on a "push" basis. And that's "rich" by 1980
standards (bold, well-formatted tables, an attached agenda or document
package); not even "rich" by today's (sleeping cat videos...).
I think that Mailman has to be able to handle today's rich media with a
reasonable degree of safety and convenience. Including in the
archives. I thought that was one of the goals for Mailman Version 3...
I also think that the advice quoted above should be modified to better
reflect these realities. Mailman isn't the only tool available to
protect users from evil content, and aggressively filtering to plaintext
is a very blunt instrument. Including anti-spam, anti-virus, DNS
blacklisting, DKIM/DMARC tests in the delivery pipeline (most of which
can be/is done before Mailman touches a post) should be strongly
recommended.
Checks for headers indicating checked-by local (anti-spam/anti-virus)
agents should be available in the Mailman rulesets (and require some
cooperation from the MTA to ensure that they can't be passed through
from outside.)
There is nothing wrong with running a plain text only site, if it serves
your community. But if Mailman wants to be relevant in today's
environment, it has to adapt to rich content as more than an unwelcome
guest. (As I have :0)
9 years, 4 months
[MM3-users] Re: Confirmation emails to Users has wrong domain name (example.com!)
by Odhiambo Washington
On Thu, Sep 30, 2021 at 4:09 PM Abhilash Raj <maxking(a)asynchronous.in>
wrote:
>
>
> On Thu, Sep 30, 2021, at 2:20 AM, Odhiambo Washington wrote:
> > On Thu, Sep 30, 2021 at 1:59 AM Abhilash Raj <maxking(a)asynchronous.in>
> > wrote:
> >
> >>
> >>
> >> > On Sep 29, 2021, at 2:34 PM, Odhiambo Washington <odhiambo(a)gmail.com>
> >> wrote:
> >> >
> >> > On Wed, Sep 29, 2021 at 8:31 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> >> >
> >> >> On 9/29/21 9:50 AM, Odhiambo Washington wrote:
> >> >>> 1. Confirmation emails to Users has wrong domain name (example.com
> !)
> >> >>> <https://docs.mailman3.org/en/latest/faq.html#id1>
> >> >>> <
> >> >>
> >>
> https://docs.mailman3.org/en/latest/faq.html#confirmation-emails-to-users-h…
> >> >>>
> >> >>>
> >> >>> This happens when your reverse (SSL) proxy isn’t setting up the
> correct
> >> >>> headers when proxying requests. Fix this by setting the right
> >> >>> proxy_set_header directives:
> >> >> ...
> >> >>> How is this supposed to be mitigated in Apache when using WSGI?
> >> >>>
> >> >>> My config:
> >> >>>
> >> >>> WSGIDaemonProcess hyperkitty threads=25
> python-path=/usr/local/mailman
> >> >>> user=mailman group=mailman
> >> >>> WSGIPythonHome "/usr/local"
> >> >>> WSGIProcessGroup hyperkitty
> >> >>
> >> >>
> >> >> You are using mod_wsgi and not proxying at all, so this is not
> relevant
> >> >> in your case.
> >> >>
> >> >> Are you actually seeing this issue? If so, it might be related to
> >> >>
> >> >>
> >>
> https://docs.mailman3.org/en/latest/faq.html#the-domain-name-displayed-in-h…
> >> >>
> >> >
> >> > My issue is related to this, but the documentation referred to is not
> for
> >> > the faint-hearted!
> >> > I can't make head or tails of it.
> >>
> >> Click on “Domain” in Postorius from the top bar, which should take you
> to
> >> the Domains page.
> >>
> >> For your domain (in the “Mail Host” column), see the corresponding “Web
> >> Host” column, it should look something like:
> >>
> >> lists.mailman3.org (lists.mailman3.org)
> >> (Edit)
> >> SITE_ID = 1
> >>
> >
> > Mine looks different, slightly. But there is no example.com at all.
> >
> > [image: Abhilash.png]
> >
> >
> >
> >>
> >> on a new-ish version of Postorius.
> >>
> >
> > I have the newest versions of everything, having installed only
> yesterday.
> >
> >
> >>
> >> If it doesn’t show the right values and instead shows “example.com” for
> >> you, click on the “Edit” link, which will take
> >> you to a page that will allow you to edit both the values.
> >>
> >
> > It shows the right values, but with "SITE_ID = 2". In my
> settings_local.py
> > I have SITE_ID = 1.
> > I suppose the example.com is the one tied to SITE_ID = 1 and that is
> what I
> > have in my settings_local.py.
>
> That is most likely what is happening.
>
> > Should I edit my settings_local.py?
>
> Yes, please update it to have SITE_ID = 2 to correspond to the site you
> want and restart.
I did this, but there is still a problem: The hyperkitty URL still shows
example.com.
Maybe I need to re-import the database to clear this?
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' :-)
5 years, 1 month
[MM3-users] Re: E-mail every minute: "Cron <www-data@sharky5> ..."
by Odhiambo Washington
On Sun, Jul 7, 2024 at 8:43 PM Robert Heller <heller(a)deepsoft.com> wrote:
> At Sun, 7 Jul 2024 19:48:02 +0300 Odhiambo Washington <odhiambo(a)gmail.com>
> wrote:
>
> >
> > On Sun, Jul 7, 2024 at 7:16 PM Robert Heller <heller(a)deepsoft.com>
> wrote:
> >
> > > At Sun, 7 Jul 2024 18:52:05 +0300 Odhiambo Washington <
> odhiambo(a)gmail.com>
> > > wrote:
> > >
> > > >
> > > > On Sun, Jul 7, 2024 at 4:12 PM Robert
> Heller <heller(a)deepsoft.com>
> > > wrote:
> > > >
> > > > > What am I missing? I *think* I have mailman3 *mostly* setup, but
> there
> > > > > are
> > > > > still some configuration things that are missing, but I am not sure
> > > how to
> > > > > fix
> > > > > them (the docs are NOT clear).
> > > > >
> > > >
> > > > Which docs are you relying on?
> > >
> > > https://docs.mailman3.org/en/latest/config-web.html
> > >
> > > I presume these are the official docs for mailman3 -- maybe they
> aren't?
> > >
> > > >
> > > > How about this -
> > > https://docs.mailman3.org/en/latest/install/virtualenv.html
> > > > ??
> > >
> > > I'm not using a virtual environment. I'm using all native Debian 12
> > > packages,
> > > installed via apt. The virtual environment docs are actually even worse
> > > (even
> > > more confusing).
> >
> >
> > Worse? :-)
>
> Even more confusing. Both sets of docs make various assumptions and don't
> really explain things properly. Like everywhere where "settings.py" is
> mentioned, it really means "/etc/mailman3/mailman-web.py"
>
No! It means /etc/mailman3/settings.py - literally!
> In any case, the virtual environment docs are hard to relate to a "native"
> install and are generally hard to follow, since they seem to jump all over
> the
> place.
When one day you'll be able to internalize what a Python virtual
environment is, you'll realize that it's VERY convenient.
You will actually embrace it from that point onwards.
(Spaghetti docs?) And it is hard to replace the various (and not
> always consistent) virtual environment paths and settings files to the
> "native"
> paths.
Actually, if you're this inclined to run everything natively, MM3 is
perhaps not for you. Why? Because you'll not easily find help here.
We focus on the virtual environment only as the standard.. Why? Because no
one is willing to deal with ALL the OS-centric packaging
out there. Python virtual environment is universal across all the OSes, I
can say.
> The "official" docs are just not useful to me, since I am not using a
> virtual
> environment. If a virtual environment is recomended, what is the point of
> the
> Debian 12 packages?
We cannot answer that here. I guess they are meant for people like you who
strive under pain :-)
With the Python virtual environment, I can install and manage MM3 in almost
any *nix OS.
> Are they just not meant to be used? Really? Do you mean that I should use
> a separate package management system for Mailman3? That
> really sucks.
>
Yes, they are meant to be used. Noone denies that. However, they are not
packaged by the Mailman Developers.
Did you read one response from Mark Sapiro where he said, and I quote:
```
If you prefer to use the Debian packages, that's fine, but if using the
Debian packages, your primary resource for support, documentation, bug
reports, etc. should be Debian. See https://wiki.list.org/x/12812344
```
So yes, go ahead and use the Debian packages. No one is stopping you.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
2 years, 4 months
[MM3-users] Re: Digests not working correctly
by Joel Lord
Now I'm on one of the lists in digest mode and I can see that it's a
mess. Periodic digests are definitely NOT working, so I'll lay that out
here.
root@host2:/# cat /etc/cron.d/mailman
# This goes in /etc/cron.d/mailman
# Replace "apache" by your webserver user ("www-data" on Debian systems) and
# set the path to the Django project directory
0 23 * * * lists /usr/local/bin/mailman digests --periodic
0 23 * * * lists /usr/local/bin/mailman notify
root@host2:/# grep digests /var/log/cron.log
Jun 11 23:00:01 host2 CRON[1632765]: (lists) CMD (/usr/local/bin/mailman
digests --periodic)
Jun 12 23:00:01 host2 CRON[2177286]: (lists) CMD (/usr/local/bin/mailman
digests --periodic)
root@host2:/home/members/directory# su - lists
lists@host2:~$ /usr/local/bin/mailman digests --periodic
lists@host2:~$ ls var/lists/<list>/
digest.mmdf
In this case I've got /usr/local/bin/mailman as a symlink to the mailman
binary inside the venv's bin directory, just for simplicity. That
digest.mmdf file is dated June 9th and clearly ought to have been
cleared out on any of the nightly runs between then and today but has
not. There are no errors anywhere I can find.
How can I try and track this down?
-Joel
On 6/4/2023 10:15 PM, Joel Lord wrote:
> 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
3 years, 5 months
[MM3-users] Re: psycopg2 error?
by Odhiambo Washington
On Fri, Oct 27, 2023 at 4:38 AM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 10/26/23 01:03, Odhiambo Washington wrote:
> >
> > <CUT>
> > root@debian12:/home/wash# systemctl status mailman3.service
> > × mailman3.service - GNU Mailing List Manager
> > Loaded: loaded (/etc/systemd/system/mailman3.service; enabled;
> preset:
> > enabled)
> > Active: failed (Result: exit-code) since Thu 2023-10-26 09:36:41
> EAT;
> > 8s ago
> > Process: 1893842 ExecStart=/opt/mailman/venv/bin/mailman start
> > (code=exited, status=1/FAILURE)
> > CPU: 789ms
> >
> > Oct 26 09:36:41 debian12.wash.lan mailman[1893842]: dbapi =
> > dbapi_meth(**dbapi_args)
> > Oct 26 09:36:41 debian12.wash.lan mailman[1893842]:
> > ^^^^^^^^^^^^^^^^^^^^^^^^
> > Oct 26 09:36:41 debian12.wash.lan mailman[1893842]: File
> >
> "/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py",
> > line 690, in import_dbapi
> > Oct 26 09:36:41 debian12.wash.lan mailman[1893842]: import psycopg2
> > Oct 26 09:36:41 debian12.wash.lan mailman[1893842]: File
> > "/opt/mailman/venv/lib/python3.11/site-packages/psycopg2/__init__.py",
> line
> > 51, in <module>
> > Oct 26 09:36:41 debian12.wash.lan mailman[1893842]: from
> > psycopg2._psycopg import ( # noqa
> > Oct 26 09:36:41 debian12.wash.lan mailman[1893842]: SystemError:
> > initialization of _psycopg raised unreported exception
> > Oct 26 09:36:41 debian12.wash.lan systemd[1]: mailman3.service: Control
> > process exited, code=exited, status=1/FAILURE
> > Oct 26 09:36:41 debian12.wash.lan systemd[1]: mailman3.service: Failed
> with
> > result 'exit-code'.
> > Oct 26 09:36:41 debian12.wash.lan systemd[1]: Failed to start
> > mailman3.service - GNU Mailing List Manager.
> > </CUT>
>
> Is your database PostgreSQL or some other? If it's not PostgreSQL, see
> the thread at
>
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
> - particularly
>
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> Also see
>
> https://docs.mailman3.org/en/latest/install/virtualenv.html#installing-mail…
> where it now says in part "This will install latest release of Mailman
> Core, and Python bindings for Postgresql database. If you are using a
> different database manager, do not install psycopg2-binary."
>
So my database is PostgreSQL-15:
```
postgres@debian12:~$ psql
psql (15.3 (Debian 15.3-0+deb12u1))
Type "help" for help.
postgres=#
```
Below is the output of `mailman info` which for some reason I forgot to
attach in the initial post. Maybe it contains something useful?
```
(venv) mailman@debian12:~$ mailman info
Traceback (most recent call last):
File "/opt/mailman/venv/bin/mailman", line 33, in <module>
sys.exit(load_entry_point('mailman==3.3.9', 'console_scripts',
'mailman')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1077, in main
with self.make_context(prog_name, args, **extra) as ctx:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
943, in make_context
self.parse_args(ctx, args)
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1644, in parse_args
rest = super().parse_args(ctx, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1408, in parse_args
value, args = param.handle_parse_result(ctx, opts, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
2400, in handle_parse_result
value = self.process_value(ctx, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
2362, in process_value
value = self.callback(ctx, self, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/bin/mailman.py",
line 95, in initialize_config
initialize(value)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/core/initialize.py",
line 229, in initialize
initialize_2(propagate_logs=propagate_logs)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/core/initialize.py",
line 187, in initialize_2
config.db = getUtility(IDatabaseFactory, utility_name).create()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/database/factory.py",
line 57, in create
database.initialize()
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/database/base.py",
line 117, in initialize
self.engine = create_engine(
^^^^^^^^^^^^^^
File "<string>", line 2, in create_engine
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/util/deprecations.py",
line 281, in warned
return fn(*args, **kwargs) # type: ignore[no-any-return]
^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/create.py",
line 601, in create_engine
dbapi = dbapi_meth(**dbapi_args)
^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py",
line 690, in import_dbapi
import psycopg2
File
"/opt/mailman/venv/lib/python3.11/site-packages/psycopg2/__init__.py", line
51, in <module>
from psycopg2._psycopg import ( # noqa
SystemError: initialization of _psycopg raised unreported exception
```
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
3 years
[MM3-users] Re: moving lists to another server
by Odhiambo Washington
On Mon, Nov 20, 2023 at 8:53 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 11/20/23 00:58, Odhiambo Washington wrote:
> >
> > What is the command to export the archive as a mbox from the DB?
> > I can't figure out which option it is by looking at 'mailman-web -h'.
>
> Normally you do this on the old server via the HyperKitty web UI which
> has download buttons which do things like
>
>
> https://example.com/archives/list/list@example.com/export/list@example.com.…
>
> or for a partial archive
>
>
> https://example.com/archives/list/list@example.com/export/list@example.com-…
>
> However, in your case I don't think you have the old installation working
> any more so the above won't help.
>
I had a dump of the old installation actually - both databases.
The above has actually helped and I obtained the archive.
> > BTW, how will ' mailman addmembers' treat a file containing:
> > ```
> > Firstname Lastname <email@address>
> > Onlyname <email2@address>
> > ```
>
> Correctly. It will import email@address with display name = 'Firstname
> Lastname' and email2@address with display name = 'Onlyname'.
>
Super!
> > I have opted for the simple way to do this:
> > 1. Create the site in Django Admin and create/configure the list in
> > Postorius
> > 2. Add the members from the file dump, with delivery set to regular.
> > 3. Send the members an email informing them that they need to set their
> > delivery preferences.
> >
> > I am stuck on the issue of exporting the archives to mbox file as already
> > stated above.
>
> Perhaps you can export the mbox via the web UI on the old server or
> maybe temporarily create a second mailman-web on your server with the
> old mailman-web database and use that web UI.
That's exactly how I did it and got the archives.
> Otherwise, if you have a working mailman-web that can access this
> database, you could try
> something like
> ```
> $ mailman-web shell
>
> >>> from hyperkitty.lib.compat import get_list_by_name
> >>> mlist = get_list_by_name('list_name_only', 'list_domain')
> >>> with open('output.mbox', 'wb') as fp:
> ... for email in mlist.emails.order_by("archived_date").all():
> ... fp.write(email.as_bytes() + b'\n')
> ...
> >>>
> ```
>
I tested the above out of curiosity. It failed. There are 9 lists in the
setup, but I am only interested in 1.
```
(venv) mailman@debian12:~$ mailman-web shell
Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.17.2 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from hyperkitty.lib.compat import get_list_by_name
In [2]: mlist = get_list_by_name('list_name_only', 'list_domain')
---------------------------------------------------------------------------
Http404 Traceback (most recent call last)
Cell In[2], line 1
----> 1 mlist = get_list_by_name('list_name_only', 'list_domain')
File ~/venv/lib/python3.11/site-packages/hyperkitty/lib/compat.py:37, in
get_list_by_name(list_name, domain)
35 matching =
list(MailingList.objects.filter(name__startswith=list_name+"@"))
36 if len(matching) == 0: # no candidate found
---> 37 raise Http404("No archived mailinglist by that name")
38 if len(matching) == 1: # only one candidate
39 return matching[0]
Http404: No archived mailinglist by that name
```
Was I supposed to substitute something for the real listname of the list I
wanted?
Another thing - totally unrelated - that surprised me:
While using the commented-out block below, I could not click and get
anything beyond http://http://list.name/mailman3 as anything to do with
/postorius/xxxxx gave "Page not found" error.
However, with the second config block that uses the UNIX socket, I am able
to access everything
```
#<IfModule mod_proxy.c>
# ProxyPreserveHost On
# ProxyPass "/mailman3" "http://127.0.0.1:8010/mailman3"
# ProxyPass "/archives" "http://127.0.0.1:8010/archives"
# ProxyPass "/accounts" "http://127.0.0.1:8010/accounts"
# ProxyPass "/admin" "http://127.0.0.1:8010/admin"
# ProxyPass "/user-profile" "http://127.0.0.1:8010/user-profile"
# </IfModule>
ProxyPassMatch ^/static/ !
ProxyPassMatch ^/favicon.ico !
ProxyPass / unix:/opt/mailman/mm/var/uwsgi.sock|uwsgi://localhost/
ProxyPassReverse / unix:/opt/mailman/mm/var/uwsgi.sock|uwsgi://localhost/
```
Why is it that the UNIX socket option worked flawlessly while the other
option failed???
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
2 years, 11 months
[MM3-users] Re: Migrating mailman3 to latest ubuntu lts
by Helio Loureiro
Hi,
No luck :(
(venv) mailman@new-server ~ (v3.3.9)> *pip freeze | egrep
"mailman-web|django-mailman3|django-allauth"*
django-allauth==0.59.0
django-mailman3==1.3.11
mailman-web==0.0.8
(venv) mailman@new-server ~ (v3.3.9)> *pip install -U
django-allauth==0.58.0*
Collecting django-allauth==0.58.0
Downloading django-allauth-0.58.0.tar.gz (861 kB)
---------------------------------------- 861.7/861.7 KB 9.4 MB/s eta
0:00:00
Installing build dependencies ... done
Getting requirements to build wheel ... done
Installing backend dependencies ... done
Preparing metadata (pyproject.toml) ... done
Requirement already satisfied: requests-oauthlib>=0.3.0 in
./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (1.3.1)
Requirement already satisfied: Django>=3.2 in
./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (4.1.13)
Requirement already satisfied: pyjwt[crypto]>=1.7 in
./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (2.8.0)
Requirement already satisfied: requests>=2.0.0 in
./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (2.31.0)
Requirement already satisfied: python3-openid>=3.0.8 in
./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (3.2.0)
Requirement already satisfied: asgiref<4,>=3.5.2 in
./venv/lib/python3.10/site-packages (from
Django>=3.2->django-allauth==0.58.0) (3.7.2)
Requirement already satisfied: sqlparse>=0.2.2 in
./venv/lib/python3.10/site-packages (from
Django>=3.2->django-allauth==0.58.0) (0.4.4)
Requirement already satisfied: cryptography>=3.4.0 in
./venv/lib/python3.10/site-packages (from
pyjwt[crypto]>=1.7->django-allauth==0.58.0) (41.0.7)
Requirement already satisfied: defusedxml in
./venv/lib/python3.10/site-packages (from
python3-openid>=3.0.8->django-allauth==0.58.0) (0.7.1)
Requirement already satisfied: urllib3<3,>=1.21.1 in
./venv/lib/python3.10/site-packages (from
requests>=2.0.0->django-allauth==0.58.0) (2.1.0)
Requirement already satisfied: charset-normalizer<4,>=2 in
./venv/lib/python3.10/site-packages (from
requests>=2.0.0->django-allauth==0.58.0) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in
./venv/lib/python3.10/site-packages (from
requests>=2.0.0->django-allauth==0.58.0) (3.6)
Requirement already satisfied: certifi>=2017.4.17 in
./venv/lib/python3.10/site-packages (from
requests>=2.0.0->django-allauth==0.58.0) (2023.11.17)
Requirement already satisfied: oauthlib>=3.0.0 in
./venv/lib/python3.10/site-packages (from
requests-oauthlib>=0.3.0->django-allauth==0.58.0) (3.2.2)
Requirement already satisfied: typing-extensions>=4 in
./venv/lib/python3.10/site-packages (from
asgiref<4,>=3.5.2->Django>=3.2->django-allauth==0.58.0) (4.9.0)
Requirement already satisfied: cffi>=1.12 in
./venv/lib/python3.10/site-packages (from
cryptography>=3.4.0->pyjwt[crypto]>=1.7->django-allauth==0.58.0) (1.16.0)
Requirement already satisfied: pycparser in
./venv/lib/python3.10/site-packages (from
cffi>=1.12->cryptography>=3.4.0->pyjwt[crypto]>=1.7->django-allauth==0.58.0)
(2.21)
Building wheels for collected packages: django-allauth
Building wheel for django-allauth (pyproject.toml) ... done
Created wheel for django-allauth:
filename=django_allauth-0.58.0-py3-none-any.whl size=1157319
sha256=a430c552101d1ad47bc00b16d1c1d6df728afacdd13823927b4cbfb02c35dbfc
Stored in directory:
/local/mailman/.cache-ubuntu-22.04/pip/wheels/55/0a/79/e199827a18f310906c2a90b0e92b89c41daf21d2a502db6710
Successfully built django-allauth
Installing collected packages: django-allauth
Attempting uninstall: django-allauth
Found existing installation: django-allauth 0.59.0
Uninstalling django-allauth-0.59.0:
Successfully uninstalled django-allauth-0.59.0
Successfully installed django-allauth-0.58.0
(venv) mailman@new-server ~ (v3.3.9)> *mailman-web migrate*
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you don't care
about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't care
about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying account.0004_alter_emailaddress_drop_unique_email...Traceback
(most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 257, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (2013, 'Lost connection to MySQL server during
query')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
sys.exit(main())
File
"/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
line 90, in main
execute_from_command_line(sys.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 446, in execute_from_command_line
utility.execute()
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 402, in run_from_argv
self.execute(*args, **cmd_options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 448, in execute
output = self.handle(*args, **options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 96, in wrapped
res = handle_func(*args, **kwargs)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/migrate.py",
line 349, in handle
post_migrate_state = executor.migrate(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 135, in migrate
state = self._migrate_all_forwards(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 167, in _migrate_all_forwards
state = self.apply_migration(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 252, in apply_migration
state = migration.apply(state, schema_editor)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/migration.py",
line 130, in apply
operation.database_forwards(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py",
line 235, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 788, in alter_field
self._alter_field(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 858, in _alter_field
self.execute(self._delete_unique_sql(model, constraint_name))
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 199, in execute
cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/utils.py", line
91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 257, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server
during query')
(venv) mailman@new-server ~ (v3.3.9) [0|1]> *more /etc/mailman3/settings.py*
# Mailman Web configuration file.
# /etc/mailman3/settings.py
# Get the default settings.
from mailman_web.settings.base import *
from mailman_web.settings.mailman import *
# Settings below supplement or override the defaults.
#: Default list of admins who receive the emails from error logging.
ADMINS = (
('Mailman Suite Admin', 'root@localhost'),
)
# Postgresql database setup.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mailman3web',
'USER': 'mailman3web',
# TODO: Replace this with the password.
'PASSWORD': '***********',
'HOST': 'localhost',
# PORT: set to empty string for default.
'PORT': '3306',
# 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'",
# 'charset': 'utf8mb4',
#},
}
}
# 'collectstatic' command will copy all the static files here.
# Alias this location from your webserver to `/static`
STATIC_ROOT = '/local/mailman/web/static'
# enable the 'compress' command.
COMPRESS_ENABLED = True
# Make sure that this directory is created or Django will fail on start.
LOGGING['handlers']['file']['filename'] =
'/local/mailman/web/logs/mailmanweb.log'
#: See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
ALLOWED_HOSTS = [
"localhost", # Archiving API from Mailman, keep it.
"127.0.0.1",
# "lists.your-domain.org",
# Add here all production domains you have.
"*"
]
#: See
https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins
(venv) mailman@new-server ~ (v3.3.9)> *mysql -umailman3web -p -h localhost
mailman3web*
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
MariaDB [mailman3web]> show tables;
+-------------------------------+
| Tables_in_mailman3web |
+-------------------------------+
| account_emailaddress |
| account_emailconfirmation |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_mailman3_maildomain |
| django_mailman3_profile |
| django_migrations |
| django_q_ormq |
| django_q_schedule |
| django_q_task |
| django_session |
| django_site |
| hyperkitty_attachment |
| hyperkitty_email |
| hyperkitty_favorite |
| hyperkitty_lastview |
| hyperkitty_mailinglist |
| hyperkitty_profile |
| hyperkitty_sender |
| hyperkitty_tag |
| hyperkitty_tagging |
| hyperkitty_thread |
| hyperkitty_threadcategory |
| hyperkitty_vote |
| socialaccount_socialaccount |
| socialaccount_socialapp |
| socialaccount_socialapp_sites |
| socialaccount_socialtoken |
+-------------------------------+
34 rows in set (0.000 sec)
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Mon, 18 Dec 2023 at 17:11, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/18/23 6:24 AM, Helio Loureiro wrote:
> > Hi,
> >
> > Indeed it was the configuration. It was placed into
> > /etc/mailman3/mailman-web.py. After a I changed to
> > /etc/mailman3/settings.py a few things advanced a little bit more.
> >
> > I had to figure out how to fix mysqlclient installation since there
> isn't a
> > mention about it and the simple "pip install mysqclient" was breaking
> with
> > pkg-config issues. But it did work at the end.
> >
> > Now I can see further messages on mailman3-web than before.
> >
> > (venv) mailman@new-server ~ (v3.3.9)> mailman-web migrate
> > System check identified some issues:
> >
> > WARNINGS:
> > account.EmailAddress: (models.W036) MariaDB does not support unique
> > constraints with conditions.
> > HINT: A constraint won't be created. Silence this warning if you don't
> care
> > about it.
> > account.EmailAddress: (models.W043) MariaDB does not support indexes on
> > expressions.
> > HINT: An index won't be created. Silence this warning if you don't care
> > about it.
> > Operations to perform:
> > Apply all migrations: account, admin, auth, contenttypes,
> > django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> > socialaccount
> > Running migrations:
> > Applying account.0004_alter_emailaddress_drop_unique_email...Traceback
> > (most recent call last):
>
>
> I'm not sure why there would be an issue with this migration, but there
> is a possible compatibility issue depending on how you installed things.
>
> django-mailman3<=1.3.11 is not compatible with django-allauth>=0.58.
>
> In your venv, try
> ```
> pip install django-allauth\<0.58
> ```
>
> --
> 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/
> Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to helio(a)loureiro.eng.br
>
2 years, 10 months
[MM3-users] Re: Held messages not delivered after approval
by Odhiambo Washington
On Thu, Jul 31, 2025 at 8:21 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 7/31/25 04:29, Stephan Krinetzki wrote:
> >
> > /opt/mailman/var/queue/out:
> > total 2868
> > drwxrwx--- 2 mailman mailman 4096 Jul 31 13:26 .
> > drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
> > -rw-rw---- 1 mailman mailman 221708 Jul 30 13:16
> 1753874180.0845337+0cc7849043859a79dc3678a0d8b63c1c66df0c66.pck.tmp
> > -rw-rw---- 1 mailman mailman 733425 Jul 31 00:00
> 1753912841.8847518+da55f8789ae41b75d19a02b595e3fd6d45983ade.pck.tmp
>
> These indicate a problem of some sort. .pck.tmp files should only exist
> for a fraction of a second. See
>
> https://gitlab.com/mailman/mailman/-/blob/master/src/mailman/core/switchboa…
>
> What does `mailman qfile report for these? Are they the missing messages?
>
> > -rw-rw---- 1 mailman mailman 17758 Jul 31 13:26
> 1753961185.0481033+6adf966467266567275f1146f5054c95e4365c13.pck
> > -rw-rw---- 1 mailman mailman 31122 Jul 31 13:26
> 1753961185.1064982+b1f502e2af56b9b11680135c6de5fcc5285d967e.bak
> > -rw-rw---- 1 mailman mailman 12945 Jul 31 13:26
> 1753961185.1562705+a88534cfa9b03012c248ac00cbb54f4fc08c8dcc.pck
> > -rw-rw---- 1 mailman mailman 1407634 Jul 31 13:26
> 1753961185.2598634+96e501d7aa8e72fbb9f9a5c953d48fc2c7db2bc7.pck
> > -rw-rw---- 1 mailman mailman 17570 Jul 31 13:26
> 1753961185.3654013+d693065f2b9a2338f887d3ac9c0669c957131100.pck
> > -rw-rw---- 1 mailman mailman 60624 Jul 31 13:26
> 1753961185.4132354+8998ee9eb9a8a99faf1fcf045d604e669f5d0c9e.pck
> > -rw-rw---- 1 mailman mailman 7361 Jul 31 13:26
> 1753961185.413462+50dcef9bb178f54ecb2d4707ccfe02773f92336c.pck
> > -rw-rw---- 1 mailman mailman 84848 Jul 31 13:26
> 1753961185.4464717+17836b8875aa6643f7e5fb0744e72940ce5603c6.pck
> > -rw-rw---- 1 mailman mailman 18003 Jul 31 13:26
> 1753961185.4929028+17e9c78a2721cbc344124c6e04a129217ea6c794.pck
> > -rw-rw---- 1 mailman mailman 66982 Jul 31 13:26
> 1753961185.5228019+4ef59e61c6a79dd4cdee6d1110fb0582fcfafb6c.pck
> > -rw-rw---- 1 mailman mailman 221723 Jul 31 13:26
> 1753961185.5756643+6de90ae99b3d528ce5234b78a287e19f7b6686fc.pck
>
>
> Also, this is a lot of outgoing messages to be queued. Are you sending
> periodic digests at this time? If you normally see a lot of messages in
> the out queue, you might consider setting it's `instances` to 2 or 4. E.g.,
> ```
> [runner.out]
> instances: 4
> ```
> in mailman.cfg
>
> > /opt/mailman/var/queue/shunt:
> > total 3304
> > drwxrwx--- 2 mailman mailman 4096 Jul 31 11:44 .
> > drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
> > -rw-rw---- 1 mailman mailman 451 Jul 31 00:00
> 1753912822.2651796+28eceef7e18eb70393377b88dc7117af8f9362a0.pck
> > -rw-rw---- 1 mailman mailman 490 Jul 31 00:00
> 1753912838.4197352+ea531cf0262c1faa58b1679b907fee92bc16822c.pck
> > -rw-rw---- 1 mailman mailman 1407870 Jul 31 00:00
> 1753912841.9177196+ccea15bdefce3a54301281c8eddf86e8230244a6.pck
> > -rw-rw---- 1 mailman mailman 86108 Jul 31 00:00
> 1753912841.9197443+7dcef4febc71e44c6d9309a24a08b08753e1ff42.pck
> > -rw-rw---- 1 mailman mailman 1407668 Jul 31 00:00
> 1753912841.9849963+a3f1869b750060c97262ece38737480d91652828.pck
> > -rw-rw---- 1 mailman mailman 38992 Jul 31 00:01
> 1753912860.5167956+940584c4f361cbd8c29e390b2f60590558effe40.pck
> > -rw-rw---- 1 mailman mailman 440 Jul 31 00:01
> 1753912860.6972685+635c065bac8dff5f9d562275d707001d773b84c1.pck
> > -rw-rw---- 1 mailman mailman 445 Jul 31 00:01
> 1753912868.7903054+befa066f254d7a3529a8555a6c942a554715d837.pck
> > -rw-rw---- 1 mailman mailman 33494 Jul 31 00:01
> 1753912878.7562895+82b724fd93260ab9a2bb49709d3a42a2f32f2c80.pck
> > -rw-rw---- 1 mailman mailman 217073 Jul 31 00:01
> 1753912878.9337828+de73a65d9c6febfa80275853921f4b53fd1d9e2a.pck
> > -rw-rw---- 1 mailman mailman 85888 Jul 31 00:02
> 1753912950.303359+8a87bce0be63ac1df8493c6b1ad6ae154fcedba7.pck
> > -rw-rw---- 1 mailman mailman 50244 Jul 31 00:02
> 1753912950.4970112+d44d493912bb3024547b8a5112f86f035dcb352f.pck
> > -rw-rw---- 1 mailman mailman 12887 Jul 31 00:02
> 1753912970.038427+31bcbd7fb2ebdf81f6de24b7283b50bcda6ded21.pck.tmp
> > -rw-rw---- 1 mailman mailman 443 Jul 31 11:44
> 1753955094.900898+67bc76525412da66a7c76363f65f583989716305.pck
> >
> > /opt/mailman/var/queue/virgin:
> > total 32
> > drwxrwx--- 2 mailman mailman 81 Jul 31 13:17 .
> > drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
> > -rw-rw---- 1 mailman mailman 32013 Jan 11 2025
> 1736550035.6163204+472f81ece5e45a2651a4499bef418f611b43c619.pck.tmp
> >
> > Nothing special there (shunt should be checked, but not in correlation
> with my mail).
>
>
> Actually those .pck.tmp files indicate some issue.
>
> > I have one list which archives the mail. In the archive there is the
> mail, but it doesn't get deliverd
>
> Which says the pipeline to_archive handler is adding the message to the
> archive queue and the archive runner is handling it, so presumably the
> pipeline to_outgoing handler is adding the message to the out queue, so
> the issue is in the outging runner.
>
In one response, he mentioned that "Other mailinglists on the same host are
doing fine. Even a 1:1 copy of the list works - only the original list does
not work".
Does it mean that "the issue is in the outgoing runner" only for a single
list?
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
1 year, 3 months
[MM3-users] Re: Apache+mod_wsgi issue
by Odhiambo Washington
On Sat, Dec 24, 2022 at 9:40 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/24/22 00:00, Odhiambo Washington wrote:
> >
> > These are my files:
> > 1. urls.py
> > <CUT >
> > from django.conf.urls import include
> > from django.urls import re_path
> > from django.contrib import admin
> > from django.urls import reverse_lazy
> > from django.views.generic import RedirectView
> >
> > urlpatterns = [
> > re_path(r'^$', RedirectView.as_view(
> > url=reverse_lazy('list_index'),
> > permanent=True)),
> > re_path(r'^postorius/', include('postorius.urls')),
> > re_path(r'^hyperkitty/', include('hyperkitty.urls')),
> > re_path(r'', include('django_mailman3.urls')),
> > re_path(r'^accounts/', include('allauth.urls')),
> > # Django admin
> > re_path(r'^admin/', admin.site.urls),
> > re_path(r'^mailman3/', include('postorius.urls')),
> > re_path(r'^archives/', include('hyperkitty.urls')),
> > ]
> > </CUT>
>
>
> You don't need all of those. ^postorius/ and ^mailman3/ are two
> different ways to access Postorius, and ^hyperkitty/ and ^archives/ are
> two different ways to access HypereKitty. You only need one of each, but
> having both is OK.
>
That urls.py was picked from
https://wiki.list.org/DOC/Mailman%203%20installation%20experience.
Maybe that page needs some edits/revision now?
> 2. apache.conf
> > <CUT>
> > ...
> > Alias /static "/opt/mailman/mm/static"
> > <Directory "/opt/mailman/mm/static">
> > Require all granted
> > </Directory>
> > # WSGIScriptAlias /mailman3 /opt/mailman/mm/wsgi.py
> > # WSGIScriptAlias /accounts /opt/mailman/mm/wsgi.py
> > # WSGIScriptAlias /admin /opt/mailman/mm/wsgi.py
> > # WSGIScriptAlias /archives /opt/mailman/mm/wsgi.py
> > # WSGIScriptAlias /user-profile /opt/mailman/mm/wsgi.py
> > # WSGIScriptAlias /hyperkitty /opt/mailman/mm/wsgi.py
> > # WSGIScriptAlias /postorius /opt/mailman/mm/wsgi.py
> > WSGIScriptAlias / /opt/mailman/mm/wsgi.py
>
>
> This will send every http request to mod_wsgi except for requests to
> /static. This is OK if there are no other web sites on this server and
> the only http requests are for Django related things.
>
This is just a virtual host. There are other websites on the server.
...
> > I have tested with creating all those commented out aliases and that
> ended
> > up still giving me /mailman3/mailman3/* which I did not
> > like, although everything appeared to work.
> > I then ended up with only "WSGIScriptAlias / /opt/mailman/mm/wsgi.py"
> > and now when I type https://mm3-lists.kictanet.or.ke I end
> > up at https://mm3-lists.kictanet.or.ke/mailman3/lists/. Of course
> something
> > has appended "/mailman3"
> > So this has resulted in all URLs having /mailman3/ appended, except for
> the
> > /archives link.
>
>
> How about https://mm3-lists.kictanet.or.ke/user_profile/ ?
>
I have uncommented the line "WSGIScriptAlias /user-profile
/opt/mailman/mm/wsgi.py",
I don't see any definition for it in urls.py as well. Perhaps that's the
issue?
When I uncomment /user-profile, I end up with an ugly URL:
https://mm3-lists.kictanet.or.ke/user-profile/user-profile/
So instead of aliasing the /user-profile, I have decided to add another
definition to urls.py:
re_path(r'^user-profile/', include('allauth.urls')),
Which I think gives me a cleaner URL:
https://mm3-lists.kictanet.or.ke/user-profile/login/?next=/user-profile/
I also had to alias /accounts, which then brings me to:
https://mm3-lists.kictanet.or.ke/accounts/mailman3/lists/ - which I believe
is fine because one gets the
option to either login or signup.
And I think that "/account" and "/user-profile" are synonymous.
> Now my question is about what could be adding the /mailman3. Is it
> possible
> > that I installed something out of the ordinary?
>
>
> It's a mod_wsgi thing. I haven't used mod_wsgi for Mailman for some time
> (I now use gunicorn on all the sites I manage), but when I did I think I
> had
> WSGIScriptAlias /mm3 /opt/mailman/mm/wsgi.py
>
> and all the URLs were like https://example.com/mm3/mailman3/...,
> https://example.com/mm3/archives/..., etc.
>
I already had gunicorn working too, but I just need to also figure out this
mod_wsgi.
I will stop bothering about the /mailman3 being appended, as long as it
serves the required purpose.
Thank you for all the help.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
3 years, 10 months
[MM3-users] Re: hello, Discussion on how to subscribe to the mailing list
by Stephen J. Turnbull
Mark Sapiro writes:
> On 1/16/23 18:55, 朱超 wrote:
> > Hi, When I subscribe the email list in Subscription Policy is
> > confirm, Some problems happen in here:
> > 1.Some mail mua reject send the confirm the message, because the
> > length of recipient is too long. for exmaple:
> > requirements-confirm+9605556e0b35a5da280c1de0d34a3e6f770f8ea5@domain,
> > and the mail mua reject to modify about this.
>
> The default English template says in part:
>
> Before you can start using GNU Mailman at this site, you must first
> confirm that this is your email address. You can do this by replying to
> this message.
>
> Or you should include the following line -- and only the following
> line -- in a message to $request_email:
>
> confirm $token
>
> I.e. It gives an alternative method if `reply` doesn't work. You can
> provide a custom version of this template with different wording if you
> think you can improve it.
The problem is the reply address, though. Changing the template to
suggest only the "confirm $token" in body method doesn't help people
who hit R expecting that should work, especially since many "user
fiendly" (misspelling intentional) MUAs don't display the address.
Avoiding that requires code changes, I guess?
> > 2.It is inconvenient for users to use. Many people will
> > mistakenly think that after clicking the subscribe button, it
> > will be successful, and they will not process the email.
> step, you can set Subscription Policy to Open, but then anyone can
> maliciously subscribe third parties to the list.
*Please* do not do this if your server is exposed to the Internet.
There are bots that search for such servers, and sell lists of them to
people who want to DOS mailboxes. You may find yourself banned across
the Internet.
The only real alternative to confirmation is approval by moderators.
I believe Mailman 3 offers that alternative as Mailman 2 did, can't
check at the moment.
> > Regarding the discussion on the subscription method of the
> > mailing list, should we consider optimizing the subscription
> > method of the mailing list, for example:
> > 1. use the method of sending a verification code to subscribe by
> > email,When you receive the verification code sent by the
> > mailing list and fill it in again, you can subscribe
> > successfully。
>
> How is this different from the present method.
Just wording. I think they are thinking of the "invite" option that
was provided in Mailman 2 mass subscribe (again, I think Mailman 3
retains it but I never ever used it so I don't recall for sure). But
it doesn't make sense for a user-initiated interaction.
> If you want, you can make
> a custom template and include something like:
>
> Alternatively, you can confirm by going to the URL
>
> https://www.example.com/mailman3/lists/$list_id/confirm/?token=$token
If I understand the OP's PoV correctly, I think I would change the
list information page to say "Send a personal invitation to join the
list to [email address here]. If you aren't a subscriber, you can
invite yourself." And change the word "confirm" in the confirmation
template to "subscribe".
> We don't include that in the default template because Mailman core
> doesn't know if you even have a web UI or how to access it if you
> do.
We should fix that, at least if the web interface is Postorius
(wishlist, assigned to me):
https://gitlab.com/mailman/mailman/-/issues/1055
@mark
https://gitlab.com/mailman/mailman/-/issues/901
Maybe we can close this? I'm not sure why it was left open since
there's no action proposed for Mailman improvement.
> > 2. use the email to send a connection to confirm the
> > subscription,People click the link to be redirected to a
> > confirmation page to subscribe to the email。
>
> See above.
Indeed, AFAICS almost everything the OP is suggesting amounts to an
identical procedure as far as the Mailman server is concerned, it's
just described to the subscriber differently. The one exception is
the suggestion to eliminate the confirmation step, and while that is
supported, it's quite likely to cause problems for third parties and
eventually for the Mailman site unless you have an alternative ground
source of truth such as an employee database.
Steve
3 years, 9 months
[MM3-users] Re: Postorius claims 2 messages held when there are none - out of sync
by Ken Alker
--On Monday, June 26, 2023 8:24 AM -0700 Mark Sapiro <mark(a)msapiro.net>
wrote:
> On 6/26/23 12:01 AM, Ken Alker wrote:
>> When I view a list via Postorius the "Held Messages" menu item has an
>> inverse-red-"2" next to it, as if there are two held messages. There
>> are, in fact, no messages in "/opt/mailman/mm/var/queue/*" (assuming the
>> held messages should be in "pipeline" subdirectory). When I click on
>> "Held Messages" I get "Something went wrong" followed by "HTTP Error
>> 500: {"title": "500 Internal Server Error"}". How do I fix this?
>
> The held messages are not in any queue. They are stored in Mailman's
> var/messages/ hierarchy. They can be examined with `mailman qfile`
Is the var/messages hierarchy also where all the archived emails are stored
for future viewing via the web interface?
> Also, there is a long thread at
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/threa
> d/UWCUQYU7Q5X5LWNII57ZZ4DDXE4DEFX7/ and maybe others that might be
> relevant.
I have never used the mailman shell before, but based on the referenced
thread I learned to do this (note that the thread also taught me how to
rewrite it to narrow down to just the list with issues so I didn't delete
held messages in other lists, if my case):
for verification:
venv) mailman@speedy:~/web/logs$ mailman shell -l
sbarc-list(a)lists.netlojix.com
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
The variable 'm' is the sbarc-list(a)lists.netlojix.com mailing list
>>> requests = IListRequests(m)
>>> first = True
>>> for request in requests.held_requests:
... key, data = requests.get_request(request.id)
... if first:
... first = False
... print(m.list_id)
... print (f"""\
... Sender: {data['_mod_sender']}
... Subject: {data['_mod_subject']}
... Date: {data['_mod_hold_date']}
... Reason: {data['_mod_reason']}
... """)
...
and then to delete the two messages:
(venv) mailman@speedy:~/web/logs$ mailman shell -l
sbarc-list(a)lists.netlojix.com
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
The variable 'm' is the sbarc-list(a)lists.netlojix.com mailing list
>>> requests = IListRequests(m)
>>> first = True
>>> for request in requests.held_requests:
... key, data = requests.get_request(request.id)
... if first:
... first = False
... print(m.list_id)
... print(f'request id: {request.id}, deleting')
... requests.delete_request(request.id)
...
sbarc-list.lists.netlojix.com
request id: 27, deleting
request id: 28, deleting
>>>
The result of this, however, was that the web interface still claimed I had
two held messages. I wasn't sure if there was some cron-type "sweeper"
process I had to wait to auto-run or if I had to manually do something to
create an update. I then realized that the sample script had a ' >>>
commit ()" ' at the end, which I'd missed. So, I re-entered the script
(but it didn't spit out that it deleted anything this time) and got an
error when I did the commit. So, I figured the messages HAD been delete
and the commit wasn't really necessary. When I went back to the web
interface, the number of held messages was at 0 and I no longer get the
original error when clicking on "Held messages", so my issue is solved.
But this does leave me with some educational questions:
1) Did I affect something somehow with my "commit", or was there a job that
cleaned things up (if so, what job)?
2) Is the "commit" even necessary (I saw it in someone else's script in the
thread)?
3) Is there a way to save a script and then execute it via shell rather
than typing it in every time (it appears from the examples that people are
typing them in every time, which is super tedious; I didn't paste for fear
of doing something damaging, but maybe that would work)?
4) Are the request.id's of the messages dynamic/changing, or are they fixed
for life? I thought I'd delete based on exact request.id without looping
but I was afraid maybe they were changing over time and that this wouldn't
be a good idea. Might be nice to know for the future.
Thanks for the guidance!
Ken
3 years, 4 months
[MM3-users] Re: Attachement processings questions
by Lars Schimmer
On 2020-02-03 20:24, Mark Sapiro wrote:
> On 2/3/20 4:27 AM, Lars Schimmer wrote:
>>
>> In a mailinglist it seems some mails are not forwarded to a member, but
>> is listed in archive in hyperkitty.
>> That mail did include a PDF attachement, but HyperKitty does not list
>> any attachement.
>
>
> There are two issues here. Why wasn't the message delivered to list
> members?, and why is there no attachment in Hyperkitty?
>
> For the first issue, you need to examine mailman.log for the time of the
> post looking for errors and tracebacks. Also, the MTA logs may have
> useful info if the messages were sent but not delivered.
Thank you so far, I maye found the issue:
Uncaught runner exception: 'ascii' codec can't encode character '\xe9'
in position 109: ordinal not in range(128)
Uncaught runner exception: 'ascii' codec can't encode character '\xa0'
in position 37: ordinal not in range(128)
Seems to be the problemm, as it happens the same moment as the
problematic email arrives in exim4:
2020-01-31 03:02:41 1ixLdp-0003Mo-5z => user(a)abc.de R=mailman3_router
T=mailman3_transport H=localhost [127.0.0.1] C="250 Ok"
2020-01-31 03:02:41 1ixLdp-0003Mo-5z Completed
and nothing more. No sign of mailman3 sending out any mail via this list.
Other emails getting to that list will be send out via user-bounces(a)abc.de.
Those mails are in the mailinglist archives, not on hold or anything.
Just the attachement missing.
So, please, howto fix the ascii encoding error in mailman3?
Full trace:
Jan 31 03:02:43 2020 (32591) Uncaught runner exception: 'ascii' codec
can't encode character '\xe9' in position 109: ordinal not in range(128)
Jan 31 03:02:43 2020 (32591) Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line
173, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line
266, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/runners/pipeline.py",
line 37, in _dispose
process(mlist, msg, msgdata, pipeline)
File "/usr/lib/python3/dist-packages/mailman/core/pipelines.py", line
50, in process
handler.process(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/handlers/to_digest.py",
line 48, in process
mbox.add(msg)
File "/usr/lib/python3.7/mailbox.py", line 603, in add
self._toc[self._next_key] = self._append_message(message)
File "/usr/lib/python3.7/mailbox.py", line 758, in _append_message
offsets = self._install_message(message)
File "/usr/lib/python3.7/mailbox.py", line 830, in _install_message
self._dump_message(message, self._file, self._mangle_from_)
File "/usr/lib/python3.7/mailbox.py", line 215, in _dump_message
gen.flatten(message)
File "/usr/lib/python3.7/email/generator.py", line 116, in flatten
self._write(msg)
File "/usr/lib/python3.7/email/generator.py", line 181, in _write
self._dispatch(msg)
File "/usr/lib/python3.7/email/generator.py", line 214, in _dispatch
meth(msg)
File "/usr/lib/python3.7/email/generator.py", line 432, in _handle_text
super(BytesGenerator,self)._handle_text(msg)
File "/usr/lib/python3.7/email/generator.py", line 249, in _handle_text
self._write_lines(payload)
File "/usr/lib/python3.7/email/generator.py", line 155, in _write_lines
self.write(line)
File "/usr/lib/python3.7/email/generator.py", line 406, in write
self._fp.write(s.encode('ascii', 'surrogateescape'))
UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in
position 109: ordinal not in range(128)
> For the second, there are many content filtering settings not (yet)
> exposed in Postorius. These include filter_extensions, filter_types,
> pass_extensions and pass_types which control which MIME parts are
> removed. For a newly created Mailman 3 list, these four settings are
> empty, but importing a Mailman 2.1 list will set them according to the
> corresponding MM 2.1 list's settings.
>
>
>> All I found was "convert HTML to plaintext", but does this setting
>> remove attachements?
>
>
> It would only affect HTML parts, not pdfs.
>
>
>> Is there any generel documentation about attachement processing in MM3?
>
>
> <https://mailman.readthedocs.io/en/latest/src/mailman/handlers/docs/filterin…>.
>
>
>
>> I would like this mailinglist to accept mails with attachements, send it
>> to the members and archvie the attachments in HyperKitty, to.
>
>
> You can set Settings -> Alter Messages -> Filter content to No in
> Postorius to not do any content filtering at all. This will override the
> Collapse alternatives and Convert html to plaintext settings and pass
> the message without removing any MIME parts.
>
> But, I think you must have other issues, either with this mail in
> particular or in general as evidenced by the mail not being received by
> list members.
Ok, first fix the ascii encode error for me. Any idea how?
thank you.
MfG,
Lars Schimmer
--
-------------------------------------------------------------
TU Graz, Institut für ComputerGraphik & WissensVisualisierung
Tel: +43 316 873-5405 E-Mail: l.schimmer(a)cgv.tugraz.at
Fax: +43 316 873-5402 PGP-Key-ID: 0x4A9B1723
6 years, 9 months
[MM3-users] Re: integrating mm3 with postfix / lmtp
by Thor Atle Rustad
I will try to get a grip on uid namespaces then...
2017-11-13 10:49 GMT+01:00 Abhilash Raj <maxking(a)asynchronous.in>:
> On Nov 13 2017, at 1:34 am, Thor Atle Rustad <thor.rustad(a)gmail.com>
> wrote:
>
>> There is a way around it!
>>
>> I have had two issues with the the maxking docker image. One is that the
>> regexp is not working properly. I reported that, and it has been fixed in
>> newer code. My other problem is that the docker image creates a user,
>> mailman, that receives uid 103. Well, uid 103 on my system is already taken
>> by systemd-bus-proxy (grep 103 /etc/passwd returns
>> "systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/
>> false").
>>
>
> Containers usually run with uid namespace, so it doesn't really matter
> what uid is used outside of container.
>
> Unless, you mount /etc/shadow from host in to the container, which isn't
> really needed for the images.
>
>
>> My solution includes downloading the corrected postfix.py, and replacing
>> the Dockerfile. I put the postfix.py in <docker-mailman>/core/assets/.
>>
>> My Dockerfile:
>> FROM maxking/mailman-core
>>
>> RUN grep mailman /etc/passwd && grep mailman /etc/group \
>> && deluser mailman \
>> && addgroup -S -g900 mailman \
>> && adduser -S -u900 mailman mailman \
>> && grep mailman /etc/passwd && grep mailman /etc/group
>> COPY assets/postfix.py /usr/local/lib/python3.6/site-
>> packages/mailman/mta/postfix.py
>>
>> I then run docker build (with -t parameter, you must look up that
>> yourself). I use a different name for my images, so I end up with (note,
>> there are two tags per image):
>> root@mailer:/home/mailman/docker/docker-mailman_mods/core# docker images
>> REPOSITORY TAG IMAGE ID CREATED
>> SIZE
>> local/mailman_core_900 20171110_2 9649e84767e1 2 days
>> ago 176MB
>> local/mailman_core_900 latest 9649e84767e1 2 days
>> ago 176MB
>> local/mailman_web_900 20171110_2 07a9b3d7ddd6 2 days
>> ago 247MB
>> local/mailman_web_900 latest 07a9b3d7ddd6 2 days
>> ago 247MB
>>
>> I do the same with the web image, as I need to change the user there, too.
>>
>> Then, in docker-compose.yaml, I change the line(s) referring to the image
>> name(s):
>>
>> services:
>> mailman-core:
>> image: local/mailman_core_900
>> container_name: mailman-core
>> hostname: mailman-core
>>
>>
>> mailman-web:
>> image: local/mailman_web_900
>> container_name: mailman-web
>> hostname: mailman-web
>>
>> I don't know if this is a good solution, but at least it fixes some
>> serious issues with the 3.1's postfix integration that wouldn't otherwise
>> be fixed until the 3.2 release. The bottom line is that it works for me,
>> but it adds an additional layer of complication.
>>
>> 2017-11-03 19:40 GMT+01:00 Abhilash Raj <maxking(a)asynchronous.in>:
>>
>> On Fri, Nov 3, 2017, at 08:29 AM, Fabian A. Santiago wrote:
>> > October 26, 2017 11:07 PM, "Mark Sapiro" <mark(a)msapiro.net> wrote:
>> >
>> > > On October 26, 2017 7:30:35 PM PDT, "Fabian A. Santiago" <
>> fsantiago(a)garbage-juice.com> wrote:
>> > >
>> > >> That was it. Perfect. I manually modified my regexp map and it works
>> > >> now. Excellent and Thank you. You're the man. Does mm3 ever refresh
>> > >> those maps or only as I add new domains / lists?
>> > >
>> > > Only when you make changes to domains or lists.
>> > >
>> > > --
>> > > Mark Sapiro <mark(a)msapiro.net>
>> > > Sent from my Not_an_iThing with standards compliant, open source
>> software.
>> >
>> > Mark,
>> >
>> > I've noticed that even simply restarting the mm3 components those alias
>> > maps get rewritten and the problem returns until I can manually edit it.
>>
>> Yeah, that is true. Transport maps are re-generated everytime the
>> container restarts.
>>
>> I don't think think there is any way around this right now :(
>>
>>
>> --
>> Abhilash Raj
>> maxking(a)asynchronous.in
>> _______________________________________________
>> Mailman-users mailing list
>> mailman-users(a)mailman3.org
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>
>>
>>
9 years
[MM3-users] Re: Errors while importing mm2 list archives
by Odhiambo Washington
On Thu, Dec 8, 2022 at 10:41 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/8/22 07:23, Odhiambo Washington wrote:
> > MM3-3.3.7, Hyperkitty-1.3.6
> >
> > While importing, I encountered several of this error:
> >
> > <CUT>
> > MySQLdb.OperationalError: (1366, "Incorrect string value:
> > '\\xF0\\x9F\\x98\\x8A, ...' for column 'content' at row 1")
> > The above exception was the direct cause of the following exception:
> ...
> > File
> >
> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/db/backends/mysql/base.py",
>
>
> That's a 4-byte utf-8 encoding for an emoji. MySQL and MariaDB have to be
> told to accept 4-byte encodings.
>
> In the DATABASES['default'] definition, you need to set `'OPTIONS':
> {'charset': 'utf8mb4'}`
>
I added that:
[database]
class: mailman.database.mysql.MySQLDatabase
url: mysql+pymysql://mailman_user:XXXXXXXXX@localhost
/mailmansuite?charset=utf8mb4&use_unicode=1
> Also, although it doesn't affect this, see
>
> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/datab…
I read this too. Did not pick much from there.
> You might also need to modify the tables, particularly hyperkitty_email
> with something like
> ```
> ALTER TABLE hyperkitty_email
> DEFAULT CHARACTER SET utf8mb4,
> MODIFY subject varchar(512)
> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
> MODIFY content
> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
>
So I removed my list, dropped the database, and proceeded as follows:
create database mailmansuite CHARACTER SET utf8mb4 COLLATE
utf8mb4_0900_ai_ci;
ALTER TABLE hyperkitty_email DEFAULT CHARACTER SET utf8mb4;
ALTER TABLE hyperkitty_email MODIFY subject varchar(512) CHARACTER SET
utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE hyperkitty_email MODIFY content longtext CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE hyperkitty_email MODIFY sender_name varchar(255) CHARACTER SET
utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE hyperkitty_email MODIFY in_reply_to varchar(255) CHARACTER SET
utf8mb4 COLLATE utf8mb4_unicode_ci;
I did all those (although looks overzealous) just to be on the safe side. I
have seen people putting emojis in their names.
After that, I did the mailman-web migrate, created the list, imported the
config from MM2 and then proceeded to import the archives.
However, the errors still are there, and several messages were not imported
- I have several "failed to import" warnings.
<CUT>
django.db.utils.OperationalError: (1366, "Incorrect string value:
'\\xF0\\x9F\\x98\\x8A, ...' for column 'content' at row 1")
Message 253d9d44-cc3e-fed1-144b-34da88c52b39(a)emailplus.org failed to
import, skipping *<================== several of these "failed to import"
messages*
Computing thread structure
Synchronizing properties with Mailman
905 emails left to refresh, checked 0
765 emails left to refresh, checked 0
Warming up cache
Traceback (most recent call last):
File "/opt/mailman/mm/venv/bin/django-admin", line 8, in <module>
sys.exit(execute_from_command_line())
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/management/__init__.py",
line 446, in execute_from_command_line
utility.execute()
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/management/__init__.py",
line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/management/base.py",
line 402, in run_from_argv
self.execute(*args, **cmd_options)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/management/base.py",
line 448, in execute
output = self.handle(*args, **options)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/hyperkitty/management/commands/hyperkitty_import.py",
line 411, in handle
call_command("hyperkitty_warm_up_cache", list_address)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/management/__init__.py",
line 198, in call_command
return command.execute(*args, **defaults)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/management/base.py",
line 448, in execute
output = self.handle(*args, **options)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/hyperkitty/management/commands/hyperkitty_warm_up_cache.py",
line 53, in handle
self.warm_up_mlist(mlist, options)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/hyperkitty/management/commands/hyperkitty_warm_up_cache.py",
line 61, in warm_up_mlist
for thread in mlist.recent_threads:
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/hyperkitty/models/mailinglist.py",
line 162, in recent_threads
return self.cached_values["recent_threads"]()
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/hyperkitty/models/common.py",
line 58, in __call__
return self.get_or_set(*args, **kwargs)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/hyperkitty/models/mailinglist.py",
line 317, in get_or_set
return [Thread.objects.get(pk=pk) for pk in thread_ids]
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/hyperkitty/models/mailinglist.py",
line 317, in <listcomp>
return [Thread.objects.get(pk=pk) for pk in thread_ids]
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/db/models/manager.py",
line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File
"/opt/mailman/mm/venv/lib/python3.9/site-packages/django/db/models/query.py",
line 650, in get
raise self.model.DoesNotExist(
hyperkitty.models.thread.Thread.DoesNotExist: Thread matching query does
not exist.
(venv) [mailman@gw ~/mm]$
It therefore means I have several broken threads in the archives.
I am still willing to try other solutions if they are suggested.
And what do I make of the final error -
*hyperkitty.models.thread.Thread.DoesNotExist:
Thread matching query does not exist*. ??
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
3 years, 11 months
[MM3-users] Re: Docker Support Sucks
by Brian Carpenter
On 7/21/20 8:55 PM, Mark Sapiro wrote:
> On 7/21/20 5:40 PM, Brian Carpenter wrote:
>
> Abhilash (@maxking) is one person and he has a $DayJob. We're all doing
> the best we can.
Well, I still need support.
> This is not a Docker issue per se. It is a consequence of upgrading
> Mailman core to 3.3.1+ and processing many old, stale, previously
> unprocessed bounces. See
> <https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…>
I am not worried about the bounce issues at this point. I am just trying
to get a membership list exported for a client.
>
>> So, I want to totally move away from the use of Docker (mainly because I have found it buggy and the support is simply lacking) and install Mailman 3 for this client from source. However I need to get an export of their list members. But of course, I can't. Rest API times out and I don't know how to apply the instructions I was given to fix it and I don't have days to way for one. So please help.
>>
>> I increased the gunicorn workers to 4, hoping that would allow me to do the CSV export. No. So was given these instructions:
>>
>> ###
>> The issues seems to be due to timeout not due to high load. You want to increase the timeout for gunicorn and you can do that by specifying a gunicorn.ini config file:
>>
>> [webservice]
>> configuration: /path/to/gunicorn.cfg
>>
>> and then in the gunicorn.cfg you can add
>>
>> [gunicorn]
>> timeout = 90
>> graceful_timeout = 30
>> ###
>>
>> I applied the above changes to /opt/mailman/core/mailman-extra.cfg and created the gunicorn.cfg file. Restarted the docker container (mailman-core) and no access to Postorius due to no REST api.
>>
>> After restarting docker-mailman, I can't access Postorius due to the following error:
>>
>> ERROR 2020-07-20 20:16:27,351 15 postorius Mailman REST API not available
> Is Mailman core running? If not, whats in core's mailman.log as to why not?
It looks like but no error message in mailman.log. However I noted that
the gunicorn process did not start.
This is with the configuration line enabled in mailman-extra.cfg:
# docker-compose restart mailman-core
Restarting mailman-core ... done
[root@nicu-net docker-mailman]# tail -f
/opt/mailman/core/var/logs/mailman.log
Jul 22 01:25:17 2020 (22) in runner caught SIGTERM. Stopping.
Jul 22 01:25:17 2020 (25) out runner caught SIGTERM. Stopping.
Jul 22 01:25:17 2020 (25) out runner exiting.
Jul 22 01:25:17 2020 (21) command runner exiting.
Jul 22 01:25:17 2020 (22) in runner exiting.
Jul 22 01:25:17 2020 (24) nntp runner caught SIGTERM. Stopping.
Jul 22 01:25:17 2020 (24) nntp runner exiting.
[2020-07-22 01:25:19 +0000] [27] [INFO] Shutting down: Master
Jul 22 01:25:21 2020 (1) Master stopped
Jul 22 01:25:26 2020 (1) Master started
Jul 22 01:25:44 2020 (27) rest runner started.
Jul 22 01:25:44 2020 (26) pipeline runner started.
Jul 22 01:25:44 2020 (20) bounces runner started.
Jul 22 01:25:45 2020 (22) in runner started.
Jul 22 01:25:45 2020 (28) retry runner started.
Jul 22 01:25:46 2020 (29) virgin runner started.
Jul 22 01:25:46 2020 (25) out runner started.
Jul 22 01:25:46 2020 (23) lmtp runner started.
Jul 22 01:25:46 2020 (24) nntp runner started.
Jul 22 01:25:47 2020 (30) digest runner started.
Jul 22 01:25:47 2020 (19) archive runner started.
Jul 22 01:25:47 2020 (21) command runner started.
This is with the configuration line disabled in mailman-extra.cfg:
# docker-compose restart mailman-core
Restarting mailman-core ... done
[root@nicu-net docker-mailman]# tail -f
/opt/mailman/core/var/logs/mailman.log
Jul 22 01:27:49 2020 (1) Master stopped
Jul 22 01:27:53 2020 (1) Master started
Jul 22 01:28:10 2020 (30) digest runner started.
Jul 22 01:28:10 2020 (29) virgin runner started.
Jul 22 01:28:10 2020 (24) nntp runner started.
Jul 22 01:28:10 2020 (25) out runner started.
Jul 22 01:28:10 2020 (22) in runner started.
Jul 22 01:28:11 2020 (28) retry runner started.
Jul 22 01:28:11 2020 (27) rest runner started.
[2020-07-22 01:28:11 +0000] [27] [INFO] Starting gunicorn 19.9.0
[2020-07-22 01:28:11 +0000] [27] [INFO] Listening at:
http://172.19.199.2:8001 (27)
[2020-07-22 01:28:11 +0000] [27] [INFO] Using worker: sync
[2020-07-22 01:28:11 +0000] [32] [INFO] Booting worker with pid: 32
[2020-07-22 01:28:11 +0000] [33] [INFO] Booting worker with pid: 33
[2020-07-22 01:28:11 +0000] [34] [INFO] Booting worker with pid: 34
[2020-07-22 01:28:11 +0000] [35] [INFO] Booting worker with pid: 35
Jul 22 01:28:11 2020 (19) archive runner started.
Jul 22 01:28:11 2020 (21) command runner started.
Jul 22 01:28:12 2020 (23) lmtp runner started.
Jul 22 01:28:12 2020 (20) bounces runner started.
Jul 22 01:28:12 2020 (26) pipeline runner started.
--
Please let me know if you need further assistance.
Thank you for your business. We appreciate our clients.
Brian Carpenter
EMWD.com
--
EMWD's Knowledgebase:
https://clientarea.emwd.com/index.php/knowledgebase
EMWD's Community Forums
http://discourse.emwd.com/
6 years, 3 months
[MM3-users] Re: django-allauth failures, but only for some users (independent of browser?)
by Jered Floyd
FYI, The django-allauth author has proposed fixing both of these with an even simpler change, which is now upstream and queued for a future release.
--Jered
--- a/allauth/socialaccount/adapter.py
+++ b/allauth/socialaccount/adapter.py
@@ -228,7 +228,10 @@ class DefaultSocialAccountAdapter(object):
provider_to_apps = {}
# First, populate it with the DB backed apps.
- db_apps = SocialApp.objects.on_site(request)
+ if request:
+ db_apps = SocialApp.objects.on_site(request)
+ else:
+ db_apps = SocialApp.objects.all()
if provider:
db_apps = db_apps.filter(Q(provider=provider) | Q(provider_id=provider))
if client_id:
----- On Dec 7, 2023, at 3:14 PM, Jered Floyd jered(a)convivian.com wrote:
> This was a related issue. See
> https://github.com/pennersr/django-allauth/pull/3554
>
> --Jered
>
>
> --- a/allauth/socialaccount/models.py
> +++ b/allauth/socialaccount/models.py
> @@ -144,7 +144,7 @@ class SocialAccount(models.Model):
> return provider
>
> def get_provider_account(self):
> - return self.get_provider().wrap_account(self)
> + return self.get_provider(context.request).wrap_account(self)
>
>
> class SocialToken(models.Model):
>
>
>
> ----- On Dec 6, 2023, at 7:57 PM, Mark Sapiro mark(a)msapiro.net wrote:
>
>> On 12/6/23 14:49, Jered Floyd wrote:
>>>
>>> The difference in behavior was using social login buttons for an existing
>>> account vs. creating a new account.
>>>
>>> This is another damn django-allauth regression, starting in 0.57.0. It seem to
>>> be this commit that is to blame:
>>> https://github.com/pennersr/django-allauth/commit/be779dfee5a328a3a42edc2c9…
>>>
>>> In allauth/socialaccount/models.py:lookup(self):285 there is an attempt to look
>>> up the social account as one that already exists. If that fails, this commit
>>> calls self.account.get_provider() without passing the request object, which
>>> leads to the eventual error.
>>>
>>> I believe this is a django-allauth bug, and have submitted a pull request to fix
>>> it here:
>>> https://github.com/pennersr/django-allauth/pull/3548
>>
>> Thanks for all your work on this. It is much appreciated. However, your
>> patch doesn't fix my issue with the URL
>> https://example.com/accounts/social/connections/ which still produces
>> the following:
>> ```
>> ERROR 2023-12-07 00:05:55,032 169452 django.request Internal Server
>> Error: /accounts/social/connections/
>> Traceback (most recent call last):
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/handlers/exception.py",
>> line 55, in inner
>> response = get_response(request)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/core/handlers/base.py",
>> line 220, in _get_response
>> response = response.render()
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/response.py",
>> line 114, in render
>> self.content = self.rendered_content
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/response.py",
>> line 92, in rendered_content
>> return template.render(context, self._request)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/backends/django.py",
>> line 61, in render
>> return self.template.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 175, in render
>> return self._render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 167, in _render
>> return self.nodelist.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in render
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in <listcomp>
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/loader_tags.py",
>> line 157, in render
>> return compiled_parent._render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 167, in _render
>> return self.nodelist.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in render
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in <listcomp>
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/loader_tags.py",
>> line 157, in render
>> return compiled_parent._render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 167, in _render
>> return self.nodelist.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in render
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in <listcomp>
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/loader_tags.py",
>> line 157, in render
>> return compiled_parent._render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 167, in _render
>> return self.nodelist.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in render
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in <listcomp>
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/loader_tags.py",
>> line 63, in render
>> result = block.nodelist.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in render
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in <listcomp>
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/loader_tags.py",
>> line 63, in render
>> result = block.nodelist.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in render
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in <listcomp>
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/defaulttags.py",
>> line 321, in render
>> return nodelist.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in render
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 1005, in <listcomp>
>> return SafeString("".join([node.render_annotated(context) for node
>> in self]))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/defaulttags.py",
>> line 238, in render
>> nodelist.append(node.render_annotated(context))
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 966, in render_annotated
>> return self.render(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/defaulttags.py",
>> line 539, in render
>> values = {key: val.resolve(context) for key, val in
>> self.extra_context.items()}
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/defaulttags.py",
>> line 539, in <dictcomp>
>> values = {key: val.resolve(context) for key, val in
>> self.extra_context.items()}
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 715, in resolve
>> obj = self.var.resolve(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 847, in resolve
>> value = self._resolve_lookup(context)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/template/base.py",
>> line 914, in _resolve_lookup
>> current = current()
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/allauth/socialaccount/models.py",
>> line 147, in get_provider_account
>> return self.get_provider().wrap_account(self)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/allauth/socialaccount/models.py",
>> line 141, in get_provider
>> provider = self._provider = adapter.get_provider(
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/allauth/socialaccount/adapter.py",
>> line 204, in get_provider
>> app = self.get_app(request, provider=provider)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/allauth/socialaccount/adapter.py",
>> line 284, in get_app
>> apps = self.list_apps(request, provider=provider, client_id=client_id)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/allauth/socialaccount/adapter.py",
>> line 231, in list_apps
>> db_apps = SocialApp.objects.on_site(request)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/allauth/socialaccount/models.py",
>> line 27, in on_site
>> site = get_current_site(request)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/contrib/sites/shortcuts.py",
>> line 16, in get_current_site
>> return Site.objects.get_current(request)
>> File
>> "/opt/mailman/mm/venv/lib/python3.9/site-packages/django/contrib/sites/models.py",
>> line 63, in get_current
>> raise ImproperlyConfigured(
>> django.core.exceptions.ImproperlyConfigured: You're using the Django
>> "sites framework" without having set the SITE_ID setting. Create a site
>> in your database and set the SITE_ID setting or pass a request to
>> Site.objects.get_current() to fix this error.
>> ```
>>
>> --
>> 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/
>> Archived at:
>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>>
>> This message sent to jered(a)convivian.com
> _______________________________________________
> 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/
> Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to jered(a)convivian.com
2 years, 11 months
[MM3-users] Re: Huge performance issue: Mailman doesn't (seem to) receive any mails.
by Henrik Rasmussen
Mark Sapiro wrote:
> This seems to say that the Postfix container can connect to
> 172.19.199.2:8024 and receive the greeting from Mailman's lmtp runner.
> So, why can't Postfix send to 172.19.199.2:8024?
That is why I figured that the problem could be Mailman bloking for more mails, somhow.
> The only log entry you
> postes just says "Sep 18 10:07:47 postfix postfix/qmgr[98]: warning:
> mail for [172.19.199.2]:8024 is using up 7844 of 7844 active queue entries".
> What other log entries relate to attempts to send to 172.19.199.2:8024?
> You may have to go back to when this first started to see them.
Docker deleted it's log when restaring, as the container is deleted and removed, but the starte of the current log says:
```
Sep 18 13:28:57 postfix rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="20" x-info="http://www.rsyslog.com"] start
Sep 18 13:29:00 postfix postfix/postfix-script[94]: starting the Postfix mail system
Sep 18 13:29:00 postfix postfix/master[96]: daemon started -- version 2.10.1, configuration /etc/postfix
Sep 18 13:29:02 postfix postfix/smtpd[102]: connect from incoming.gateway.example.com[192.168.111.222]
Sep 18 13:29:04 postfix postfix/smtpd[102]: EFF017E9D65AE: client=incoming.gateway.example.com[192.168.111.222]
Sep 18 13:29:04 postfix postfix/cleanup[106]: EFF017E9D65AE: message-id=<2E40950170CA0A4A8D0F0C0CF1C0630601B8B9F412(a)P1KITMBX03WC02.unicph.domain>
Sep 18 13:29:04 postfix opendkim[19]: EFF017E9D65AE: incoming.gateway.example.com [192.168.111.222] not internal
Sep 18 13:29:04 postfix opendkim[19]: EFF017E9D65AE: not authenticated
Sep 18 13:29:04 postfix postfix/smtpd[102]: disconnect from incoming.gateway.example.com[192.168.111.222]
Sep 18 13:29:18 postfix postfix/qmgr[98]: 0E53F7E9D7D8D: from=<>, size=212010, nrcpt=1 (queue active)
Sep 18 13:29:18 postfix postfix/qmgr[98]: C51DE7E9920B8: from=<>, size=212004, nrcpt=1 (queue active)
Sep 18 13:29:18 postfix postfix/qmgr[98]: 2923A7E99B41F: from=<>, size=212040, nrcpt=1 (queue active)
Sep 18 13:29:18 postfix postfix/qmgr[98]: D0A1E7E981E26: from=<quarantine(a)messaging.microsoft.com>, size=14542, nrcpt=1 (queue active)
Sep 18 13:29:18 postfix postfix/qmgr[98]: 95FA77E9815A5: from=<>, size=211977, nrcpt=1 (queue active)
Sep 18 13:29:18 postfix postfix/qmgr[98]: 208777E993635: from=<sender(a)example.com>, size=9826184, nrcpt=1 (queue active)
Sep 18 13:29:18 postfix postfix/qmgr[98]: 757C27E9BD45C: from=<>, size=211997, nrcpt=1 (queue active)
Sep 18 13:29:18 postfix postfix/qmgr[98]: 738C87E9B94BE: from=<>, size=212141, nrcpt=1 (queue active)
[SLIP]
Sep 18 13:32:24 postfix postfix/anvil[103]: statistics: max cache size 1 at Sep 18 13:29:02
Sep 18 13:43:48 postfix postfix/smtpd[992]: connect from gateway[172.19.199.1]
Sep 18 13:43:48 postfix postfix/smtpd[992]: 9E0D37E9D65AF: client=gateway[172.19.199.1]
Sep 18 13:43:48 postfix postfix/cleanup[996]: 9E0D37E9D65AF: message-id=<3e08121bcdf5b0ebeb779a26ab2fe6ef(a)mailing.einnews.com>
Sep 18 13:43:48 postfix opendkim[19]: 9E0D37E9D65AF: DKIM-Signature field added (s=default, d=sendergateway.example.com)
Sep 18 13:43:48 postfix postfix/smtpd[992]: disconnect from gateway[172.19.199.1]
Sep 18 13:43:48 postfix postfix/qmgr[98]: 9E0D37E9D65AF: from=<sender(a)example.com>, size=59393, nrcpt=1 (queue active)
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: mail for [172.19.199.2]:8024 is using up 7863 of 7863 active queue entries
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: you may need to reduce lmtp connect and helo timeouts
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: so that Postfix quickly skips unavailable hosts
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: you may need to increase the main.cf minimal_backoff_time and maximal_backoff_time
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: so that Postfix wastes less time on undeliverable mail
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: you may need to increase the master.cf lmtp process limit
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: please avoid flushing the whole queue when you have
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: lots of deferred mail, that is bad for performance
Sep 18 13:43:48 postfix postfix/qmgr[98]: warning: to turn off these warnings specify: qmgr_clog_warn_time = 0
```
We see the queueing in Postfix as Mailman is not receiving and that this is why Postfix is using up all it's active queue entries.
However, suddenly this morning, everything came alive all by itself. The question left is: What held the flow. If we don't know what held it, it may happen again, so I would really like some help to understand the problem.
```
Sep 20 07:05:23 postfix opendkim[19]: 23AED7E98F748: incoming.gateway.example.com [192.168.111.222] not internal
Sep 20 07:05:23 postfix opendkim[19]: 23AED7E98F748: not authenticated
Sep 20 07:05:23 postfix postfix/smtpd[20713]: disconnect from incoming.gateway.example.com[192.168.111.222]
Sep 20 07:05:23 postfix postfix/qmgr[16738]: 23AED7E98F748: from=<someone(a)foo.bar>, size=4379, nrcpt=1 (queue active)
Sep 20 07:05:23 postfix postfix/qmgr[16738]: warning: mail for [172.19.199.2]:8024 is using up 5363 of 5364 active queue entries
Sep 20 07:05:23 postfix postfix/qmgr[16738]: warning: you may need to increase the main.cf lmtp_destination_concurrency_limit from 20
Sep 20 07:05:23 postfix postfix/qmgr[16738]: warning: please avoid flushing the whole queue when you have
Sep 20 07:05:23 postfix postfix/qmgr[16738]: warning: lots of deferred mail, that is bad for performance
Sep 20 07:05:23 postfix postfix/qmgr[16738]: warning: to turn off these warnings specify: qmgr_clog_warn_time = 0
Sep 20 07:05:23 postfix postfix/lmtp[20393]: B64F97E9D0BF4: to=<LISTNAME-bounces(a)lists.example.com>, relay=172.19.199.2[172.19.199.2]:8024, conn_use=4, delay=663077, delays=659443/3624/1/8.1, dsn=2.0.0, status=sent (250 Ok)
Sep 20 07:05:23 postfix postfix/qmgr[16738]: B64F97E9D0BF4: removed
```
/ Henrik Rasmussen
7 years, 1 month
[MM3-users] Re: Reject with notification not working
by MegaBrutal
Mark, thank you too for the answer! Most of the questions are answered on
my mail to Stephen, but find the rest below.
Mark Sapiro <mark(a)msapiro.net> ezt írta (időpont: 2026. márc. 26., Cs,
9:08):
> I suspect you have a list:user:notice:rejected.txt template other than
> the default defined in the file system somewhere, probably in the
> /opt/mailman/mm/var/templates/ hierarchy. I say this because the default
> template at
> /opt/mailman/venv/lib/python3.11/site-packages/mailman/templates/en/list:user:notice:rejected.txt
>
> doesn't contain a hex ED (lower case i with acute accent) character.
>
Only found this, nothing on the other path:
# cat
/opt/mailman/venv/lib/python3.11/site-packages/mailman/templates/en/list:user:notice:rejected.txt
Your message to the $listname mailing-list was rejected for the following
reasons:
$reasons
The original message as received by Mailman is attached.
The issue is the list's preferred language is English and the preferred
> character set for English is ascii and the resultant message built from
> the template contains that non-ascii character.
>
OK, well, would be convenient to use my native language, but many templates
have no translation. This is an empty file:
# ls -l
/opt/mailman/venv/lib/python3.11/site-packages/mailman/templates/hu/list:user:notice:rejected.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
/opt/mailman/venv/lib/python3.11/site-packages/mailman/templates/hu/list:user:notice:rejected.txt
As a matter of fact, most of my templates are empty!
# ls -l /opt/mailman/venv/lib/python3.11/site-packages/mailman/templates/hu
total 16
-rw-r--r-- 1 mailman mailman 0 May 3 2025
domain:admin:notice:new-list.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 help.txt
-rw-r--r-- 1 mailman mailman 337 May 3 2025 list:admin:action:post.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:admin:action:subscribe.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:admin:action:unsubscribe.txt
-rw-r--r-- 1 mailman mailman 212 May 3 2025 list:admin:notice:disable.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:admin:notice:increment.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:admin:notice:pending.txt
-rw-r--r-- 1 mailman mailman 96 May 3 2025 list:admin:notice:removal.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:admin:notice:subscribe.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:admin:notice:unrecognized.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:admin:notice:unsubscribe.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:member:digest:header.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:member:digest:masthead.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:member:generic:footer.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:member:regular:header.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:action:invite.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:action:subscribe.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:user:action:unsubscribe.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:notice:goodbye.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:notice:hold.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025
list:user:notice:no-more-today.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:notice:post.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:notice:probe.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:notice:refuse.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:notice:rejected.txt
-rw-r--r-- 1 mailman mailman 0 May 3 2025 list:user:notice:warning.txt
-rw-r--r-- 1 mailman mailman 735 May 3 2025 list:user:notice:welcome.txt
I don't see why it's packaged like this – I know that translations don't
come easy. I picked up the maintenance of the SMF forum engine's
translations, and it's brutal how many hours it took to get it to a decent
state. However, Mailman could use English as a fallback for missing
translations; getting the notifications in English is still better than
getting empty messages which is confusing.
mailman qfile
>
> /opt/mailman/mm/var/queue/shunt/1774486082.6627975+afc236d96580c03921fa8a6f172f4a81eb2d20f6.pck
Thank you! This is really useful, because at least I can be sure that the
moderation action itself worked and it is indeed attempting to send the
notification.
'member_moderation_action': 'reject',
> 'moderation_reasons': ['The message is not from a list member'],
> > I have so many questions...
> >
> > 1. What is it about the ASCII encoding? "ordinal not in range(128)"?
> > What do we even do with ASCII in 2026? I tried to send a message
> that only
> > contains ASCII characters, but the result was the same, so it's
> probably
> > not in the e-mail contents.
>
> It's in the template. There are reasons, mostly historical but also
> practical why the default character set for English is ascii. Also see
> <https://gitlab.com/mailman/mailman/-/work_items/1268>.
WOW, looks like the same problem, and it's also fairly recent. It must have
been something overlooked for years and now suddenly two people noticed
around the same time.
7 months, 2 weeks
[MM3-users] Re: [Mailman-Users] Mailman 3 on Ubuntu 18.04
by Odhiambo Washington
On Sun, 9 Dec 2018 at 22:37, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/9/18 10:14 AM, Odhiambo Washington wrote:
> >
> > In my quest to run Mailman3, I obtained a VM running Ubuntu 18.04 and
> > started on getting to run Mailman3.
> > I found this link -> https://github.com/iomarmochtar/mailman3_ei
> > It has instructions which looked fairly simple to get Mailman3 installed.
> > However, I did encounter some hitches since the script is not meant for
> > Ubuntu.
>
>
> First, a more appropriate list for Mailman 3 is
> mailman-users(a)mailman3.org
> <https://lists.mailman3.org/mailman3/lists/mailman-users@mailman3.org/>.
>
I am shifting to that list, after this.
>
> Also, we find it very difficult to address issues arising from third
> party packages and how-tos. See <https://wiki.list.org/x/12812344>.
>
> And, there is a Mailman 3 package for Debian/Ubuntu
>
> apt install mailman3-full
>
In all my searching, I never found this in any documentation. I must have
been searching in the wild, or my FreeBSD-mindedness got me stuck to
containers and VENVs.
> > With a few runs and observing the logs and modifying the script at every
> > step it encountered and error, I finally managed to install Mailman3. It
> > seems this is what you guys call a virtual environment in the Linux
> world?
> > :-)
>
>
> I think the virtual environment in this case is a Python thing, not a
> Linux thing.
>
I agree with you on that.
> <snip>
>
>
> Much of what I snipped is specific to
> <https://github.com/iomarmochtar/mailman3_ei>, the details of which I'm
> not interested in learning.
>
That is fine. I have put it aside for now.
>
>
> >>From this point now is where I need help - serious help in smoothening
> > things up and getting to understand these venv stuff!
> >
> > So I did run 'service mailman3 start' but this seems to be waiting for
> too
> > long to drop me back into the CLI.
> > I also run 'systemctl start supervisord' and that seems to work. What I
> am
> > not sure is whether 'systemctl stop supervisord' actually does what it is
> > expected to do because after I execute it, I still see processes running
> > that I think are related.
> >
> > So far, I have been able to access the webUI on my VM using
> > https://N.N.N.N:9090
> > I created a domain.
> > But when I create a test list, I get an error - and I do not have a clue
> > which logfile would have the error details - nginx or mailman... (I am
> 100%
> > new to nginx).
>
>
> The nginx logs generally aren't too useful. Both Mailman core and Django
> write logs. Core's log is probably in var/log/mailman.log where is
> defined in mailman.cfg as var_dir. Django's log is defined in Django's
> settings in the LOGGING setting.
>
Which file contains Django's settings?
> > So now, I am stuck at:
> > 1. Creating the mailing list
> > 2. Getting to know whether the archiver is installed and running
> > 3. Knowing is there are cron jobs to be running (Mailman2 type of
> thinking!)
>
>
> See
> <http://docs.mailman3.org/en/latest/config-core.html#configuring-cron-jobs
> >
> and
> <
> http://docs.mailman3.org/en/latest/config-web.html#scheduled-tasks-required
> >
>
Great to see that. I'll read and see if I make heads or tails of the
writeup.
> > Ultimately I need to figure out:
> > 1. How the mailman queue runners are started and stopped
>
> mailman start
>
Why not systemctl mailman start?? Just wondering, as that is what I am
seeing is common in Ubuntu.
Does this make the components start after a reboot?
> > 2. Migrate s few lists from Mailman2 to this Mailman3
>
> mailman import21
> <django management> hyperkitty_import
>
Please show me where that is documented. I have to pull my lists from an
old machine to this new one.
> > 3. Mailman3 should use MySQL storage and Exim4 as the MTA (I have
> > configured these bits in mailman.cfg)
>
>
> You also need to configure MySQL in Django. See the DATABASES setting in
> the Django settings.
>
So, when you talk about Django settings, you are referring to mailman.cfg
file??? :-)
I have spent all my weekend till now, trying to figure all this out. Life
seems a little easier with mm2.x ....
Thank you.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft."
7 years, 11 months
[MM3-users] Re: Message is received but is not sent out. Another, similar message, is processed fine.
by Allan Hansen
Thank you, Mark.
I see this in mailman.log. I had looked there for her email address, but it does not appear, so I moved on to the smtp.log.
In
Jun 26 17:18:11 2023 (1243315) ACCEPT: ^M
<CH3PR12MB82593801A1DF2E329E977046BE27A(a)CH3PR12MB8259.namprd12.prod.outlook.com>
Jun 26 17:18:11 2023 (1243319) Uncaught runner exception: unknown encoding: iso-8859-8-i
Jun 26 17:18:11 2023 (1243319) Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailman/core/runner.py", line 179, in _one_iteration
self._process_one_file(msg, msgdata)
File "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailman/core/runner.py", line 272, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailman/runners/pipeline.py", line 37, in _dispose
process(mlist, msg, msgdata, pipeline)
File "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailman/core/pipelines.py", line 53, in process
handler.process(mlist, msg, msgdata)
File "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailman/handlers/mime_delete.py", line 382, in process
process(mlist, msg, msgdata)
File "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailman/handlers/mime_delete.py", line 151, in process
reset_payload(msg, firstalt)
File "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailman/handlers/mime_delete.py", line 202, in reset_payload
msg.set_payload(subpart.get_payload(decode=True).decode(
LookupError: unknown encoding: iso-8859-8-i
Jun 26 17:18:11 2023 (1243319) SHUNTING: 1687825091.8457294+478565324778f2eb6f0fecaeccbd29596edaef53
I also see this in queue/shunt:
mailman@list:~/var/queue/shunt$ ls -ltr
total 88
-rw-rw---- 1 mailman mailman 7168 Feb 17 23:03 1676703781.903885+fdcba88c680f50a0799c672cd0abe82e4bfe19b3.pck
-rw-rw---- 1 mailman mailman 19821 Apr 2 07:08 1680444501.0831451+e110b8c5c20ba3f87c1cea1c5f38e74a6cf8f1c5.pck
-rw-rw---- 1 mailman mailman 19489 Jun 18 11:52 1687114364.41209+1684717da96ff76d1ce773a0cf39c5f8b63e9078.pck
-rw-rw---- 1 mailman mailman 20274 Jun 18 19:01 1687140067.64057+7f77c1ebca490831f58ef9cfde06109081a4e7d6.pck
-rw-rw---- 1 mailman mailman 20085 Jun 26 17:18 1687825091.8457294+478565324778f2eb6f0fecaeccbd29596edaef53.pck
The three last entries coincide with the captured messages.
Finally, in the captured message source (the last which was Cc'd to me) I do see this:
Content-Type: text/plain; charset="iso-8859-8-i"
Which matches the complaint in the mailman log.
In the message that did get accepted, I see this:
Content-Type: text/plain; charset="utf-8"
Another difference:
The posted message shows
Content-Transfer-Encoding: base64
The shunted message shows
Content-Transfer-Encoding: quoted-printable
It appears that the two messages are, indeed, different, despite the similar looks when rendered.
My question thus changes to:
a. Should she be doing something special when sending to the lists?
b. If not, is my setup in need of change?
Yours,
Allan
On 6/26/23, 20:44, "Mark Sapiro" <mark(a)msapiro.net <mailto:mark@msapiro.net>> wrote:
On 6/26/23 8:09 PM, Allan Hansen wrote:
> Hi all,
>
> One of my subscribers is trying to send a message to a list, but it is not being posted.
> The smtp.log shows that her first message was posted, but a second message (with 2 retries) was not:
>
> mailman@list:~/logs$ grep herName smtp.log
> Jun 18 11:22:05 2023 (1243316) ('127.0.0.1', 56686) >> b'MAIL FROM:<herName(a)hotmail.com <mailto:herName@hotmail.com>> SIZE=40109'
> Jun 18 11:22:05 2023 (1243316) ('127.0.0.1', 56686) sender: herName(a)hotmail.com <mailto:herName@hotmail.com>
> Jun 18 11:25:01 2023 (1243318) <CH3PR12MB82593510B90D8F05177C606BBE5EA(a)CH3PR12MB8259.namprd12.prod.outlook.com <mailto:CH3PR12MB82593510B90D8F05177C606BBE5EA@CH3PR12MB8259.namprd12.prod.outlook.com>> post to theList(a)domain.tlc <mailto:theList@domain.tlc> from herName(a)hotmail.com <mailto:herName@hotmail.com>, 40061 bytes
> Jun 18 11:52:42 2023 (1243316) ('127.0.0.1', 48448) >> b'MAIL FROM:<herName(a)hotmail.com <mailto:herName@hotmail.com>> SIZE=18343'
> Jun 18 11:52:42 2023 (1243316) ('127.0.0.1', 48448) sender: herName(a)hotmail.com <mailto:herName@hotmail.com>
> Jun 18 19:01:04 2023 (1243316) ('127.0.0.1', 59550) >> b'MAIL FROM:<herName(a)hotmail.com <mailto:herName@hotmail.com>> SIZE=19123'
> Jun 18 19:01:04 2023 (1243316) ('127.0.0.1', 59550) sender: herName(a)hotmail.com <mailto:herName@hotmail.com>
> Jun 26 17:18:11 2023 (1243316) ('127.0.0.1', 44732) >> b'MAIL FROM:<herName(a)hotmail.com <mailto:herName@hotmail.com>> SIZE=18930'
> Jun 26 17:18:11 2023 (1243316) ('127.0.0.1', 44732) sender: herName(a)hotmail.com <mailto:herName@hotmail.com>
>
> At the second retry she copied me and I saw nothing untowards in her message.
> She's not getting any error return messages and her subscription is OK.
> Both messages were multipart/alternative and both contained Hebrew text.
>
> I told her I'd look at this, but I'm at a loss.
smtp.log is not very useful for diagnosing things like this. It only
says a message was received, not why it didn't result in a post from the
list as in the first case. What's in mailman.log with those timestamps?
--
Mark Sapiro <mark(a)msapiro.net <mailto:mark@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 <mailto:mailman-users@mailman3.org>
To unsubscribe send an email to mailman-users-leave(a)mailman3.org <mailto:mailman-users-leave@mailman3.org>
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/ <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/>
Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org <mailto:mailman-users@mailman3.org>/message/F4K7HYUYSWEKF6LT35UCT3KBJX6GHY4I/
This message sent to hansen(a)rc.org <mailto:hansen@rc.org>
3 years, 4 months
[MM3-users] Re: old usernames appearing in mailman.log
by Ken Alker
--On Monday, June 26, 2023 5:03 PM -0700 Mark Sapiro <mark(a)msapiro.net>
wrote:
> On 6/25/23 10:57 PM, Ken Alker wrote:
>>
>> I have studied the output, looked at the code lines referenced in the
>> Traceback, and I can't figure out the problem (I feel like the sad guy
>> on the side of the street with his hood up staring into the engine bay
>> with stream pouring out and not knowing what to do next). I did some
>> analyses on the log file and determined that there are 71 messages it is
>> having problems processing and there are 71 messages "stuck" in
>> /opt/mailman/mm/var/archives/hyperkitty/spool/ (and that it has tried to
>> process each message about 20 times).
>
>
> Each time there is a new post, it retries all the messages in the spool/
> directory.
>
>
>> Since upgrading to V3.3.8 I've
>> not seen new messages get stuck like this (although it's only been
>> running smoothly for 24 hours now and there hasn't been much activity).
>> But I'm suspecting there was something awry between the conversion from
>> V2 to V3 in February and me installing V3.3.8 that caused this (based on
>> message time stamps). It is HIGHLY likely these messages are in the
>> archiving spool as a result of me unshunting the shunt queue and that
>> they are copies of the messages that got delivered to the subscribers
>> when I did that... but are now hung up in the archiving process.
>
>
> Are new messages being archived OK. If so, that is a real mystery. It
> says mailman-hyperkitty can talk to hyperkitty and archive new messages,
> but it can't talk to hyperkitty when attempting to process a queued
> message.
Ahhh! I had convinced myself that new messages were being archived, but
now that you ask, they ARE NOT. I may have said they were at some point,
and I apologize if I did. Now I feel less confused.
It appears that archiving stopped when I did the migration from "Debian
package layout" to "source layout" and upgraded to V3.3.8. I'll bet I
munged a config file or two. I was struggling with what to keep from
Debian layout and what to bring over from the source install instructions
and I haven't gone back through to clean them up. I had previously figured
it could not be a configuration issue since some messages were making it
into the archive and some were not, but now that I see NONE are making it,
this makes the problem less daunting.
>> Following is an excerpt from mailman.log. Note that the "first
>> section" (from DOCTYPE at top to 404 at bottom) is repeated four times
>> (maybe not identical; but similar) (so I did not include it to save
>> room) before the Traceback appears.
>>
>> Jun 25 00:13:04 2023 (386086) No cached copy of the public suffix list
>> found
>> Jun 25 00:13:04 2023 (386086) ACCEPT:
>> <7500f0e2-1ae1-309d-60d7-6e592c7abf7a(a)west.net>
>> Jun 25 00:13:04 2023 (386090) HyperKitty failure on
>> https://lists.netlojix.com/hyperkitty/api/mailman/urls:
>
> I just went to that URL and got a 404. This is a serious problem.
> https://lists.netlojix.com/hyperkitty/api/ also returns a 404. It should
> return some documentation of the API.
>
> https://lists.netlojix.com/archives/api/ does work and returns the
> expected information.
>
> Your urls.py file probably contains in its urlpatterns list
> ```
> re_path(r'^mailman3/', include('postorius.urls')),
> re_path(r'^archives/', include('hyperkitty.urls')),
> ```
> The simplest fix is to add
> ```
> re_path(r'^postorius/', include('postorius.urls')),
> re_path(r'^hyperkitty/', include('hyperkitty.urls')),
> ```
> to that list.
I see many ursl.py files all over the system, but none that appear to be
where I'd expect them to be for processing by any executables. Is this a
file I should have copied over and edited, or created from scratch and
somehow missed? I don't see anything about it in the instructions at
<https://docs.mailman3.org/en/latest/install/virtualenv.html> (although I
do see a post from last July from someone stating it got missed in the
instructions back then).
> Another way to fix this is in your mailman-hyperkitty.cfg, you have
> ```
> base_url: https://lists.netlojix.com/hyperkitty
> ```
> Change that to
> ```
> base_url: https://lists.netlojix.com/archives
> ```
Done, and restarted both services, but I'm not seeing a difference when I
go to <https://lists.netlojix.com/hyperkitty/api/> (I was getting a "Page
not found", and still get that).
> but it wouldn't hurt to add the `^postorius/` and `^hyperkitty/` patterns
> to urls.py anyway.
3 years, 4 months
[MM3-users] Re: Postorius no connection to REST API
by Richard Rosner
Mark Sapiro wrote:
> > You are in a better position to answer that than am I.
> What does sudo netstat -lntp show?
A lot. But since most of that isn't relevant here:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN 20241/master
tcp 0 0 127.0.0.1:8024 0.0.0.0:* LISTEN 14076/python3
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 20241/master
tcp 0 0 127.0.0.1:8001 0.0.0.0:* LISTEN 14080/python3
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 20241/master
tcp6 0 0 :::80 :::* LISTEN 13882/apache2
tcp6 0 0 :::465 :::* LISTEN 20241/master
tcp6 0 0 :::25 :::* LISTEN 20241/master
tcp6 0 0 :::443 :::* LISTEN 13882/apache2
tcp6 0 0 :::587 :::* LISTEN 20241/master
> What does ps -fwwa|grep rest show?
root 15055 14843 0 12:58 pts/1 00:00:00 grep rest
So whatever it's supposed to find, it's not there
> > mailman3-web.service must also run as list.
I changed that. It didn't like it.
systemctl status mailman3-web.service
● mailman3-web.service - Mailman3-web uWSGI service
Loaded: loaded (/lib/systemd/system/mailman3-web.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Wed 2021-08-11 13:05:39 CEST; 32s ago
Docs: file:///usr/share/doc/mailman3-web/README.rst
Process: 15570 ExecStart=/usr/bin/uwsgi --plugin python3 --ini /etc/mailman3/uwsgi.ini (code=exited, status=1/FAILURE)
Main PID: 15570 (code=exited, status=1/FAILURE)
Status: "initializing uWSGI"
Aug 11 13:05:39 mail systemd[1]: Starting Mailman3-web uWSGI service...
Aug 11 13:05:39 mail systemd[1]: mailman3-web.service: Main process exited, code=exited, status=1/FAILURE
Aug 11 13:05:39 mail systemd[1]: mailman3-web.service: Failed with result 'exit-code'.
Aug 11 13:05:39 mail systemd[1]: Failed to start Mailman3-web uWSGI service.
Aug 11 13:05:39 mail systemd[1]: mailman3-web.service: Service RestartSec=100ms expired, scheduling restart.
Aug 11 13:05:39 mail systemd[1]: mailman3-web.service: Scheduled restart job, restart counter is at 5.
Aug 11 13:05:39 mail systemd[1]: Stopped Mailman3-web uWSGI service.
Aug 11 13:05:39 mail systemd[1]: mailman3-web.service: Start request repeated too quickly.
Aug 11 13:05:39 mail systemd[1]: mailman3-web.service: Failed with result 'exit-code'.
Aug 11 13:05:39 mail systemd[1]: Failed to start Mailman3-web uWSGI service.
> > So, what do you have in your apache config for proxying to uwsgi and
> what's your uwsgi configuration.
lists-ssl.conf:
<VirtualHost *:443>
ServerAdmin admin(a)domain.de
ServerName lists.domain.de
Alias /mailman3/favicon.ico /var/lib/mailman3/web/static/postorius/img/favicon.ico
Alias /mailman3/static /var/lib/mailman3/web/static
<Directory "/var/lib/mailman3/web/static">
Require all granted
</Directory>
<IfModule mod_proxy_uwsgi.c>
ProxyPass /mailman3/favicon.ico !
ProxyPass /mailman3/static !
ProxyPass "/mailman3" "unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost:8001/"
</IfModule>
# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLCertificateFile /etc/ssl/certs/lists.domain.de.cert.pem
SSLCertificateKeyFile /etc/ssl/private/lists.domain.de.private.pem
SSLCertificateChainFile /etc/ssl/certs/dfnca.pem
SSLCACertificateFile /etc/ssl/certs/rwthcert.pem
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
Protocols h2 http/1.1
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256
SSLHonorCipherOrder off
#RewriteEngine on
#RewriteRule ^/$ https://lists.domain.de/listinfo
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
Header always set X-Frame-Options: "SAMEORIGIN"
Header always set X-Xss-Protection "1; mode=block"
Header always set X-Content-Type-Options "nosniff"
Header always set Content-Security-Policy "default-src 'self' *.domain.de; script-src 'self' *.domain.de; connect-src 'self' *.domain.de; img-src 'self' *.domain.de; style-src 'self' 'unsafe-inline' *.domain.de; object-src 'self' *.domain.de; frame-src 'self' *.domain.de;"
Header always set Referrer-Policy "no-referrer-when-downgrade"
</VirtualHost>
<VirtualHost *:80>
RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
I guess with uwsgi config you mean the /etc/mailman3/uwsgi.ini file?
[uwsgi]
# Port on which uwsgi will be listening.
uwsgi-socket = /run/mailman3-web/uwsgi.sock
#Enable threading for python
enable-threads = true
# Move to the directory wher the django files are.
chdir = /usr/share/mailman3-web
# Use the wsgi file provided with the django project.
wsgi-file = wsgi.py
# Setup default number of processes and threads per process.
master = true
process = 2
threads = 2
# Drop privielges and don't run as root.
uid = www-data
gid = www-data
plugins = python3
# Setup the django_q related worker processes.
attach-daemon = python3 manage.py qcluster
# Setup hyperkitty's cron jobs.
#unique-cron = -1 -1 -1 -1 -1 ./manage.py runjobs minutely
#unique-cron = -15 -1 -1 -1 -1 ./manage.py runjobs quarter_hourly
#unique-cron = 0 -1 -1 -1 -1 ./manage.py runjobs hourly
#unique-cron = 0 0 -1 -1 -1 ./manage.py runjobs daily
#unique-cron = 0 0 1 -1 -1 ./manage.py runjobs monthly
#unique-cron = 0 0 -1 -1 0 ./manage.py runjobs weekly
#unique-cron = 0 0 1 1 -1 ./manage.py runjobs yearly
# Setup the request log.
#req-logger = file:/var/log/mailman3/web/mailman-web.log
# Log cron seperately.
#logger = cron file:/var/log/mailman3/web/mailman-web-cron.log
#log-route = cron uwsgi-cron
# Log qcluster commands seperately.
#logger = qcluster file:/var/log/mailman3/web/mailman-web-qcluster.log
#log-route = qcluster uwsgi-daemons
# Last log and it logs the rest of the stuff.
#logger = file:/var/log/mailman3/web/mailman-web-error.log
logto = /var/log/mailman3/web/mailman-web.log
5 years, 3 months
[MM3-users] Re: LTMP to Postfix problem
by Brian Carpenter
On 6/18/20 7:36 PM, Mark Sapiro wrote:
> Check your system logs to see if there's anything about the OS killing
> the process. Also check the Postfix log for deliveries to mailman just
> before it died. Just stabbing in the dark, but maybe some huge message
> caused it to grow beyond some memory limit and get killed by the OS.
I am replying off list at this point. It is definitely a OOM issue. Here
are the log entries right before ltmp crashed:
Jun 18 00:00:12 mm4 kernel: [19548549.158382] postgres invoked
oom-killer: gfp_mask=0x6200ca(GFP_HIGHUSER_MOVABLE), nodemask=(null),
order=0, oom_score_adj=0
Jun 18 00:00:12 mm4 kernel: [19548549.160719] postgres cpuset=/
mems_allowed=0
Jun 18 00:00:12 mm4 kernel: [19548549.161524] CPU: 0 PID: 7243 Comm:
postgres Not tainted 4.19.0-6-amd64 #1 Debian 4.19.67-2
Jun 18 00:00:12 mm4 kernel: [19548549.163047] Hardware name: QEMU
Standard PC (Q35 + ICH9, 2009), BIOS
rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org 04/01/2014
Jun 18 00:00:12 mm4 kernel: [19548549.164885] Call Trace:
Jun 18 00:00:12 mm4 kernel: [19548549.165402] dump_stack+0x5c/0x80
Jun 18 00:00:12 mm4 kernel: [19548549.166097] dump_header+0x6b/0x283
Jun 18 00:00:12 mm4 kernel: [19548549.167019] ?
do_try_to_free_pages+0x2ec/0x370
Jun 18 00:00:12 mm4 kernel: [19548549.167864]
oom_kill_process.cold.30+0xb/0x1cf
Jun 18 00:00:12 mm4 kernel: [19548549.168760] ? oom_badness+0x23/0x140
Jun 18 00:00:12 mm4 kernel: [19548549.169534] out_of_memory+0x1a5/0x430
Jun 18 00:00:12 mm4 kernel: [19548549.170174]
__alloc_pages_slowpath+0xbd8/0xcb0
Jun 18 00:00:12 mm4 kernel: [19548549.171060]
__alloc_pages_nodemask+0x28b/0x2b0
Jun 18 00:00:12 mm4 kernel: [19548549.171973] filemap_fault+0x3bd/0x780
Jun 18 00:00:12 mm4 kernel: [19548549.172643] ? alloc_set_pte+0xf2/0x560
Jun 18 00:00:12 mm4 kernel: [19548549.173369] ?
filemap_map_pages+0x1ed/0x3a0
Jun 18 00:00:12 mm4 kernel: [19548549.174404]
ext4_filemap_fault+0x2c/0x40 [ext4]
Jun 18 00:00:12 mm4 kernel: [19548549.175259] __do_fault+0x36/0x130
Jun 18 00:00:12 mm4 kernel: [19548549.175930] __handle_mm_fault+0xe6c/0x1270
Jun 18 00:00:12 mm4 kernel: [19548549.176765] handle_mm_fault+0xd6/0x200
Jun 18 00:00:12 mm4 kernel: [19548549.177644] __do_page_fault+0x249/0x4f0
Jun 18 00:00:12 mm4 kernel: [19548549.178407] ? async_page_fault+0x8/0x30
Jun 18 00:00:12 mm4 kernel: [19548549.179156] async_page_fault+0x1e/0x30
Jun 18 00:00:12 mm4 kernel: [19548549.179915] RIP: 0033:0x55d875a3fe10
Jun 18 00:00:12 mm4 kernel: [19548549.180569] Code: Bad RIP value.
Jun 18 00:00:12 mm4 kernel: [19548549.181181] RSP: 002b:00007ffcad32f248
EFLAGS: 00010206
Jun 18 00:00:12 mm4 kernel: [19548549.182132] RAX: 000055d877d512b0 RBX:
000055d877d60b93 RCX: 00007ffcad32f2c0
Jun 18 00:00:12 mm4 kernel: [19548549.183365] RDX: 0000000000000005 RSI:
000055d877d60b93 RDI: 000055d877d512b0
Jun 18 00:00:12 mm4 kernel: [19548549.184712] RBP: 00007ffcad32f270 R08:
0000000000000001 R09: 00007ffcad32f388
Jun 18 00:00:12 mm4 kernel: [19548549.186338] R10: 00007f2585002d40 R11:
0000000000000000 R12: 0000000000000005
Jun 18 00:00:12 mm4 kernel: [19548549.187583] R13: 000055d877d4b3a0 R14:
00007f2581ad05b8 R15: 0000000000000000
Jun 18 00:00:12 mm4 kernel: [19548549.188952] Mem-Info:
Jun 18 00:00:12 mm4 kernel: [19548549.189468] active_anon:197899
inactive_anon:206498 isolated_anon:0
Jun 18 00:00:12 mm4 kernel: [19548549.189468] active_file:253
inactive_file:278 isolated_file:23
Jun 18 00:00:12 mm4 kernel: [19548549.189468] unevictable:0 dirty:0
writeback:0 unstable:0
Jun 18 00:00:12 mm4 kernel: [19548549.189468] slab_reclaimable:21867
slab_unreclaimable:55017
Jun 18 00:00:12 mm4 kernel: [19548549.189468] mapped:17008 shmem:24450
pagetables:4890 bounce:0
Jun 18 00:00:12 mm4 kernel: [19548549.189468] free:13184 free_pcp:340
free_cma:0
Jun 18 00:00:12 mm4 kernel: [19548549.195739] Node 0
active_anon:791596kB inactive_anon:825992kB active_file:1012kB
inactive_file:1112kB unevictable:0kB isolated(anon):0kB
isolated(file):92kB mapped:68032kB dirty$
Jun 18 00:00:12 mm4 kernel: [19548549.200559] Node 0 DMA free:8152kB
min:352kB low:440kB high:528kB active_anon:1056kB inactive_anon:5048kB
active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB prese$
Jun 18 00:00:12 mm4 kernel: [19548549.204993] lowmem_reserve[]: 0 1950
1950 1950 1950
Jun 18 00:00:12 mm4 kernel: [19548549.205877] Node 0 DMA32 free:44584kB
min:44700kB low:55872kB high:67044kB active_anon:790540kB
inactive_anon:820944kB active_file:1012kB inactive_file:1112kB
unevictable:0kB wri$
Jun 18 00:00:12 mm4 kernel: [19548549.211109] lowmem_reserve[]: 0 0 0 0 0
Jun 18 00:00:12 mm4 kernel: [19548549.211826] Node 0 DMA: 8*4kB (UE)
31*8kB (UME) 20*16kB (UME) 22*32kB (UME) 13*64kB (UME) 5*128kB (UME)
5*256kB (UM) 4*512kB (UM) 2*1024kB (UM) 0*2048kB 0*4096kB = 8152kB
Jun 18 00:00:12 mm4 kernel: [19548549.214414] Node 0 DMA32: 378*4kB
(UMEH) 472*8kB (UEH) 412*16kB (UEH) 196*32kB (UMEH) 63*64kB (UMEH)
63*128kB (UE) 16*256kB (UE) 4*512kB (ME) 0*1024kB 2*2048kB (M) 1*4096kB
(M) =$
Jun 18 00:00:12 mm4 kernel: [19548549.217336] Node 0 hugepages_total=0
hugepages_free=0 hugepages_surp=0 hugepages_size=1048576kB
Jun 18 00:00:12 mm4 kernel: [19548549.218937] Node 0 hugepages_total=0
hugepages_free=0 hugepages_surp=0 hugepages_size=2048kB
Jun 18 00:00:12 mm4 kernel: [19548549.220513] 39729 total pagecache pages
Jun 18 00:00:12 mm4 kernel: [19548549.221286] 14715 pages in swap cache
Jun 18 00:00:12 mm4 kernel: [19548549.222022] Swap cache stats: add
10809560, delete 10794845, find 18524127383/18527544787
Jun 18 00:00:12 mm4 kernel: [19548549.223482] Free swap = 0kB
Jun 18 00:00:12 mm4 kernel: [19548549.224081] Total swap = 524284kB
Jun 18 00:00:12 mm4 kernel: [19548549.224712] 524154 pages RAM
Jun 18 00:00:12 mm4 kernel: [19548549.225222] 0 pages HighMem/MovableOnly
Jun 18 00:00:12 mm4 kernel: [19548549.225894] 13385 pages reserved
Then there was this little bit of info:
Jun 18 00:00:12 mm4 kernel: [19548549.442555] Out of memory: Kill
process 29676 (python3) score 37 or sacrifice child
Jun 18 00:00:12 mm4 kernel: [19548549.444508] Killed process 29676
(python3) total-vm:192224kB, anon-rss:93084kB, file-rss:0kB, shmem-rss:0kB
Jun 18 00:00:12 mm4 kernel: [19548549.464907] oom_reaper: reaped process
29676 (python3), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
I suspect the above process was ltmp.
So the server has 2 gig of ram with about a dozen MM3 lists on it. Is
this an issue with tuning performance of the Postgresql server or do I
need to add more memory. I am curious how much ram your server is
running and if you had run into any OOM of problems.
If you want me to post this to the list, I will.
--
Please let me know if you need further assistance.
Thank you for your business. We appreciate our clients.
Brian Carpenter
EMWD.com
--
EMWD's Knowledgebase:
https://clientarea.emwd.com/index.php/knowledgebase
EMWD's Community Forums
http://discourse.emwd.com/
6 years, 4 months
[MM3-users] Re: search this list searches more then just this list
by Marco van Tol
Op 26 jan 2024, om 22:55 heeft Mark Sapiro <mark(a)msapiro.net> het volgende geschreven:
> On 1/26/24 02:44, Marco van Tol wrote:
>> Op 25 jan 2024, om 14:16 heeft Marco van Tol <mvantol(a)ripe.net> het volgende geschreven:
>>>
>>> Okay, so, I got a bit further, but something still gets stuck.
>>>
>>> Here’s what I did.
>>> Keep in mind I’m using containers that are built from some CI/CD pipeline, so I updated the pipeline to apply the patch attached to this email to `/usr/lib/python3.11/site-packages/xapian_backend.py`.
>>>
>>> Before I had 2 list servers with the “Term too long” issue, 1 got resolved by this, and the other did not.
>>> I opened a shell in the newly deployed container to confirm the patch was applied in it.
>>>
>>> The other attachment to this email is a copy/paste from the full error from `./manage.py rebuild_index`.
>>>
>>> Is there something else special in the email that makes it choke that evades the xapian patch?
>>>
>>> Thank you very much in advance!
>
> The message above with the attached "full error" never got to the list. What is the error report?
Hm, I see. Not sure why. The reply I got from mail.mailman3.org <http://mail.mailman3.org/> at 2024-01-25 13:16:25.486 UTC was:
"250 2.0.0 Ok: 12772 bytes queued as 55AFD105C02”
I’m pasting it at the bottom of this email. Sorry it didn’t come through.
>> I tried to change to ‘hash’, but the code in that bit of the function has not been tested enough.
>> For example `hole = sha224(hole.encode('utf8')).hexdigest()` comes back with that the bytes object hole does not have an encode() method.
>> When I change it to `hole = sha224(hole).hexdigest()`, the following error is:
>
> That's only part of it. You need
>
> hole = sha224(hole).hexdigest().encode('utf8')
I ended up changing it to this, which fixed that bit, and led to the next issue. :)
>> text = text[:match.start()] + hole + text[match.end():]
>> TypeError: can't concat str to bytes
>> The ‘hash’ part of that function needs some debugging.
>
>
> Yes, presumably because no one sets `XAPIAN_LONG_TERM_METHOD=hash` in the environment. Do you have a reason for this?
I wanted to check and see if I could avoid the “Term too long (>245)" issue this way, but I haven’t gotten to the point where xapian is successful.
Right now I’m back at the original issue as I see no other solution than to go back to whoosh.
Thanks!
Marco van Tol
Paste:
----
Indexing 194620 emails
[ERROR/MainProcess] Failed indexing 156001 - 157000 (retry 5/5): Term too long (> 245): XSUBJECThttp://www.google.com/url?q=%68%74%74%70%73%3a%2f%2f%68%64%72%65%64… (pid 32): Term too long (> 245): XSUBJECThttp://www.google.com/url?q=%68%74%74%70%73%3a%2f%2f%68%64%72%65%64…
Traceback (most recent call last):
File "/usr/lib/python3.11/site-packages/haystack/management/commands/update_index.py", line 119, in do_update
backend.update(index, current_qs, commit=commit)
File "/usr/lib/python3.11/site-packages/xapian_backend.py", line 98, in wrapper
func(self, *args, **kwargs)
File "/usr/lib/python3.11/site-packages/xapian_backend.py", line 505, in update
database.replace_document(document_id, document)
xapian.InvalidArgumentError: Term too long (> 245): XSUBJECThttp://www.google.com/url?q=%68%74%74%70%73%3a%2f%2f%68%64%72%65%64…
[ERROR/MainProcess] Error updating hyperkitty using default
Traceback (most recent call last):
File "/usr/lib/python3.11/site-packages/haystack/management/commands/update_index.py", line 297, in handle
self.update_backend(label, using)
File "/usr/lib/python3.11/site-packages/haystack/management/commands/update_index.py", line 342, in update_backend
max_pk = do_update(
^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/haystack/management/commands/update_index.py", line 119, in do_update
backend.update(index, current_qs, commit=commit)
File "/usr/lib/python3.11/site-packages/xapian_backend.py", line 98, in wrapper
func(self, *args, **kwargs)
File "/usr/lib/python3.11/site-packages/xapian_backend.py", line 505, in update
database.replace_document(document_id, document)
xapian.InvalidArgumentError: Term too long (> 245): XSUBJECThttp://www.google.com/url?q=%68%74%74%70%73%3a%2f%2f%68%64%72%65%64…
Traceback (most recent call last):
File "/opt/mailman-web/./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/usr/lib/python3.11/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
utility.execute()
File "/usr/lib/python3.11/site-packages/django/core/management/__init__.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/python3.11/site-packages/django/core/management/base.py", line 402, in run_from_argv
self.execute(*args, **cmd_options)
File "/usr/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/haystack/management/commands/rebuild_index.py", line 65, in handle
call_command("update_index", **update_options)
File "/usr/lib/python3.11/site-packages/django/core/management/__init__.py", line 198, in call_command
return command.execute(*args, **defaults)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/django/core/management/base.py", line 448, in execute
output = self.handle(*args, **options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/haystack/management/commands/update_index.py", line 297, in handle
self.update_backend(label, using)
File "/usr/lib/python3.11/site-packages/haystack/management/commands/update_index.py", line 342, in update_backend
max_pk = do_update(
^^^^^^^^^^
File "/usr/lib/python3.11/site-packages/haystack/management/commands/update_index.py", line 119, in do_update
backend.update(index, current_qs, commit=commit)
File "/usr/lib/python3.11/site-packages/xapian_backend.py", line 98, in wrapper
func(self, *args, **kwargs)
File "/usr/lib/python3.11/site-packages/xapian_backend.py", line 505, in update
database.replace_document(document_id, document)
xapian.InvalidArgumentError: Term too long (> 245): XSUBJECThttp://www.google.com/url?q=%68%74%74%70%73%3a%2f%2f%68%64%72%65%64…
----
2 years, 9 months
[MM3-users] Re: External MTA incoming mail: configuration
by Odhiambo Washington
On Tue, Aug 6, 2024 at 10:46 AM Roland Giesler via Mailman-users <
mailman-users(a)mailman3.org> wrote:
> On 2024/08/05 19:59, Mark Sapiro wrote:
> > I see this reply is now moot as you have now configured list mail to
> > go directly to the Mailman server, but ...
> >
> > On 8/5/24 03:44, Roland Giesler via Mailman-users wrote:
> >>
> >> In the logs of the MTA I see this however: warning: do not list
> >> domain fast.za.net in BOTH virtual_mailbox_domains and relay_domains
> >>
> >> Mailman creates these entries, but postfix doesn't like it. I don't
> >> see any mail delivered to the mailman yet. Is this the problem?
> >
> > Probably not. It is telling you that mail to the fast.za.net domain
> > cannot both be delivered to local mailboxes (virtual_mailbox_domains)
> > and relayed to foreign hosts (relay_domains)
> >
> Thanks, yes, I have since assumed that to be the case.
> >
> >> In the MTA postfix main.cf:
> >>
> >> relay_domains = hash:/etc/mailman3/data/postfix_domains
> > >
> >> cat /etc/mailman3/data/postfix_domains
> >> ...
> >>
> >> and also
> >>
> >> local_recipient_maps=$virtual_mailbox_maps,
> >> hash:/etc/mailman3/data/postfix_lmtp
> >>
> >> cat /etc/mailman3/data/postfix_lmtp
> >> ...
> >
> > How about
> >
> > transport_maps = hash:/etc/mailman3/data/postfix_lmtp
> I can't remove the $virtual_mailbox_maps entry, since Power-mailinbox
> (PMiaB) uses that. It may make Mailman3 work, but break PMiaB).
> >
> >
> >>
> >> Then there's:
> >> virtual_mailbox_domains=sqlite:/etc/postfix/virtual-mailbox-domains.cf
> >>
> >> cat /etc/postfix/virtual-mailbox-domains.cf
> >> dbpath=/home/user-data/mail/users.sqlite
> >> query = SELECT 1 FROM users WHERE email LIKE '%%@%s' UNION SELECT 1
> >> FROM aliases WHERE source LIKE '%%@%s' UNION SELECT 1 FROM
> >> auto_aliases WHERE source LIKE '%%@%s'
> >>
> >> When I run that query in sqlite3, it returns no records, so I'm not
> >> sure how this is supposed to work. %s to me means that first
> >> argument, so is this used in python and then %s is the argument sent
> >> to this query?
> >
> >
> > See https://www.postfix.org/sqlite_table.5.html
> >
> > `%%` is replaced with `%` which is a SQL wildcard matching anything
> > and `%s` is replaced by the key postfix is looking for, i.e. the
> > domain that it is asking about.
> >
> > So, that query becomes
> >
> > SELECT 1 FROM users WHERE email LIKE '%(a)fast.za.net' UNION SELECT 1
> > FROM aliases WHERE source LIKE '%(a)fast.za.net' UNION SELECT 1 FROM
> > auto_aliases WHERE source LIKE '%(a)fast.za.net'
> >
> > I.e, it returns true if any user or alias or auto_alias has an address
> > ending in '@fast.za.net' and if that's true the mail to any
> > '@fast.za.net' address including list mail will be stored locally.
>
> Ah, thank you! I created a ticket at MiaB about this, so I'll post your
> response there. The %s had be stumped at first, but now it's clear.
>
>
> >
> > If you really have local users on box2.gtahardware.co.za with
> > addresses '@fast.za.net' and you want to relay list mail to lists
> > '@fast.za.net', you need to see
> >
> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/mta.h…
> .
>
> Thank you for that! From that it seems it may still be possible to use
> PMiaB as my MTA after, but I'll work through that reference and test it
> and report back.
>
I think that ALL MTAs have the concept of local domains (for which mails
are delivered to 'local mailboxes') and remote domains (aka relay domains)
for which mail is relayed to another host which has the mailboxes.
So in your case box2.gtahardware.co.za (this is FQDN) could be handling
local emails, e.g roland(a)gtahardware.co.za, johndoe(a)gtahardware.co.za, etc.
Those are local, and so gtahardware.co.za is a local domain. However,
fast.za.net is a relay domain and all mail to XXX(a)fast.za.net should be
relayed to the MM3 server.
If your MTA does not have this concept, then it's either not ready for
prime time or it wasn't intended to have such ability.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
2 years, 3 months
[MM3-users] Re: Subscription Request asking for Confirmation instead of Moderation
by Henry Hartley
> -----Original Message-----
> From: Mark Sapiro <mark(a)msapiro.net>
> Sent: Wednesday, August 27, 2025 21:10
>
> On 8/27/25 09:22, Henry Hartley via Mailman-users wrote:
> >
> > 1. Are there particular headers that are causing the email to go to the
> Confirmation page instead of the Approval page? Or are there particular
> headers we can add that will help with this?
> > 2. Is there any way for us to move an address from the Confirmation
> Pending page to confirmed on the backend (preferably through the web
> interface, but on the server itself, if necessary)?
> >
> > Here are the headers sent with the subscriber's email address changed to
> FirstLast(a)SCHOOL.edu and our BCC mailbox domain changed to COMPANY.com.
> >
> > MIME-Version: 1.0
> > Content-Type: text/plain; charset=UTF-8; format=flowed; delsp=yes
> > Content-Transfer-Encoding: 8Bit
> > X-Mailer: Drupal
> > Return-Path: FirstLast(a)SCHOOL.edu
> > Sender: FirstLast(a)SCHOOL.edu
> > From: FirstLast(a)SCHOOL.edu
> > Bcc: mailman-noreply(a)COMPANY.com
>
> Are these all the headers? If so, you need a To: header. sending the envelope to
> the list-join address is not sufficient. The message must either have a To: to the
> list-join address or a To: to the list-request address with a Subject: or body of
> `join`
That's what I was given and I didn't look at it carefully enough. My apologies. There was indeed a To: header, so it wasn't that. I got a copy of the actual email and was able to see all the headers, which I've pasted below (with the exception of two X-Microsoft-Antispam-xxx headers, which are fairly long). I've anonymized it similarly to the above as well as changing the IP address to 192.169.0.0, which is not what's really there. Note also that the mailto: links above (and below, if applicable) are not in the text I'm pasting but have been added somewhere along the line.
Received: from CO1PR05MB8586.namprd05.prod.outlook.com (2603:10b6:303:ed::5)
by LV8PR05MB10549.namprd05.prod.outlook.com with HTTPS; Fri, 8 Aug 2025
16:57:54 +0000
Received: from DM6PR02CA0123.namprd02.prod.outlook.com (2603:10b6:5:1b4::25)
by CO1PR05MB8586.namprd05.prod.outlook.com (2603:10b6:303:ed::5) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9009.18; Fri, 8 Aug
2025 16:57:52 +0000
Received: from DS3PEPF0000C37A.namprd04.prod.outlook.com
(2603:10b6:5:1b4:cafe::9e) by DM6PR02CA0123.outlook.office365.com
(2603:10b6:5:1b4::25) with Microsoft SMTP Server (version=TLS1_3,
cipher=TLS_AES_256_GCM_SHA384) id 15.20.9009.15 via Frontend Transport; Fri,
8 Aug 2025 16:57:52 +0000
Authentication-Results: spf=fail (sender IP is 192.168.0.0)
smtp.mailfrom=SCHOOL.edu; dkim=none (message not signed)
header.d=none;dmarc=fail action=oreject
header.from=SCHOOL.edu;compauth=fail reason=000
Received-SPF: Fail (protection.outlook.com: domain of SCHOOL.edu does not
designate 192.168.0.0 as permitted sender)
receiver=protection.outlook.com; client-ip=192.168.0.0;
helo=esa2.COMPANY.iphmx.com;
Received: from esa2.COMPANY.iphmx.com (192.168.0.0) by
DS3PEPF0000C37A.mail.protection.outlook.com (10.167.23.4) with Microsoft SMTP
Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
15.20.9009.8 via Frontend Transport; Fri, 8 Aug 2025 16:57:52 +0000
X-CSE-ConnectionGUID: 6gzl16giR+OI2R+uEItzYA==
X-CSE-MsgGUID: N0dF+IkxQxqpO1VcWOCK3A==
X-IronPort-AV: E=Sophos;i="6.17,274,1747713600";
d="scan'208";a="40347776"
Received: from ex2019-3.COMPANY.com ([74.119.60.23])
by esa2.COMPANY.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES128-GCM-SHA256; 08 Aug 2025 12:57:50 -0400
Received: from EX2019-1.COMPANY.com (10.1.146.19) by EX2019-3.COMPANY.com
(10.1.146.21) with Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1748.26; Fri, 8 Aug
2025 12:57:50 -0400
Received: from COmailout.COMPANY.com (10.1.146.69) by EX2019-1.COMPANY.com
(10.1.146.19) with Microsoft SMTP Server id 15.2.1748.26 via Frontend
Transport; Fri, 8 Aug 2025 12:57:50 -0400
Received: from WEBSERVER.COMPANY.com ([10.115.9.208]) by COmailout.COMPANY.com over TLS secured channel with Microsoft SMTPSVC(10.0.17763.1697);
Fri, 8 Aug 2025 12:57:50 -0400
Received: by WEBSERVER.COMPANY.com (Postfix, from userid 33)
id 998892A0BDB; Fri, 8 Aug 2025 12:57:48 -0400 (EDT)
To: <MAILINGLIST-join(a)DOMAIN.org>
Subject: Subscribe
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes
Content-Transfer-Encoding: quoted-printable
X-Mailer: Drupal
Sender: <FIRSTLAST(a)SCHOOL.edu>
From: <FIRSTLAST(a)SCHOOL.edu>
Message-ID: <20250808165748.998892A0BDB(a)WEBSERVER.COMPANY.com>
Date: Fri, 8 Aug 2025 12:57:48 -0400
Return-Path: FIRSTLAST(a)SCHOOL.edu
X-OriginalArrivalTime: 08 Aug 2025 16:57:50.0067 (UTC) FILETIME=[92CA3430:01DC0885]
X-MS-Exchange-Organization-ExpirationStartTime: 08 Aug 2025 16:57:52.4416
(UTC)
X-MS-Exchange-Organization-ExpirationStartTimeReason: OriginalSubmit
X-MS-Exchange-Organization-ExpirationInterval: 1:00:00:00.0000000
X-MS-Exchange-Organization-ExpirationIntervalReason: OriginalSubmit
X-MS-Exchange-Organization-Network-Message-Id:
ba671e8c-86f5-429d-8c2d-08ddd69cb6ab
X-EOPAttributedMessage: 0
X-EOPTenantAttributedMessage: a066de23-9711-4de4-8725-431a39ebcafb:0
X-MS-Exchange-Organization-MessageDirectionality: Incoming
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic:
DS3PEPF0000C37A:EE_|CO1PR05MB8586:EE_|LV8PR05MB10549:EE_
X-MS-Exchange-Organization-AuthSource:
DS3PEPF0000C37A.namprd04.prod.outlook.com
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Office365-Filtering-Correlation-Id: ba671e8c-86f5-429d-8c2d-08ddd69cb6ab
X-MS-Exchange-Organization-ExpirationInterval: 0:12:30:00.0000000
X-MS-Exchange-Organization-ExpirationIntervalReason: TenantCustomized
X-MS-Exchange-AtpMessageProperties: SA|SL
X-MS-Exchange-Organization-SCL: -1
X-Microsoft-Antispam: BCL:0;ARA:13230040;
X-Forefront-Antispam-Report:
CIP:192.168.0.0;CTRY:US;LANG:en;SCL:-1;SRV:;IPV:CAL;SFV:SKN;H:esa2.COMPANY.iphmx.com;PTR:esa2.COMPANY.iphmx.com;CAT:NONE;SFS:(13230040);DIR:INB;
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2025 16:57:52.2718
(UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ba671e8c-86f5-429d-8c2d-08ddd69cb6ab
X-MS-Exchange-CrossTenant-Id: a066de23-9711-4de4-8725-431a39ebcafb
X-MS-Exchange-CrossTenant-AuthSource:
DS3PEPF0000C37A.namprd04.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: Internet
X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR05MB8586
X-MS-Exchange-Transport-EndToEndLatency: 00:00:02.2435910
X-MS-Exchange-Processed-By-BccFoldering: 15.20.8989.011
--
Henry Hartley
Westat
RB 2151
1 year, 2 months
[MM3-users] Re: Custom templates (was: Re: Re: nginx configuration on a multitasking server)
by David Newman
On 1/14/22 4:54 PM, Mark Sapiro wrote:
> On 1/14/22 11:56 AM, David Newman wrote:
>>
>> I created a pending subscription request on a test list. Here is the
>> text I'm using in a file called 'list:admin:action:subscribe.txt'
>> (minus the rows of hypens):
>>
>> ----------
>>
>>
>> As list administrator, your authorization is required for a mailing
>> list subscription request approval:
>>
>> For: $member
>> List: $listname
>>
>> At your convenience, visit:
>>
>> https://${domain}/mailman/admindb/lists/${short_listname}.${domain}/
>
> This looks like a Mailman 2.1 URL. Are you sure you don't want something
> like
>
> https://${domain}/mailman3/lists/${short_listname}.${domain}/
Yes. The server redirects MM3-style requests to MM2.1 URLs. I need to
determine why, but that may be a different issue than the templates one.
There's nothing obvious in this vhost's nginx config that would generate
the redirect. Will check, if I can't resolve this I'll open a different
thread.
>
>>
>> to approve or deny the request.
>>
>> ----------
>>
>> Instead the message that goes out at midnight daily reads like this:
>
>
> That's a different message. It is sent from the `mailman notify` command
> run by cron. It's built from the list:admin:notice:pending template.
OK, wrong template then.
>
>>
>> On successive nights I have placed copies of the
>> 'list:admin:action:subscribe.txt' file above in these locations:
>>
>> mm/var/templates/lists/test.lists.domain.tld/en
>
> I hope you mean
>
> /opt/mailman/mm/var/templates/lists/test.lists.domain.tld/en
Yes
>
>> /opt/mailman/mm/var/templates/site/en
>
>
> Either of those should work. The lists one will take priority over the
> site one for that list.
>
>
>> and then in Postorius, with the same contents as above.
>
> If you set a template in Postorius, it takes priority. If you later
> decide you want to use one in /opt/mailman/mm/var/templates/ you have to
> delete the postorius one.
>
>
>> The file versions are owned by the mailman user, and have 0644
>> permissions. Not sure this is necessary but I've restarted the
>> mailman3 and mailmanweb services each time after a change.
>>
>> There is no sign of trouble in the MM3 or web logs. The only thing I
>> see is in the Postfix log, where the shorter and less helpful message
>> goes out each night. I don't see anything in the template docs about
>> this.
>>
>> Questions:
>>
>> 1. What to do to get the custom message working?
>
>
> It should work. I suspect you need to go to the list's Settings ->
> Automatic Responses and set `Admin immed notify` to Yes.
It's enabled. I think this triggers notifications only for new
subscription requests, not pending ones.
>
>
>> 2. Is there a way to trigger a subscribe reminder for one list only?
>
>
> If by subscribe reminder you mean the `list:admin:action:subscribe.txt`
> message, yes that's the above list setting. If you mean the one sent
> from the `mailman notify` command, see `mailman notify --help` for the
> options. You can specify one or more lists (default is all lists) via
> options and put them in your cron.
>
>
>> Asking because there are other lists on this server with other
>> requests pending, and I don't want to bother other moderators with
>> multiple reminders per day. Not a big deal, but it would be nice to
>> test this with one list rather than waiting up to 24 hours after each
>> change.
>
>
> You can test `mailman notify` at any time by running it by hand.
Thanks. This still isn't working as intended. I took these steps:
1. Created the file
'/opt/mailman/mm/var/templates/lists/test.lists.domain.tld/en/list:admin:action:pending.txt'
with these contents (minus the hyphens top and bottom):
----------
The $listname list has $count moderation requests waiting.
$data
At your convenience, visit:
https://${domain}/mailman3/lists/${short_listname}.${domain}/
to approve or deny the request.
----------
2. Restarted the mailman3 and mailmanweb services
3. As the mailman user, ran the command 'mailman notify -l
test.lists.domain.tld -v'
This generated an email message but its contents were the same as in my
previous post:
----------
The test(a)lists.domain.tld list has 1 moderation requests waiting.
Held Subscriptions:
User: letmein(a)domain.tld
Please attend to this at your earliest convenience.
----------
What I'm trying to do here is replicate a feature from MM2.1, where
pending notifications had URLs embedded in the message. That's not
available out of the box in MM3, and if there's a place for feature
requests I'd be glad to ask that this be made the default.
For now, though, I'm looking to get this customization working.
Thanks.
dn
4 years, 9 months
[MM3-users] Re: messages stuck in the bad queue
by Ken Alker
--On Sunday, June 25, 2023 9:18 AM -0700 Mark Sapiro <mark(a)msapiro.net>
wrote:
> On 6/24/23 9:54 PM, Ken Alker wrote:
>> I am working on a mail server that was migrated from mailman V2 to
>> mailman V3 in February. I just noticed that there are over 1000
>> messages in the bad queue. All of the messages in the bad queue are
>> dated 2/2/23 and all have a timestamp within a one-hour window of each
>> other.
>>
>> I used mailman qfile to inspect five random emails in the bad queue and
>> so far they are all "successfully subscribed" emails,
>
> This is a bit strange. See below.
>
>> but I presume
>> there are no guarantees there aren't others mixed in there that might be
>> legitimate emails (ie. I just unshunted 140 emails in the shunt queue
>> and they were all good emails and all got processed).
>
>
> Presumably these were shunted due to some issue that was subsequently
fixed.
That is my assumption. I didn't unshunt them until I had V3.3.8 completed,
figuring the previous version/install had some bug/mistake. Fortunately,
they all got processed (with one problem, which I brought up in another
thread).
>> I figure that the easiest way to inspect these 1000 emails is just to
>> have them re-delivered. I tried moving one from the bad queue to the
>> shunt queue and I ran "mailman unshunt" but nothing happened.
>
> What does nothing happened mean? "mailman unshunt" should move the
> message to the original queue which was stored in the 'whichq' attribute
> in the msgdata when the message was shunted. Since this wasn't a shunted
> message, there's no 'whichq' attribute so it goes to the 'in' queue.
> I.e., "mailman unshunt" would have moved the message from the 'shunt'
> queue to the 'in' queue. If the message wound up back in the shunt queue,
> there should be messages in mailman.log indicating why.
I moved the .psv file from the bad queue into the shunt queue. I then ran
"mailman unshunt" (as user 'mailman' while in the virtual environment). I
tailed mailman.log during this process and no logs were spit out. The date
stamp on the .psv file never changed (maybe it does not when being moved
between queues?) and, AFAICT, the file never moved from the shunt queue. I
waited maybe five minutes, tops.
>> Is there a way to reprocess the bad queue?
>
> You could just move the messages to the 'in' queue.
I just now tried moving the same message into the 'in' queue but, again,
nothing happened. I left it in there for five minutes. Do I have to run a
program to get it to act on the 'in' queue (I presume that there is a
"runner" that is always looking and taking care of this already as I
presume this is the queue where all 'normal' traffic is handled).
Here are the (obfusacted) results of "mailman qfile
/opt/mailman/mm/var/queue/shunt/1675389793.6945386+2aeaf0015558c9d8380c96142c3fa9d03a8142bc.psv"
(the message I was experimenting with):
[----- start pickle -----]
<----- start object 1 ----->
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Subject: THE-list subscription notification
From: email(a)obfuscated.com
To: the-list-owner(a)lists.obfuscated.com
Message-ID: <167538979369.2390432.521344217673230839(a)obfuscated.net>
Date: Thu, 02 Feb 2023 18:03:13 -0800
Precedence: bulk
user(a)domain.tld has been successfully subscribed to THE-list.
<----- start object 2 ----->
{ '_parsemsg': False,
'envsender': 'email(a)obfuscated.com',
'listid': 'the-list.obfusacted.com',
'nodecorate': True,
'recipients': {'person(a)domain.tld'},
'reduced_list_headers': True,
'version': 3}
[----- end pickle -----]
>> Also, what exactly is the bad queue?
>
> If Mailman's content filtering is enabled and Filter Action is Preserve,
> messages which have no remaining content after content filtering are put
> in the 'bad' queue. These are the only messages put there. When this
> happens there should a log message like
>
> <message-id> preserved in file base <queue_file>
>
> It is unclear to me how these 1000+ messages wound up in the 'bad' queue.
> If you have logs from Feb 2, they might help. My guess is there was some
> MTA misrouting that caused these list welcome messages (from some mass
> subscribe?) to be rerouted to the list posting address combined with some
> bad content filtering settings that removed all the content, but that
> seems pretty far fetched.
Unfortunately, I don't have logs going that far back. I don't think your
concept is far fetched. I'm 99% sure this was the day that the migration
from V2 to V3 took place so this was certainly the result of some type of
mass-subscription-import into V3. The V3 that was installed or the install
itself definitely had problems, which is why I just did an upgrade/overhaul
to V3.3.8 this past week. Many/most of the strange issues that were
occurring seem to be cleared up.
3 years, 4 months
[MM3-users] Time Stand Still
by Barry Warsaw
Somewhen in the dark recesses of intarweb history, I found myself as the project leader for both Jython (née JPython) and GNU Mailman. I'd been involved with Jython since it was invented by Jim Hugunin around the time he came to work with us at Pythonlabs. I'd been contributing to Mailman since we inherited John Viega's Python-based Dave Matthews Band list server, and put it to use replacing python.org's Majordomo installation.
I'd enjoyed both projects, but knew I could not lead both, so I had to make a choice. I chose to turn over Jython to a team that's done a much better job over the years than I ever could have. Something about email, and especially the communication and collaboration patterns that it facilitates, really fascinated me. I know, I know, but we all have our lapses of sanity. Mine has lasted almost 20 years, a bit more than "momentary" perhaps.
I've rarely gotten paid to work on Mailman, but it did provide me some great opportunities. Most notably it led to my 10 year stint at Canonical. I was originally hired on there to integrate mailing lists with Launchpad, and Mailman was the obvious choice. I learned a ton doing that project, and working within the constraints of integrating the two Python-based systems, especially since Launchpad was originally not free software and Mailman was GPL'd. Later, the Zope-based Launchpad source code was released under the AGPL, making much of the monkeypatching unnecessary, but by then the system was solid and reliable, and you don't fix what's not broken.
Except, I guess I did. I took a lot of the lessons from that work, along with a good hard look at all the problems with Mailman 2, and began to break another cardinal rule of software development: second system syndrome. The result is Mailman 3. It took forever, and we're still not at complete feature parity with Mailman 2, but at least it's Real Enough to be used at many Real Sites, including python.org and lists.fedoraprojects.org.
It would be ridiculous for me to take significant credit for this. I have to acknowledge the amazing user community -- you! -- for all the support, patches, suggestions, feedback, patience, criticism, donations, and contributions that you've given to the project, and to me personally over the years. And my deepest gratitude goes to all the core developers that have stayed or come and gone, but most especially the current Cabal: Abhilash Raj, Aurelien Bompard, Florian Fuchs, Mark Sapiro, Stephen J. Turnbull, Terri Oda. You should know that each and every one of them is truly awesome, both in what they contribute technically, and in their amazing friendships. Mailman is infinitely better because of their involvement, and I've loved spending time with them over the years at the Pycon sprints, making releases and sharing teas and meals.
My blog is called We Fear Change, and that's humorously taken from a 90's bit in Mike Myer's excellent Wayne's World movie (a phrase actually uttered by the brilliant Dana Carvey as Garth). The irony of course is that while we all may fear change, it's the one constant thing we can count on. And in fact, we *require* change to thrive, because if you aren't changing, you aren't alive. Time, and being engaged with life's vagaries, means there's no alternative to change; it must be embraced.
And so, with a vague reference to the many (good!) changes in my personal and professional life, I'm announcing that I'm stepping down from the project leadership role of GNU Mailman, effective... nowish! And it's with unanimous agreement among the GNU Mailman Steering Committee (a.k.a. the Mailman Cabal), that we are announcing Abhilash Raj as the new project leader.
If you don't recognize Abhilash's name, you probably aren't paying attention, at least to Mailman 3. Abhilash came to us in 2013 as a Google Summer of Code student, and he's become one of the project's most valuable contributors. His list of accomplishments is long, and it includes everything from redesigning the website, to integrating CI with our GitLab build system, porting our code to the SQLAlchemy ORM, adding MySQL support, revving up adoption through his Docker images, along with his great coding work on Core, Postorius, HyperKitty, and mailmanclient.
This transition is good for the project too. Email, its defining protocols and standards, and its role in our daily lives, has changed profoundly since the early days of Mailman. A fresh perspective and enthusiasm will help keep Mailman relevant to the changing ways we -- especially the FLOSS and tech communities -- communicate.
Please join me in supporting Abhilash in every way possible as he takes over in this new role as project leader. I'll be here when and if needed, even as I create space in my "spare" time for... Something Else. I look forward to the vision that Abhilash will bring to the project, and I know that he will do a great job. To me, Mailman has always been about collaboration, and the best
way for it to succeed is for you to continue to contribute your insights, experiences, opinions, and skills with positive intention.
-Barry
https://www.wefearchange.org/
8 years, 11 months
[MM3-users] Re: E-mail every minute: "Cron <www-data@sharky5> ..."
by Robert Heller
At Mon, 8 Jul 2024 00:16:48 +0300 Odhiambo Washington <odhiambo(a)gmail.com> wrote:
>
> On Sun, Jul 7, 2024 at 8:43â¯PM Robert Heller <heller(a)deepsoft.com> wrote:
>
> > At Sun, 7 Jul 2024 19:48:02 +0300 Odhiambo Washington <odhiambo(a)gmail.com>
> > wrote:
> >
> > >
> > > On Sun, Jul 7, 2024 at 7:16âÃâ¬Ã¯PM Robert Heller <heller(a)deepsoft.com>
> > wrote:
> > >
> > > > At Sun, 7 Jul 2024 18:52:05 +0300 Odhiambo Washington <
> > odhiambo(a)gmail.com>
> > > > wrote:
> > > >
> > > > >
> > > > > On Sun, Jul 7, 2024 at 4:12ÃÆÃÆÃâÃÂ¢ÃÆÃââÃâÃÂ¬ÃÆÃâÃâïPM Robert
> > Heller <heller(a)deepsoft.com>
> > > > wrote:
> > > > >
> > > > > > What am I missing? I *think* I have mailman3 *mostly* setup, but
> > there
> > > > > > are
> > > > > > still some configuration things that are missing, but I am not sure
> > > > how to
> > > > > > fix
> > > > > > them (the docs are NOT clear).
> > > > > >
> > > > >
> > > > > Which docs are you relying on?
> > > >
> > > > https://docs.mailman3.org/en/latest/config-web.html
> > > >
> > > > I presume these are the official docs for mailman3 -- maybe they
> > aren't?
> > > >
> > > > >
> > > > > How about this -
> > > > https://docs.mailman3.org/en/latest/install/virtualenv.html
> > > > > ??
> > > >
> > > > I'm not using a virtual environment. I'm using all native Debian 12
> > > > packages,
> > > > installed via apt. The virtual environment docs are actually even worse
> > > > (even
> > > > more confusing).
> > >
> > >
> > > Worse? :-)
> >
> > Even more confusing. Both sets of docs make various assumptions and don't
> > really explain things properly. Like everywhere where "settings.py" is
> > mentioned, it really means "/etc/mailman3/mailman-web.py"
> >
>
> No! It means /etc/mailman3/settings.py - literally!
>
>
> > In any case, the virtual environment docs are hard to relate to a "native"
> > install and are generally hard to follow, since they seem to jump all over
> > the
> > place.
>
>
> When one day you'll be able to internalize what a Python virtual
> environment is, you'll realize that it's VERY convenient.
> You will actually embrace it from that point onwards.
>
> (Spaghetti docs?) And it is hard to replace the various (and not
> > always consistent) virtual environment paths and settings files to the
> > "native"
> > paths.
>
>
> Actually, if you're this inclined to run everything natively, MM3 is
> perhaps not for you. Why? Because you'll not easily find help here.
> We focus on the virtual environment only as the standard.. Why? Because no
> one is willing to deal with ALL the OS-centric packaging
> out there. Python virtual environment is universal across all the OSes, I
> can say.
>
>
> > The "official" docs are just not useful to me, since I am not using a
> > virtual
> > environment. If a virtual environment is recomended, what is the point of
> > the
> > Debian 12 packages?
>
>
> We cannot answer that here. I guess they are meant for people like you who
> strive under pain :-)
> With the Python virtual environment, I can install and manage MM3 in almost
> any *nix OS.
>
>
> > Are they just not meant to be used? Really? Do you mean that I should use
> > a separate package management system for Mailman3? That
> > really sucks.
> >
>
> Yes, they are meant to be used. Noone denies that. However, they are not
> packaged by the Mailman Developers.
> Did you read one response from Mark Sapiro where he said, and I quote:
> ```
> If you prefer to use the Debian packages, that's fine, but if using the
> Debian packages, your primary resource for support, documentation, bug
> reports, etc. should be Debian. See https://wiki.list.org/x/12812344
> ```
> So yes, go ahead and use the Debian packages. No one is stopping you.
I uninstalled them and have given up on mm3. It means the main mailling list
I have been hosting for the past while (more than a decade), will have to
migrate to something else... :-(
>
>
--
Robert Heller -- Cell: 413-658-7953 GV: 978-633-5364
Deepwoods Software -- Custom Software Services
http://www.deepsoft.com/ -- Linux Administration Services
heller(a)deepsoft.com -- Webhosting Services
2 years, 4 months
[MM3-users] Re: How to delete non-users
by Allan Hansen
Hi Mark,
Thank you for looking into it.
We are very strict about memberships, which we are because of spam, bots and malicious contributors and because we don't want anyone to think that our lists are used for spam:
When a user applies, the server sends a message to the moderator.
The moderator communicates with the potential member and accepts or does not accept the application.
At this point, if the user has not been accepted, but tried to send a message to the list, a non-member membership is created.
When he/she logs in to list his/her account, the list to which he/she holds non-memberships will be listed and the user will think that he/she has been properly subscribed (why else are the lists listed). Noone notices the column that shows the role as 'nonmember.' So he/she thinks that the subscription request has been accepted, but nothing is working. That's why the 'non-member' record is an issue. I also don't see why non-members are automatically added, filling up the database with junk (at least from our point of view, with all respect).
But our lists don't accept messages from non-members. Such messages are quietly discarded, as most are spam, as mentioned above.
So now the user is neither getting emails from the lists nor is unable to send messages to the list.
The next step for the user is to complain to me. ☹
I have looked for a template that could be used to warn someone when he/she is added as a non-member, but did not find one. It's also not clear that I'd want one, as most of these non-subscriptions are by spammers and I prefer not to reply to spammers. __
I tried your suggestion below, Mark.
Here's my transcript:
**********
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
>>> lm = getUtility(IListManager)
>>> for l in lm:
... for nm in l.nonmembers.members:
... nm.unsubscribe()
...
>>>
**********
I did this twice, once with commit() and once typing ctrl/d (ctrl/D) just gave me a beep.
Calling commit() did not return to the ... as in your example, but showed the >>> prompt, so I tried ctrl/D (beep) and then ctrl/d (exit).
I then went to the Postorius page for one of the lists and found that all the non-members were still present.
Yours,
Allan
On 9/16/22, 15:01 , "Mark Sapiro" <mark(a)msapiro.net> wrote:
On 9/16/22 11:19, Allan Hansen wrote:
> Hi all,
>
> This is a bit of an emergency:
>
> I am getting a bunch of complaints from potential list members of my lists that they can't subscribe and they don't get messages. Apparently, the issue is that they are non-members. I have never created any non-members but looking at the docs it seems that if someone sends a message to the list, they automatically become non-members.
> For individuals I have been able to delete their non-membership and they then could subscribe properly.
I don't understand. the fact that an address is a non-member of a list
should not impact subscribing that address as a member.
> I have looked at some of my most popular lists and they have hundreds of non-members! It will take me an awful amount of time to remove each one manually, and not doing it - handling each as they complain - is also a lot of waste of time and cause of frustration for all involved.
What is actually happening when the non-member attempts to subscribe as
a member? What do they do and what it the result?
> I have tried scripting it with delmember, but it does not take the '-r nonmember' option ('findmember' does!).
>
> Can anyone help me find out how to
> a. delete all non-members of all my lists
If you have access to `mailman shell` you could do:
```
$ mailman shell
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
>>> lm = getUtility(IListManager)
>>> for l in lm:
... for nm in l.nonmembers.members:
... nm.unsubscribe()
...
>>> commit()
```
> b. prevent MM3 from creating new non-members in the future (so I don't have to keep removing them)
nonmembers are an integral part of Mailman 3's architecture. The basic
idea is a nonmember has a moderation action and setting a nonmembers
moderation replaces MM 2.1's adding that address to one of
*_these_nonmembers (The legacy *_these_nonmembers attributes still
exist, but only to support regexps).
It would require extensive modification to not create nonmembers.
However, I still don't understand why the presence of a nonmember record
is an issue.
--
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, 1 month
[MM3-users] Re: Held messages not delivered after approval
by Krinetzki, Stephan
Hi Mark, Hi Stephen,
so I updated now my configuration a bit. The logging is now default:
[logging.archiver] datefmt: %b %d %H:%M:%S %Y
[logging.archiver] format: %(asctime)s (%(process)d) %(message)s
[logging.archiver] level: info
[logging.archiver] path: mailman.log
[logging.archiver] propagate: no
[logging.bounce] datefmt: %b %d %H:%M:%S %Y
[logging.bounce] format: %(asctime)s (%(process)d) %(message)s
[logging.bounce] level: info
[logging.bounce] path: bounce.log
[logging.bounce] propagate: no
[logging.config] datefmt: %b %d %H:%M:%S %Y
[logging.config] format: %(asctime)s (%(process)d) %(message)s
[logging.config] level: info
[logging.config] path: mailman.log
[logging.config] propagate: no
[logging.database] datefmt: %b %d %H:%M:%S %Y
[logging.database] format: %(asctime)s (%(process)d) %(message)s
[logging.database] level: warn
[logging.database] path: mailman.log
[logging.database] propagate: no
[logging.debug] datefmt: %b %d %H:%M:%S %Y
[logging.debug] format: %(asctime)s (%(process)d) %(message)s
[logging.debug] level: info
[logging.debug] path: debug.log
[logging.debug] propagate: no
[logging.error] datefmt: %b %d %H:%M:%S %Y
[logging.error] format: %(asctime)s (%(process)d) %(message)s
[logging.error] level: info
[logging.error] path: mailman.log
[logging.error] propagate: no
[logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
[logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
[logging.fromusenet] level: info
[logging.fromusenet] path: mailman.log
[logging.fromusenet] propagate: no
[logging.gunicorn] datefmt: %b %d %H:%M:%S %Y
[logging.gunicorn] format: %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
[logging.gunicorn] level: info
[logging.gunicorn] path: mailman.log
[logging.gunicorn] propagate: no
[logging.http] datefmt: %b %d %H:%M:%S %Y
[logging.http] format: %(asctime)s (%(process)d) %(message)s
[logging.http] level: info
[logging.http] path: mailman.log
[logging.http] propagate: no
[logging.locks] datefmt: %b %d %H:%M:%S %Y
[logging.locks] format: %(asctime)s (%(process)d) %(message)s
[logging.locks] level: info
[logging.locks] path: mailman.log
[logging.locks] propagate: no
[logging.mischief] datefmt: %b %d %H:%M:%S %Y
[logging.mischief] format: %(asctime)s (%(process)d) %(message)s
[logging.mischief] level: info
[logging.mischief] path: mailman.log
[logging.mischief] propagate: no
[logging.plugins] datefmt: %b %d %H:%M:%S %Y
[logging.plugins] format: %(asctime)s (%(process)d) %(message)s
[logging.plugins] level: info
[logging.plugins] path: plugins.log
[logging.plugins] propagate: no
[logging.root] datefmt: %b %d %H:%M:%S %Y
[logging.root] format: %(asctime)s (%(process)d) %(message)s
[logging.root] level: info
[logging.root] path: mailman.log
[logging.root] propagate: no
[logging.runner] datefmt: %b %d %H:%M:%S %Y
[logging.runner] format: %(asctime)s (%(process)d) %(message)s
[logging.runner] level: info
[logging.runner] path: mailman.log
[logging.runner] propagate: no
[logging.smtp] datefmt: %b %d %H:%M:%S %Y
[logging.smtp] every: $msgid smtp to $listname for $recip recips, completed in $time seconds
[logging.smtp] failure: $msgid delivery to $recip failed with code $smtpcode, $smtpmsg
[logging.smtp] format: %(asctime)s (%(process)d) %(message)s
[logging.smtp] level: info
[logging.smtp] path: smtp.log
[logging.smtp] propagate: no
[logging.smtp] refused: $msgid post to $listname from $sender, $size bytes, $refused failures
[logging.smtp] success: $msgid post to $listname from $sender, $size bytes
[logging.subscribe] datefmt: %b %d %H:%M:%S %Y
[logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
[logging.subscribe] level: info
[logging.subscribe] path: mailman.log
[logging.subscribe] propagate: no
[logging.task] datefmt: %b %d %H:%M:%S %Y
[logging.task] format: %(asctime)s (%(process)d) %(message)s
[logging.task] level: info
[logging.task] path: mailman.log
[logging.task] propagate: no
[logging.vette] datefmt: %b %d %H:%M:%S %Y
[logging.vette] format: %(asctime)s (%(process)d) %(message)s
[logging.vette] level: info
[logging.vette] path: mailman.log
[logging.vette] propagate: no
Further, I edited the logrotate:
/var/log/mailman/mailman-logs/*.log {
missingok
daily
compress
delaycompress
nomail
notifempty
rotate 14
dateext
su mailman mailman
olddir /var/log/mailman/mailman-logs/oldlogs
postrotate
/bin/kill -HUP `cat /opt/mailman/var/master.pid 2>/dev/null` 2>/dev/null || true
# Don't run "mailman3 reopen" with SELinux on here in the logrotate
# context, it will be blocked
/opt/mailman/mailman-venv/bin/mailman reopen >/dev/null 2>&1 || true
endscript
}
It is now more like the Fedora one and seems to be better.
Now in the mailman.log I see the HOLD messages and the approved messages. The smtp.log logs just the incoming Mail, which seems to be fine.
So, here a complete Trace:
smtp.log:
Aug 05 10:18:40 2025 (217984) Available AUTH mechanisms: LOGIN(builtin) PLAIN(builtin)
Aug 05 10:18:40 2025 (217984) Peer: ('127.0.0.1', 57074)
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) handling connection
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) >> b'LHLO lists.rwth-aachen.de'
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) >> b'MAIL FROM:<SENDER> SIZE=15187'
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) sender: SENDER
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) >> b'RCPT TO:<stephansmodliste(a)lists.example.com>'
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) recip: stephansmodliste(a)lists.example.com
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) >> b'DATA'
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) >> b'QUIT'
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) connection lost
Aug 05 10:18:40 2025 (217984) ('127.0.0.1', 57074) Connection lost during _handle_client()
The mailman.log:
Aug 05 10:18:40 2025 (217983) HOLD: stephansmodliste(a)lists.example.com post from SENDER held, message-id=<b93e46d8342f42039c99e1d2d036c711@SENDERDOMAIN>: The message is not from a list member
Aug 05 10:21:04 2025 (218015) held message approved, message-id: <b93e46d8342f42039c99e1d2d036c711@SENDERDOMAIN>
[05/Aug/2025:10:21:04 +0200] "POST /3.1/lists/stephansmodliste(a)lists.example.com/held/211056 HTTP/1.1" 204 0 "-" "GNU Mailman REST client v3.3.5"
[05/Aug/2025:10:21:04 +0200] "GET /3.1/lists/stephansmodliste(a)lists.example.com/held?count=0&page=1 HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.5"
[05/Aug/2025:10:21:04 +0200] "GET /3.1/lists/stephansmodliste(a)lists.example.com/held?count=10&page=1 HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.5"
[05/Aug/2025:10:21:04 +0200] "GET /3.1/lists/stephansmodliste(a)lists.example.com/requests/count?token_owner=moderator HTTP/1.1" 200 73 "-" "GNU Mailman REST client v3.3.5"
[05/Aug/2025:10:21:04 +0200] "GET /3.1/lists/stephansmodliste(a)lists.example.com/held/count HTTP/1.1" 200 73 "-" "GNU Mailman REST client v3.3.5"
Aug 05 10:21:05 2025 (217986) Cannot connect to SMTP server localhost on port 25
The last error is a very often in the mailman.log:
Aug 05 09:46:12 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 09:46:13 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 09:46:13 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 09:46:14 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 09:46:24 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 09:50:22 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 09:50:24 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 09:53:30 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 09:55:01 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 09:55:01 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 09:55:09 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 09:57:44 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 09:57:46 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 09:58:50 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 09:58:52 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 09:58:52 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 09:58:53 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 09:58:53 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 09:58:53 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 10:01:18 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:02:02 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 10:07:11 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 10:10:36 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:11:35 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:16:04 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:16:05 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 10:16:07 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:16:58 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 10:17:42 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:18:30 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:20:13 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:21:05 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:08 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:08 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:31 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:37 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:44 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:47 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:50 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:28:57 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:29:22 2025 (217988) Cannot connect to SMTP server localhost on port 25
Aug 05 10:29:40 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:29:41 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:30:37 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:30:37 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:30:50 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:31:15 2025 (217987) Cannot connect to SMTP server localhost on port 25
Aug 05 10:33:42 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:33:53 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:34:27 2025 (217985) Cannot connect to SMTP server localhost on port 25
Aug 05 10:34:28 2025 (217986) Cannot connect to SMTP server localhost on port 25
Aug 05 10:38:25 2025 (230250) Cannot connect to SMTP server lists.example.com on port 25
Aug 05 10:38:25 2025 (230247) Cannot connect to SMTP server lists.example.com on port 25
Even after changing the smtp_host in mailman.cfg this error appears randomly.
Sadly the mail does not get delivered.
--
Stephan Krinetzki
IT Center
Gruppe: Anwendungsbetrieb und Cloud
Abteilung: Systeme und Betrieb
RWTH Aachen University
Seffenter Weg 23
52074 Aachen
Tel: +49 241 80-24866
Fax: +49 241 80-22134
krinetzki(a)itc.rwth-aachen.de
www.itc.rwth-aachen.de
Social Media Kanäle des IT Centers:
https://blog.rwth-aachen.de/itc/
https://www.facebook.com/itcenterrwth
https://www.linkedin.com/company/itcenterrwth
https://twitter.com/ITCenterRWTH
https://www.youtube.com/channel/UCKKDJJukeRwO0LP-ac8x8rQ
-----Original Message-----
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Tuesday, August 5, 2025 12:51 AM
To: mailman-users(a)mailman3.org
Subject: [MM3-users] Re: Held messages not delivered after approval
On 8/4/25 00:21, Krinetzki, Stephan wrote:
>>
>> And for every one of those shunted messages there should be an exception with traceback logged in mailman.log. Those tracebacks should be helpful.
>
> If there were any. Maybe the "debug" level should be "info". But for which logs?
The standard logging levels from lowest to highest are
debug
info
warning
error
critical
Whatever level is set for a log results in all messages of that level or higher being logged. I.e. if the log's level is debug, all messages for that log of any level should be logged.
For every shunted message, a message like
`SHUNTING: <file name without the .pck extention>` preceded by the exception and traceback is logged to error.log with level error. See
https://gitlab.com/mailman/mailman/-/blob/master/src/mailman/core/runner.py…
> Maybe the restart at night after the lograte maybe the issue.
As I said before, blindly restarting Mailman is a bad idea. On servers that I maintain, I always verify that all queues are empty before stopping or restarting Mailman. If necessary, I'll kill the incoming runner and wait for the out queue to empty and then stop mailman. If you want to do this daily, you could automate that., e.g.
```
if queues empty:
restart Mailman
else:
when in queue is empty, sigterm incoming runner
when out queue is empty, stop Mailman
when Mailman stopped, start Mailman ``` The stop/start is needed because a simple restart at that point won't start the sigtermed incoming runner.
--
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/
Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
This message sent to krinetzki(a)itc.rwth-aachen.de
1 year, 3 months
[MM3-users] Re: messages stuck in the bad queue
by Ken Alker
--On Sunday, June 25, 2023 2:47 PM -0700 Mark Sapiro <mark(a)msapiro.net>
wrote:
> On 6/25/23 1:31 PM, Ken Alker wrote:
>>
>> I moved the .psv file from the bad queue into the shunt queue. I then
>> ran "mailman unshunt" (as user 'mailman' while in the virtual
>> environment). I tailed mailman.log during this process and no logs
>> were spit out. The date stamp on the .psv file never changed (maybe
>> it does not when being moved between queues?) and, AFAICT, the file
>> never moved from the shunt queue. I waited maybe five minutes, tops.
>
>
> I forgot that the extension in the `bad` queue is `.psv` (for preserve).
> You have to rename it to `.pck`.
Ah! I noticed the file extension difference but only for a fleeting
moment, and I convinced myself during that moment that I must have looked
at the original one (.pck) incorrectly (even though I knew it stood for
"pickle"... and so the vaguely-noted discrepancy never made it to the stop
of the stack... but it eventually may have, but I still wouldn't have know
how that would affect the queued file. That solves that issue.
>>>> Is there a way to reprocess the bad queue?
>>>
>>> You could just move the messages to the 'in' queue.
>
>
> Changing .psv to .pck in the process. this can be done, e.g., by
> ```
> for file in `ls var/queue/bad/*.psv;do mv /var/queue/bad/$file
> /var/queue/in/${file/psv/pck};done
> ```
I moved one message by hand, and, wow.. the runner just gobbles it up...
fast!
>> I just now tried moving the same message into the 'in' queue but, again,
>> nothing happened. I left it in there for five minutes. Do I have to
>> run a program to get it to act on the 'in' queue (I presume that there
>> is a "runner" that is always looking and taking care of this already as
>> I presume this is the queue where all 'normal' traffic is handled).
>
>
> Again, you need to change the extension to .pck.
>
>
>> Here are the (obfusacted) results of "mailman qfile
>> /opt/mailman/mm/var/queue/shunt/1675389793.6945386+2aeaf0015558c9d8380c9
>> 6142c3fa9d03a8142bc.psv" (the message I was experimenting with):
>>
>> [----- start pickle -----]
>> <----- start object 1 ----->
>> MIME-Version: 1.0
>> Content-Type: text/plain; charset="us-ascii"
>> Content-Transfer-Encoding: 7bit
>> Subject: THE-list subscription notification
>> From: email(a)obfuscated.com
>> To: the-list-owner(a)lists.obfuscated.com
>> Message-ID: <167538979369.2390432.521344217673230839(a)obfuscated.net>
>> Date: Thu, 02 Feb 2023 18:03:13 -0800
>> Precedence: bulk
>>
>> user(a)domain.tld has been successfully subscribed to THE-list.
>>
>> <----- start object 2 ----->
>> { '_parsemsg': False,
>> 'envsender': 'email(a)obfuscated.com',
>> 'listid': 'the-list.obfusacted.com',
>> 'nodecorate': True,
>> 'recipients': {'person(a)domain.tld'},
>> 'reduced_list_headers': True,
>> 'version': 3}
>> [----- end pickle -----]
>
>
> I was assuming these were list welcome messages which they aren't. They
> are owner notifications, so they were sent to the -owner address and
> processed through the owner-pipeline, but unless the Debian package
> changed the default-owner-pipeline, it doesn't contain mime-delete so how
> they ended up in the `bad` queue is still a mystery.
>
> However, what would be the point of resending these at this time?
Because I didn't know if they were ALL subscribe notices or if there were
other people's emails mixed in. I felt, at the time, that it would be
easier to requeue them and then be able to manipulate the results in my
email client (ie. sort by subject) than to try to do it at the Unix level.
That said, since there is more than one queue I'd have to move them into,
the sorting process would require manipulating/viewing the messages at the
Unix level first anyway and if I have to do that I might as well just
inspect them all at the Unix level and skip the re-injection, as you noted.
Also, after countless hours of learning over the past two days, I'm more
qualified to do that now.
So, I modified your suggested script thusly:
for file in `ls var/queue/bad/*.psv`
do
mailman qfile $file >>results
done
and then compared the number of times "subscription notification" appeared
in the results file (grep subscription\ notification results | wc) to the
total numbers of "bad" messages (ls var/queue/bad | wc) and they matched
(1142 of each). And just for fun and as a second check, I did a "grep
subscription results | sort | uniq" and ended up with three lines of
output; one for each mailing list import, and nothing more. It's things
like that that really make me appreciate and enjoy the Unix shell.
Thanks for the wisdom and for a slice of your time; I'm learning a lot and
I appreciate the help.
Ken Alker
KA6KEN
3 years, 4 months
[MM3-users] Re: Please help - Held message is crashing mailman.
by Alex King
Thanks for your help Mark, it's ideal having the pointer to the issue in
gitlab.
I'll raise a bug with Ubuntu because this makes mailman3 in their LTS
version unusable for me. Perhaps they can backport a fix for their
version in LTS, otherwise they may have a backport or PPA source where I
can get a 3.2 version, or just pin some packages from cosmic or disco.
I think documenting this will be useful to people who hit the issue in
future (Bionic/18.04 is supported until 2023, and likely the most used
until 20.04 is released).
Thanks,
Alex
On 7/04/19 4:29 AM, Mark Sapiro wrote:
> On 4/5/19 10:27 PM, Alex King via Mailman-users wrote:
>> Hi,
>>
>> I've used mailman a lot in the past, and decided to install mailman3 in
>> a recent install. I'm unimpressed so far, it seems buggy.
>>
>> Running on Ubuntu 18.04.2 LTS from packages, mailman3 3.1.1-9,
>> mailman3-web 0+20170523-14, python-django-postorius 1.1.2-3.
>>
>> After a few messages, I now can't go to the "Held Messages" in
>> postorius, I get a 500 error.
>>
>> I tried to interact on the command line, but could not work out how.
>> Reading
>> https://mailman.readthedocs.io/en/latest/src/mailman/docs/install.html
>> and
>> https://mailman.readthedocs.io/en/latest/src/mailman/commands/docs/shell.ht…,
>> I tried:
>>
>> # mailman shell
>> Welcome to the GNU Mailman shell
>>
>>>>> command = cli('mailman.commands.cli_withlist.shell')
>> Traceback (most recent call last):
>> File "/usr/lib/python3.6/code.py", line 91, in runcode
>> exec(code, self.locals)
>> File "<console>", line 1, in <module>
>> NameError: name 'cli' is not defined
>>
>> I did a lot of reading of the manual and googled, but I have no idea
>> where the cli object is supposed to come from.....? The documentation
>> is confusing.
>
> The line
>
> command = cli('mailman.commands.cli_withlist.shell')
>
> in
> <https://mailman.readthedocs.io/en/latest/src/mailman/commands/docs/shell.ht…>
> is dependent upon some behind the scenes setup to make the doctests
> work. Granted this is confusing, but basically all that does is set
> things up for the doctests to run the 'mailman shell' command. It is not
> intended to be run from within 'mailman shell'.
>
>
>> Anyway, after some trial and error, i found:
>>
>> # mailman shell
>> Welcome to the GNU Mailman shell
>>>>> list_manager = getUtility(IListManager)
>>>>> m=list_manager.get("committee(a)[redacted].org")
>>>>> from mailman.interfaces.requests import IListRequests
>>>>> requests = IListRequests(m)
>>>>> [x for x in requests.held_requests][0].id
>> 8
>>>>> requests.get_request(8)
>> Traceback (most recent call last):
>> File "/usr/lib/python3.6/code.py", line 91, in runcode
>> exec(code, self.locals)
>> File "<console>", line 1, in <module>
>> File "/usr/lib/python3/dist-packages/mailman/database/transaction.py",
>> line 85, in wrapper
>> return function(args[0], config.db.store, *args[1:], **kws)
>> File "/usr/lib/python3/dist-packages/mailman/model/requests.py", line
>> 120, in get_request
>> result.data_hash, expunge=False)
>> File "/usr/lib/python3/dist-packages/mailman/database/transaction.py",
>> line 85, in wrapper
>> return function(args[0], config.db.store, *args[1:], **kws)
>> File "/usr/lib/python3/dist-packages/mailman/model/pending.py", line
>> 138, in confirm
>> value = json.loads(keyvalue.value)
>> File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
>> return _default_decoder.decode(s)
>> File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
>> obj, end = self.raw_decode(s, idx=_w(s, 0).end())
>> File "/usr/lib/python3.6/json/decoder.py", line 355, in raw_decode
>> obj, end = self.scan_once(s, idx)
>> json.decoder.JSONDecodeError: Unterminated string starting at: line 1
>> column 1 (char 0)
>>
>> It seems something was written out to disk that can't be read in for
>> some reason (assuming a json object on disk?)
>
> This is <https://gitlab.com/mailman/mailman/issues/385> which should be
> fixed by <https://gitlab.com/mailman/mailman/merge_requests/333>. The
> fix in in Mailman core version 3.2.0
>
>
>> How do I debug this further? How do I find the json being decoded? Any
>> help would be appreciated. (I found mailman2 just worked, I was happy
>> with that.)
>
> The issue is in storing a pickled representation of the json encoding of
> 'rule_misses'. This gets very long if you have lots of header filters,
> and with at least the mysql backend gets truncated in the database which
> causes the Unterminated string error.
>
> I'm not sure what your options are for upgrading. The current Debian
> packages are all >= 3.2.0 [1], but Ubuntu doesn't get 3.2.0 until cosmic
> (18.10) [2].
>
> [1] https://packages.debian.org/search?keywords=mailman3
> [2] https://packages.ubuntu.com/search?keywords=mailman3
>
>> (My colleague posted a bug about this I believe but I don't have the
>> link to that.)
>
> I haven't seen it.
>
>
7 years, 7 months
[MM3-users] Re: error changed after restart
by Guillermo Hernandez (Oldno7)
On 6/2/21 18:08, Abhilash Raj wrote:
>
> On Sat, Feb 6, 2021, at 3:04 AM, Guillermo Hernandez (Oldno7) via Mailman-users wrote:
>> I restarted de server and the error changed. Now the log shows
>> "KeyError: 'subscription_mode'":
> Did you also restart Mailman Core after the upgrade?
Yes, indeed:
I stopped mailman core and all the processes related. Did the upgrades.
Started all again. Find the errors in the web user interface. Stopped
all again. Looked for errors in the log. Restarted the complete server.
Found the second error that this second mail is about to. It happens
when, in the main page that shows all the lists you click to see one of
them. It seems to me that it has been database structure changes in
django that the upgrade is not aware... but it's a very long shot from
my side.
I'm using sqlite as django database and mysql for mailman.
>
>> ERROR 2021-02-06 11:47:49,015 26798 django.request Internal Server
>> Error: /mailman3/mailman3/lists/name_and_domain.of.the.list
>> Traceback (most recent call last):
>> File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 119, in __getattr__
>> return self._get(name)
>> File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 86, in _get
>> raise KeyError(key)
>> KeyError: 'subscription_mode'
>>
>> During handling of the above exception, another exception occurred:
>>
>> Traceback (most recent call last):
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py",
>> line 34, in inner
>> response = get_response(request)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>> line 115, in _get_response
>> response = self.process_exception_by_middleware(e, request)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>> line 113, in _get_response
>> response = wrapped_callback(request, *callback_args, **callback_kwargs)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>> line 71, in view
>> return self.dispatch(request, *args, **kwargs)
>> File
>> "/usr/local/lib/python3.7/site-packages/postorius/views/generic.py",
>> line 74, in dispatch
>> return super(MailingListView, self).dispatch(request, *args, **kwargs)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>> line 97, in dispatch
>> return handler(request, *args, **kwargs)
>> File
>> "/usr/local/lib/python3.7/site-packages/postorius/views/list.py", line
>> 295, in get
>> member.subscription_mode ==
>> File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 124, in __getattr__
>> self.__class__.__name__, name))
>> AttributeError: 'Member' object has no attribute 'subscription_mode'
>> ***********************
>> some info about the installed versions via pip list:
>> pip list | grep django
>> django-allauth 0.44.0
>> django-appconf 1.0.4
>> django-compressor 2.4
>> django-extensions 3.1.0
>> django-gravatar2 1.4.4
>> django-haystack 3.0
>> django-mailman3 1.3.5
>> django-picklefield 3.0.1
>> django-q 1.3.4
>> djangorestframework 3.12.2
>>
>> pip list | grep mailman
>> django-mailman3 1.3.5
>> mailman 3.3.3
>> mailman-hyperkitty 1.1.0
>> mailmanclient 3.3.2
>>
>> pip list | grep postorius
>> postorius 1.3.4
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On 6/2/21 11:12, Guillermo Hernandez (Oldno7) via Mailman-users wrote:
>>> I've just upgrade mailman 3 installation following Mr. Sapiro advice:
>>> did a
>>>
>>> pip install --upgrade django-mailman3 hyperkitty mailman mailmanclient
>>> mailman-hyperkitty postorius
>>>
>>> I did a "python3 manage.py migrate" after, too.
>>>
>>> And all seemed to run well.
>>>
>>> All the lists showed in postorius via web, but when I try to accesss
>>> into one of them the browser shows an error.
>>>
>>> In the log you can see:
>>>
>>> *-*-*-*-*-*-*
>>>
>>> Traceback (most recent call last):
>>> File
>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>> line 119, in __getattr__
>>> return self._get(name)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>> line 86, in _get
>>> raise KeyError(key)
>>> KeyError: 'get_requests_count'
>>>
>>> ... (And after all the traceback lines)
>>>
>>> AttributeError: 'MailingList' object has no attribute
>>> 'get_requests_count'
>>>
>>> *-*-*-*-*-*-*-*
>>>
>>> The lists seem to be distributing messeages well.. but I cannot acces
>>> via web administration (django/postorius)
>>>
>>> Can anyone point me in the right direction to solve this, please?
>>>
>>> _______________________________________________
>>> 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/
>>>
>> _______________________________________________
>> 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/
>>
5 years, 9 months
[MM3-users] Re: Message-Footer after migrating to Mailman3
by christopher.claus@tgcamberg1848.de
Mark Sapiro wrote:
> > ERROR 2021-05-24 16:22:22,895 1648 django.security.DisallowedHost Invalid HTTP_HOST header: 'tgc_mailman_web:8000'. The domain name provided is not valid according to RFC 1034/1035.
> > WARNING 2021-05-24 16:22:22,896 1648 django.request Bad Request: /postorius/api/templates/list/homepage.gruppe.tgcamberg1848.de/list:member:regular:footer
> > It appears you created the new template with Postorius, but there is an
> issue for Postorius templates. Possibly your Django setting for
> POSTORIUS_TEMPLATE_BASE_URL needs to be adjusted.
> > Obviously I have a problem with the hostname. I set
> > [code]
> > POSTORIUS_TEMPLATE_BASE_URL=http://tgc_mailman_web:8000
> > [/code]
> > where tgc_mailman_web is my container name. This URL ist stored in the DB-table "template" for the name=list:member:regular:footer. A call to my fqdn or to localhost
> > [code]
> > wget http://localhost:8000/postorius/api/templates/list/homepage.gruppe.tgcamberg...
> > [/code]
> > will return the footer itself - this works fine. Therefore, should i set POSTORIUS_TEMPLATE_BASE_URL to http://localhost:8000?
> > If that works, yes.
Hi Mark,
thanks for your reply and excuse my delay. I was very busy in the last weeks but made some tests. Newly created templates with POSTORIUS_TEMPLATE_BASE_URL=http://localhost:8000 did not work. I changed it to my fqdn - at the moment I am able to access the template via this URl (e.G. http://lists.example.de:8000/postorius/api/templates/list/homepage.lists.ex…)
But if I try to send an email I got the following error:
Jul 09 16:00:37 2021 (27) Uncaught runner exception: HTTPConnectionPool(host='lists.example.de', port=8000): Max retries exceeded with url: /postorius/api/templates/list/homepage.lists.example.de/list:admin:action:post (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe80eaaec40>: Failed to establish a new connection: [Errno 111] Connection refused'))
Jul 09 16:00:37 2021 (27) Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/urllib3/connection.py", line 159, in _new_conn
conn = connection.create_connection(
File "/usr/lib/python3.8/site-packages/urllib3/util/connection.py", line 84, in create_connection
raise err
File "/usr/lib/python3.8/site-packages/urllib3/util/connection.py", line 74, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 670, in urlopen
httplib_response = self._make_request(
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 392, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/lib/python3.8/http/client.py", line 1255, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib/python3.8/http/client.py", line 1301, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib/python3.8/http/client.py", line 1250, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.8/http/client.py", line 1010, in _send_output
self.send(msg)
File "/usr/lib/python3.8/http/client.py", line 950, in send
self.connect()
File "/usr/lib/python3.8/site-packages/urllib3/connection.py", line 187, in connect
conn = self._new_conn()
File "/usr/lib/python3.8/site-packages/urllib3/connection.py", line 171, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7fe80eaaec40>: Failed to establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 724, in urlopen
retries = retries.increment(
File "/usr/lib/python3.8/site-packages/urllib3/util/retry.py", line 439, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='lists.example.de', port=8000): Max retries exceeded with url: /postorius/api/templates/list/lists.example.de/list:admin:action:post (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe80eaaec40>: Failed to establish a new connection: [Errno 111] Connection refused'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/mailman/core/runner.py", line 173, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/lib/python3.8/site-packages/mailman/core/runner.py", line 266, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/lib/python3.8/site-packages/mailman/runners/incoming.py", line 79, in _dispose
process(mlist, msg, msgdata, start_chain)
File "/usr/lib/python3.8/site-packages/mailman/core/chains.py", line 79, in process
link.function(mlist, msg, msgdata)
File "/usr/lib/python3.8/site-packages/mailman/chains/hold.py", line 232, in _process
template = getUtility(ITemplateLoader).get(
File "/usr/lib/python3.8/site-packages/mailman/model/template.py", line 188, in get
contents = getUtility(ITemplateManager).get(
File "/usr/lib/python3.8/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.8/site-packages/mailman/model/template.py", line 110, in get
contents = protocols.get(actual_uri, **auth)
File "/usr/lib/python3.8/site-packages/mailman/utilities/protocols.py", line 38, in get
response = requests.get(url, timeout=REQUEST_TIMEOUT, **kws)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='lists.example.de', port=8000): Max retries exceeded with url: /postorius/api/templates/list/lists.example.de/list:admin:action:post (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fe80eaaec40>: Failed to establish a new connection: [Errno 111] Connection refused'))
I set POSTORIUS_TEMPLATE_BASE_URL=lists.example.de:8000 and I have no idea, why the connection is refused. Do you see any configuration error d or have another idea?
Best regards,
chrclaus
5 years, 4 months
[MM3-users] Re: A little stuck with installation of MM3 - ModuleNotFoundError: No module named 'flufl.lock'
by Odhiambo Washington
On Sat, 25 Jul 2020 at 19:58, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 7/25/20 6:36 AM, Odhiambo Washington wrote:
> > I decided to try this again, on FreeBSD-12.1
> >
> > I still decided to follow
> > https://wiki.list.org/DOC/Mailman%203%20installation%20experience which
> I
> > know is not the main documentation, but I find the process easier to
> follow.
> > I am also taking notes to see if I could share if I manage to succeed.
> This
> > is important for me because Python-2.7 is being removed from FreeBSD in
> Dec
> > 2020. I need to bail
> > out of mailman-2.x before that happens so I am trying my hand again om
> MM3.
> > I have failed before :-)
>
> Even if it's not in FreeBSD, you can download Python 2.1.18 from
> <https://www.python.org/downloads/release/python-2718/> and install it.
>
>
> > (venv) [root@gw /opt/mailman/mm]# pip install flufl.lock
> ...
> > Even after the 'pip install flufl.lock' it still doesn't find it!
>
>
> This is a packaging glitch with the flufl modules. Remove and reinstall
> them.
>
> pip uninstall flufl.bounce flufl.i18n flufl.lock
> pip install flufl.bounce flufl.i18n flufl.lock
>
>
It would appear that luck isn't just on my side:
root@gw:/opt/mailman/mm # pip uninstall flufl.bounce flufl.i18n flufl.lock
WARNING: Skipping flufl.bounce as it is not installed.
WARNING: Skipping flufl.i18n as it is not installed.
Found existing installation: flufl.lock 4.0
Uninstalling flufl.lock-4.0:
Would remove:
/usr/local/lib/python3.7/site-packages/flufl.lock-4.0-py3.7-nspkg.pth
/usr/local/lib/python3.7/site-packages/flufl.lock-4.0.dist-info/*
/usr/local/lib/python3.7/site-packages/flufl/lock/*
Proceed (y/n)? y
Successfully uninstalled flufl.lock-4.0
root@gw:/opt/mailman/mm # pip install flufl.bounce flufl.i18n flufl.lock
Collecting flufl.bounce
Downloading flufl.bounce-3.0.1-py3-none-any.whl (175 kB)
|████████████████████████████████| 175 kB 18 kB/s
Collecting flufl.i18n
Downloading flufl.i18n-3.0.tar.gz (21 kB)
Processing
/root/.cache/pip/wheels/5a/de/bb/5e6448d5923f53f07f181ec225bf7b1d778d42384869dcf261/flufl.lock-4.0-py3-none-any.whl
Requirement already satisfied: atpublic in
/usr/local/lib/python3.7/site-packages (from flufl.bounce) (1.0)
Collecting zope.interface
Downloading zope.interface-5.1.0.tar.gz (225 kB)
|████████████████████████████████| 225 kB 35 kB/s
Requirement already satisfied: psutil in
/usr/local/lib/python3.7/site-packages (from flufl.lock) (5.7.2)
Requirement already satisfied: setuptools in
/usr/local/lib/python3.7/site-packages (from zope.interface->flufl.bounce)
(40.6.2)
Building wheels for collected packages: flufl.i18n, zope.interface
Building wheel for flufl.i18n (setup.py) ... done
Created wheel for flufl.i18n: filename=flufl.i18n-3.0-py3-none-any.whl
size=27279
sha256=7adc834e27423865de03bcad268b86d9df1d24c59110c7e4d4b8bb5863fb4e53
Stored in directory:
/root/.cache/pip/wheels/5c/85/09/5b346688f1283d8622ac06adf4f2682bb13d36c2f410c52eb6
Building wheel for zope.interface (setup.py) ... done
Created wheel for zope.interface:
filename=zope.interface-5.1.0-cp37-cp37m-freebsd_12_1_RELEASE_p7_amd64.whl
size=194660
sha256=51f326627a9121d8b4df989714bdcdf516f02d55f99de38bb9d7cc9867d93146
Stored in directory:
/root/.cache/pip/wheels/84/93/fd/6bcb85b4bbf697c15b066350384cf3651feb47dcd5029a0b8d
Successfully built flufl.i18n zope.interface
Installing collected packages: zope.interface, flufl.bounce, flufl.i18n,
flufl.lock
Successfully installed flufl.bounce-3.0.1 flufl.i18n-3.0 flufl.lock-4.0
zope.interface-5.1.0
root@gw:/usr/home/wash # cd /opt/mailman/mm/
root@gw:/opt/mailman/mm # virtualenv venv
created virtual environment CPython3.7.8.final.0-64 in 285ms
creator CPython3Posix(dest=/opt/mailman/mm/venv, clear=False,
global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle,
wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
added seed packages: PyMySQL==0.10.0, Whoosh==2.7.4, gunicorn==20.0.4,
mod_wsgi==4.7.1, mysqlclient==2.0.1, pip==20.1.1, psycopg2_binary==2.8.5,
pylibmc==1.6.1, setuptools==49.2.0, wheel==0.34.2
activators
BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
root@gw:/opt/mailman/mm # bash
[root@gw /opt/mailman/mm]# source /opt/mailman/mm/venv/bin/activate
(venv) [root@gw /opt/mailman/mm]# /opt/mailman/mm/bin/mailman-post-update
+ '[' False == False ']'
+ mkdir -p /opt/mailman/mm/static
+ /opt/mailman/mm/bin/django-admin collectstatic --clear --noinput
--verbosity 0
Traceback (most recent call last):
File "/opt/mailman/mm/venv/bin/django-admin", line 33, in <module>
sys.exit(load_entry_point('Django==3.0.8', 'console_scripts',
'django-admin')())
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/core/management/__init__.py",
line 401, in execute_from_command_line
utility.execute()
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/core/management/__init__.py",
line 377, in execute
django.setup()
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/__init__.py",
line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/apps/registry.py",
line 114, in populate
app_config.import_models()
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/apps/config.py",
line 211, in import_models
self.models_module = import_module(models_module_name)
File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in
_call_with_frames_removed
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/HyperKitty-1.3.4-py3.7.egg/hyperkitty/models/__init__.py",
line 26, in <module>
from .email import Attachment, Email
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/HyperKitty-1.3.4-py3.7.egg/hyperkitty/models/email.py",
line 35, in <module>
from .mailinglist import MailingList
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/HyperKitty-1.3.4-py3.7.egg/hyperkitty/models/mailinglist.py",
line 37, in <module>
from hyperkitty.lib.utils import pgsql_disable_indexscan
File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/HyperKitty-1.3.4-py3.7.egg/hyperkitty/lib/utils.py",
line 42, in <module>
from flufl.lock import Lock
ModuleNotFoundError: No module named 'flufl.lock'
(venv) [root@gw /opt/mailman/mm]#
What else should I try?
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", grep ^[^#] :-)
6 years, 3 months
[MM3-users] Re: Timeouts
by Abhilash Raj
> On Apr 25, 2021, at 7:06 PM, tlhackque via Mailman-users <mailman-users(a)mailman3.org> wrote:
>
> On 25-Apr-21 20:34, Mark Sapiro wrote:
>> On 4/25/21 4:37 PM, tlhackque via Mailman-users wrote:
>>
>>> The described timeouts are something that hyperkitty ought to be able to
>>> avoid. For apache, the timeout is idle time between blocks of output.
>>> Hyperkitty can avoid this by generating the archive in segments (based
>>> on size, or elapsed time), flushing its output buffer, generating a
>>> multi-file archive, and/or using Transfer-Encoding: chunked (chunked
>>> doesn't work for http/2). It ought to be able to break the
> work into
>>> blocks of "n" messages & do something to generate output. Besides
>>> avoiding timeouts, working in segments allows the GUI to display
>>> meaningful progress (e.g. if you're loading with XMLHttpRequest,
>>> "onprogress") It really oughtn't be up to the user to break up the
>>> request.
>> It is not the web server that times out. I'm not sure about uwsgi
>> because I don't use it, but the timeouts I see are on servers that use
>> gunicorn as the WSGI interface to Django and the timeout is in a
>> gunicorn worker. This is controlled by the timeout setting in the
>> gunicorn config. <https://docs.gunicorn.org/en/stable/settings.html#timeout>
>>
>> Note that even 300 seconds is not enough to download the entire
>> <https://mail.python.org/archives/list/python-dev@python.org/> archive.
>>
>> It may be possible to get HyperKitty to chunk the output to avoid this,
>> but it doesn't currently do that. Care to submit an MR?
>>
>>
> I'm afraid (u)WSGI, Django, and gunicorn are not technologies that I
> work with.
>
> It sounds as if hyperkitty is compiling the entire archive before
> sending the first byte.
>
> The gunicorn doc that you pointed to says
>
> Workers silent for more than this many seconds are killed and restarted.
> Setting it to 0 has the effect of infinite timeouts by disabling
> timeouts for all workers entirely.
>
> "Silent" sounds like the standard webserver "you have to push some bits,
> or we assume you're stuck".
>
> My understanding is that gunicorn is a Python persistence server that is
> run behind a webserver proxy. So the (proxy) webserver (apache, nginx,
> ...) timeouts also apply and would need to be increased.
>
> Might be interesting to try 0 (gunicorn) / 1200 (webserver) with your
> python-dev archive, time it and see how much (encoded) data is
> transferred... (I would expect most mailing list archives to compress
> nicely, though those with binary attachments wont.)
For uwsgi, I think the parameter is called `harakiri`[1][2] (I don’t know why such a name though).
[1]: https://uwsgi-docs.readthedocs.io/en/latest/Options.html#harakiri
[2]: https://uwsgi-docs.readthedocs.io/en/latest/Glossary.html
> if request takes longer than specified harakiri time (in seconds), the request will be dropped and the corresponding worker recycled.
This should be set to a long enough value that allows downloading the archive.
If you are using http socket, then you want http-timeout.
Also, to set the timeout in webserver (nginx)
location / {
uwsgi_read_timeout 120s;
uwsgi_send_timeout 120s;
uwsgi_pass 0.0.0.0:8000;
include uwsgi_params;
}
Or some other value that you want.
> But fiddling with timeouts is treating the symptom, not the root cause.
> The right solution is to stream, segment (or chunk) the output, because
> in the general case, no timeout is long enough. It'll always be
> possible to find an archive that's just one byte (or second) longer than
> any chosen timeout. (See the halting problem.) You want
> the timeout
> to catch a lack of progress, not total time that's a function of
> transaction size. (Webservers may also have limits on transaction size
> - e.g. mod_security, but they're only useful when the upper bound on a
> response is knowable.) Thus, the timeout(s) should be roughly
> independent of the archive size; on the order of time-to-first-byte
> (which ordinarily is longer than time between segments/chunks).
>
> Also note that streaming requires fewer server resources than compiling
> a complete archive before sending, since you don't need to create the
> entire archive in memory (or in a tempfile). You only need enough
> memory to efficiently buffer the file I/O and to contain the compression
> tables/output buffer. Except for trivial cases, this will be
> independent of the archive size. The only downside is that if the comm
> link is slow, you may hold a reader lock on the source data for longer
> than necessary with the current scheme.
>
> Seems as though this deserves an issue. I guess I could open one - but
> you have the experience/test cases.
Hyperkitty doesn’t actually create an archive in memory or in a temp file. It uses streaming response with on the fly compression to read from database and relay to the client for download.
https://gitlab.com/mailman/hyperkitty/-/blob/master/hyperkitty/views/mlist.…
The problem could be that uwsgi seems to kill an ongoing downloading process, not an idle one for some reason. And, it seems that it is a known and intentional behavior. I don’t see a good way to disable it completely, but perhaps it can be set to a long enough value that it never essentially kills a running worker which is moving bits.
--
thanks,
Abhilash Raj (maxking)
5 years, 6 months
[MM3-users] Re: Time Stand Still
by Fabian A. Santiago
On November 23, 2017 11:38:00 AM EST, Barry Warsaw <barry(a)list.org> wrote:
>Somewhen in the dark recesses of intarweb history, I found myself as
>the project leader for both Jython (née JPython) and GNU Mailman. I'd
>been involved with Jython since it was invented by Jim Hugunin around
>the time he came to work with us at Pythonlabs. I'd been contributing
>to Mailman since we inherited John Viega's Python-based Dave Matthews
>Band list server, and put it to use replacing python.org's Majordomo
>installation.
>
>I'd enjoyed both projects, but knew I could not lead both, so I had to
>make a choice. I chose to turn over Jython to a team that's done a
>much better job over the years than I ever could have. Something about
>email, and especially the communication and collaboration patterns that
>it facilitates, really fascinated me. I know, I know, but we all have
>our lapses of sanity. Mine has lasted almost 20 years, a bit more than
>"momentary" perhaps.
>
>I've rarely gotten paid to work on Mailman, but it did provide me some
>great opportunities. Most notably it led to my 10 year stint at
>Canonical. I was originally hired on there to integrate mailing lists
>with Launchpad, and Mailman was the obvious choice. I learned a ton
>doing that project, and working within the constraints of integrating
>the two Python-based systems, especially since Launchpad was originally
>not free software and Mailman was GPL'd. Later, the Zope-based
>Launchpad source code was released under the AGPL, making much of the
>monkeypatching unnecessary, but by then the system was solid and
>reliable, and you don't fix what's not broken.
>
>Except, I guess I did. I took a lot of the lessons from that work,
>along with a good hard look at all the problems with Mailman 2, and
>began to break another cardinal rule of software development: second
>system syndrome. The result is Mailman 3. It took forever, and we're
>still not at complete feature parity with Mailman 2, but at least it's
>Real Enough to be used at many Real Sites, including python.org and
>lists.fedoraprojects.org.
>
>It would be ridiculous for me to take significant credit for this. I
>have to acknowledge the amazing user community -- you! -- for all the
>support, patches, suggestions, feedback, patience, criticism,
>donations, and contributions that you've given to the project, and to
>me personally over the years. And my deepest gratitude goes to all the
>core developers that have stayed or come and gone, but most especially
>the current Cabal: Abhilash Raj, Aurelien Bompard, Florian Fuchs, Mark
>Sapiro, Stephen J. Turnbull, Terri Oda. You should know that each and
>every one of them is truly awesome, both in what they contribute
>technically, and in their amazing friendships. Mailman is infinitely
>better because of their involvement, and I've loved spending time with
>them over the years at the Pycon sprints, making releases and sharing
>teas and meals.
>
>My blog is called We Fear Change, and that's humorously taken from a
>90's bit in Mike Myer's excellent Wayne's World movie (a phrase
>actually uttered by the brilliant Dana Carvey as Garth). The irony of
>course is that while we all may fear change, it's the one constant
>thing we can count on. And in fact, we *require* change to thrive,
>because if you aren't changing, you aren't alive. Time, and being
>engaged with life's vagaries, means there's no alternative to change;
>it must be embraced.
>
>And so, with a vague reference to the many (good!) changes in my
>personal and professional life, I'm announcing that I'm stepping down
>from the project leadership role of GNU Mailman, effective... nowish!
>And it's with unanimous agreement among the GNU Mailman Steering
>Committee (a.k.a. the Mailman Cabal), that we are announcing Abhilash
>Raj as the new project leader.
>
>If you don't recognize Abhilash's name, you probably aren't paying
>attention, at least to Mailman 3. Abhilash came to us in 2013 as a
>Google Summer of Code student, and he's become one of the project's
>most valuable contributors. His list of accomplishments is long, and
>it includes everything from redesigning the website, to integrating CI
>with our GitLab build system, porting our code to the SQLAlchemy ORM,
>adding MySQL support, revving up adoption through his Docker images,
>along with his great coding work on Core, Postorius, HyperKitty, and
>mailmanclient.
>
>This transition is good for the project too. Email, its defining
>protocols and standards, and its role in our daily lives, has changed
>profoundly since the early days of Mailman. A fresh perspective and
>enthusiasm will help keep Mailman relevant to the changing ways we --
>especially the FLOSS and tech communities -- communicate.
>
>Please join me in supporting Abhilash in every way possible as he takes
>over in this new role as project leader. I'll be here when and if
>needed, even as I create space in my "spare" time for... Something
>Else. I look forward to the vision that Abhilash will bring to the
>project, and I know that he will do a great job. To me, Mailman has
>always been about collaboration, and the best
>way for it to succeed is for you to continue to contribute your
>insights, experiences, opinions, and skills with positive intention.
>
>-Barry
>
>https://www.wefearchange.org/
Congrats Abhilash! Love the docker images!
Thank you Barry! Mailman rocks!
--
Thanks,
Fabian S.
OpenPGP: 3C3FA072ACCB7AC5DB0F723455502B0EEB9070FC
8 years, 11 months
[MM3-users] Re: Fwd: Re: Removing a mail addresses and users
by Allan Hansen
All,
Thank you for your thoughtful responses to my call for a removal of the core vs. Django disconnect. From your responses it appears that my suggestion my issues were caused by the Mailman Core was not based in reality. Instead, the issue is how Postorius interacts with the Core. My apologies for overreaching, as the cause of my issues is not an issue to me. Keeping Core a simple list manager is fine, if Postorius is easy to use and does the expected.
As a Subscriber, you are able to do switch emails in subscriptions from your options page. The URL to which is displayed in the List's Summary page when you are logged in. Yes, it requires an approval if the list's settings are set to moderate but that is going to be fixed, see this issue[1]. It is quite simple IMO to fix this one, if someone wants to take this up.
Well, it’s more than that. Based on the current setup, I have asked my subscribers who want to change their subscription addresses to:
a. Create an account if you do not already have one.
b. Go to the user profile page.
c. Select ‘E-mail Addresses’.
d. Add the new e-mail to the user profile.
e. Wait for the verification notice and verify the new address.
e1. If it does not show send email to hansen(a)rc.org <mailto:hansen@rc.org> to get the email verified manually.
f. Sign in to the account again and to the user profile (or refresh the page if not signed out).
g. Select the new address as the primary address.
h. Click on ‘Manage Lists’
i. For each list you are subscribed to:
i1. Select the list
i2. Click ‘List Options Page.’
i3. Pull down the ’Select Email’ menu.
i4 Select your new email.
i5. Press ‘Change email used for subscription.
i6. When the moderator contacts you, explain that you are just changing your email.
i6.1. If the moderator is late, send a reminder or send email to hansen(a)rc.org <mailto:hansen@rc.org> to bypass the moderator.
Most people choke on these instructions, so I have unfortunately resorted to just asking them to subscribe the new address and forget about the old. This is not good for our reputation when the old addresses start bouncing. So, in more detail:
I would like to ask my subscribers who want to change their address to:
a. Create an account if you did not already have one.
b. Go to the user profile page.
c. Select ‘E-mail Addresses’.
d. Select an existing address e-mail listed the user profile.
e. Press new button ‘Change address’.
f. When page refreshes, enter the new e-mail address.
g. Press ‘Apply.'
d. Wait for the verification notice.
d1. If it does not show send email to hansen(a)rc.org <mailto:hansen@rc.org> to get the email verified manually.
In other words, in addition to ‘Make Primary’ and ‘Re-send Verification’ and ‘Remove’, another button says: ‘Change Address’ or’ ‘Replace Address’ or some such.
This button brings up another page that looks the same, but instead of ‘Add E-mail Adress’ is says : Enter New E-mail Address’
and instead of ‘Add E-mail’ is says: ‘Apply’. Then the page refreshes back to the original page, but the new address is now
replacing the old address. Optionally, it can show the old address still with a ‘pending change’ until verification.
Further, when the new address is verified, all lists get updated with the new address replacing the old
address and all settings associated with the old address are now associated with the new address. No moderator or admin
involvement needed (other than d1).
You are able to sign in via web and manage your email and subscriptions. The preferences also work exactly how you described above where the lower level override the default and/or upper level settings.
To some extent that is true, Abhilash, and I appreciate that. The above (address change) is a missing piece in that picture and I look forward to seeing it added, if you have time.
Yours,
Allan Hansen
hansen(a)rc.org
> On Jun 14, 2020, at 0:19 , Stephen J. Turnbull <turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
>
> Mark Sapiro writes:
>
>> Then the people who developed the web based management UI (Postorius)
>> and archive UI (HyperKitty) chose to develop those within a Django
>> framework and Django has its own concept of User separate from Mailman
>> Core and that is where the disconnect occurs.
>>
>> It's not that Mailman Core lacks what you want. It's that Django doesn't
>> use it.
>
> I think that's mostly right, in terms of the features that users miss.
> However, as far as I know, Mailman core does lack facilities for
> identification, authentication, and authorization of connections to
> the REST API. And that means that the front ends have to handle
> this. I would guess that's why the web interfaces are built around
> Django user authentication.
>
> I think it would be possible to have somewhat tighter integration
> between the Django "web users" and the Mailman core User objects, but
> it's not necessarily going to be trivial.
>
> I see that Abhilash is pretty optimistic, but I fear this this is
> going to be a long-tail situation where we're going to be seeing core
> user vs. web-gui user integration issues in 2030 (maybe by then only 1
> every 450 days ;-). I have some ideas, maybe in a couple weeks I can
> sketch them out.
>
> Steve
> _______________________________________________
> 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, 4 months
[MM3-users] Re: hello, Discussion on how to subscribe to the mailing list
by 朱超
At 2023-01-17 15:56:35, "Stephen J. Turnbull" <stephenjturnbull(a)gmail.com> wrote:
>Mark Sapiro writes:
>
> > On 1/16/23 18:55, 朱超 wrote:
> > > Hi, When I subscribe the email list in Subscription Policy is
> > > confirm, Some problems happen in here:
> > > 1.Some mail mua reject send the confirm the message, because the
> > > length of recipient is too long. for exmaple:
> > > requirements-confirm+9605556e0b35a5da280c1de0d34a3e6f770f8ea5@domain,
> > > and the mail mua reject to modify about this.
> >
> > The default English template says in part:
> >
> > Before you can start using GNU Mailman at this site, you must first
> > confirm that this is your email address. You can do this by replying to
> > this message.
> >
> > Or you should include the following line -- and only the following
> > line -- in a message to $request_email:
> >
> > confirm $token
> >
> > I.e. It gives an alternative method if `reply` doesn't work. You can
> > provide a custom version of this template with different wording if you
> > think you can improve it.
>
>The problem is the reply address, though. Changing the template to
>suggest only the "confirm $token" in body method doesn't help people
>who hit R expecting that should work, especially since many "user
>fiendly" (misspelling intentional) MUAs don't display the address.
>Avoiding that requires code changes, I guess?
Yes, You got it. It is too cumbersome to ask the user to write a reply email for email confirmation.
>
> > > 2.It is inconvenient for users to use. Many people will
> > > mistakenly think that after clicking the subscribe button, it
> > > will be successful, and they will not process the email.
>
> > step, you can set Subscription Policy to Open, but then anyone can
> > maliciously subscribe third parties to the list.
>
>*Please* do not do this if your server is exposed to the Internet.
>There are bots that search for such servers, and sell lists of them to
>people who want to DOS mailboxes. You may find yourself banned across
>the Internet.
>
Yes.For service security, we will not set the Subscription Policy to open
>The only real alternative to confirmation is approval by moderators.
>I believe Mailman 3 offers that alternative as Mailman 2 did, can't
>check at the moment.
>
> > > Regarding the discussion on the subscription method of the
> > > mailing list, should we consider optimizing the subscription
> > > method of the mailing list, for example:
> > > 1. use the method of sending a verification code to subscribe by
> > > email,When you receive the verification code sent by the
> > > mailing list and fill it in again, you can subscribe
> > > successfully。
> >
> > How is this different from the present method.
>
>Just wording. I think they are thinking of the "invite" option that
>was provided in Mailman 2 mass subscribe (again, I think Mailman 3
>retains it but I never ever used it so I don't recall for sure). But
>it doesn't make sense for a user-initiated interaction.
>
> > If you want, you can make
> > a custom template and include something like:
> >
> > Alternatively, you can confirm by going to the URL
> >
> > https://www.example.com/mailman3/lists/$list_id/confirm/?token=$token
>
>If I understand the OP's PoV correctly, I think I would change the
>list information page to say "Send a personal invitation to join the
>list to [email address here]. If you aren't a subscriber, you can
>invite yourself." And change the word "confirm" in the confirmation
>template to "subscribe".
Why do you need to modify the mailman-core service, I suggest we should modify the code of the postorius, We can refer to postorius to reset the user password process,
Detail, through the postorius to send email to user, and user click the url in email to confirm subscribe the email,Currently I have achieved it this way。
> > We don't include that in the default template because Mailman core
> > doesn't know if you even have a web UI or how to access it if you
> > do.
>
>We should fix that, at least if the web interface is Postorius
>(wishlist, assigned to me):
>https://gitlab.com/mailman/mailman/-/issues/1055
>
>@mark
>https://gitlab.com/mailman/mailman/-/issues/901
>Maybe we can close this? I'm not sure why it was left open since
>there's no action proposed for Mailman improvement.
>
> > > 2. use the email to send a connection to confirm the
> > > subscription,People click the link to be redirected to a
> > > confirmation page to subscribe to the email。
> >
> > See above.
>
>Indeed, AFAICS almost everything the OP is suggesting amounts to an
>identical procedure as far as the Mailman server is concerned, it's
>just described to the subscriber differently. The one exception is
>the suggestion to eliminate the confirmation step, and while that is
>supported, it's quite likely to cause problems for third parties and
>eventually for the Mailman site unless you have an alternative ground
>source of truth such as an employee database.
>
>Steve
>_______________________________________________
>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/
>Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
>This message sent to tom_toworld(a)163.com
3 years, 9 months
[MM3-users] Re: integrating mm3 with postfix / lmtp
by Fabian A. Santiago
On October 26, 2017 9:39:06 PM EDT, Mark Sapiro <mark(a)msapiro.net> wrote:
>On 10/26/2017 06:16 PM, Fabian A. Santiago wrote:
>
>>
>> But in my testing, I replied to a subscription confirmation message
>and received back an undeliverable looping email error message from
>postfix. Any clues there you can offer? I can post to the list from any
>email added via the admin console. The test subscriber address was
>local to my server. From an outside address, same error.
>
>
>This usually means that postfic is trying to deliver to an address and
>the message already has a Delivered-To: header with that address.
>
>What are the headers of the "looping" message in the report? What are
>the Postfix log messages related to that message?
>
>
>> Once I registered the new email domain, I reverted my postfix config
>back to the default suggested by maxking's docker instructions.
>>
>> https://github.com/maxking/docker-mailman
>
>
>I have essentially no knowledge of the docker container images, so I
>can't be much help with issues specific to them.
Return-Path: <MAILER-DAEMON>
Delivered-To: turtl(a)deviltracks.net
Received: by mail.garden-life.org (Postfix)
id 39F6C2055; Thu, 26 Oct 2017 21:02:17 -0400 (EDT)
Date: Thu, 26 Oct 2017 21:02:17 -0400 (EDT)
From: MAILER-DAEMON(a)mail.garden-life.org (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: turtl(a)deviltracks.net
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="2D7231948.1509066137/mail.garden-life.org"
Content-Transfer-Encoding: 7bit
Message-Id: <20171027010217.39F6C2055(a)mail.garden-life.org>
This is a MIME-encapsulated message.
--2D7231948.1509066137/mail.garden-life.org
Content-Description: Notification
Content-Type: text/plain; charset=us-ascii
This is the mail system at host mail.garden-life.org.
I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to postmaster.
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The mail system
<test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com>: mail
for gjb-online.com loops back to myself
--2D7231948.1509066137/mail.garden-life.org
Content-Description: Delivery report
Content-Type: message/delivery-status
Reporting-MTA: dns; mail.garden-life.org
X-Postfix-Queue-ID: 2D7231948
X-Postfix-Sender: rfc822; turtl(a)deviltracks.net
Arrival-Date: Thu, 26 Oct 2017 21:02:17 -0400 (EDT)
Final-Recipient: rfc822; test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com
Original-Recipient: rfc822;test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com
Action: failed
Status: 5.4.6
Diagnostic-Code: X-Postfix; mail for gjb-online.com loops back to myself
--2D7231948.1509066137/mail.garden-life.org
Content-Description: Undelivered Message
Content-Type: message/rfc822
Content-Transfer-Encoding: 7bit
Return-Path: <turtl(a)deviltracks.net>
Received: from mail.garden-life.org (localhost [127.0.0.1])
by mail.garden-life.org (Postfix) with ESMTP id 2D7231948
for <test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com>; Thu, 26 Oct 2017 21:02:17 -0400 (EDT)
Authentication-Results: mail.garden-life.org (amavisd-new);
dkim=pass (1024-bit key) reason="pass (just generated, assumed good)"
header.d=garden-life.org
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=garden-life.org;
h=references:in-reply-to:to:subject:subject:message-id:from
:from:x-mailer:content-transfer-encoding:content-type
:content-type:date:date:mime-version; s=dkim; t=1509066135; x=
1509930136; bh=k85upIKMt3yA1zcaSrQxE349DcmKTq86MMRdi7hh2yw=; b=X
2phB5a1/LGy0J5YIHZTnbXOeoJ55wkcBrFax3cTvvXAAbfZEBsV3BLZ9Z25GdncT
CK7b3FU8He/70UAKZtcjreE1AP/hB89yX63xNSqFu2iULKIYMOhWaE/eWl897VhN
NIR1mONlrQxOUf5+o16As9WPdbAiEO/TKNMUpuyk+A=
X-Virus-Scanned: amavisd-new at mail.garden-life.org
X-Spam-Flag: NO
X-Spam-Score: 6.117
X-Spam-Level: ******
X-Spam-Status: No, score=6.117 tagged_above=2 required=6.2
tests=[RCVD_IN_PBL=3.558, RCVD_IN_RP_RNBL=1.284,
RCVD_IN_SORBS_DUL=0.001, RDNS_NONE=1.274]
autolearn=no autolearn_force=no
Received: from mail.garden-life.org ([127.0.0.1])
by mail.garden-life.org (mail.garden-life.org [127.0.0.1]) (amavisd-new, port 10026)
with ESMTP id 3zCxRxppUkZt
for <test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com>;
Thu, 26 Oct 2017 21:02:15 -0400 (EDT)
Received: from rainmail.deviltracks.net (keys.fspproductions.biz [IPv6:2600:3c03::f03c:91ff:fe24:1eeb])
by mail.garden-life.org (Postfix) with ESMTPSA id 1116A2F1
for <test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com>; Thu, 26 Oct 2017 21:02:15 -0400 (EDT)
Mime-Version: 1.0
Date: Fri, 27 Oct 2017 01:02:14 +0000
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
X-Mailer: RainLoop/1.11.3
From: turtl(a)deviltracks.net
Message-ID: <4e5829300419cfb7bf13d5a0d9ebebd1(a)deviltracks.net>
Subject: Re: confirm b7322edad83ae7ec99cfc5100161c7062d2c7685
To: test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com
In-Reply-To: <150906420646.31.12186705534373041145@mailman-core>
References: <150906420646.31.12186705534373041145@mailman-core>
X-Originating-IP: 108.53.239.102
October 26, 2017 8:30 PM, test123-confirm+b7322edad83ae7ec99cfc5100161c70=
62d2c7685@gjb-online.com=0Awrote:=0A=0A> Email Address Registration Confi=
rmation=0A> =0A> Hello, this is the GNU Mailman server at gjb-online.com.=
=0A> =0A> We have received a registration request for the email address=
=0A> =0A> turtl(a)deviltracks.net=0A> =0A> Before you can start using GNU M=
ailman at this site, you must first confirm=0A> that this is your email a=
ddress. You can do this by replying to this message,=0A> keeping the Subj=
ect header intact.=0A> =0A> If you do not wish to register this email add=
ress, simply disregard this=0A> message. If you think you are being malic=
iously subscribed to the list, or=0A> have any other questions, you may c=
ontact=0A> =0A> test123-owner(a)gjb-online.com
--2D7231948.1509066137/mail.garden-life.org--
Logs:
mail amavis[1576]: (01576-09) Passed CLEAN {RelayedInternal}, ORIGINATING LOCAL [2600:3c03::f03c:91ff:fe24:1eeb]:33512 [2600:3c03::f03c:91ff:fe24:1eeb] <turtl(a)deviltracks.net> -> <test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com>, Queue-ID: 15BD218EE, Message-ID: <09b6ea7c3203e7357e4e996c352223d0(a)deviltracks.net>, mail_id: UgTlYoHupO-Z, Hits: 6.117, size: 1663, queued_as: 928292055, dkim_new=dkim:garden-life.org, 451 ms, Tests: [RCVD_IN_PBL=3.558,RCVD_IN_RP_RNBL=1.284,RCVD_IN_SORBS_DUL=0.001,RDNS_NONE=1.274]
Oct 26 21:47:44 mail postfix/smtp-amavis/smtp[19971]: 15BD218EE: to=<test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com>, relay=127.0.0.1[127.0.0.1]:10026, delay=0.64, delays=0.18/0/0/0.46, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 928292055)
Oct 26 21:47:44 mail postfix/qmgr[1240]: 15BD218EE: removed
Oct 26 21:47:44 mail postfix/smtp[20025]: 928292055: to=<test123-confirm+b7322edad83ae7ec99cfc5100161c7062d2c7685(a)gjb-online.com>, relay=none, delay=0.04, delays=0.01/0.02/0/0, dsn=5.4.6, status=bounced (mail for gjb-online.com loops back to myself)
Oct 26 21:47:44 mail postfix/cleanup[19953]: 9E63E18EE: message-id=<20171027014744.9E63E18EE(a)mail.garden-life.org>
Oct 26 21:47:44 mail postfix/qmgr[1240]: 9E63E18EE: from=<>, size=5273, nrcpt=1 (queue active)
Oct 26 21:47:44 mail postfix/bounce[20027]: 928292055: sender non-delivery notification: 9E63E18EE
Oct 26 21:47:44 mail postfix/qmgr[1240]: 928292055: removed
Oct 26 21:47:44 mail postfix/pipe[19986]: 9E63E18EE: to=<turtl(a)deviltracks.net>, relay=dovecot, delay=0.03, delays=0/0/0/0.03, dsn=2.0.0, status=sent (delivered via dovecot service)
Oct 26 21:47:44 mail postfix/qmgr[1240]: 9E63E18EE: removed
[root@mail ~]#
--
Thanks,
Fabian S.
OpenPGP: 3C3FA072ACCB7AC5DB0F723455502B0EEB9070FC
9 years
[MM3-users] Re: Changing web access
by Ralf Wiegand
GNU Mailman 3.3.1 (Tom Sawyer)
Python 3.6.8 (default, Sep 26 2019, 11:57:09)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
config file: /opt/mailman/mailman/var/etc/mailman.cfg
db url: sqlite:////opt/mailman/mailman/var/data/mailman.db
devmode: DISABLED
REST root url: https://empire:8001/3.1/
REST credentials: r****n:r*****s
My REST API is running on "empire" (192.168.0.27), but isn't this
messages referencing
>>> snip
python manage.py runserver 0.0.0.0:8000
Performing system checks...
System check identified no issues (0 silenced).
April 22, 2020 - 19:05:09
Django version 2.2.12, using settings 'settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
ERROR Mailman REST API not available
Traceback (most recent call last):
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/connection.py",
line 157, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/util/connection.py",
line 84, in create_connection
raise err
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/util/connection.py",
line 74, in create_connection
sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/connectionpool.py",
line 672, in urlopen
chunked=chunked,
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/connectionpool.py",
line 387, in _make_request
conn.request(method, url, **httplib_request_kw)
File "/usr/lib64/python3.6/http/client.py", line 1254, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/usr/lib64/python3.6/http/client.py", line 1300, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/usr/lib64/python3.6/http/client.py", line 1249, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib64/python3.6/http/client.py", line 1036, in _send_output
self.send(msg)
File "/usr/lib64/python3.6/http/client.py", line 974, in send
self.connect()
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/connection.py",
line 184, in connect
conn = self._new_conn()
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/connection.py",
line 169, in _new_conn
self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError:
<urllib3.connection.HTTPConnection object at 0x7f8dd8cdee80>: Failed to
establish a new connection: [Errno 111] Connection refused
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/requests-2.23.0-py3.6.egg/requests/adapters.py",
line 449, in send
timeout=timeout
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/connectionpool.py",
line 720, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/urllib3-1.25.8-py3.6.egg/urllib3/util/retry.py",
line 436, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='localhost',
port=8001): Max retries exceeded with url:
/3.0/lists?advertised=true&count=0&page=1 (Caused by
NewConnectionError('<urllib3.connection.HTTPConnection object at
0x7f8dd8cdee80>: Failed to establish a new connection: [Errno 111]
Connection refused',))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/mailmanclient/src/mailmanclient/restbase/connection.py",
line 96, in call
headers=headers)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/requests-2.23.0-py3.6.egg/requests/api.py",
line 61, in request
return session.request(method=method, url=url, **kwargs)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/requests-2.23.0-py3.6.egg/requests/sessions.py",
line 530, in request
resp = self.send(prep, **send_kwargs)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/requests-2.23.0-py3.6.egg/requests/sessions.py",
line 643, in send
r = adapter.send(request, **kwargs)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/requests-2.23.0-py3.6.egg/requests/adapters.py",
line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError:
HTTPConnectionPool(host='localhost', port=8001): Max retries exceeded
with url: /3.0/lists?advertised=true&count=0&page=1 (Caused by
NewConnectionError('<urllib3.connection.HTTPConnection object at
0x7f8dd8cdee80>: Failed to establish a new connection: [Errno 111]
Connection refused',))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/handlers/base.py",
line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/postorius/src/postorius/views/list.py", line 755,
in list_index
paginator_class=MailmanPaginator)
File "/opt/mailman/django-mailman3/django_mailman3/lib/paginator.py",
line 71, in paginate
objects = paginator.page(page_num)
File "/opt/mailman/django-mailman3/django_mailman3/lib/paginator.py",
line 46, in page
number = self.validate_number(number)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/paginator.py",
line 48, in validate_number
if number > self.num_pages:
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/utils/functional.py",
line 80, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/paginator.py",
line 97, in num_pages
if self.count == 0 and not self.allow_empty_first_page:
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/utils/functional.py",
line 80, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File "/opt/mailman/django-mailman3/django_mailman3/lib/paginator.py",
line 56, in count
return self.function(count=0, page=1).total_size
File "/opt/mailman/postorius/src/postorius/views/list.py", line 751,
in _get_list_page
advertised=advertised, mail_host=mail_host, count=count, page=page)
File "/opt/mailman/mailmanclient/src/mailmanclient/client.py", line
181, in get_list_page
return Page(self._connection, url, MailingList, count, page)
File "/opt/mailman/mailmanclient/src/mailmanclient/restbase/page.py",
line 37, in __init__
self._create_page()
File "/opt/mailman/mailmanclient/src/mailmanclient/restbase/page.py",
line 62, in _create_page
response, content = self._connection.call(self._build_url())
File
"/opt/mailman/mailmanclient/src/mailmanclient/restbase/connection.py",
line 120, in call
'Could not connect to Mailman API: ', repr(e))
mailmanclient.restbase.connection.MailmanConnectionError: ('Could not
connect to Mailman API: ',
'ConnectionError(MaxRetryError("HTTPConnectionPool(host=\'localhost\',
port=8001): Max retries exceeded with url:
/3.0/lists?advertised=true&count=0&page=1 (Caused by
NewConnectionError(\'<urllib3.connection.HTTPConnection object at
0x7f8dd8cdee80>: Failed to establish a new connection: [Errno 111]
Connection refused\',))",),)')
<<<< snip
not sure I understand???
On 4/22/20 2:50 PM, Mark Sapiro wrote:
> On 4/22/20 11:35 AM, Ralf Wiegand wrote:
>> but I am getting :
>>
>> mailmanclient.restbase.connection.MailmanConnectionError: ('Could not
>> connect to Mailman API: ',
>> 'ConnectionError(MaxRetryError("HTTPConnectionPool(host=\'localhost\',
>> port=8001): Max retries exceeded with url:
>> /3.0/lists?advertised=true&count=0&page=1 (Caused by
>> NewConnectionError(\'<urllib3.connection.HTTPConnection object at
>> 0x7f88fe4cb4e0>: Failed to establish a new connection: [Errno 111]
>> Connection refused\',))",),)')
>
> What do you have for ALLOWED_HOSTS in your settings file(s)? You may
> want something like
>
> ALLOWED_HOSTS = ['*']
>
> or
>
> ALLOWED_HOSTS = ['192.168.*']
>
6 years, 6 months
[MM3-users] Re: Archive not working - Reg.
by Nirmal J
Yes, There are files in that Directory.
root@list1:/var/lib/mailman3/archives/hyperkitty/spool# ls
1761648373.8935+904b919ee2129941efb5359d7fbc08cc66e154c8.pck 1761648373.917401+f2d75be071a12b44949318373ebcb0b05cf8341e.pck
root@list1:/var/lib/mailman3/archives/hyperkitty/spool#
The Mailmans var.logs/mailman.log contains
root@list1:/var/log/mailman3# cat mailman.log
Oct 29 00:00:03 2025 (678809) Master watcher caught SIGHUP. Re-opening log files.
Oct 29 00:00:03 2025 (678814) archive runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678826) task runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678815) bounces runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678816) command runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678818) lmtp runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678827) virgin runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678820) out runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678821) pipeline runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678817) in runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678828) digest runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678819) nntp runner caught SIGHUP. Reopening logs.
Oct 29 00:00:03 2025 (678823) retry runner caught SIGHUP. Reopening logs.
[2025-10-29 00:00:03 +0530] [683726] [INFO] Booting worker with pid: 683726
[2025-10-29 00:00:03 +0530] [678822] [WARNING] Worker with pid 678843 was terminated due to signal 15
[2025-10-29 00:00:03 +0530] [683727] [INFO] Booting worker with pid: 683727
[2025-10-29 00:00:03 +0530] [678822] [WARNING] Worker with pid 678844 was terminated due to signal 15
Oct 29 00:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 00:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 00:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 00:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 00:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:01:00:02 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 01:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 01:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 01:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 01:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 01:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:02:00:01 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 02:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 02:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 02:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 02:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 02:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:03:00:02 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 03:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 03:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 03:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 03:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 03:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:04:00:02 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 04:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 04:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 04:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 04:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 04:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:05:00:01 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 05:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 05:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 05:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 05:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 05:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:06:00:02 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 06:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 06:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 06:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 06:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 06:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:07:00:01 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 07:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 07:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 07:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 07:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 07:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:08:00:02 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 08:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 08:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 08:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 08:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 08:14:05 2025 (678826) Task runner evicted expired cache entries
[29/Oct/2025:09:00:02 +0530] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 473 "-" "GNU Mailman REST client v3.3.5"
Oct 29 09:14:05 2025 (678826) Task runner evicted 0 expired pendings
Oct 29 09:14:05 2025 (678826) Task runner deleted 0 orphaned workflows
Oct 29 09:14:05 2025 (678826) Task runner deleted 0 orphaned requests
Oct 29 09:14:05 2025 (678826) Task runner deleted 0 orphaned messages
Oct 29 09:14:05 2025 (678826) Task runner evicted expired cache entries
-----Original Message-----
From: Mark <mark(a)msapiro.net>
To: mailman-users <mailman-users(a)mailman3.org>
Date: Tuesday, 28 October 2025 9:16 PM IST
Subject: [MM3-users] Re: Archive not working - Reg.
On 10/28/25 03:22, nirmal--- via Mailman-users wrote:
> After sending mail to a list, it is not reflecting back in Hyperkitty archive. Kindly help me in this regard.
Are there files in Mailman's var/archives/hyperkitty/spool/ direrctory?
What's in Mailman's var/logs/mailman.log?
--
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/
Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
This message sent to nirmal(a)iitm.ac.in
1 year
[MM3-users] Re: converting bulk accept_these_nonmembers in migration from mailman 2 to 3
by Lucio Chiappetti
Dear Mark, thanks for your interest.
On Fri, 11 Feb 2022, Mark Sapiro wrote:
> This may actually be a bug. I'll have to think about that. I've filed
> https://gitlab.com/mailman/mailman/-/issues/978 on this.
> This is https://gitlab.com/mailman/mailman/-/issues/794 (still open)
Given the time needed to solve the issues (I will anyhow notify the site
administrators, hopting they would update mailman when/if resolved), this
means we have to find a workaround.
> And those non-members all have there moderation action set to Defer
> which means their posts will be accepted but the additional checks such
> as too big, etc. will still be applied.
not sure what you mean by "defer". The non-member options I see are called
List default -- follow the list's default member action.
Hold -- This holds the message for approval by the list moderators.
Reject -- this automatically rejects the message by sending a bounce
notice to the post's author. The text of the bounce notice can be
configured by you.
Discard -- this simply discards the message, with no notice sent to the
post's author.
Accept -- accepts any postings without any further checks.
Default Processing -- run additional checks and accept the message.
> If they are nonmembers, you can accept the post and set moderation
> action in one operation in Postorius, but the regexps in
> hold_these_nonmembers will still take precedence.
OK, I've found where to do it, it requires to select the held message and
scroll to the bottom then set Moderation from a menu.
But if hold_these_nonmembers takes priority this will be uselesws in the
current setting.
> I'm not sure what you are looking at here. Imported nonmembers should
> all have moderation action set according to which *_these_nonmembers
> they came from. Imported members should have their moderation action set
> to Defer if they were unmoderated and if they were moderated, it should
> be set based on the 2.1 list's member_moderation_action.
I go to the non-member list, select non-member options and at the bottom
see an item Administration options Moderation. The possible values are
those I pasted above.
The actual value for most of the imported non-members is "Default
processing" while it is "List default" for thoase automatically added
afresh, It is "Discard" for a number of imported non-members with
spam-looking addresses (I guess they were in some other *_not_members part
of the standard 2.1 antispam ... I can't recall me doing something on
those)
Side question: is there a way to operate IN BULK on non-members ? Like it
is for members (I exported them to CSV).
>> - if so, how can we do it automatically for all 189 entries ?
>> - or move back the 189 addresses to accept_these_nonmembers ?
> Yes, move them back.
I am not so concerned of these 189 (or better of the 189 minus the discard
ones which should stay) ... anyhow moving them back will be uncomfortable
if there is not a bulk operation tool.
I am more concerned of the new cases automatically added.
Our member list includes 1043 addresses. Of these less than 20 use an
external address (say gmail), so they post "from home" and will pass.
194 addresses are of the form name.surname(a)inaf.it (these are likely to be
recently hired staff, who have and use onlyu the organization-wide
address).
All the rest (so still more than 800, can't really ask all of them to
re-register (*)) are of the form username(a)institute.inaf.it (and it won't
be easy also to bulk-delete and bulk-resubscribe because of the
inhomogeneous mapping of username to name.surname.
Of these about 800 some are lurkers and are no problem. Some are frequent
posters and remember to post from username(a)institute.inaf.it and are no
problem. Other may post from an alternate address (maybe even the old
address exists as a receiving-only alias), and in this case with
the current arrangement they will bo on hold every time.
I guess we should wait for the solution of issue 794
(*) by the way do you confirm that if one is subscribed to a list with an
address (be it bulk subscription, import or new fast subscription), this
person CANNOT change their settings (or address) unless one does a "sign
in" to a (Postorius) account ?
> It is because all the legacy *_these_nonmember actions are applied
> before nonmember moderation checks, so if an address matches a regex in
> hold_these_nonmembers, the post will be held regardless of the
> nonmember's moderation action.
> Addresses still work, and accept_these_nonmembers takes precedence over
> hold_these_nonmembers just as in MM 2.1.
This was not my impression when I ran a thorough test of 12 cases. Except
the obvious case of the subscriber posting from the subscription address,
all messages went on hold.
Whatever the non-member moderation would be (even if set to reject ! ...
but that makes sense if *_these_nonmembers prevail on non-member options),
and even if the address was set explicitly in accept_these_nonmembers
(should I delete it from the non-member list ?)
What is the actual order (or flow chart) of choices ?
*_these_nonmembers in the order listed in the page (within each in the
order of occurrence of regexp's) then non-member options ?
If I have Name.Surname(a)inaf.it in accept_these_nonmembers, then
hold_these_nonmembers set to
^.+@.+\.it
^.+@.+\.tng\.iac\.es
what do you foresee ?
And for different regexps, will processing terminate at the first
non-matching one, will they be ANDed or ORed, or what ?
I am reluctant to accept inconditionally ^.+\..+(a)inaf\.it (they may be
falsified, only the check on their presence in the other list (issue 794)
I guess I should remove the ^.+@.+\.it regexp AND AT THE SAME TIME change
the Default action to take when a non-member posts to the list to Hold
instead of Discard.
This way we'll have to check spam (instead of having it auto-discarded),
but if people with alternate addresses post, once they are entered in the
Non-member list they can be authorized to pass for the future ...
.. would it work ?
--
Lucio Chiappetti - INAF/IASF - via Corti 12 - I-20133 Milano (Italy)
For more info : http://www.iasf-milano.inaf.it/~lucio/personal.html
4 years, 9 months
[MM3-users] Re: Migrating mailman3 to latest ubuntu lts
by Helio Loureiro
And using the module manually works...
(venv) mailman@new-server ~ (v3.3.9) [0|127]> *ipython3*
/usr/lib/python3/dist-packages/IPython/core/interactiveshell.py:949:
UserWarning: Attempting to work in a virtualenv. If you encounter problems,
please install IPython inside the virtualenv.
warn(
Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 7.31.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: *import MySQLdb*
(venv) mailman@new-sever ~ (v3.3.9)> *fg*
Send job 1, 'ipython3' to foreground
In [3]: *con = MySQLdb.connect("localhost", "mailman3web",
"*****************", "mailman3web")*
In [4]:
*cursor = con.cursor()*
In [5]: *cursor.execute("show tables")*
Out[5]: 34
In [6]: *print(cursor.fetchall())*
(('account_emailaddress',), ('account_emailconfirmation',),
('auth_group',), ('auth_group_permissions',), ('auth_permission',),
('auth_user',), ('auth_user_groups',), ('auth_user_user_permissions',),
('django_admin_log',), ('django_content_type',),
('django_mailman3_maildomain',), ('django_mailman3_profile',),
('django_migrations',), ('django_q_ormq',), ('django_q_schedule',),
('django_q_task',), ('django_session',), ('django_site',),
('hyperkitty_attachment',), ('hyperkitty_email',),
('hyperkitty_favorite',), ('hyperkitty_lastview',),
('hyperkitty_mailinglist',), ('hyperkitty_profile',),
('hyperkitty_sender',), ('hyperkitty_tag',), ('hyperkitty_tagging',),
('hyperkitty_thread',), ('hyperkitty_threadcategory',),
('hyperkitty_vote',), ('socialaccount_socialaccount',),
('socialaccount_socialapp',), ('socialaccount_socialapp_sites',),
('socialaccount_socialtoken',))
In [7]: *cursor.execute("select * from account_emailaddress")*
Out[7]: 2530
In [8]: *print(cursor.fetchall())*
So what can I do? Is there a way to troubleshoot the root cause of this
issue?
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Tue, 19 Dec 2023 at 11:11, Helio Loureiro <helio(a)loureiro.eng.br> wrote:
> Hi,
>
> No luck :(
>
> (venv) mailman@new-server ~ (v3.3.9)> *pip freeze | egrep
> "mailman-web|django-mailman3|django-allauth"*
> django-allauth==0.59.0
> django-mailman3==1.3.11
> mailman-web==0.0.8
> (venv) mailman@new-server ~ (v3.3.9)> *pip install -U
> django-allauth==0.58.0*
> Collecting django-allauth==0.58.0
> Downloading django-allauth-0.58.0.tar.gz (861 kB)
> ---------------------------------------- 861.7/861.7 KB 9.4 MB/s eta
> 0:00:00
> Installing build dependencies ... done
> Getting requirements to build wheel ... done
> Installing backend dependencies ... done
> Preparing metadata (pyproject.toml) ... done
> Requirement already satisfied: requests-oauthlib>=0.3.0 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (1.3.1)
> Requirement already satisfied: Django>=3.2 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (4.1.13)
> Requirement already satisfied: pyjwt[crypto]>=1.7 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (2.8.0)
> Requirement already satisfied: requests>=2.0.0 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (2.31.0)
> Requirement already satisfied: python3-openid>=3.0.8 in
> ./venv/lib/python3.10/site-packages (from django-allauth==0.58.0) (3.2.0)
> Requirement already satisfied: asgiref<4,>=3.5.2 in
> ./venv/lib/python3.10/site-packages (from
> Django>=3.2->django-allauth==0.58.0) (3.7.2)
> Requirement already satisfied: sqlparse>=0.2.2 in
> ./venv/lib/python3.10/site-packages (from
> Django>=3.2->django-allauth==0.58.0) (0.4.4)
> Requirement already satisfied: cryptography>=3.4.0 in
> ./venv/lib/python3.10/site-packages (from
> pyjwt[crypto]>=1.7->django-allauth==0.58.0) (41.0.7)
> Requirement already satisfied: defusedxml in
> ./venv/lib/python3.10/site-packages (from
> python3-openid>=3.0.8->django-allauth==0.58.0) (0.7.1)
> Requirement already satisfied: urllib3<3,>=1.21.1 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (2.1.0)
> Requirement already satisfied: charset-normalizer<4,>=2 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (3.3.2)
> Requirement already satisfied: idna<4,>=2.5 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (3.6)
> Requirement already satisfied: certifi>=2017.4.17 in
> ./venv/lib/python3.10/site-packages (from
> requests>=2.0.0->django-allauth==0.58.0) (2023.11.17)
> Requirement already satisfied: oauthlib>=3.0.0 in
> ./venv/lib/python3.10/site-packages (from
> requests-oauthlib>=0.3.0->django-allauth==0.58.0) (3.2.2)
> Requirement already satisfied: typing-extensions>=4 in
> ./venv/lib/python3.10/site-packages (from
> asgiref<4,>=3.5.2->Django>=3.2->django-allauth==0.58.0) (4.9.0)
> Requirement already satisfied: cffi>=1.12 in
> ./venv/lib/python3.10/site-packages (from
> cryptography>=3.4.0->pyjwt[crypto]>=1.7->django-allauth==0.58.0) (1.16.0)
> Requirement already satisfied: pycparser in
> ./venv/lib/python3.10/site-packages (from
> cffi>=1.12->cryptography>=3.4.0->pyjwt[crypto]>=1.7->django-allauth==0.58.0)
> (2.21)
> Building wheels for collected packages: django-allauth
> Building wheel for django-allauth (pyproject.toml) ... done
> Created wheel for django-allauth:
> filename=django_allauth-0.58.0-py3-none-any.whl size=1157319
> sha256=a430c552101d1ad47bc00b16d1c1d6df728afacdd13823927b4cbfb02c35dbfc
> Stored in directory:
> /local/mailman/.cache-ubuntu-22.04/pip/wheels/55/0a/79/e199827a18f310906c2a90b0e92b89c41daf21d2a502db6710
> Successfully built django-allauth
> Installing collected packages: django-allauth
> Attempting uninstall: django-allauth
> Found existing installation: django-allauth 0.59.0
> Uninstalling django-allauth-0.59.0:
> Successfully uninstalled django-allauth-0.59.0
> Successfully installed django-allauth-0.58.0
> (venv) mailman@new-server ~ (v3.3.9)> *mailman-web migrate*
> System check identified some issues:
>
> WARNINGS:
> account.EmailAddress: (models.W036) MariaDB does not support unique
> constraints with conditions.
> HINT: A constraint won't be created. Silence this warning if you don't
> care about it.
> account.EmailAddress: (models.W043) MariaDB does not support indexes on
> expressions.
> HINT: An index won't be created. Silence this warning if you don't care
> about it.
> Operations to perform:
> Apply all migrations: account, admin, auth, contenttypes,
> django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> socialaccount
> Running migrations:
> Applying account.0004_alter_emailaddress_drop_unique_email...Traceback
> (most recent call last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 89, in _execute
> return self.cursor.execute(sql, params)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 257, in query
> _mysql.connection.query(self, query)
> MySQLdb.OperationalError: (2013, 'Lost connection to MySQL server during
> query')
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
> sys.exit(main())
> File
> "/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
> line 90, in main
> execute_from_command_line(sys.argv)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
> line 446, in execute_from_command_line
> utility.execute()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
> line 440, in execute
> self.fetch_command(subcommand).run_from_argv(self.argv)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 402, in run_from_argv
> self.execute(*args, **cmd_options)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 448, in execute
> output = self.handle(*args, **options)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 96, in wrapped
> res = handle_func(*args, **kwargs)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/migrate.py",
> line 349, in handle
> post_migrate_state = executor.migrate(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
> line 135, in migrate
> state = self._migrate_all_forwards(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
> line 167, in _migrate_all_forwards
> state = self.apply_migration(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
> line 252, in apply_migration
> state = migration.apply(state, schema_editor)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/migration.py",
> line 130, in apply
> operation.database_forwards(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py",
> line 235, in database_forwards
> schema_editor.alter_field(from_model, from_field, to_field)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
> line 788, in alter_field
> self._alter_field(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
> line 858, in _alter_field
> self.execute(self._delete_unique_sql(model, constraint_name))
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
> line 199, in execute
> cursor.execute(sql, params)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 67, in execute
> return self._execute_with_wrappers(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 80, in _execute_with_wrappers
> return executor(sql, params, many, context)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 84, in _execute
> with self.db.wrap_database_errors:
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/utils.py", line
> 91, in __exit__
> raise dj_exc_value.with_traceback(traceback) from exc_value
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 89, in _execute
> return self.cursor.execute(sql, params)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 257, in query
> _mysql.connection.query(self, query)
> django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server
> during query')
> (venv) mailman@new-server ~ (v3.3.9) [0|1]> *more
> /etc/mailman3/settings.py*
> # Mailman Web configuration file.
> # /etc/mailman3/settings.py
>
> # Get the default settings.
> from mailman_web.settings.base import *
> from mailman_web.settings.mailman import *
>
> # Settings below supplement or override the defaults.
>
> #: Default list of admins who receive the emails from error logging.
> ADMINS = (
> ('Mailman Suite Admin', 'root@localhost'),
> )
>
> # Postgresql database setup.
> DATABASES = {
> 'default': {
> 'ENGINE': 'django.db.backends.mysql',
> 'NAME': 'mailman3web',
> 'USER': 'mailman3web',
> # TODO: Replace this with the password.
> 'PASSWORD': '***********',
> 'HOST': 'localhost',
> # PORT: set to empty string for default.
> 'PORT': '3306',
> # 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'",
> # 'charset': 'utf8mb4',
> #},
>
> }
> }
>
> # 'collectstatic' command will copy all the static files here.
> # Alias this location from your webserver to `/static`
> STATIC_ROOT = '/local/mailman/web/static'
>
> # enable the 'compress' command.
> COMPRESS_ENABLED = True
>
> # Make sure that this directory is created or Django will fail on start.
> LOGGING['handlers']['file']['filename'] =
> '/local/mailman/web/logs/mailmanweb.log'
>
> #: See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
> ALLOWED_HOSTS = [
> "localhost", # Archiving API from Mailman, keep it.
> "127.0.0.1",
> # "lists.your-domain.org",
> # Add here all production domains you have.
> "*"
> ]
>
> #: See
> https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins
> (venv) mailman@new-server ~ (v3.3.9)> *mysql -umailman3web -p -h
> localhost mailman3web*
> Enter password:
> Reading table information for completion of table and column names
> You can turn off this feature to get a quicker startup with -A
>
> Welcome to the MariaDB monitor. Commands end with ; or \g.
> Your MariaDB connection id is 32
> Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
>
> Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
>
> Type 'help;' or '\h' for help. Type '\c' to clear the current input
> statement.
>
> MariaDB [mailman3web]> show tables;
> +-------------------------------+
> | Tables_in_mailman3web |
> +-------------------------------+
> | account_emailaddress |
> | account_emailconfirmation |
> | auth_group |
> | auth_group_permissions |
> | auth_permission |
> | auth_user |
> | auth_user_groups |
> | auth_user_user_permissions |
> | django_admin_log |
> | django_content_type |
> | django_mailman3_maildomain |
> | django_mailman3_profile |
> | django_migrations |
> | django_q_ormq |
> | django_q_schedule |
> | django_q_task |
> | django_session |
> | django_site |
> | hyperkitty_attachment |
> | hyperkitty_email |
> | hyperkitty_favorite |
> | hyperkitty_lastview |
> | hyperkitty_mailinglist |
> | hyperkitty_profile |
> | hyperkitty_sender |
> | hyperkitty_tag |
> | hyperkitty_tagging |
> | hyperkitty_thread |
> | hyperkitty_threadcategory |
> | hyperkitty_vote |
> | socialaccount_socialaccount |
> | socialaccount_socialapp |
> | socialaccount_socialapp_sites |
> | socialaccount_socialtoken |
> +-------------------------------+
> 34 rows in set (0.000 sec)
>
> Best Regards,
> Helio Loureiro
> https://helio.loureiro.eng.br
> https://github.com/helioloureiro
> https://mastodon.social/@helioloureiro
>
>
> On Mon, 18 Dec 2023 at 17:11, Mark Sapiro <mark(a)msapiro.net> wrote:
>
>> On 12/18/23 6:24 AM, Helio Loureiro wrote:
>> > Hi,
>> >
>> > Indeed it was the configuration. It was placed into
>> > /etc/mailman3/mailman-web.py. After a I changed to
>> > /etc/mailman3/settings.py a few things advanced a little bit more.
>> >
>> > I had to figure out how to fix mysqlclient installation since there
>> isn't a
>> > mention about it and the simple "pip install mysqclient" was breaking
>> with
>> > pkg-config issues. But it did work at the end.
>> >
>> > Now I can see further messages on mailman3-web than before.
>> >
>> > (venv) mailman@new-server ~ (v3.3.9)> mailman-web migrate
>> > System check identified some issues:
>> >
>> > WARNINGS:
>> > account.EmailAddress: (models.W036) MariaDB does not support unique
>> > constraints with conditions.
>> > HINT: A constraint won't be created. Silence this warning if you don't
>> care
>> > about it.
>> > account.EmailAddress: (models.W043) MariaDB does not support indexes on
>> > expressions.
>> > HINT: An index won't be created. Silence this warning if you don't care
>> > about it.
>> > Operations to perform:
>> > Apply all migrations: account, admin, auth, contenttypes,
>> > django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
>> > socialaccount
>> > Running migrations:
>> > Applying
>> account.0004_alter_emailaddress_drop_unique_email...Traceback
>> > (most recent call last):
>>
>>
>> I'm not sure why there would be an issue with this migration, but there
>> is a possible compatibility issue depending on how you installed things.
>>
>> django-mailman3<=1.3.11 is not compatible with django-allauth>=0.58.
>>
>> In your venv, try
>> ```
>> pip install django-allauth\<0.58
>> ```
>>
>> --
>> 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/
>> Archived at:
>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>>
>> This message sent to helio(a)loureiro.eng.br
>>
>
2 years, 10 months
[MM3-users] Re: Creating users via RestAPI / User-Management - a bunch of questions
by Stephen J. Turnbull
Mark Sapiro writes:
> On 6/20/25 06:39, Christian Schneider wrote:
> > What I stumble upon is the RestAPI calls to create a "working"
> > user (with the ability to login via WebUI).
> > When I follow the manual (from the url above) I create a user
> > (including password) that appears in the PostgreSQL database.
If you mean you create a User with password via the REST API, this
password is useless. It is not visible to the Django user management
code, and there is no way for a user to log in to Mailman via the REST
API -- the only one who can log in via REST is the superuser.
> > Even when I (via WebUI) set the user as "approved" this user is
> > not able to log in...
I'm not sure how this works, exactly, but I think what you need to do
via REST API is
1. Create the User.
2. Give it an email Address (this probably is automatic, I don't know
if you can create a "bare" user without an email address at all).
3. (probably optional) Set that address as verified.
Then through the Postorius interface you should be able to look up
that user via the email address. That should create a Django user if
one doesn't exist for that email address. I don't recall if Postorius
allows you to set the user's password. You may have to go via the
Django admin interface (the /admin location which is sibling to
/mailman3 and /archives). I'm not sure how to find that user (I don't
know what the user's account name in Django is, hopefully you can look
up the user via the email).
> > I assume this restriction is in accordance to the fact that there
> > is not equivalent Django user.
I don't think there can be a Postorius access to a Mailman user
without a Django user.
> > (There was a mail in the archive of the MM3 user group...stating
> > that one has to use the Django RestAPI to create the appropriate
> > user)
>
> The above is correct. The Mailman REST API only deals with Mailman
> core. Mailman core knows nothing about Django.
Right, if you want to do the whole thing in a script you'll have to
access Django.
> > How will a social account provider (like oidc) linkage (in
> > Django) fit in this concept?
> > Will oidc-accounts be copied to the Django's user database (or
> > PostgreSQL db) or is it an on-the-fly check against the
> > oidc-provider? (I assume second option)
> > What are the status-flags (staff status/superuser status/active
> > status) of the linked oidc-accounts? (Can I specify the status
> > flags?)
>
> I don't offhand know the answers to that, but I think logging in
> via a social account provider creates a Django user..
I can't speak for generic social accounts, but it definitely did that
for a Shibboleth-based SSO setup. Just pass the login credentials
provided by Shibboleth through to the social account stuff (verrrry
carefully :-), and everything just works.
Social auth gets the bare minimum information from the idP as far as I
know (didn't look into it carefully). At least in my case all we got
from Shibboleth was a display name (the personal name) and an email
address (not even an verifiable auth token, they trusted their network
that much). Users could set passwords but they didn't work (Django
could only be accessed by users logged in to the network, and if you
logged out, the request triggered by the redirect back to the login
page would log you right back in again! Freaky...).
> > A conceptual thought:
> > When "user1" (with email user1(a)example.com) is known to django
> > via oidc linkage and I create "user1" (also with email
> > user1(a)example.com) via RestAPI calls (following the url
> > https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…)
> > do I have a "complete" user then?
That depends on how the social auth is set up. Most likely the
account is linked to the email, Django trusts that email if validated
by the idP, and it will create a Django user to manage it if one
doesn't already exist. If you are accessing Postorius or HyperKitty,
that app will trust the email because it trusts Django, and it will
create a Mailman user as Mark described if one doesn't already exist.
(I don't think the Django and Mailman user-ids need to match, even.)
I'm not sure what happens if you create the Mailman user and assign it
that email address independently of creating the Django user. I think
it should "just work" to log in via Django as long as the idP vouches
that the email is authentic.
Note that there's one glitch remaining -- I'm pretty sure[1] that if
you have an existing Mailman user, and the email address is in the
unconfirmed state in Mailman, you'll have to confirm it to subscribe
to lists and probably to do any other work with that user logged in by
that address. You can do that via "one-time key" email dance, or via
the Mailman REST API though. (It may be possible to do that via the
Django admin API as well, but obviously you can't do that with
Postorius, or anybody could claim any address.)
Short version:
> > I mean a user who is able to login and who can be assigned to a
> > list as admin (e.g.) (In this case I would not have to care
> > about the Django user database... ;-))
>
> If the user can log in to the web UI with an associated email
> address, if that address is an admin of a list, the logged in user
> can admin the list.
Footnotes:
[1] Actually, I'm not sure at all but you *should* have to confirm!
--
GNU Mailman consultant (installation, migration, customization)
Sirius Open Source https://www.siriusopensource.com/
Software systems consulting in Europe, North America, and Japan
1 year, 4 months
[MM3-users] Re: "Something went wrong | Mailman REST API not available. Please restart Mailman core.
by Hirayama, Pat
Thanks, Mark. Yeah, it's an odd one. These are from around 22:10-22:14 in mailman.log within the mailman-core container.
[29/Oct/2025:22:10:23 +0000] "GET /3.1/domains HTTP/1.1" 200 926 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:23 +0000] "GET /3.1/domains/fhcrc.org HTTP/1.1" 200 193 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:23 +0000] "GET /3.1/domains/fredhutch.org HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:23 +0000] "GET /3.1/domains/lists.fhcrc.org HTTP/1.1" 200 220 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:23 +0000] "GET /3.1/domains/lists.hanc.info HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:23 +0000] "POST /3.1/lists/find HTTP/1.1" 200 13020 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:25 +0000] "GET /3.1/lists/cancerbiology100.lists.fhcrc.org HTTP/1.1" 200 433 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100.lists.fhcrc.org/roster/owner HTTP/1.1" 200 1175 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100.lists.fhcrc.org/roster/moderator HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100(a)lists.fhcrc.org/config HTTP/1.1" 200 3016 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100.lists.fhcrc.org/archivers HTTP/1.1" 200 81 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100.lists.fhcrc.org/archivers HTTP/1.1" 200 81 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100(a)lists.fhcrc.org/requests HTTP/1.1" 200 1307 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100.lists.fhcrc.org/member/aismael%40fredhutch.org HTTP/1.1" 200 509 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:10:26 +0000] "GET /3.1/lists/cancerbiology100(a)lists.fhcrc.org/requests HTTP/1.1" 200 1307 "-" "GNU Mailman REST client v3.3.1"
[2025-10-29 22:10:26 +0000] [31] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 190, in handle_request
util.reraise(*sys.exc_info())
File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 625, in reraise
raise value
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/usr/local/lib/python3.8/site-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/wsgiapp.py", line 193, in __call__
return super().__call__(environ, start_response)
File "/usr/local/lib/python3.8/site-packages/falcon/api.py", line 269, in __call__
responder(req, resp, **params)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/post_moderation.py", line 163, in on_get
resource = self._make_collection(request)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/helpers.py", line 172, in _make_collection
entries = [self._resource_as_dict(resource)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/helpers.py", line 172, in <listcomp>
entries = [self._resource_as_dict(resource)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/post_moderation.py", line 153, in _resource_as_dict
resource = self._make_resource(request.id)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/post_moderation.py", line 76, in _make_resource
msg = getUtility(IMessageStore).get_message_by_id(key)
File "/usr/local/lib/python3.8/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/local/lib/python3.8/site-packages/mailman/model/messagestore.py", line 103, in get_message_by_id
return self._get_message(row)
File "/usr/local/lib/python3.8/site-packages/mailman/model/messagestore.py", line 95, in _get_message
with open(path, 'rb') as fp:
FileNotFoundError: [Errno 2] No such file or directory: '/opt/mailman/var/messages/WD/BX/WDBXUFG34LR6QJUQXUWXRHZ4OO4GMQ52'
[29/Oct/2025:22:11:49 +0000] "GET /3.1/lists/pattest.lists.fhcrc.org HTTP/1.1" 200 373 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest.lists.fhcrc.org/roster/owner HTTP/1.1" 200 624 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest.lists.fhcrc.org/roster/moderator HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest(a)lists.fhcrc.org/config HTTP/1.1" 200 3262 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest.lists.fhcrc.org/archivers HTTP/1.1" 200 81 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest.lists.fhcrc.org/archivers HTTP/1.1" 200 81 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest(a)lists.fhcrc.org/requests HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest.lists.fhcrc.org/member/cit-sys-engineering%40fredhutch.org HTTP/1.1" 404 26 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest(a)lists.fhcrc.org/requests HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:50 +0000] "GET /3.1/lists/pattest(a)lists.fhcrc.org/held?count=50&page=1 HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:11:56 +0000] "GET /3.1/lists/vtn.fiscal.pattest.lists.fhcrc.org HTTP/1.1" 404 58 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:02 +0000] "GET /3.1/lists/vtn.fiscal.lists.fhcrc.org HTTP/1.1" 200 389 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:02 +0000] "GET /3.1/lists/vtn.fiscal.lists.fhcrc.org/roster/owner HTTP/1.1" 200 628 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:02 +0000] "GET /3.1/lists/vtn.fiscal.lists.fhcrc.org/roster/moderator HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:02 +0000] "GET /3.1/lists/vtn.fiscal(a)lists.fhcrc.org/config HTTP/1.1" 200 46422 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:02 +0000] "GET /3.1/lists/vtn.fiscal.lists.fhcrc.org/archivers HTTP/1.1" 200 81 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:02 +0000] "GET /3.1/lists/vtn.fiscal.lists.fhcrc.org/archivers HTTP/1.1" 200 81 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:03 +0000] "GET /3.1/lists/vtn.fiscal(a)lists.fhcrc.org/requests HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:03 +0000] "GET /3.1/lists/vtn.fiscal.lists.fhcrc.org/member/cit-sys-engineering%40fredhutch.org HTTP/1.1" 404 26 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:03 +0000] "GET /3.1/lists/vtn.fiscal(a)lists.fhcrc.org/requests HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.1"
[2025-10-29 22:12:03 +0000] [31] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 190, in handle_request
util.reraise(*sys.exc_info())
File "/usr/local/lib/python3.8/site-packages/gunicorn/util.py", line 625, in reraise
raise value
File "/usr/local/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 175, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/usr/local/lib/python3.8/site-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/wsgiapp.py", line 193, in __call__
return super().__call__(environ, start_response)
File "/usr/local/lib/python3.8/site-packages/falcon/api.py", line 269, in __call__
responder(req, resp, **params)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/post_moderation.py", line 163, in on_get
resource = self._make_collection(request)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/helpers.py", line 172, in _make_collection
entries = [self._resource_as_dict(resource)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/helpers.py", line 172, in <listcomp>
entries = [self._resource_as_dict(resource)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/post_moderation.py", line 153, in _resource_as_dict
resource = self._make_resource(request.id)
File "/usr/local/lib/python3.8/site-packages/mailman/rest/post_moderation.py", line 76, in _make_resource
msg = getUtility(IMessageStore).get_message_by_id(key)
File "/usr/local/lib/python3.8/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/local/lib/python3.8/site-packages/mailman/model/messagestore.py", line 103, in get_message_by_id
return self._get_message(row)
File "/usr/local/lib/python3.8/site-packages/mailman/model/messagestore.py", line 95, in _get_message
with open(path, 'rb') as fp:
FileNotFoundError: [Errno 2] No such file or directory: '/opt/mailman/var/messages/LZ/OC/LZOCY4BX6FBKMLJZQKVED6AVXOUBDFXQ'
[29/Oct/2025:22:12:15 +0000] "GET /3.1/lists?advertised=true&count=0&page=1 HTTP/1.1" 200 92 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:15 +0000] "GET /3.1/lists?advertised=true&count=10&page=1 HTTP/1.1" 200 4353 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:15 +0000] "GET /3.1/domains HTTP/1.1" 200 926 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:15 +0000] "GET /3.1/domains/fhcrc.org HTTP/1.1" 200 193 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:15 +0000] "GET /3.1/domains/fredhutch.org HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:15 +0000] "GET /3.1/domains/lists.fhcrc.org HTTP/1.1" 200 220 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:12:15 +0000] "GET /3.1/domains/lists.hanc.info HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
Oct 29 22:13:20 2025 (10) ACCEPT: <DM6PR11MB4692672CB4AB8CA1AB739567D5FAA(a)DM6PR11MB4692.namprd11.prod.outlook.com>
[29/Oct/2025:22:13:33 +0000] "GET /3.1/domains HTTP/1.1" 200 926 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:34 +0000] "GET /3.1/domains/fhcrc.org HTTP/1.1" 200 193 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:34 +0000] "GET /3.1/domains/fredhutch.org HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:34 +0000] "GET /3.1/domains/lists.fhcrc.org HTTP/1.1" 200 220 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:34 +0000] "GET /3.1/domains/lists.hanc.info HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:34 +0000] "POST /3.1/lists/find HTTP/1.1" 200 2569 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists?count=0&page=1 HTTP/1.1" 200 93 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 4441 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/domains HTTP/1.1" 200 926 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/domains/fhcrc.org HTTP/1.1" 200 193 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/domains/fredhutch.org HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/domains/lists.fhcrc.org HTTP/1.1" 200 220 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/domains/lists.hanc.info HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/015.site.257.cergo015.site.257.cer(a)lists.fhcrc.org/config HTTP/1.1" 200 46497 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/1100_labs(a)lists.fhcrc.org/config HTTP/1.1" 200 3053 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/9228.dsmb.members.only(a)lists.fhcrc.org/config HTTP/1.1" 200 3082 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/9292.dsmb.members.only(a)lists.fhcrc.org/config HTTP/1.1" 200 3082 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/a2223dsmbdl(a)lists.fhcrc.org/config HTTP/1.1" 200 3145 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/a244.ct(a)lists.fhcrc.org/config HTTP/1.1" 200 46388 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/a5397.vtn603.pi.coord(a)lists.fhcrc.org/config HTTP/1.1" 200 46380 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/ab.mop(a)lists.fhcrc.org/config HTTP/1.1" 200 46380 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/accessdev(a)lists.fhcrc.org/config HTTP/1.1" 200 3173 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:13:37 +0000] "GET /3.1/lists/actg.site.31422.coord(a)lists.fhcrc.org/config HTTP/1.1" 200 46429 "-" "GNU Mailman REST client v3.3.1"
Oct 29 22:13:47 2025 (10) ACCEPT:
<MN2PR11MB4333B8F87B77ED1E7F83422DDDFAA(a)MN2PR11MB4333.namprd11.prod.outlook.com>
[29/Oct/2025:22:14:23 +0000] "GET /3.1/lists?count=0&page=1 HTTP/1.1" 200 93 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists?count=200&page=1 HTTP/1.1" 200 83390 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/domains HTTP/1.1" 200 926 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/domains/fhcrc.org HTTP/1.1" 200 193 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/domains/fredhutch.org HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/domains/lists.fhcrc.org HTTP/1.1" 200 220 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/domains/lists.hanc.info HTTP/1.1" 200 201 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/015.site.257.cergo015.site.257.cer(a)lists.fhcrc.org/config HTTP/1.1" 200 46497 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/1100_labs(a)lists.fhcrc.org/config HTTP/1.1" 200 3053 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/9228.dsmb.members.only(a)lists.fhcrc.org/config HTTP/1.1" 200 3082 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/9292.dsmb.members.only(a)lists.fhcrc.org/config HTTP/1.1" 200 3082 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/a2223dsmbdl(a)lists.fhcrc.org/config HTTP/1.1" 200 3145 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/a244.ct(a)lists.fhcrc.org/config HTTP/1.1" 200 46388 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/a5397.vtn603.pi.coord(a)lists.fhcrc.org/config HTTP/1.1" 200 46380 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/ab.mop(a)lists.fhcrc.org/config HTTP/1.1" 200 46380 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/accessdev(a)lists.fhcrc.org/config HTTP/1.1" 200 3173 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/actg.site.31422.coord(a)lists.fhcrc.org/config HTTP/1.1" 200 46429 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/actg.site.31422.dataqc(a)lists.fhcrc.org/config HTTP/1.1" 200 46389 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/actg.site.31422.pharm(a)lists.fhcrc.org/config HTTP/1.1" 200 46428 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/actg.site.31422.pi(a)lists.fhcrc.org/config HTTP/1.1" 200 46402 "-" "GNU Mailman REST client v3.3.1"
[29/Oct/2025:22:14:24 +0000] "GET /3.1/lists/actg.site.31422.reg(a)lists.fhcrc.org/config HTTP/1.1" 200 46410 "-" "GNU Mailman REST client v3.3.1"
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org
________________________________
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Wednesday, October 29, 2025 16:07
To: mailman-users(a)mailman3.org <mailman-users(a)mailman3.org>
Subject: [MM3-users] Re: "Something went wrong | Mailman REST API not available. Please restart Mailman core.
CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
On 10/29/25 15:40, Hirayama, Pat wrote:
> Ah, thanks for the reply, Mark. Forgot to include Traceback:
>
> Traceback (most recent call last):
...
Thanks. These are not the normal 'core isn't running' tracebacks which
are `connection refused`. These seem to say that core is dropping the
connection without a response. What's in mailman.log from these times?
--
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://urldefense.com/v3/__https://lists.mailman3.org/mailman3/lists/mailm…
Archived at: https://urldefense.com/v3/__https://lists.mailman3.org/archives/list/mailma…
This message sent to phirayam(a)fredhutch.org
1 year
[MM3-users] Re: using SSH/TLS with external MTA
by Roland Giesler
On 2024/07/28 15:26, Roland Giesler via Mailman-users wrote:
> On 2024/07/28 00:39, Mark Sapiro wrote:
>> On 7/27/24 15:16, Roland Giesler via Mailman-users wrote:
>>>
>>> The server runs power-mailinabox, which uses Postfix indeed. All my
>>> mail, and quite a few others' mail is sent from the using SMTP-Auth
>>> on port 465. Actually, this message is sent via that server too.
>>> So it's clear to me that MM3 is not authenticating for some reason.
>>
>> What do you see in Mailman's smtp.log and in the mail.log on the mail
>> server?
>
> The smtp log is in syslog...
I also see this in /var/log/mailman3/web/mailman-web.log
*** Starting uWSGI 2.0.20-debian (64bit) on [Sun Jul 28 15:27:48 2024] ***
compiled with version: 11.2.0 on 21 March 2022 11:00:44
os: Linux-5.15.108-1-pve #1 SMP PVE 5.15.108-2 (2023-07-20T10:06Z)
nodename: mailman
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /
detected binary path: /usr/bin/uwsgi-core
setgid() to 33
setuid() to 33
chdir() to /usr/share/mailman3-web
your processes number limit is 513922
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to UNIX address /run/mailman3-web/uwsgi.sock fd 4
Python version: 3.10.12 (main, Mar 22 2024, 16:50:05) [GCC 11.4.0]
Python main interpreter initialized at 0x561ce813d1d0
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 166752 bytes (162 KB) for 2 cores
*** Operational MODE: threaded ***
/usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
and timeout are misconfigured. Set retry larger than timeout,
failure to do so will cause the tasks to be retriggered before
completion.
See
https://django-q.readthedocs.io/en/latest/configure.html#retry for details.
warn(
WSGI app 0 (mountpoint='') ready in 5 seconds on interpreter
0x561ce813d1d0 pid: 113 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 113)
spawned uWSGI worker 1 (pid: 339, cores: 2)
[uwsgi-daemons] spawning "python3 manage.py qcluster" (uid: 33 gid: 33)
/usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
and timeout are misconfigured. Set retry larger than timeout,
failure to do so will cause the tasks to be retriggered before
completion.
See
https://django-q.readthedocs.io/en/latest/configure.html#retry for details.
warn(
System check identified some issues:
WARNINGS:
django_mailman3.MailDomain: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
DjangoMailman3Config.default_auto_field attribute to point to a subclass
of AutoField, e.g. 'django.db.models.BigAutoField'.
django_mailman3.Profile: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
DjangoMailman3Config.default_auto_field attribute to point to a subclass
of AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Attachment: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Email: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Favorite: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.LastView: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.MailingList: (models.W042) Auto-created primary key used when
not defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Profile: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Tag: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Tagging: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Thread: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.ThreadCategory: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
hyperkitty.Vote: (models.W042) Auto-created primary key used when not
defining a primary key type, by default 'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
HyperKittyConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
postorius.EmailTemplate: (models.W042) Auto-created primary key used
when not defining a primary key type, by default
'django.db.models.AutoField'.
HINT: Configure the DEFAULT_AUTO_FIELD setting or the
PostoriusConfig.default_auto_field attribute to point to a subclass of
AutoField, e.g. 'django.db.models.BigAutoField'.
15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet starting.
15:27:55 [Q] INFO Process-1 guarding cluster low-vermont-harry-fillet
15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet running.
15:27:55 [Q] INFO Process-1:3 pushing tasks at 386
15:27:55 [Q] INFO Process-1:2 monitoring at 385
15:27:55 [Q] INFO Process-1:1 ready for work at 384
2 years, 3 months
[MM3-users] Re: Newbie question 2: Rewriting issue for bounced emails
by William Oliver
On Sat, 2021-12-25 at 21:32 -0800, Mark Sapiro wrote:
>
>
> Have you added an Alias Domain for your domain?
>
> After doing that did you run `mailman aliases` or restart mailman to
> (re)generate the files.
>
> postfix_domains postfix_lmtp postfix_vmap
> postfix_domains.db postfix_lmtp.db postfix_vmap.db
>
>
> --
>
First, thanks for your patience. Two steps forward and one step back,
here. I have the interface running and I can create a list which
*does* send messages to my test recipients.
To answer your question, yes, I did all that, and that generates
postfix_domains and postfix_lmtp, but not postfix_vmap. Here's what I
got:
$more postfix_domains
# AUTOMATICALLY GENERATED BY MAILMAN ON 2021-12-26 22:29:27
#
# This file is generated by Mailman, and is kept in sync with the
binary hash
# file. YOU SHOULD NOT MANUALLY EDIT THIS FILE unless you know what
you're
# doing, and can keep the two files properly in sync. If you screw it
up,
# you're on your own.
libertyfp.org libertyfp.org
$more postfix_lmtp
# AUTOMATICALLY GENERATED BY MAILMAN ON 2021-12-26 22:29:27
#
# This file is generated by Mailman, and is kept in sync with the
binary hash
# file. YOU SHOULD NOT MANUALLY EDIT THIS FILE unless you know what
you're
# doing, and can keep the two files properly in sync. If you screw it
up,
# you're on your own.
# Aliases which are visible only in the @libertyfp.org domain.
testlist(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-bounces(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-confirm(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-join(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-leave(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-owner(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-request(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-subscribe(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
testlist-unsubscribe(a)libertyfp.org lmtp:[mail.libertyfp.org]:8024
But no postfix_vmap.
However, let me ask another question first:
When running mailman3, do I need to set up a completely different
virtual domain for it to run in? My "real" domain name is
libertyfp.org, and I'm trying to make mailman work on that domain, e.g.
"testlist(a)libertyfp.org." I'm starting to get the idea that I need to
stick a completely different domain in there for the mailinglist.
Which I can do -- I've got another two or three domain names to play
with. Is it a problem to run the mailinglist on the same domain that
the machine sits on for its regular business? A lot of the errors I'm
getting seem to be from trying to do regular mail *and* the mailinglist
on the same domain.
Now that I've installed all this stuff a couple of times, I can easily
re-install for a second virtual domain, if that's what I should be
doing.
But, on to what's not working now...
Unfortunately, I seem to have completely screwed the pooch on getting
postfix/dovecot to play nicely with respect to *receiving* mail.
First, adding "virtual_alias_domains" (and putting libertyfp.org in it)
and commenting out "virtual_mailbox_domains" resulted in postfix
ignoring all my virtual mailboxes. Mail still worked, but mail is now
being sent to /home/<user>/Maildir instead of
/home/vmail/libertyfp/<user>/Maildir -- which means that dovecot, which
looks in the virtual mailboxes, is now unaware of new mail. I suppose
I could link /home/<user>/Maildir to
/home/vmail/libertyfp.org/<user>/Maildir, but I suspect there will be
problems and it's not a real fix. But.. .a problem for another day.
Except... the same thing is happening with the mailinglist.
In mailman3:
I set up a test list (testlist(a)libertyfp.org) and added two test users
(one local and one on a different domain). They added just fine, and
both received the welcome message.
However, when I replied, both messages bounced with the error that
"testlist(a)libertyfp.org" was "user unknown in virtual alias table."
No problem, I thought. So I added:
testlist(a)libertyfp.org testlist
to /etc/postfix/virtual, and
testlist libertyfp.org/testlist/Maildir
to /etc/postfix/virtual-mailbox,
and I added testlist as a user:
$ adduser -m testlist
So, now mail from my list members goes to /home/testlist/Maildir, but
not to the mailinglist.
I also have managed to get another *different* warning, and the "there
ain't no vmap, newbie" error as well:
Dec 26 17:33:11 libertyfp systemd[1]: certbot.service: Consumed 1.041s
CPU time.
Dec 26 17:33:12 libertyfp postfix/smtpd[46453]: error: open database
/opt/mailman/mm/var/data/postfix_vmap.db: No such file or directory
Dec 26 17:33:12 libertyfp postfix/smtpd[46453]: error: unsupported
dictionary type: #hash
Dec 26 17:33:12 libertyfp postfix/smtpd[46453]: connect from
billoblog.com[162.144.108.19]
Dec 26 17:33:16 libertyfp postfix/trivial-rewrite[46479]: warning: do
not list domain libertyfp.org in BOTH virtual_alias_domains and
relay_domains
Dec 26 17:33:16 libertyfp postfix/smtpd[46453]: warning:
hash:/opt/mailman/mm/var/data/postfix_vmap is unavailable. open
database /opt/mailman/mm/var/data/postfix_vmap.db: No such file or
directory
Dec 26 17:33:16 libertyfp postfix/smtpd[46453]: warning:
hash:/opt/mailman/mm/var/data/postfix_vmap lookup error for
"fplist(a)libertyfp.org"
Dec 26 17:33:16 libertyfp postfix/smtpd[46453]: NOQUEUE: reject: RCPT
from billoblog.com[162.144.108.19]: 451 4.3.0 <fplist(a)libertyfp.org>:
Temporary lookup failure; from=<billo(a)billoblog.com>
to=<fplist(a)libertyfp.org> proto=ESMTP helo=<billoblog.com>
That "you can't have both virtual_alias_domains" and "relay_domains"
seems like it should be a clue. But I don't' know what for. Adding
virtual_alias_domains really changed things...
Anyway, here's the part of the /etc/postfix/main.cf that I think is
likely important. Note that I comments out "virtual_mailbox_domains".
myorigin = localhost
mydestination = localhost, localhost.$mydomain
alias_maps = /etc/aliases (which, by the way, just contains
"postmaster: root")
home_mailbox= Maildir
# add to the end (add ssl support)
smtpd_use_tls = yes
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_cert_file = /etc/letsencrypt/live/libertyfp.org/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/libertyfp.org/privkey.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
# add to the end (add virtual users)
# if specify multiple domains, specify comma or space separated
#virtual_mailbox_domains = libertyfp.org
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox
virtual_uid_maps = static:20000
virtual_gid_maps = static:20000
# mailman3 changes
owner_request_special = no
always_add_missing_headers = yes
transport_maps = hash:/opt/mailman/mm/var/data/postfix_lmtp
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
hash:/opt/mailman/mm/var/data/postfix_lmtp
relay_domains = hash:/opt/mailman/mm/var/data/postfix_domains
default_destination_recipient_limit = 30
default_destination_concurrency_limit = 15
virtual_alias_domains = hash:/etc/postfix/domains
virtual_alias_maps = hash:/opt/mailman/mm/var/data/postfix_vmap
#hash:/etc/postfix/virtual
Here's the postfix maps:
/etc/postfix/domains:
libertyfp.org #
/etc/postfix/virtual:
fp145(a)libertyfp.org fp145
mailman(a)libertyfp.org mailman
testlist(a)libertyfp.org testlist
/etc/postfix/virtual-mailbox:
mailman libertyfp.org/mailadmin/Maildir/
fp145@localhost libertyfp.org/fp145/Maildir/
testlist libertyfp.org/testlist/Maildir
4 years, 10 months
[MM3-users] Re: error changed after restart
by Guillermo Hernandez (Oldno7)
On 6/2/21 21:19, Abhilash Raj wrote:
>
>
> On Sat, Feb 6, 2021 at 19:44, Guillermo Hernandez (Oldno7) via
> Mailman-users <mailman-users(a)mailman3.org> wrote:
>> On 6/2/21 18:08, Abhilash Raj wrote:
>>
>> On Sat, Feb 6, 2021, at 3:04 AM, Guillermo Hernandez (Oldno7) via
>> Mailman-users wrote:
>>
>> I restarted de server and the error changed. Now the log
>> shows "KeyError: 'subscription_mode'":
>>
>> Did you also restart Mailman Core after the upgrade?
>>
>> Yes, indeed: I stopped mailman core and all the processes related.
>> Did the upgrades. Started all again. Find the errors in the web user
>> interface. Stopped all again. Looked for errors in the log. Restarted
>> the complete server. Found the second error that this second mail is
>> about to. It happens when, in the main page that shows all the lists
>> you click to see one of them. It seems to me that it has been
>> database structure changes in django that the upgrade is not aware...
>> but it's a very long shot from my side.
> `subscription_mode` was added in Mailman Core 3.3.2 and it is actually
> a derived atrribute and not stored in Database. Mailman's API should be
> returning this attribute for each Member, but for some reason it seems
> to me like it isn't doing that even though do have Mailman 3.3.3 running
> like you said.
> If you have Curl installed, can you send me the output of:
> $ curl -u <user>:<pass> http://localhost:8001/3.1/members?count=5&page=1
This is the output you asked for (it's the same you can see when you try
to interact with one list):
/usr/local/mailman3 # curl -u XXXXXX:XXXXXX
http://localhost:8001/3.1/members?count=5&page=1
/usr/local/mailman3 # <html>
<head>
<title>Internal Server Error</title>
</head>
<body>
<h1><p>Internal Server Error</p></h1>
</body>
</html>
No log entry has been produced...
TIA.
> It should ideally return an output that looks something like shown
> here[1]. You
> can put the username/password of Core's API server in the above command.
> [1]:
> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
>
> Abhilash
>> I'm using sqlite as django database and mysql for mailman.
>>
>> ERROR 2021-02-06 11:47:49,015 26798 django.request Internal
>> Server Error:
>> /mailman3/mailman3/lists/name_and_domain.of.the.list
>> Traceback (most recent call last): File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 119, in __getattr__ return self._get(name) File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 86, in _get raise KeyError(key) KeyError:
>> 'subscription_mode' During handling of the above exception,
>> another exception occurred: Traceback (most recent call
>> last): File
>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py",
>> line 34, in inner response = get_response(request) File
>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>> line 115, in _get_response response =
>> self.process_exception_by_middleware(e, request) File
>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>> line 113, in _get_response response =
>> wrapped_callback(request, *callback_args, **callback_kwargs)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>> line 71, in view return self.dispatch(request, *args,
>> **kwargs) File
>> "/usr/local/lib/python3.7/site-packages/postorius/views/generic.py",
>> line 74, in dispatch return super(MailingListView,
>> self).dispatch(request, *args, **kwargs) File
>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>> line 97, in dispatch return handler(request, *args,
>> **kwargs) File
>> "/usr/local/lib/python3.7/site-packages/postorius/views/list.py",
>> line 295, in get member.subscription_mode == File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 124, in __getattr__ self.__class__.__name__, name))
>> AttributeError: 'Member' object has no attribute
>> 'subscription_mode' *********************** some info about
>> the installed versions via pip list: pip list | grep django
>> django-allauth 0.44.0
>> django-appconf 1.0.4
>> django-compressor 2.4
>> django-extensions 3.1.0
>> django-gravatar2 1.4.4
>> django-haystack 3.0
>> django-mailman3 1.3.5
>> django-picklefield 3.0.1
>> django-q 1.3.4
>> djangorestframework 3.12.2 pip list | grep mailman
>> django-mailman3 1.3.5
>> mailman 3.3.3
>> mailman-hyperkitty 1.1.0
>> mailmanclient 3.3.2 pip list | grep postorius
>> postorius 1.3.4 On 6/2/21 11:12,
>> Guillermo Hernandez (Oldno7) via Mailman-users wrote:
>>
>> I've just upgrade mailman 3 installation following Mr.
>> Sapiro advice: did a pip install --upgrade
>> django-mailman3 hyperkitty mailman mailmanclient
>> mailman-hyperkitty postorius I did a "python3 manage.py
>> migrate" after, too. And all seemed to run well. All the
>> lists showed in postorius via web, but when I try to
>> accesss into one of them the browser shows an error. In
>> the log you can see: *-*-*-*-*-*-* Traceback (most recent
>> call last): File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 119, in __getattr__ return self._get(name)
>> File
>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>> line 86, in _get raise KeyError(key) KeyError:
>> 'get_requests_count' .. (And after all the traceback
>> lines) AttributeError: 'MailingList' object has no
>> attribute 'get_requests_count' *-*-*-*-*-*-*-* The lists
>> seem to be distributing messeages well.. but I cannot
>> acces via web administration (django/postorius) Can
>> anyone point me in the right direction to solve this,
>> please? _______________________________________________
>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>> <mailto:mailman-users@mailman3.org> To unsubscribe send
>> an email to mailman-users-leave(a)mailman3.org
>> <mailto:mailman-users-leave@mailman3.org>
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>
>>
>> _______________________________________________ Mailman-users
>> mailing list -- mailman-users(a)mailman3.org
>> <mailto:mailman-users@mailman3.org> To unsubscribe send an
>> email to mailman-users-leave(a)mailman3.org
>> <mailto:mailman-users-leave@mailman3.org>
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>
>>
>> _______________________________________________ Mailman-users mailing
>> list -- mailman-users(a)mailman3.org
>> <mailto:mailman-users@mailman3.org> To unsubscribe send an email to
>> mailman-users-leave(a)mailman3.org
>> <mailto:mailman-users-leave@mailman3.org>
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
5 years, 9 months
[MM3-users] Re: A little stuck with installation of MM3 - ModuleNotFoundError: No module named 'flufl.lock'
by Odhiambo Washington
On Wed, 29 Jul 2020 at 02:58, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 7/28/20 2:34 AM, Odhiambo Washington wrote:
> >
> > So, now I remember why I had to chown -R mailman3 /opt/mailman
> > Then now it seems like I have been doing things incorrectly, because I
> have
> > been doing
> > a lot of operations as root by simply:
> > cd /opt/mailman/mm
> > virtualenv venv
> > source venv/bin/activate
> > Looks like the correct way is to start with su - mailman3
>
>
> Yes. All those things should be done as the Mailman user.
>
>
> >>> PS: There is the issue with qcluster, which doesn't seem to have been
> ...
> > I have run it from supervisord. It has forked 30 processes and refuses to
> > kill them when I stop supervisord.
> > I will look for options around it.
>
>
> I know nothing about supervisord, but there should be a parent process.
> E.g., here
>
> > msapiro@mail:~$ ps -fwwu mailman|grep qcluster
> > mailman 2885 1 0 Jul18 ? 00:00:00 /bin/bash
> /opt/mailman/mm/bin/mailman-web-django-admin qcluster
> > mailman 2889 2885 0 Jul18 ? 00:01:57
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 2930 2889 0 Jul18 ? 01:21:03
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 2944 2930 0 Jul18 ? 00:04:17
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 2945 2930 3 Jul18 ? 07:11:14
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 6467 2930 0 15:39 ? 00:00:03
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 12337 2930 0 15:00 ? 00:00:07
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 12639 2930 0 11:08 ? 00:00:11
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 14658 2930 0 Jul27 ? 00:00:22
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 15860 2930 0 01:41 ? 00:00:21
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > mailman 19205 2930 0 Jul27 ? 00:00:29
> /opt/mailman/mm/venv/bin/python /opt/mailman/mm/venv/bin/django-admin
> qcluster
> > msapiro@mail:~$
>
> pid 2885 is the parent which forked 2889 which in turn forked 2930 which
> forked all the others. stopping (sigterm) 2885 in this case will stop
> them all.
>
> I have seen an issue on one server where some of the qcluster workers
> become orphaned and their parent pid is 1. These are left when I stop
> the upstart service so I have this script.
>
> #! /bin/bash
> if echo `status qcluster` | grep -q 'running' ; then
> echo qcluster is running
> exit
> fi
> ps -fwwu mailman|grep '[a]dmin qcluster'|awk '{print $2}'|xargs kill
>
> to kill them.
>
I found some obscure option for supervisord that enabled the killing of the
process(es).
Obscure because it's not documented in the sample configuration for
supervisord, but it's out there in the wild.
> > PS: Did you by any chance find time to look into the issue about wsgi.py
> > that you had mentioned - the one that has me
> > stuck using it??
>
> If you're referring to the issue at the end of
> <
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
> >,
> I think that was caused by your not having the __init__.py file in
> /opt/mailman/mm/.
>
> If not, I probably need more information.
>
Yes, the same problem.
I created the file __init__.py in /opt/mailman/mm
However, when I run using the wsgi.py I ended up (still do!) with the error:
[Wed Jul 29 10:08:51.869144 2020] [wsgi:info] [pid 79132] [remote
197.232.81.246:64709] mod_wsgi (pid=79132, process='mailman-web',
application='mm3-lists.server.name|/mm3'): Loading Python script file
'/opt/mailman/mm/wsgi.py'.
[Wed Jul 29 10:08:51.872461 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] mod_wsgi (pid=79132): Failed to exec Python script
file '/opt/mailman/mm/wsgi.py'.
[Wed Jul 29 10:08:51.872507 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] mod_wsgi (pid=79132): Exception occurred processing
WSGI script '/opt/mailman/mm/wsgi.py'.
[Wed Jul 29 10:08:51.872754 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] Traceback (most recent call last):
[Wed Jul 29 10:08:51.872827 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File "/opt/mailman/mm/wsgi.py", line 38, in <module>
[Wed Jul 29 10:08:51.872835 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] application = get_wsgi_application()
[Wed Jul 29 10:08:51.872847 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/core/wsgi.py",
line 12, in get_wsgi_application
[Wed Jul 29 10:08:51.872852 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] django.setup(set_prefix=False)
[Wed Jul 29 10:08:51.872862 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/__init__.py",
line 19, in setup
[Wed Jul 29 10:08:51.872868 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] configure_logging(settings.LOGGING_CONFIG,
settings.LOGGING)
[Wed Jul 29 10:08:51.872878 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/conf/__init__.py",
line 76, in __getattr__
[Wed Jul 29 10:08:51.872884 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] self._setup(name)
[Wed Jul 29 10:08:51.872893 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/conf/__init__.py",
line 63, in _setup
[Wed Jul 29 10:08:51.872899 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] self._wrapped = Settings(settings_module)
[Wed Jul 29 10:08:51.872909 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/conf/__init__.py",
line 142, in __init__
[Wed Jul 29 10:08:51.872914 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] mod =
importlib.import_module(self.SETTINGS_MODULE)
[Wed Jul 29 10:08:51.872923 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File
"/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
[Wed Jul 29 10:08:51.872929 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] return _bootstrap._gcd_import(name[level:],
package, level)
[Wed Jul 29 10:08:51.872938 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File "<frozen importlib._bootstrap>", line 994, in
_gcd_import
[Wed Jul 29 10:08:51.872949 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File "<frozen importlib._bootstrap>", line 971, in
_find_and_load
[Wed Jul 29 10:08:51.872960 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] File "<frozen importlib._bootstrap>", line 953, in
_find_and_load_unlocked
[Wed Jul 29 10:08:51.872984 2020] [wsgi:error] [pid 79132] [remote
197.232.81.246:64709] ModuleNotFoundError: No module named 'settings'
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", grep ^[^#] :-)
6 years, 3 months
[MM3-users] Re: Apache+mod_wsgi issue
by Odhiambo Washington
On Sat, Dec 24, 2022 at 1:51 AM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/22/22 22:26, Odhiambo Washington wrote:
> > On Fri, Dec 23, 2022 at 9:21 AM Odhiambo Washington <odhiambo(a)gmail.com>
> > wrote:
> >
> >> And now I am having a problem with mod_wsgi.
> >> First, the URL displayed when I load the page looks bogus to me.
> >> While I expect the URL to be
> >> https://mm3-lists.kictanet.or.ke/mailman3/domains/, mod_wsgi give me
> >> https://mm3-lists.kictanet.or.ke/mailman3/mailman3/domains/ - there is
> an
> >> extra /mailman3!
>
>
> See below:
>
>
> >> So I have;
> >> 1. https://mm3-lists.kictanet.or.ke/mailman3/mailman3/lists/ -
> working,
> >> or appears to.
> >> 2. https://mm3-lists.kictanet.or.ke/mailman3/mailman3/domains/ -
> working,
> >> or appears to.
> >> 3. https://mm3-lists.kictanet.or.ke/mailman3/mailman3/bans/ - working,
> or
> >> appears to
> >> 4. https://mm3-lists.kictanet.or.ke/mailman3/mailman3/users - working,
> or
> >> appears to
> >> 5.
> >>
> https://mm3-lists.kictanet.or.ke/mailman3/mailman3/lists/kictanet.lists.kic…
> >> - This throws an exception error when I click "Manage Subscription".
> >>
> >> -> https://pastebin.ubuntu.com/p/RkKH793Jgw/
>
>
> messages like these
>
> [Fri Dec 23 09:10:55.393386 2022] [wsgi:error] [pid 74857] [remote
> 197.232.81.246:14181] File
> "/opt/mailman/mm/venv/lib/python3.9/site-packages/mailmanclient/restbase/connection.py",
>
> line 160, in call
> [Fri Dec 23 09:10:55.393390 2022] [wsgi:error] [pid 74857] [remote
> 197.232.81.246:14181] raise HTTPError(params.get('url'),
> response.status_code,
> [Fri Dec 23 09:10:55.393394 2022] [wsgi:error] [pid 74857] [remote
> 197.232.81.246:14181] urllib.error.HTTPError: HTTP Error 500: {"title":
> "500 Internal Server Error"}
>
> Indicate an uncaught exception in Mailman core. What's in mailman.log?
>
A good catch here!
mailman.log was mostly having a complaint about a missing config file -
/etc/mailman3/mailman-hyperkitty.cfg
I then just did a symlink: ln -s /opt/mailman/mm /etc/mailman3, which then
made things start working.
And I don't like this, so I think I will put all my configs into
/opt/mailman/mm/etc/ and link /etc/mailman3 to this path instead.
What bite me is probably related to this experience by Turnbull:
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
I am on FreeBSD where user applications should have config files in
/usr/local/etc/ and not /etc/ so having /etc/mailman3 and
not /usr/local/etc/mailman3 kinda makes me feel weird.
>> And while I do not quite understand the error itself, there is also one
> >> particular line that I also saw that has left me baffled:
> >> [Fri Dec 23 08:53:18.290411 2022] [core:info] [pid 91236] [client
> >> 197.232.81.246:13865] AH00128: File does not exist:
> >> /usr/local/www/apache24/data/archives/list/
> >> kictanet(a)lists.kictanet.or.ke/thread/VIHCC6MSXZSNHY7YPEJ3D2US4N7MHJEC/,
> >> referer:
> >>
> https://mm3-lists.kictanet.or.ke/archives/list/kictanet@lists.kictanet.or.ke
>
> This is because something is doing an HTTP GET for
> `/archives/list/
> kictanet(a)lists.kictanet.or.ke/thread/VIHCC6MSXZSNHY7YPEJ3D2US4N7MHJEC/`
> <http://kictanet@lists.kictanet.or.ke/thread/VIHCC6MSXZSNHY7YPEJ3D2US4N7MHJE…>
> and the URL is not recognized as one handled by mod_wsgi so apache tries
> to get it from its DocumentRoot.
>
> mod_wsgi has to serve a number of URLs. Look in /opt/mailman/mm/urls.py
> for urlpatterns. You will probably see things like
>
> url(r'^accounts/', include('allauth.urls')),
> # Django admin
> url(r'^admin/', admin.site.urls),
> url(r'^mailman3/', include('postorius.urls')),
> url(r'^archives/', include('hyperkitty.urls')),
>
> Those are all things that need to be handled by mod_wsgi
>
> In your apache config, you only have a WSGIScriptAlias for /mailman3.
> Thus paths need to be prefixed with /mailman3 in order to be handled by
> mod_wsgi. I'm not sure what is doing this prefixing, but without it
> paths that don't begin with /mailman3 don't work unless you also have
> things like
>
> WSGIScriptAlias /accounts /opt/mailman/mm/wsgi.py
> WSGIScriptAlias /admin /opt/mailman/mm/wsgi.py
> WSGIScriptAlias /archives /opt/mailman/mm/wsgi.py
>
> in your apache config.
>
These are my files:
1. urls.py
<CUT >
from django.conf.urls import include
from django.urls import re_path
from django.contrib import admin
from django.urls import reverse_lazy
from django.views.generic import RedirectView
urlpatterns = [
re_path(r'^$', RedirectView.as_view(
url=reverse_lazy('list_index'),
permanent=True)),
re_path(r'^postorius/', include('postorius.urls')),
re_path(r'^hyperkitty/', include('hyperkitty.urls')),
re_path(r'', include('django_mailman3.urls')),
re_path(r'^accounts/', include('allauth.urls')),
# Django admin
re_path(r'^admin/', admin.site.urls),
re_path(r'^mailman3/', include('postorius.urls')),
re_path(r'^archives/', include('hyperkitty.urls')),
]
</CUT>
2. apache.conf
<CUT>
...
Alias /static "/opt/mailman/mm/static"
<Directory "/opt/mailman/mm/static">
Require all granted
</Directory>
# WSGIScriptAlias /mailman3 /opt/mailman/mm/wsgi.py
# WSGIScriptAlias /accounts /opt/mailman/mm/wsgi.py
# WSGIScriptAlias /admin /opt/mailman/mm/wsgi.py
# WSGIScriptAlias /archives /opt/mailman/mm/wsgi.py
# WSGIScriptAlias /user-profile /opt/mailman/mm/wsgi.py
# WSGIScriptAlias /hyperkitty /opt/mailman/mm/wsgi.py
# WSGIScriptAlias /postorius /opt/mailman/mm/wsgi.py
WSGIScriptAlias / /opt/mailman/mm/wsgi.py
<Directory "/opt/mailman/mm/">
<Files wsgi.py>
Order deny,allow
Allow from all
Require all granted
</Files>
WSGIProcessGroup mailman-web
</Directory>
<CUT>
> > I also need to add the fact that at the point where I am clicking "Manage
> > Subscription", the URL has changed to
> >
> https://mm3-lists.kictanet.or.ke/mailman3/archives/list/kictanet@lists.kict…
> > (just a single /mailman3).
> >
>
>
> Something is adding mailman3/ to URLs. In the above the URL should be
>
> https://mm3-lists.kictanet.or.ke/archives/list/kictanet@lists.kictanet.or.k…,
>
> but an extra /mailman3 is added. The others are like
> https://mm3-lists.kictanet.or.ke/mailman3/lists/ and an extra /mailman3
> is added.
>
I have tested with creating all those commented out aliases and that ended
up still giving me /mailman3/mailman3/* which I did not
like, although everything appeared to work.
I then ended up with only "WSGIScriptAlias / /opt/mailman/mm/wsgi.py"
and now when I type https://mm3-lists.kictanet.or.ke I end
up at https://mm3-lists.kictanet.or.ke/mailman3/lists/. Of course something
has appended "/mailman3"
So this has resulted in all URLs having /mailman3/ appended, except for the
/archives link.
Now my question is about what could be adding the /mailman3. Is it possible
that I installed something out of the ordinary?
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
3 years, 10 months
[MM3-users] Re: Error 500 on held_messages page
by Stephan Krinetzki
Hi Mark,
Mark Sapiro wrote:
> On 2/3/22 08:01, Stephan Krinetzki wrote:
> > Hello all,
> > we now have at least one mailing list (there may be more affected) that generates a 500 error when calling the held_messages page. After looking at the held messages via the mailman shell, we have identified three mails that have neither a subject nor a message body. How can we remove these three mails from the database?
> > This shouldn't be an issue, at least with Mailman core 3.3.5, unless I
> don't understand.
> Note that there are 3 tables involved. The request (IListRequests), the
> pendings (IPended and IPendedKeyValue), and the held message
> (IMessageStore).
> > This is the mailman shell command we used:
> > mailman shell -l listname(a)lists.example.com
> > <removed>
> > Welcome to the GNU Mailman shell
> > Use commit() to commit changes.
> > Use abort() to discard changes since the last commit.
> > Exit with ctrl+D does an implicit commit() but exit() does not.
> > Die Variable 'm' ist die listname(a)lists.example.com Mailingliste
> > >>> msg_db = getUtility(IMessageStore)
> > >>> req_db = IListRequests(m)
> > >>> reqs = list(req_db.held_requests)
> > >>> for req in reqs:
> > ... print('{}: {}'.format(req.id, req.request_type))
> > ...
> > 32598: 1
> > [...]
> > 107656: 1
> > 107737: 1
> > 107758: 1
> >
> > OK, you have requests.
> > >>> from mailman.app.moderator import handle_message
> > >>> handle_message(m, 107758, Action.discard)
> > >>> reqs = list(req_db.held_requests)
> > >>> for req in reqs:
> > ... print('{}: {}'.format(req.id, req.request_type))
> > ...
> > 32598: 1
> > [...]
> > 107656: 1
> > 107737: 1
> >
> > OK, you discarded the message held with request id 107758.
> > >>> handle_message(m, 92927, Action.discard)
> > Traceback (most recent call last):
> > File "<console>", line 1, in <module>
> > File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailman/app/moderator.py", line 112, in handle_message
> > key, msgdata = requestdb.get_request(id)
> > TypeError: 'NoneType' object is not iterable
> > >>>
> >
> > There is no request with id 92927. Why do you think there should be?
Well, i truncated the list above (marked by [...]) but this message is there:
32598: 1
107788: 1
22449: 1
95736: 1
108279: 1
66937: 1
108367: 1
68261: 1
108379: 1
108411: 1
108587: 1
108596: 1
108723: 1
107881: 1
107891: 1
108814: 1
92927: 1
107963: 1
106486: 1
106488: 1
106526: 1
106577: 1
106682: 1
106818: 1
106857: 1
108076: 1
106926: 1
107044: 1
107146: 1
107152: 1
107153: 1
107204: 1
108199: 1
107210: 1
107329: 1
107394: 1
107447: 1
107531: 1
107562: 1
107594: 1
107656: 1
107737: 1
> If by remove them from the database, you mean just from the
> messagestore, you can do (using your above)
> msg_db.delete_message('the_message_id')
Ok, thanks. With this code lines the message is deleted, right?
> To delete a pending request for which there is no request id, e.g. the
> id 92927 above, you could do
> pendings = getUtility(IPendings)
> for token, data in pendings.find(pend_type='held message'):
> if data and data['id'] == 92927:
> pendings.confirm(token, expunge=True)
>
That didn't helped:
mailman shell -l list(a)lists.example.com
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
Die Variable 'm' ist die list(a)lists.example.com Mailingliste
>>> msg_db = getUtility(IMessageStore)
>>> req_db = IListRequests(m)
>>> reqs = list(req_db.held_requests)
>>> for req in reqs:
... print('{}: {}'.format(req.id, req.request_type))
...
32598: 1
107788: 1
22449: 1
95736: 1
108279: 1
66937: 1
108367: 1
68261: 1
108379: 1
108411: 1
108587: 1
108596: 1
108723: 1
107881: 1
107891: 1
108814: 1
92927: 1
107963: 1
106486: 1
106488: 1
106526: 1
106577: 1
106682: 1
106818: 1
106857: 1
108076: 1
106926: 1
107044: 1
107146: 1
107152: 1
107153: 1
107204: 1
108199: 1
107210: 1
107329: 1
107394: 1
107447: 1
107531: 1
107562: 1
107594: 1
107656: 1
107737: 1
>>> for req in reqs:
... print(req.key)
... for line in str(msg_db.get_message_by_id(req.key)).split("\n"):
... print(line)
... print('\n')
...
<1b35d982.85b92.16abbe857a6.Coremail.lusong(a)lsec.cc.ac.cn>
None
<08539546582c0560693f58ab0101bd83(a)airotrader.com>
<Mail Content, shorted out>
<1545090824.237969198(a)f452.i.mail.ru>
None
<tencent_41D5C02D27CAA4DD59BDF1A2(a)qq.com>
<Mail Content, shorted out>
<292716975.841376.1597725820301.JavaMail.zimbra(a)rri.res.in>
<Mail Content, shorted out>
<5d74c171c32303e88c9d8b86ac60ba48(a)blackroseradio.com>
<Mail Content, shorted out>
<DM6PR04MB38208B40539F3861A613098DB1260(a)DM6PR04MB3820.namprd04.prod.outlook.com>
<Mail Content, shorted out>
<eaefd169fb428442d9e3ce31b72bfdb4(a)wordenonwine.com>
<Mail Content, shorted out>
<2108728073.11037004.1643524877756.JavaMail.zimbra(a)caxias.rs.gov.br>
<Mail Content, shorted out>
<CANvwqssiPV7HgupqrYkgxGoFsKph=TW-mwNucs+NBwxs3Uw1bQ(a)mail.gmail.com>
<Mail Content, shorted out>
<c0b951ee190727163bce555a3a030f9f(a)optiboxes.com>
<Mail Content, shorted out>
<144a5727a850fea01910dfe9c427427e(a)licensedappraisal.com>
<Mail Content, shorted out>
<61ef2070.1c69fb81.f2f7e.23fc(a)mx.google.com>
<Mail Content, shorted out>
<b037941f4318324ab23a3ee7efcbf970(a)hollymillrun.com>
<Mail Content, shorted out>
<929ad585ea426a3835cf63058c22782c(a)airotrader.com>
<Mail Content, shorted out>
<180a36ee.2b.17afe0b825e.Coremail.carmark3(a)163.com>
None
<24abca1072b83535bbf2e39b6a825fc8(a)optiboxes.com>
<Mail Content, shorted out>
<CAK69=c9mFvOZq9ro7HavgYdOeo-oJ2_6h8SjQsBfcrxnpf_etA(a)mail.gmail.com>
<Mail Content, shorted out>
<5d7b548ab086bb47c0c6caacbff92c54(a)licensedappraisal.com>
<Mail Content, shorted out>
<062dfa1a2deb3ac136ecdfde1b4c6d74(a)optiboxes.com>
<Mail Content, shorted out>
<d517a99e8e9db94ddc8ecd1c6d226788(a)spiritsestates.com>
<Mail Content, shorted out>
<043051c1d7a64c04ce8c83c7a5e54eec(a)krswim.com>
<Mail Content, shorted out>
<2c42b1d628a43b1fc78471e873a0691d(a)totallyneat.com>
<Mail Content, shorted out>
<CALQ9jAcqu9yRj=EYn=DgA8unYRWkfUgFiL54bMiLxovc+JXcBw(a)mail.gmail.com>
<Mail Content, shorted out>
<1ffa446361bfdf49a71b8669165e6350(a)wordenonwine.com>
<Mail Content, shorted out>
<b9afc5d32f87320a8333093ffd0635f5(a)infnitsolutions.com>
<Mail Content, shorted out>
<f486ea12a6bcecec1b1e4a51f1be0719(a)penshaver.com>
<Mail Content, shorted out>
<CAPOYRqVmrwcdRQXwm56sM+0Ov1bcLqxFXFCrx5Rf3gVqj9nOgA(a)mail.gmail.com>
<Mail Content, shorted out>
<1412096130.6666950.1642348478679.JavaMail.zimbra(a)gorontaloprov.go.id>
<Mail Content, shorted out>
<40f51428847f7874d06b8b5ad50c745d(a)wordenonwine.com>
<Mail Content, shorted out>
<2a82c4a5e577658efc189f02fc13f520(a)nutriholding.com>
<Mail Content, shorted out>
[And a lot of more messages]
As you can see, there a some messages, that have no message body and i think that's the issue.
In the httpd.log of mailman:
2022-02-04 10:01:09 [FALCON] [ERROR] GET /3.1/lists/list(a)lists.example.com/held?count=10&page=1 => Traceback (most recent call last):
File "falcon/app.py", line 361, in falcon.app.App.__call__
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailman/rest/post_moderation.py", line 182, in on_get
resource = self._make_collection(request)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailman/rest/helpers.py", line 182, in _make_collection
entries = [as_dict(resource) for resource in collection]
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailman/rest/helpers.py", line 182, in <listcomp>
entries = [as_dict(resource) for resource in collection]
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailman/rest/post_moderation.py", line 173, in _resource_as_dict
assert resource is not None, resource
AssertionError: None
[04/Feb/2022:10:01:09 +0100] "GET /3.1/lists/list(a)lists.example.com/held?count=10&page=1 HTTP/1.1" 500 38 "-" "GNU Mailman REST client v3.3.3"
Maybe that helps to identify the issue.
> Mailman core 3.3.5 has a lot of changes to address this issue.
> Also see https://gitlab.com/mailman/mailman/-/issues/946
4 years, 9 months
[MM3-users] Re: Migration from old server to new server failed
by Helio Loureiro
Hi,
I repeated the steps today.
First I waited to end the errors raised because the mailman3-web wasn't
running.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/urllib3/connectionpool.py",
line 793, in urlopen
response = self._make_request(
File
"/local/mailman/venv/lib/python3.10/site-packages/urllib3/connectionpool.py",
line 496, in _make_request
conn.request(
File
"/local/mailman/venv/lib/python3.10/site-packages/urllib3/connection.py",
line 400, in request
self.endheaders()
File "/usr/lib/python3.10/http/client.py", line 1278, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/usr/lib/python3.10/http/client.py", line 1038, in _send_output
self.send(msg)
File "/usr/lib/python3.10/http/client.py", line 976, in send
self.connect()
File
"/local/mailman/venv/lib/python3.10/site-packages/urllib3/connection.py",
line 238, in connect
self.sock = self._new_conn()
File
"/local/mailman/venv/lib/python3.10/site-packages/urllib3/connection.py",
line 213, in _new_conn
raise NewConnectionError(
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection
object at 0x7f0fdc2f72b0>: Failed to establish a new connection: [Errno
111] Connection refused
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/requests/adapters.py",
line 486, in send
resp = conn.urlopen(
File
"/local/mailman/venv/lib/python3.10/site-packages/urllib3/connectionpool.py",
line 847, in urlopen
retries = retries.increment(
File
"/local/mailman/venv/lib/python3.10/site-packages/urllib3/util/retry.py",
line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason # type:
ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1',
port=8000): Max retries exceeded with url: /archives/api/mailman/archive
(Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at
0x7f0fdc2f72b0>: Failed to establish a new connection: [Errno 111]
Connection refused'))
Which seems to keep forever. So eventually I gave up and moved forward.
And I changed to use the uwsgi socket instead of the direct port.
(venv) mailman@new-mailman3 ~ (v3.1.1) [0|SIGINT]> mailman-web migrate
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you
don't care about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't
care about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying account.0003_alter_emailaddress_create_unique_verified_email...
OK
Applying account.0004_alter_emailaddress_drop_unique_email... OK
Applying account.0005_emailaddress_idx_upper_email... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying django_mailman3.0003_sessions... OK
Applying django_q.0010_auto_20200610_0856... OK
Applying django_q.0011_auto_20200628_1055... OK
Applying django_q.0012_auto_20200702_1608... OK
Applying django_q.0013_task_attempt_count... OK
Applying django_q.0014_schedule_cluster... OK
Applying hyperkitty.0016_auto_20180309_0056... OK
Applying hyperkitty.0017_file_attachments... OK
Applying hyperkitty.0018_threadcategory_color... OK
Applying hyperkitty.0019_auto_20190127_null_description... OK
Applying hyperkitty.0020_auto_20190907_1927... OK
Applying hyperkitty.0021_add_owners_mods...Traceback (most recent call
last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 87, in _execute
return self.cursor.execute(sql)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 261, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'hyperkitty_mailinglist_moderators'
already exists")
Then dropping table hyperkitty_mailinglist_moderators.
(venv) mailman@new-mailman3 ~ (v3.1.1)> mailman-web migrate
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you
don't care about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't
care about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying hyperkitty.0021_add_owners_mods...Traceback (most recent call
last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 87, in _execute
return self.cursor.execute(sql)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 261, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'hyperkitty_mailinglist_owners'
already exists")
After dropping table hyperkitty_mailinglist_owners.
(venv) mailman@new-mailman3 ~ (v3.1.1) [0|1]> mailman-web migrate
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you
don't care about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't
care about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying hyperkitty.0021_add_owners_mods...Traceback (most recent call
last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 87, in _execute
return self.cursor.execute(sql)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 261, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'hyperkitty_mailinglist_moderators'
already exists")
After dropping table hyperkitty_mailinglist_moderators.
(venv) mailman@new-mailman3 ~ (v3.1.1) [0|1]> mailman-web migrate
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you
don't care about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't
care about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying hyperkitty.0021_add_owners_mods... OK
Applying hyperkitty.0022_mailinglist_archive_rendering_mode... OK
Applying hyperkitty.0023_alter_mailinglist_name... OK
Applying postorius.0004_create_email_template...Traceback (most recent
call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 87, in _execute
return self.cursor.execute(sql)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 261, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (1050, "Table 'postorius_emailtemplate' already
exists")
After dropping table postorius_emailtemplate.
(venv) mailman@new-mailman3 ~ (v3.1.1) [0|1]> mailman-web migrate
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you
don't care about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't
care about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying postorius.0004_create_email_template... OK
Applying postorius.0005_auto_20180707_1107... OK
Applying postorius.0006_auto_20180711_1359... OK
Applying postorius.0007_auto_20180712_0536... OK
Applying postorius.0008_auto_20190310_0717... OK
Applying postorius.0009_auto_20190508_1604... OK
Applying postorius.0010_auto_20190821_0621... OK
Applying postorius.0011_auto_20191109_1219... OK
Applying postorius.0012_auto_20200420_2136... OK
Applying postorius.0013_auto_20201116_0058... OK
Applying postorius.0014_auto_20210329_2248... OK
Applying postorius.0015_auto_20210619_0509... OK
Applying postorius.0016_auto_20210810_2157... OK
Applying postorius.0017_alter_emailtemplate_language... OK
Applying postorius.0018_alter_emailtemplate_language... OK
Applying socialaccount.0004_app_provider_id_settings... OK
Applying socialaccount.0005_socialtoken_nullable_app... OK
Applying socialaccount.0006_alter_socialaccount_extra_data... OK
At this point the errors remains about not reaching web part. So I started
mailman3-web.
Then I see these errors on var/log/mailman.log
Feb 19 15:35:14 2024 (543890) Traceback (most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
File
"/local/mailman/venv/lib/python3.10/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>
Feb 19 15:35:14 2024 (543890) HyperKitty failure on
http://127.0.0.1/archives/api/mailman/archive: <!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>
(404)
Feb 19 15:35:14 2024 (543890) Could not archive the message with id <
ff1707bb-d105-4f37-b3f8-9766b3563127(a)SESAMR604.domain.com>
Feb 19 15:35:14 2024 (543890) archiving failed, re-queuing (mailing-list
mylist.new-mailman.domain.com, message <
ff1707bb-d105-4f37-b3f8-9766b3563127(a)machine.domain.com>)
Feb 19 15:35:14 2024 (543890) Exception in the HyperKitty archiver:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL was not found on this server.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at 127.0.0.1 Port 80</address>
</body></html>
And I can't get access to the hyperkitty at all.
On var/logs/uwsgi-error.log:
--- Logging error ---
Traceback (most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 356, in pusher
task = SignedPackage.loads(task[1])
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/signing.py",
line 25, in loads
return signing.loads(
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
line 35, in loads
base64d = force_bytes(TimestampSigner(key, salt=salt).unsign(s,
max_age=max_age))
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
line 70, in unsign
result = super(TimestampSigner, self).unsign(value)
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
line 55, in unsign
raise BadSignature('Signature "%s" does not match' % sig)
django.core.signing.BadSignature: Signature "48do9gGvueBxakX_a4uNmSwD7cs"
does not match
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.10/logging/__init__.py", line 1100, in emit
msg = self.format(record)
File "/usr/lib/python3.10/logging/__init__.py", line 943, in format
return fmt.format(record)
File "/usr/lib/python3.10/logging/__init__.py", line 678, in format
record.message = record.getMessage()
File "/usr/lib/python3.10/logging/__init__.py", line 368, in getMessage
msg = msg % self.args
TypeError: not all arguments converted during string formatting
Call stack:
File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
sys.exit(main())
File
"/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
line 90, in main
execute_from_command_line(sys.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 446, in execute_from_command_line
utility.execute()
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 402, in run_from_argv
self.execute(*args, **cmd_options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 448, in execute
output = self.handle(*args, **options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/management/commands/qcluster.py",
line 22, in handle
q.start()
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 78, in start
self.sentinel.start()
File "/usr/lib/python3.10/multiprocessing/process.py", line 121, in start
self._popen = self._Popen(self)
File "/usr/lib/python3.10/multiprocessing/context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "/usr/lib/python3.10/multiprocessing/context.py", line 281, in _Popen
return Popen(process_obj)
File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 19, in
__init__
self._launch(process_obj)
File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 71, in
_launch
code = process_obj._bootstrap(parent_sentinel=child_r)
File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in
_bootstrap
self.run()
File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 168, in __init__
self.start()
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 172, in start
self.spawn_cluster()
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 248, in spawn_cluster
self.pusher = self.spawn_pusher()
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 201, in spawn_pusher
return self.spawn_process(pusher, self.task_queue, self.event_out,
self.broker)
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 197, in spawn_process
p.start()
File "/usr/lib/python3.10/multiprocessing/process.py", line 121, in start
self._popen = self._Popen(self)
File "/usr/lib/python3.10/multiprocessing/context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "/usr/lib/python3.10/multiprocessing/context.py", line 281, in _Popen
return Popen(process_obj)
File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 19, in
__init__
self._launch(process_obj)
File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 71, in
_launch
code = process_obj._bootstrap(parent_sentinel=child_r)
File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in
_bootstrap
self.run()
File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 358, in pusher
logger.error(e, traceback.format_exc())
Message: BadSignature('Signature "48do9gGvueBxakX_a4uNmSwD7cs" does not
match')
Arguments: ('Traceback (most recent call last):\n File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
line 356, in pusher\n task = SignedPackage.loads(task[1])\n File
"/local/mailman/venv/lib/python3.10/sit
e-packages/django_q/signing.py", line 25, in loads\n return
signing.loads(\n File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
line 35, in loads\n base64d = force_bytes(TimestampSigner(key, salt=sa
lt).unsign(s, max_age=max_age))\n File
"/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
line 70, in unsign\n result = super(TimestampSigner,
self).unsign(value)\n File "/local/mailman/venv/lib/python3.10
/site-packages/django_q/core_signing.py", line 55, in unsign\n raise
BadSignature(\'Signature "%s" does not match\' %
sig)\ndjango.core.signing.BadSignature: Signature
"48do9gGvueBxakX_a4uNmSwD7cs" does not match\n',)
I'm using uwsgi via apache:
(venv) mailman@new-mailman3 ~ (v3.1.1)> more
/etc/apache2/conf-enabled/mailman3.conf
Alias /mailman3/favicon.ico /local/mailman/web/static/favicon.ico
Alias /mailman/favicon.ico /local/mailman/web/static/favicon.ico
Alias /favicon.ico /local/mailman/web/static/favicon.ico
Alias /mailman3/static /local/mailman/web/static
Alias /mailman/static /local/mailman/web/static
Alias /static /local/mailman/web/static
<Directory "/local/mailman/web/static">
Require all granted
</Directory>
<IfModule mod_proxy_uwsgi.c>
ProxyPass /mailman3/favicon.ico !
ProxyPass /mailman/favicon.ico !
ProxyPass /favicon.ico !
ProxyPass /mailman3/static !
ProxyPass /mailman/static !
ProxyPass /static !
ProxyPass /mailman3
unix:/local/mailman/var/uwsgi.sock|uwsgi://localhost/
ProxyPass /mailman
unix:/local/mailman/var/uwsgi.sock|uwsgi://localhost/
#ProxyPass /mailman3 http://localhost:8000/ timeout=180
#ProxyPass /mailman http://localhost:8000/ timeout=180
#ProxyPass / http://localhost:8000/ timeout=180
</IfModule>
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Fri, 16 Feb 2024 at 22:39, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 2/16/24 07:12, Helio Loureiro wrote:
>
> > - start mailman3 and mailman-3web
> > - run mailman3-web migrate
>
> You should run mailman3-web migrate when mailman-3web is not running.
>
> > django.db.utils.OperationalError: (1050, "Table
> > 'hyperkitty_mailinglist_moderators' already exists")
> >
> > I tried to drop the table, but then it complained about another one. I
> > dropped all the complained tables and as result hypperkitty never
> > started. So I went back to see why the first error happened.
>
> The errors occurred because you had recently added tables in your
> database so they couldn't be added by the migrations. Dropping the
> tables was the correct thing to do.
>
> Did you ultimately successfully run all the migrations?
>
> When you say `hypperkitty never started`, what exactly does that mean?
> What happens when you try to access the archives? Can you access
> postorius? Are any errors logged in mailman3-web's log?
>
> --
> 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/
> Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to helio(a)loureiro.eng.br
>
2 years, 8 months
[MM3-users] Re: How to delete empty archives by script?
by Andreas Vetter
Am Monday, 12 October 2026, 11:20:27 Central European Summer Time schrieb
Washington Odhiambo:
> On Mon, Oct 12, 2026 at 12:13 PM Andreas Vetter <
>
> andreas.vetter(a)uni-wuerzburg.de> wrote:
> > Am Thursday, 8 October 2026, 15:23:44 Central European Summer Time schrieb
> >
> > Mark Sapiro:
> > > On 10/8/26 5:03 AM, Andreas Vetter wrote:
> > > > Cool. And since there are a lot of empty archives: How would I find
> > > > the
> > > > empty archives to feed to this? Can MailingList.objects.get() come up
> > > > with something like a number of archived mails or threads or used
> >
> > space?
> >
> > > Something like
> > > ```
> > >
> > > >>> from hyperkitty.models import MailingList
> > >
> > > >>> for mlist in MailingList.objects.all():
> > > ... if len(mlist.emails.all()) == 0:
> > > ... print(mlist.name)
> > > ...
> > > ```
> > > will print the names of all empty archived lists. either replace
> > > `print(mlist.name)` with `mlist.delete` or add `mlist.delete` (indented
> > > the same amount) after `print(mlist.name)` to delete them.
> >
> > First try, first problem:
> >
> > (venv) mailman@lists:~> django-admin shell
> > Python 3.11.15 (main, Aug 14 2026, 20:29:30) [GCC] on linux
> > Type "help", "copyright", "credits" or "license" for more information.
> > (InteractiveConsole)
> >
> > >>> from hyperkitty.models import MailingList
> >
> > Traceback (most recent call last):
> > File "<console>", line 1, in <module>
> > File
> > "/opt/mailman/venv/lib64/python3.11/site-packages/hyperkitty/models/
> >
> > __init__.py", line 25, in <module>
> >
> > from .category import ThreadCategory
> >
> > File
> > "/opt/mailman/venv/lib64/python3.11/site-packages/hyperkitty/models/
> >
> > category.py", line 64, in <module>
> >
> > class ThreadCategory(models.Model):
> > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/db/models/
> >
> > base.py", line 129, in __new__
> >
> > app_config = apps.get_containing_app_config(module)
> >
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >
> > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/apps/
> >
> > registry.py", line 260, in get_containing_app_config
> >
> > self.check_apps_ready()
> >
> > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/apps/
> >
> > registry.py", line 137, in check_apps_ready
> >
> > settings.INSTALLED_APPS
> >
> > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/conf/
> >
> > __init__.py", line 102, in __getattr__
> >
> > self._setup(name)
> >
> > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/conf/
> >
> > __init__.py", line 82, in _setup
> >
> > raise ImproperlyConfigured(
> >
> > django.core.exceptions.ImproperlyConfigured: Requested setting
> > INSTALLED_APPS,
> > but settings are not configured. You must either define the environment
> > variable
> > DJANGO_SETTINGS_MODULE or call settings.configure() before accessing
> > settings.
> >
> > I don't see INSTALLED_APPS in any of the configuration files. Where should
> > this
> > be defined?
>
> What does your /etc/mailman3/settings.py look like?
It is not in there (redacted for privacy):
(venv) mailman@lists:~> cat /etc/mailman3/settings.py
# Mailman Web configuration file.
# /etc/mailman3/settings.py
# Get the default settings.
from mailman_web.settings.base import *
from mailman_web.settings.mailman import *
# Settings below supplement or override the defaults.
#: Default list of admins who receive the emails from error logging.
ADMINS = (
('Mailman Suite Admin', 'redacted@redacted'),
)
# Postgresql database setup.
DATABASES = {
'default': {
#'ENGINE': 'django.db.backends.postgresql_psycopg2',
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mailmanweb',
'USER': 'mailman',
# TODO: Replace this with the password.
'PASSWORD': 'redacted',
'HOST': 'localhost',
'PORT': '',
# For MySQL/MariaDB, in addition to changing the 'ENGINE' setting,
# uncomment the following to enable utf8 4-byte encodings.
'OPTIONS': {'charset': 'utf8mb4'},
}
}
# 'collectstatic' command will copy all the static files here.
# Alias this location from your webserver to `/static`
STATIC_ROOT = '/opt/mailman/web/static'
HAYSTACK_CONNECTIONS['default']['PATH'] = '/opt/mailman/fulltext_index'
HYPERKITTY_ATTACHMENT_FOLDER = '/opt/mailman/hyperkitty'
HYPERKITTY_ENABLE_GRAVATAR = False
# enable the 'compress' command.
COMPRESS_ENABLED = True
# Make sure that this directory is created or Django will fail on start.
LOGGING['handlers']['file']['filename'] = '/opt/mailman/web/logs/mailmanweb.log'
#: See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
ALLOWED_HOSTS = [
"localhost", # Archiving API from Mailman, keep it.
"127.0.0.1",
"lists.redacted"
# "lists.your-domain.org",
# Add here all production domains you have.
]
#: See https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins
#: For Django <4.0 these are of the form 'lists.example.com' or
#: '.example.com' to include subdomains and for Django >=4.0 they include
#: the scheme as in 'https://lists.example.com' or 'https://*.example.com'.
CSRF_TRUSTED_ORIGINS = [
"https://lists.redacted"
# "lists.your-domain.org",
# Add here all production domains you have.
]
#: Current Django Site being served. This is used to customize the web host
#: being used to serve the current website. For more details about Django
#: site, see: https://docs.djangoproject.com/en/dev/ref/contrib/sites/
SITE_ID = 1
# Set this to a new secret value.
SECRET_KEY = 'redacted'
# Set this to match the api_key setting in
# /opt/mailman/mm/mailman-hyperkitty.cfg (quoted here, not there).
MAILMAN_ARCHIVER_KEY = 'redacted'
# The sender of emails from Django such as address confirmation requests.
# Set this to a valid email address.
DEFAULT_FROM_EMAIL = 'redacted'
# The sender of error messages from Django. Set this to a valid email
# address.
SERVER_EMAIL = 'redacted'
##############################
# Disable Sign-Up
# AV following https://docs.mailman3.org/en/latest/faq.html#how-to-disable-signup
ACCOUNT_ADAPTER = 'django_mailman3.views.user_adapter.DisableSignupAdapter'
#
# Disable Email verification, since we are using LDAP
ACCOUNT_EMAIL_VERIFICATION = "none"
#
# At Login allow only username, not mailaddress
del ACCOUNT_AUTHENTICATION_METHOD
# Fehler: settings.ACCOUNT_AUTHENTICATION_METHOD is deprecated, use:
settings.ACCOUNT_LOGIN_METHODS = {'username'}
ACCOUNT_LOGIN_METHODS = {'username'}
# Fehler: settings.ACCOUNT_EMAIL_REQUIRED is deprecated, use:
settings.ACCOUNT_SIGNUP_FIELDS = ['email*', 'username*', 'password1*',
'password2*']
del ACCOUNT_EMAIL_REQUIRED
# LDAP setup
# AV following https://gitlab.com/mailman/postorius/-/issues/132
AUTH_LDAP_SERVER_URI = "redacted"
AUTH_LDAP_BIND_DN = "redacted"
AUTH_LDAP_BIND_PASSWORD = "redacted"
# If you use ldaps:// you must *not* set AUTH_LDAP_START_TLS.
# AUTH_LDAP_START_TLS = True
import ldap
from django_auth_ldap.config import LDAPSearch
from django_auth_ldap.config import PosixGroupType
# This allow login using a username or an email address to login.
AUTH_LDAP_USER_SEARCH = LDAPSearch("redacted",
ldap.SCOPE_SUBTREE, "(&(objectClass=posixAccount)(uid=%(user)s))")
#AUTH_LDAP_GROUP_TYPE = PosixGroupType()
#AUTH_LDAP_GROUP_SEARCH = LDAPSearch("redacted",
# ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)")
AUTH_LDAP_USER_ATTR_MAP = {
"username": "uid",
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
#AUTH_LDAP_USER_FLAGS_BY_GROUP = {
# "is_superuser": "cn=mailman-
admins,ou=groups,dc=phl,dc=univie,dc=ac,dc=at"
#}
AUTHENTICATION_BACKENDS = (
"django_auth_ldap.backend.LDAPBackend",
"django.contrib.auth.backends.ModelBackend"
)
Regards
Andreas
1 month
[MM3-users] Re: Postorius claims 2 messages held when there are none - out of sync
by Ken Alker
--On Monday, June 26, 2023 2:32 PM -0700 Mark Sapiro <mark(a)msapiro.net>
wrote:
> On 6/26/23 11:53 AM, Ken Alker wrote:
>>
>> Is the var/messages hierarchy also where all the archived emails are
>> stored for future viewing via the web interface?
>
>
> No. They are stored in the hyperkitty_email and hyperkitty_attachment
> tables in the database.
What else is stored in /var/messages, if not archives? I see 4711 messages
in that directory (which I presume would be as many messages are in the
archive database). If there is a write-up on this, feel free to point me
to it. I found
<https://docs.mailman3.org/projects/mailman/en/latest/build/lib/mailman/mode…>
but this isn't really answering my question.
>>> Also, there is a long thread at
>>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thr
>>> ea d/UWCUQYU7Q5X5LWNII57ZZ4DDXE4DEFX7/ and maybe others that might be
>>> relevant.
>>
>> I have never used the mailman shell before, but based on the referenced
>> thread I learned to do this (note that the thread also taught me how to
>> rewrite it to narrow down to just the list with issues so I didn't
>> delete held messages in other lists, if my case):
>>
>> for verification:
>>
>> venv) mailman@speedy:~/web/logs$ mailman shell -l
>> sbarc-list(a)lists.netlojix.com
>> Welcome to the GNU Mailman shell
>> Use commit() to commit changes.
>> Use abort() to discard changes since the last commit.
>> Exit with ctrl+D does an implicit commit() but exit() does not.
>> The variable 'm' is the sbarc-list(a)lists.netlojix.com mailing list
>> >>> requests = IListRequests(m)
>> >>> first = True
>> >>> for request in requests.held_requests:
>> ... key, data = requests.get_request(request.id)
>> ... if first:
>> ... first = False
>> ... print(m.list_id)
>> ... print (f"""\
>> ... Sender: {data['_mod_sender']}
>> ... Subject: {data['_mod_subject']}
>> ... Date: {data['_mod_hold_date']}
>> ... Reason: {data['_mod_reason']}
>> ... """)
>> ...
>
>> and then to delete the two messages:
>>
>> (venv) mailman@speedy:~/web/logs$ mailman shell -l
>> sbarc-list(a)lists.netlojix.com
>> Welcome to the GNU Mailman shell
>> Use commit() to commit changes.
>> Use abort() to discard changes since the last commit.
>> Exit with ctrl+D does an implicit commit() but exit() does not.
>> The variable 'm' is the sbarc-list(a)lists.netlojix.com mailing list
>> >>> requests = IListRequests(m)
>> >>> first = True
>> >>> for request in requests.held_requests:
>> ... key, data = requests.get_request(request.id)
>> ... if first:
>> ... first = False
>> ... print(m.list_id)
>> ... print(f'request id: {request.id}, deleting')
>> ... requests.delete_request(request.id)
>> ...
>> sbarc-list.lists.netlojix.com
>> request id: 27, deleting
>> request id: 28, deleting
>> >>>
>>
>> The result of this, however, was that the web interface still claimed I
>> had two held messages. I wasn't sure if there was some cron-type
>> "sweeper" process I had to wait to auto-run or if I had to manually do
>> something to create an update. I then realized that the sample script
>> had a ' >>> commit ()" ' at the end, which I'd missed. So, I
>> re-entered the script (but it didn't spit out that it deleted anything
>> this time) and got an error when I did the commit.
>
> Was this in the same `mailman shell` interaction or a new one? What was
> the error?
I am pretty sure I started over entirely (ie. exited via ctrl-D and
restarted).
It was a syntax error, but in reviewing, I see now that I'd copied the
example exactly, and I included the trailing quote mark. After some
experimentation and reading, I see now that that should not have been there.
>> So, I figured the messages HAD
>> been delete and the commit wasn't really necessary. When I went back
>> to the web interface, the number of held messages was at 0 and I no
>> longer get the original error when clicking on "Held messages", so my
>> issue is solved. But this does leave me with some educational questions:
>>
>> 1) Did I affect something somehow with my "commit", or was there a job
>> that cleaned things up (if so, what job)?
>
>
> I'm not sure of the sequence of events, but I think you probably looked
> in Postorius before you quit `mailman shell` and then you quit `mailman
> shell` with ctrl-D which did an implicit commit.
I didn't think so, but I'll certainly buy that. So, I'm assuming by this
you are implying that there is no helper function that needed to run and
the number of held messages should have dropped to zero immediately upon a
refresh of the web page?
>> 2) Is the "commit" even necessary (I saw it in someone else's script in
>> the thread)?
>
> It is necessary to explicitly commit() or quit with ctrl-D to actually
> update the database.
Got it. Thanks. That explains why I didn't see any deletions when I
re-ran the script the second time (after likely exiting with ctrl-D first).
>> 3) Is there a way to save a script and then execute it via shell rather
>> than typing it in every time (it appears from the examples that people
>> are typing them in every time, which is super tedious; I didn't paste
>> for fear of doing something damaging, but maybe that would work)?
>
>
> Yes, you can save a script in the bin/ directory in your venv and run it
> with `mailman shell -r`. See `mailman shell --details`.
>
>
>> 4) Are the request.id's of the messages dynamic/changing, or are they
>> fixed for life? I thought I'd delete based on exact request.id without
>> looping but I was afraid maybe they were changing over time and that
>> this wouldn't be a good idea. Might be nice to know for the future.
>
> The request.id is constant for that request object. The request object is
> fixed for a specific held message request. I.e., a specific held
> message's request object and its request.id and other attributes are
> fixed until that request is handled.
So if I run the script, exist the shell, then come back in again, I can't
rely on the request.id being the same? I'd need to re-run the script and
get a new request.id?
3 years, 4 months
[MM3-users] Re: Hipperkitty failing to archive messages in a list
by Guillermo Hernandez (Oldno7)
On 5/1/22 21:50, Mark Sapiro wrote:
First, thanks a lot Mark for your guidance.
>>
>> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
>> SocialAccountConfig.default_auto_field attribute to point to a
>> subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
>
> This is from Django >=3.2 can be fixed by adding
>
> DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
>
> to your settings. This has been done in HyperKitty's
> example_project/settings.py for the not yet released 1.3.6 version.
>
> These warnings are only warnings, they aren't fatal.
I thought so. I've added it in the settings.py file.
In the last part of your suggestions you wrote:
"I suggest you do
pip install --upgrade hyperkitty mailman-hyperkitty
and ensure it installs hyperkitty 1.3.5 and mailman-hyperkitty 1.2.0"
But this is exactly what made me fall in this mess: I realized that the
versions of hiperkitty and mailman-hiperkitty in that server were
outdated.. and I tried update them separately, forgetting the saying
"if it works, don't touch it" (si funciona, no lo toques).
In my first message I listed the versions of all the items, but to
refresh it, as they are now:
(from pip list)
...
gunicorn 20.1.0
HyperKitty 1.3.5
...
mailman 3.3.5
mailman-hyperkitty 1.2.0
mailmanclient 3.3.3
...
mistune 2.0.1
...
mod-wsgi 4.7.1
...
postorius 1.3.6
(end of pip list)
I did the upgrade of all of it.
The "migration" process output the same warning as before about to doing
a "makemigration" (I did not this time)
Thinking that the problem in the "migrate" and "makemigration" process
could be that I touched the mistune/scanner.py to add escape and
escape_html imports, I deleted that two lines.
Then all went bad: the postorius list page didn't show anymore. The
error.log form the apache server shows
django.template.library.InvalidTemplateLibrary: Invalid template library
specified.
ImportError raised when trying to load 'hyperkitty.templatetags.decorate':
cannot import name 'escape_html' from 'mistune.scanner'
(/usr/local/lib/python3.7/site-packages/mistune/scanner.py)
So I tried to put them back (but I had problems with, I believe, the
__pychache__). I had to reinstall mistune and write back this lines that
I found in a previous thread from William Oliver last 12/28/21
I've finally came back to administering the lists via postorius.
I created a new list to do the tests without disturbing the rest. And
now I am at the exact same point: No message is archived and the log shows:
ERROR 2022-01-06 12:38:45,574 39059 hyperkitty.views.mailman The
MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
ERROR 2022-01-06 12:38:45,586 39059 hyperkitty.views.mailman The
MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
ERROR 2022-01-06 12:38:45,801 39059 hyperkitty.views.mailman The
MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
ERROR 2022-01-06 12:38:45,832 39059 hyperkitty.views.mailman The
MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
ERROR 2022-01-06 12:38:45,847 39059 hyperkitty.views.mailman The
MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
ERROR 2022-01-06 12:38:45,867 39059 hyperkitty.views.mailman The
MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
ERROR 2022-01-06 12:38:46,075 39059 hyperkitty.views.mailman The
MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
As this server has very low traffic, the emails are distributing well,
and the only thing that fails is the archiving of new messages, I will
wait until a more complete upgrading process is needed for mailman,
postorius or hiperkitty.
Thanks, again, for your support.
P.S.: One thing that make me curious is the "mistune" package... I don't
see it installed in the other servers that are working flawlessly with
mailman3.
>
> ...
>> Running a 'su -m mailman3 -c "python3 manage.py makemigrations" shows
>> the same warning listed before and some new errors:
>>
>> *-*-*-*-*-*-*
>>
>> Migrations for 'postorius':
>> /usr/local/lib/python3.7/site-packages/postorius/migrations/0017_alter_emailtemplate_name.py
>>
>> - Alter field name on emailtemplate
>> Traceback (most recent call last):
>> File "manage.py", line 10, in <module>
>> execute_from_command_line(sys.argv)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py",
>> line 419, in execute_from_command_line
>> utility.execute()
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py",
>> line 413, in execute
>> self.fetch_command(subcommand).run_from_argv(self.argv)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/management/base.py",
>> line 354, in run_from_argv
>> self.execute(*args, **cmd_options)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/management/base.py",
>> line 398, in execute
>> output = self.handle(*args, **options)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/management/base.py",
>> line 89, in wrapped
>> res = handle_func(*args, **kwargs)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py",
>> line 190, in handle
>> self.write_migration_files(changes)
>> File
>> "/usr/local/lib/python3.7/site-packages/django/core/management/commands/makemigrations.py",
>> line 228, in write_migration_files
>> with open(writer.path, "w", encoding='utf-8') as fh:
>> PermissionError: [Errno 13] Permission denied:
>> '/usr/local/lib/python3.7/site-packages/postorius/migrations/0017_alter_emailtemplate_name.py'
>>
>>
>> *-*-*-*-*-*-*
>>
>> The file
>> '/usr/local/lib/python3.7/site-packages/postorius/migrations/0017_alter_emailtemplate_name.py'
>> does not exist at all
>
>
> makemigrations is trying to create that migration and you don't have
> permission to create the file. I don't know why it's trying to do
> that. Postorius 1.3.6 has migrations through
> 0016_auto_20210810_2157.py and shouldn't need more. To you have
> modificationd to Postorius?
>
>
>> Despite the error, I did a 'su -m mailman3 -c "python3 manage.py
>> compress"' and the subsequent "django-admin compilemessages" in
>>
>> /usr/local/lib/python3.7/site-packages/postorius, ../hyperkitty and
>> ../django_mailman3
>>
>> And the log continues showing the same error when trying archive a
>> new message.
>>
>> ERROR 2022-01-05 12:27:31,406 6988 hyperkitty.views.mailman The
>> MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
>> ERROR 2022-01-05 12:27:31,418 6988 hyperkitty.views.mailman The
>> MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
>> ERROR 2022-01-05 12:27:31,685 6988 hyperkitty.views.mailman The
>> MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
>> ERROR 2022-01-05 12:27:32,045 6988 hyperkitty.views.mailman The
>> MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
>> ERROR 2022-01-05 12:27:32,070 6988 hyperkitty.views.mailman The
>> MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
>> ERROR 2022-01-05 12:27:32,093 6988 hyperkitty.views.mailman The
>> MAILMAN_ARCHIVER_KEY was not sent as the Authorization HTTP header.
>
>
> These messages come from some HyperKitty version between commit
> b415d29d6cc59b3270c35b03ba3313dd03450271 Mon Jun 21 00:11:48 2021
> -0700 and
> commit c6272f3ef8375865382d0741d3d371a0dc41508a Fri Oct 8 06:32:06
> 2021 +0000
>
> They do not come from HyperKitty 1.3.5 but from something later than
> 1.3.4 which makes be think your mailman-hyperkitty version is not
> 1.2.0 either.
>
> I suggest you do
>
> pip install --upgrade hyperkitty mailman-hyperkitty
>
> and ensure it installs hyperkitty 1.3.5 and mailman-hyperkitty 1.2.0
>
>
--
___________________________________________
Mailman's content filtering has removed the
following MIME parts from this message.
Content-Type: image/png
Name: firma-GHP-emails.png
Replaced multipart/alternative part with first alternative.
4 years, 10 months
[MM3-users] Re: error changed after restart
by Abhilash Raj
On Sat, Feb 6, 2021 at 19:44, Guillermo Hernandez (Oldno7) via
Mailman-users <mailman-users(a)mailman3.org> wrote:
> On 6/2/21 18:08, Abhilash Raj wrote:
>>
>> On Sat, Feb 6, 2021, at 3:04 AM, Guillermo Hernandez (Oldno7) via
>> Mailman-users wrote:
>>> I restarted de server and the error changed. Now the log shows
>>> "KeyError: 'subscription_mode'":
>> Did you also restart Mailman Core after the upgrade?
>
> Yes, indeed:
>
> I stopped mailman core and all the processes related. Did the
> upgrades.
> Started all again. Find the errors in the web user interface. Stopped
> all again. Looked for errors in the log. Restarted the complete
> server.
>
> Found the second error that this second mail is about to. It happens
> when, in the main page that shows all the lists you click to see one
> of
> them. It seems to me that it has been database structure changes in
> django that the upgrade is not aware... but it's a very long shot from
> my side.
`subscription_mode` was added in Mailman Core 3.3.2 and it is actually
a derived atrribute and not stored in Database. Mailman's API should be
returning this attribute for each Member, but for some reason it seems
to me like it isn't doing that even though do have Mailman 3.3.3 running
like you said.
If you have Curl installed, can you send me the output of:
$ curl -u <user>:<pass>
http://localhost:8001/3.1/members?count=5&page=1
It should ideally return an output that looks something like shown
here[1]. You
can put the username/password of Core's API server in the above command.
[1]:
https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
Abhilash
>
> I'm using sqlite as django database and mysql for mailman.
>
>>
>>> ERROR 2021-02-06 11:47:49,015 26798 django.request Internal Server
>>> Error: /mailman3/mailman3/lists/name_and_domain.of.the.list
>>> Traceback (most recent call last):
>>> File
>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>> line 119, in __getattr__
>>> return self._get(name)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>> line 86, in _get
>>> raise KeyError(key)
>>> KeyError: 'subscription_mode'
>>>
>>> During handling of the above exception, another exception occurred:
>>>
>>> Traceback (most recent call last):
>>> File
>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py",
>>> line 34, in inner
>>> response = get_response(request)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>>> line 115, in _get_response
>>> response = self.process_exception_by_middleware(e, request)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>>> line 113, in _get_response
>>> response = wrapped_callback(request, *callback_args,
>>> **callback_kwargs)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>>> line 71, in view
>>> return self.dispatch(request, *args, **kwargs)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/postorius/views/generic.py",
>>> line 74, in dispatch
>>> return super(MailingListView, self).dispatch(request, *args,
>>> **kwargs)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>>> line 97, in dispatch
>>> return handler(request, *args, **kwargs)
>>> File
>>> "/usr/local/lib/python3.7/site-packages/postorius/views/list.py",
>>> line
>>> 295, in get
>>> member.subscription_mode ==
>>> File
>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>> line 124, in __getattr__
>>> self.__class__.__name__, name))
>>> AttributeError: 'Member' object has no attribute 'subscription_mode'
>>> ***********************
>>> some info about the installed versions via pip list:
>>> pip list | grep django
>>> django-allauth 0.44.0
>>> django-appconf 1.0.4
>>> django-compressor 2.4
>>> django-extensions 3.1.0
>>> django-gravatar2 1.4.4
>>> django-haystack 3.0
>>> django-mailman3 1.3.5
>>> django-picklefield 3.0.1
>>> django-q 1.3.4
>>> djangorestframework 3.12.2
>>>
>>> pip list | grep mailman
>>> django-mailman3 1.3.5
>>> mailman 3.3.3
>>> mailman-hyperkitty 1.1.0
>>> mailmanclient 3.3.2
>>>
>>> pip list | grep postorius
>>> postorius 1.3.4
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On 6/2/21 11:12, Guillermo Hernandez (Oldno7) via Mailman-users
>>> wrote:
>>>> I've just upgrade mailman 3 installation following Mr. Sapiro
>>>> advice:
>>>> did a
>>>>
>>>> pip install --upgrade django-mailman3 hyperkitty mailman
>>>> mailmanclient
>>>> mailman-hyperkitty postorius
>>>>
>>>> I did a "python3 manage.py migrate" after, too.
>>>>
>>>> And all seemed to run well.
>>>>
>>>> All the lists showed in postorius via web, but when I try to
>>>> accesss
>>>> into one of them the browser shows an error.
>>>>
>>>> In the log you can see:
>>>>
>>>> *-*-*-*-*-*-*
>>>>
>>>> Traceback (most recent call last):
>>>> File
>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>> line 119, in __getattr__
>>>> return self._get(name)
>>>> File
>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>> line 86, in _get
>>>> raise KeyError(key)
>>>> KeyError: 'get_requests_count'
>>>>
>>>> ... (And after all the traceback lines)
>>>>
>>>> AttributeError: 'MailingList' object has no attribute
>>>> 'get_requests_count'
>>>>
>>>> *-*-*-*-*-*-*-*
>>>>
>>>> The lists seem to be distributing messeages well.. but I cannot
>>>> acces
>>>> via web administration (django/postorius)
>>>>
>>>> Can anyone point me in the right direction to solve this, please?
>>>>
>>>> _______________________________________________
>>>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>>>> <mailto:mailman-users@mailman3.org>
>>>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>>>> <mailto:mailman-users-leave@mailman3.org>
>>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/>
>>>>
>>> _______________________________________________
>>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>>> <mailto:mailman-users@mailman3.org>
>>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>>> <mailto:mailman-users-leave@mailman3.org>
>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/>
>>>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> <mailto:mailman-users@mailman3.org>
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> <mailto:mailman-users-leave@mailman3.org>
> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/>
5 years, 9 months
[MM3-users] Re: Internal Server Errors in mailmanweb.log
by Washington Odhiambo
On Sat, Jan 24, 2026 at 12:11 AM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 1/22/26 00:53, Washington Odhiambo via Mailman-users wrote:
> > On Thu, Dec 25, 2025 at 10:46 AM Washington Odhiambo <odhiambo(a)gmail.com
> >
> > wrote:
> >
> > For some reason, my mailmanweb (I am using Gunicorn) has been misbehaving
> > lately.
> > The last change I ever made to my MM3 installation is when I applied the
> > patch mentioned in this thread.
> > The misbehavior manifests in the Postrorius web UI becoming inaccessible,
> > much as mailmanweb is running.
>
> It looks like all the logged errors result from an attempt to export a
> thread from HyperKitty. Is it this export that precipitates the issue?
I am not trying to export any threads at all. I haven't tried doing it for
whatever reason.
So the fact that there is even an attempt at exporting it is strange.
I first encountered this issue when I got notified of some held messages
that required moderation.
Postorius failed to load. And on checking the status of mailmaweb, I
realized it's running, but using so much RAM.
I restarted it and I was able to access Postorius.
And now this has become an almost daily routine - restarting it.
> I.e, can you access Postorius first thing after a clean start of
> mailman web?
Yes.
What I have realized though is that after restarting it, with time its
memory usage begins to increase significantly fast.
Within no time, it's already using 1GB+ RAM.
As I write this email, this is what I just seen on checking it:
```
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Fri 2026-01-23 16:43:28 EAT; 20h ago
Main PID: 1758633 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 2.0G
CPU: 8h 4min 40.949s
CGroup: /system.slice/mailmanweb.service
├─1758633 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2665379 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2665624 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:10:46 eu.kictanet.or.ke gunicorn[2663345]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:19 eu.kictanet.or.ke gunicorn[2663765]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:36 eu.kictanet.or.ke gunicorn[2663948]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:11:52 eu.kictanet.or.ke gunicorn[2664060]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:27 eu.kictanet.or.ke gunicorn[2664535]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:40 eu.kictanet.or.ke gunicorn[2664626]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:12:59 eu.kictanet.or.ke gunicorn[2664813]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:13:33 eu.kictanet.or.ke gunicorn[2665220]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:13:51 eu.kictanet.or.ke gunicorn[2665379]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:14:05 eu.kictanet.or.ke gunicorn[2665624]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash#
```
> If so, is it only when you try to export a thread from HyperKitty that the
> issues start?
>
I am not trying to export any threads at all.
Check this:
root@eu:/home/wash# systemctl restart mailmanweb
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 6s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 158.0M
CPU: 3.358s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 12s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 162.3M
CPU: 6.971s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 15s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 162.4M
CPU: 8.193s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 18s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 210.5M
CPU: 8.629s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Sat 2026-01-24 13:33:42 EAT; 38s ago
Main PID: 2679426 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 1.3G
CPU: 24.429s
CGroup: /system.slice/mailmanweb.service
├─2679426 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─2679427 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─2679429 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 24 13:33:42 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679427]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
Jan 24 13:33:43 eu.kictanet.or.ke gunicorn[2679429]: Updated PYTHONPATH to
: /etc/mailman3/:/etc/mailman3
root@eu:/home/wash#
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
9 months, 3 weeks
[MM3-users] Re: MTA setup
by Arte Chambers
Output from mailman log after sending a test message to the list:
Dec 23 16:52:23 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:52:23 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:52:23 2024 (684048) Could not archive the message with id <
CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>
Dec 23 16:52:23 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message <
CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>)
Dec 23 16:52:23 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:52:23 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:52:23 2024 (684058) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/urls:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
I sent another test after changing the DMARC settings for the list
mailman.log:
Dec 23 16:58:48 2024 (684052) ACCEPT:
<CAM05vAcs3mL2MMX_NNsrHHyLz8p_tTvCHRRiROCgt=U5Oi6x5w(a)mail.gmail.com>
Dec 23 16:58:49 2024 (684063) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/urls:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:49 2024 (684063) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/urls:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:50 2024 (684058) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/urls:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:50 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:50 2024 (684048) Could not archive the message with id
<CAPesOD2KavP948Oq6n9mvYF9WW3-sXRRTxAMm2roMgzL+=s8Dw(a)mail.gmail.com>
Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message
<CAPesOD2KavP948Oq6n9mvYF9WW3-sXRRTxAMm2roMgzL+=s8Dw(a)mail.gmail.com>)
Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:50 2024 (684048) Could not archive the message with id
<CAM05vAcN5RZ3Mzg-xXd-u=X7_inDULsBR8A=ehPwk5oy+y+ZLg(a)mail.gmail.com>
Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message
<CAM05vAcN5RZ3Mzg-xXd-u=X7_inDULsBR8A=ehPwk5oy+y+ZLg(a)mail.gmail.com>)
Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:50 2024 (684048) Could not archive the message with id <
CAM05vAfoHZmvu42wojk5SpCeynQs4rM01iKw+U5KpWMChHXGWw(a)mail.gmail.com>
Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message <
CAM05vAfoHZmvu42wojk5SpCeynQs4rM01iKw+U5KpWMChHXGWw(a)mail.gmail.com>)
Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:50 2024 (684048) Could not archive the message with id <
CAM05vAdx7VGPpApAEtF_J8RW2eXBoS6D-_6BCp8wKGUF5_Cyyw(a)mail.gmail.com>
Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message <
CAM05vAdx7VGPpApAEtF_J8RW2eXBoS6D-_6BCp8wKGUF5_Cyyw(a)mail.gmail.com>)
Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:50 2024 (684048) Could not archive the message with id
<CAPesOD1y0fEaG=GFodz=Lgs1m_hqRErPnQcpXCNtKsBbJ=BJ7Q(a)mail.gmail.com>
Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message
<CAPesOD1y0fEaG=GFodz=Lgs1m_hqRErPnQcpXCNtKsBbJ=BJ7Q(a)mail.gmail.com>)
Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684058) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/urls:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:51 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:51 2024 (684048) Could not archive the message with id
<CAM05vAdLwKNNLgFGMKPm_yv6YykcL=SynJSDYf70hyGufryyCw(a)mail.gmail.com>
Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message
<CAM05vAdLwKNNLgFGMKPm_yv6YykcL=SynJSDYf70hyGufryyCw(a)mail.gmail.com>)
Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:51 2024 (684048) Could not archive the message with id
<CAM05vAcG99mHboPkZ82q=+d+uB3L3+iEmhwSCNAVFwSua80LoQ(a)mail.gmail.com>
Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message
<CAM05vAcG99mHboPkZ82q=+d+uB3L3+iEmhwSCNAVFwSua80LoQ(a)mail.gmail.com>)
Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:51 2024 (684048) Could not archive the message with id <
CAPesOD1ZJG3zyEagCqYd+nce76g_hbwJK9wQF51Pi6iyJhBKvA(a)mail.gmail.com>
Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message <
CAPesOD1ZJG3zyEagCqYd+nce76g_hbwJK9wQF51Pi6iyJhBKvA(a)mail.gmail.com>)
Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:51 2024 (684048) Could not archive the message with id <
CAM05vAdR3n-zhrLHCPhzi4xHOkLsmTUUgXnwgSwJM1oao2j3tg(a)mail.gmail.com>
Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message <
CAM05vAdR3n-zhrLHCPhzi4xHOkLsmTUUgXnwgSwJM1oao2j3tg(a)mail.gmail.com>)
Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:51 2024 (684048) Could not archive the message with id <
CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>
Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message <
CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>)
Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/archive:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Dec 23 16:58:51 2024 (684048) Could not archive the message with id
<CAM05vAcs3mL2MMX_NNsrHHyLz8p_tTvCHRRiROCgt=U5Oi6x5w(a)mail.gmail.com>
Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
testing.list.louisvillecommunitygrocery.com, message
<CAM05vAcs3mL2MMX_NNsrHHyLz8p_tTvCHRRiROCgt=U5Oi6x5w(a)mail.gmail.com>)
Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 158, in _archive_message
url = self._send_message(mlist, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
line 228, in _send_message
raise ValueError(result.text)
ValueError:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
Dec 23 16:58:51 2024 (684058) HyperKitty failure on
http://127.0.0.1:8000/archives/api/mailman/urls:
<!doctype html>
<html lang="en">
<head>
<title>Bad Request (400)</title>
</head>
<body>
<h1>Bad Request (400)</h1><p></p>
</body>
</html>
(400)
Thank you,
Paul 'Arte Chambers' Robey
502-408-6922
On Sun, Dec 22, 2024 at 11:31 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/22/24 20:10, Arte Chambers via Mailman-users wrote:
> > I'm not sure how to check mailmans shunt queue.
>
> `ls var/queue/shunt`
>
> > I'm not seeing any errors in mailman logs
> >
> > There are several .pck files in Mailman's
> > var/archives/hyperkitty/spool/
> These are message that failed to archive. There should be messages in
> mailman.log about these failures indicating what the issue is.
>
> > I can send email from the server using mail utilities as long as the
> "from
> > email address" contains the server's domain name. I also notice that in
> > this MM3-Users list the "from" email shows senders(a)emailaddress.com VIA
> > mailman3.org. I'm wondering if I've missed something that would allow my
> > server to behave this way.
>
>
> In the list's Settings -> DMARC Mitigations set DMARC mitigation action
> to Replace From: with list address and set DMARC Mitigate
> unconditionally to Yes.
>
> --
> 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/
> Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to paul.m.robey(a)gmail.com
>
1 year, 10 months
[MM3-users] Re: Docker Support Sucks
by Allan Hansen
Hi Brian,
You have been one of the good and generous people providing support. I hope i can repay a bit with this:
These are one-line bash scripts I wrote after moving to MM3, so I could do things not yet in MM3, such as
letting my moderators request a list’s members from me. I need one more script that will sync a text file
to an existing list, deleting and adding as necessary.
The scripts are for public use, reuse, misuse and overuse. I claim no rights and no responsibilities.
mm3Members.bash
#!/bin/bash
# mm3Members
#
# Obtain a list of members of a given list
#
# Usage:
# mm3Members.bash <listName>
# #
# Revisions:
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
exec /opt/mailman/mm/venv/bin/mailman -C "/opt/mailman/mm/mailman.cfg" members $1 |grep -v -e "has no members"|sed -e 's/.*/\L&/‘
mm3ASddMembers.bash
#!/bin/bash
# mm3AddMembers
#
# Add members from a given list.
#
# Usage:
# mm3AddMembers.bash <fileName> <listName>
# <fileName>: text file with addresses to add. Same legal formats as in mass subscribe
# #
# Revisions:
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
exec /opt/mailman/mm/venv/bin/mailman -C "/opt/mailman/mm/mailman.cfg" members --add $1 $2
mm3DeleteMembers.bash
#!/bin/bash
# mm3DeleteMembers
#
# Deletes members from a given list
# <fileName> List of members to delete. Legal format the same a formats used for mass subscribes
#
# Usage:
# mm3DeleteMembers.bash <fileName> <listName>
#
# Revisions:
#
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
exec /opt/mailman/mm/venv/bin/mailman -C "/opt/mailman/mm/mailman.cfg" members --delete $1 $2
mm3MemberCount.bash
#!/bin/bash
# mm3MemberCount
#
# Obtain count of the members of a given list
#
# Usage:
# mm3MemberCount.bash <listName>
#
# Revisions:
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
/home/hansen/scripts/mm3Members.bash $1|wc
Yours,
Allan Hansen
hansen(a)rc.org
> On Jul 21, 2020, at 18:31 , Brian Carpenter <brian_carpenter(a)emwd.com> wrote:
>
> On 7/21/20 8:55 PM, Mark Sapiro wrote:
>> On 7/21/20 5:40 PM, Brian Carpenter wrote:
>>
>> Abhilash (@maxking) is one person and he has a $DayJob. We're all doing
>> the best we can.
>
> Well, I still need support.
>
>> This is not a Docker issue per se. It is a consequence of upgrading
>> Mailman core to 3.3.1+ and processing many old, stale, previously
>> unprocessed bounces. See
>> <https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…>
>
> I am not worried about the bounce issues at this point. I am just trying to get a membership list exported for a client.
>
>>
>>> So, I want to totally move away from the use of Docker (mainly because I have found it buggy and the support is simply lacking) and install Mailman 3 for this client from source. However I need to get an export of their list members. But of course, I can't. Rest API times out and I don't know how to apply the instructions I was given to fix it and I don't have days to way for one. So please help.
>>>
>>> I increased the gunicorn workers to 4, hoping that would allow me to do the CSV export. No. So was given these instructions:
>>>
>>> ###
>>> The issues seems to be due to timeout not due to high load. You want to increase the timeout for gunicorn and you can do that by specifying a gunicorn.ini config file:
>>>
>>> [webservice]
>>> configuration: /path/to/gunicorn.cfg
>>>
>>> and then in the gunicorn.cfg you can add
>>>
>>> [gunicorn]
>>> timeout = 90
>>> graceful_timeout = 30
>>> ###
>>>
>>> I applied the above changes to /opt/mailman/core/mailman-extra.cfg and created the gunicorn.cfg file. Restarted the docker container (mailman-core) and no access to Postorius due to no REST api.
>>>
>>> After restarting docker-mailman, I can't access Postorius due to the following error:
>>>
>>> ERROR 2020-07-20 20:16:27,351 15 postorius Mailman REST API not available
>> Is Mailman core running? If not, whats in core's mailman.log as to why not?
>
> It looks like but no error message in mailman.log. However I noted that the gunicorn process did not start.
>
> This is with the configuration line enabled in mailman-extra.cfg:
>
> # docker-compose restart mailman-core
> Restarting mailman-core ... done
> [root@nicu-net docker-mailman]# tail -f /opt/mailman/core/var/logs/mailman.log
> Jul 22 01:25:17 2020 (22) in runner caught SIGTERM. Stopping.
> Jul 22 01:25:17 2020 (25) out runner caught SIGTERM. Stopping.
> Jul 22 01:25:17 2020 (25) out runner exiting.
> Jul 22 01:25:17 2020 (21) command runner exiting.
> Jul 22 01:25:17 2020 (22) in runner exiting.
> Jul 22 01:25:17 2020 (24) nntp runner caught SIGTERM. Stopping.
> Jul 22 01:25:17 2020 (24) nntp runner exiting.
> [2020-07-22 01:25:19 +0000] [27] [INFO] Shutting down: Master
> Jul 22 01:25:21 2020 (1) Master stopped
> Jul 22 01:25:26 2020 (1) Master started
> Jul 22 01:25:44 2020 (27) rest runner started.
> Jul 22 01:25:44 2020 (26) pipeline runner started.
> Jul 22 01:25:44 2020 (20) bounces runner started.
> Jul 22 01:25:45 2020 (22) in runner started.
> Jul 22 01:25:45 2020 (28) retry runner started.
> Jul 22 01:25:46 2020 (29) virgin runner started.
> Jul 22 01:25:46 2020 (25) out runner started.
> Jul 22 01:25:46 2020 (23) lmtp runner started.
> Jul 22 01:25:46 2020 (24) nntp runner started.
> Jul 22 01:25:47 2020 (30) digest runner started.
> Jul 22 01:25:47 2020 (19) archive runner started.
> Jul 22 01:25:47 2020 (21) command runner started.
>
> This is with the configuration line disabled in mailman-extra.cfg:
>
> # docker-compose restart mailman-core
> Restarting mailman-core ... done
> [root@nicu-net docker-mailman]# tail -f /opt/mailman/core/var/logs/mailman.log
> Jul 22 01:27:49 2020 (1) Master stopped
> Jul 22 01:27:53 2020 (1) Master started
> Jul 22 01:28:10 2020 (30) digest runner started.
> Jul 22 01:28:10 2020 (29) virgin runner started.
> Jul 22 01:28:10 2020 (24) nntp runner started.
> Jul 22 01:28:10 2020 (25) out runner started.
> Jul 22 01:28:10 2020 (22) in runner started.
> Jul 22 01:28:11 2020 (28) retry runner started.
> Jul 22 01:28:11 2020 (27) rest runner started.
> [2020-07-22 01:28:11 +0000] [27] [INFO] Starting gunicorn 19.9.0
> [2020-07-22 01:28:11 +0000] [27] [INFO] Listening at: http://172.19.199.2:8001 (27)
> [2020-07-22 01:28:11 +0000] [27] [INFO] Using worker: sync
> [2020-07-22 01:28:11 +0000] [32] [INFO] Booting worker with pid: 32
> [2020-07-22 01:28:11 +0000] [33] [INFO] Booting worker with pid: 33
> [2020-07-22 01:28:11 +0000] [34] [INFO] Booting worker with pid: 34
> [2020-07-22 01:28:11 +0000] [35] [INFO] Booting worker with pid: 35
> Jul 22 01:28:11 2020 (19) archive runner started.
> Jul 22 01:28:11 2020 (21) command runner started.
> Jul 22 01:28:12 2020 (23) lmtp runner started.
> Jul 22 01:28:12 2020 (20) bounces runner started.
> Jul 22 01:28:12 2020 (26) pipeline runner started.
>
> --
> Please let me know if you need further assistance.
>
> Thank you for your business. We appreciate our clients.
> Brian Carpenter
> EMWD.com
>
> --
> EMWD's Knowledgebase:
> https://clientarea.emwd.com/index.php/knowledgebase
>
> EMWD's Community Forums
> http://discourse.emwd.com/
>
> _______________________________________________
> 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, 3 months
[MM3-users] Re: External MTA incoming mail: configuration
by Roland Giesler
On 2024/08/02 17:43, Mark Sapiro wrote:
> On 8/2/24 08:12, Roland Giesler via Mailman-users wrote:
>>
>> It seems though that since I'm not running a local MTA, when then
>> mail arrives at the mailman3 server, there's nothing that can process
>> it. So should I run postfix in it's most basic setup to allow mail
>> to be received or what is the best way to deal with it? Mailman3 has
>> to receive mail like signup confirmations, etc after all, not?
>
> If you use transport_maps on the remote MTA to relay the list mail to
> port 8024 on the Mailman server, Mailman's LMTP runner will receive
> the mail and you don't need a local MTA.
>
Ah, so I just have to figure out why the LMTP runner is not running.
mailman:/var/lib/mailman3# ps ax
PID TTY STAT TIME COMMAND
1 ? Ss 0:07 /sbin/init
42 ? Ss 0:07 /lib/systemd/systemd-journald
90 ? Ss 0:00 /lib/systemd/systemd-networkd
98 ? Ss 0:00 /lib/systemd/systemd-resolved
101 ? Ss 0:01 /usr/sbin/cron -f -P
102 ? Ss 0:00 @dbus-daemon --system --address=systemd:
--nofork --nopidfile --systemd-activation --syslog-only
106 ? Ss 0:00 /usr/bin/python3
/usr/bin/networkd-dispatcher --run-startup-triggers
107 ? Ssl 0:01 /usr/sbin/rsyslogd -n -iNONE
108 ? Ss 0:00 /lib/systemd/systemd-logind
111 ? Ss 0:07 /usr/bin/uwsgi --plugin python3 --ini
/etc/mailman3/uwsgi.ini
115 pts/0 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear
--keep-baud console 115200,38400,9600 linux
116 pts/1 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear
--keep-baud tty1 115200,38400,9600 linux
117 pts/2 Ss+ 0:00 /sbin/agetty -o -p -- \u --noclear
--keep-baud tty2 115200,38400,9600 linux
127 ? Ss 0:00 nginx: master process /usr/sbin/nginx -g
daemon on; master_process on;
129 ? S 0:00 nginx: worker process
138 ? Ssl 28:01 /usr/sbin/mysqld
277 ? Sl 0:05 /usr/bin/uwsgi --plugin python3 --ini
/etc/mailman3/uwsgi.ini
278 ? Ss 0:00 /bin/sh -c python3 manage.py qcluster
282 ? S 0:01 python3 manage.py qcluster
328 ? Ss 0:00 /usr/lib/postfix/sbin/master -w
331 ? S 0:00 qmgr -l -t unix -u
340 ? S 3:49 python3 manage.py qcluster
341 ? S 0:00 python3 manage.py qcluster
342 ? S 0:00 python3 manage.py qcluster
343 ? S 0:00 python3 manage.py qcluster
344 ? S 0:00 python3 manage.py qcluster
345 ? S 0:00 python3 manage.py qcluster
346 ? S 0:00 python3 manage.py qcluster
347 ? S 0:00 python3 manage.py qcluster
348 ? S 0:00 python3 manage.py qcluster
349 ? S 0:00 python3 manage.py qcluster
350 ? S 24:13 python3 manage.py qcluster
354 ? Ss 0:00 /lib/systemd/systemd --user
355 ? S 0:00 (sd-pam)
953 ? Ss 0:00 sshd: root@pts/3
972 pts/3 Ss 0:00 -bash
1284 pts/3 S 0:00 ssh -x -a -oClearAllForwardings=yes -2
root(a)box2.gtahardware.co.za -s sftp
1285 ? Ssl 0:00 sshfs -o uid=38,gid=38 -o allow_other
root@box2.gtahardware.co.za:/etc/mailman3/data /var/lib/mailman3/data
1302 ? Ss 0:00 /usr/bin/python3
/usr/lib/mailman3/bin/master --force -C /etc/mailman3/mailman.cfg
1308 ? S 0:18 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg
--runner=archive:0:1
1309 ? S 0:07 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg
--runner=bounces:0:1
1310 ? S 0:17 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg
--runner=command:0:1
1311 ? S 0:16 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=in:0:1
1313 ? S 0:24 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=nntp:0:1
1314 ? S 0:16 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=out:0:1
1315 ? S 0:18 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg
--runner=pipeline:0:1
1316 ? S 0:18 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1
1317 ? S 0:01 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=retry:0:1
1318 ? S 0:02 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=task:0:1
1319 ? S 0:18 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg
--runner=virgin:0:1
1320 ? S 0:17 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg
--runner=digest:0:1
13459 ? S 0:01 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1
13460 ? S 0:01 /usr/bin/python3
/usr/lib/mailman3/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1
20765 ? S 0:00 pickup -l -t unix -u -c
21109 pts/3 R+ 0:00 ps ax
mailman:/var/lib/mailman3# netstat -tunap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address
State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
98/systemd-resolved
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN
138/mysqld
tcp 0 0 127.0.0.1:8001 0.0.0.0:* LISTEN
1316/python3
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
127/nginx: master p
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
127/nginx: master p
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
328/master
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
138/mysqld
tcp 0 0 127.0.0.1:56588 127.0.0.1:3306 ESTABLISHED
13459/python3
tcp 0 0 127.0.0.1:3306 127.0.0.1:50542 ESTABLISHED
138/mysqld
tcp 0 0 127.0.0.1:3306 127.0.0.1:50530 ESTABLISHED
138/mysqld
tcp 0 0 192.168.161.103:60010 197.214.119.180:22
ESTABLISHED 1284/ssh
tcp 0 0 127.0.0.1:3306 127.0.0.1:59222 ESTABLISHED
138/mysqld
tcp 0 0 127.0.0.1:3306 127.0.0.1:46810 ESTABLISHED
138/mysqld
tcp 0 0 127.0.0.1:50530 127.0.0.1:3306 ESTABLISHED
1319/python3
tcp 0 0 127.0.0.1:46796 127.0.0.1:3306 ESTABLISHED
1318/python3
tcp 0 0 127.0.0.1:46810 127.0.0.1:3306 ESTABLISHED
1309/python3
tcp 0 0 127.0.0.1:59222 127.0.0.1:3306 ESTABLISHED
13460/python3
tcp 0 0 127.0.0.1:50542 127.0.0.1:3306 ESTABLISHED
1314/python3
tcp 0 0 127.0.0.1:3306 127.0.0.1:46796 ESTABLISHED
138/mysqld
tcp 0 0 127.0.0.1:3306 127.0.0.1:56588 ESTABLISHED
138/mysqld
tcp6 0 0 ::1:25 :::* LISTEN 328/master
tcp6 0 0 :::443 :::* LISTEN
127/nginx: master p
tcp6 0 0 :::22 :::* LISTEN 1/init
tcp6 0 0 :::80 :::* LISTEN 127/nginx:
master p
tcp6 0 0 192.168.161.103:22 192.168.131.150:43924
ESTABLISHED 1/init
udp 0 0 127.0.0.53:53 0.0.0.0:*
98/systemd-resolved
and I have in mailman.cfg:
mailman:/var/lib/mailman3# cat /etc/mailman3/mailman.cfg | grep "^[^#;]"
[mailman]
site_owner: mailman(a)fast.za.net
noreply_address: noreply
default_language: en
sender_headers: from from_ reply-to sender
email_commands_max_lines: 10
pending_request_life: 3d
cache_life: 7d
pre_hook:
post_hook:
layout: debian
filtered_messages_are_preservable: no
html_to_plain_text_command: /usr/bin/lynx -dump $filename
listname_chars: [-_.0-9a-z]
[shell]
prompt: >>>
banner: Welcome to the GNU Mailman shell
use_ipython: no
history_file:
[paths.debian]
var_dir: /var/lib/mailman3
queue_dir: $var_dir/queue
bin_dir: /usr/lib/mailman3/bin
list_data_dir: $var_dir/lists
log_dir: /var/log/mailman3
lock_dir: $var_dir/locks
data_dir: $var_dir/data
cache_dir: $var_dir/cache
etc_dir: /etc/mailman3
ext_dir: $var_dir/ext
messages_dir: $var_dir/messages
archive_dir: $var_dir/archives
template_dir: $var_dir/templates
pid_file: /run/mailman3/master.pid
lock_file: $lock_dir/master.lck
[database]
class: mailman.database.mysql.MySQLDatabase
url:
mysql+pymysql://mailman3:<xxxxxxx>@localhost/mailman3?charset=utf8&use_unicode=1
debug: no
[logging.debian]
format: %(asctime)s (%(process)d) %(message)s
datefmt: %b %d %H:%M:%S %Y
propagate: no
level: info
path: mailman.log
[webservice]
hostname: localhost
port: 8001
use_https: no
show_tracebacks: yes
api_version: 3.1
admin_user: restadmin
admin_pass: <xxxxxxx>
[mta]
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
smtp_host: box2.gtahardware.co.za
smtp_port: 465
smtp_user: <xxxxxxx>
smtp_pass: <xxxxxxx>
smtp_secure_mode: smtps
smtp_verify_cert: yes
smtp_verify_hostname: yes
lmtp_host: lists.fast.za.net
lmtp_port: 8024
max_recipients: 10
max_sessions_per_connection: 0
max_delivery_threads: 0
delivery_retry_period: 5d
verp_delimiter: +
verp_format: ${bounces}+${local}=${domain}
verp_confirm_format: $address+$cookie
verp_regexp: ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
verp_confirmations: yes
verp_probe_format: $bounces+$token@$domain
verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
verp_probes: no
max_autoresponses_per_day: 10
remove_dkim_headers: no
configuration: python:mailman.config.postfix
[bounces]
register_bounces_every: 15m
[archiver.master]
class:
enable: no
configuration: changeme
clobber_date: maybe
clobber_skew: 1d
[archiver.mhonarc]
class: mailman.archiving.mhonarc.MHonArc
configuration: python:mailman.config.mhonarc
[archiver.mail_archive]
class: mailman.archiving.mailarchive.MailArchive
configuration: python:mailman.config.mail_archive
[archiver.prototype]
class: mailman.archiving.prototype.Prototype
[styles]
default: legacy-default
[nntp]
user:
password:
host:
port:
remove_headers:
nntp-posting-host nntp-posting-date x-trace
x-complaints-to xref date-received posted
posting-version relay-version received
rewrite_duplicate_headers:
To X-Original-To
CC X-Original-CC
Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
MIME-Version X-MIME-Version
gatenews_every: 5m
[dmarc]
resolver_timeout: 3s
resolver_lifetime: 5s
org_domain_data_url: https://publicsuffix.org/list/public_suffix_list.dat
cache_lifetime: 7d
[urlpatterns]
mailinglist: $base_url/lists/$list_id
held_message: $base_url/lists/$list_id/held_messages
pending_subscriptions: $base_url/lists/$list_id/subscription_requests
pending_unsubscriptions: $base_url/lists/$list_id/unsubscription_requests
domain: $base_url/domains/$domain
Why doesn't port 8024 show up then?
2 years, 3 months
[MM3-users] Re: [Mailman-Users] MM3 startup issues
by hansen@rc.org
Mark Sapiro wrote:
> Restoring original Subject:, and doesn't this thread belong on
> mailman-users(a)msailman3.org - CCing there.
Sorry about both, Mark. I'm now here. Didn't know this one existed and was told to use the other list server.
> > On 1/4/20 5:47 PM, Allan Hansen wrote:
> > >
> > a. The server was set up with the wrong domain
> > name (our fault), so I had to add the ‘correct’ one. I had seen the command ‘Add Domain’
> > in
> > the UI and thought that would do it, but Brian kindly sent me a list of additional
> > instructions, which we then implemented. That made it possible to create a list in the new
> > domain, subscribe people and post messages. However, messages are not archived. What extra
> > step is needed to enable archiving?
> > What are the setytings in Postorius -> Settings -> Archiving?
> > Archive policy: Private archives
> > Archive archivers: hyperkitty, prototype
> Are the messages in Mailman's var/archives/prototype/LIST@DOMAIN/new
> directory?
Yes! I found them. But the message files end with the name of the old host, not the new host name under the new domain.
> Are there messages in Mailman's var/archives/hyperkitty/spool/ directory?
There are 5 .pck files there dated 1/5/2002.
> What's the setting for base_url in mailman-hyperkitty.cfg?
It's
base_url: https://<OLDHOSTNAME>/archives
I suppose it should be changed to
base_url: https://<NEWHOSTNAME>/archives
But:
What if we decided to have more than one domain, as the UI indicates is kosher?
> Are there any errors in var/logs/mailman.log?
Yep. Lots. They all are of this nature:
Exception in "hyperkitty" archiver
Traceback:
...
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/urllib3/connection.py", line 430, in _match_hostname
match_hostname(cert, asserted_hostname)
File "/usr/lib/python3.7/ssl.py", line 327, in match_hostname
% (hostname, dnsnames[0]))
ssl.SSLCertVerificationError: ("hostname 'OLDHOSTNAME' doesn't match 'NEWHOSTNAME'",)
> > b. When I go to the server using the new domain (both
> > before and after logging in), I see not just the lists I created in the new domain, but
> > the lists created in the old domain. These lists of lists are domain specific and should
> > not be listed together. That’s just IMHO, but not serious, as I will soon get rid of
> > anything in the old domain. So feel free to ignore this one if this is intended, which I
> > could see might be the case.
> Set
> FILTER_VHOST = True
> in settings_local.py
> > Yes, Brian told me to do the same (well, settings.py).
> > This is the what I wrote back:
> > hansen@rccrmail:/opt/mailman/mm$ sudo vi settings.py
> > Edited the setting to:
> > # Only display mailing-lists from the same virtual host as the webserver
> > FILTER_VHOST = True
> You shouldn't edit settings.py. You should override the setting by
> putting it in settings_local.py.
Silly. I should have remembered that from back in the days. But if
the local file is overriding, it should have worked, I'd think.
> > Then Brian told me to restart qcluster:
> > hansen@rccrmail:/opt/mailman/mm$ sudo systemctl restart qcluster
> qcluster is not what you need to restart. You need to restart whatever
> is supporting the wsgi interface to Django. This may be uwsgi or
> gunicorn or ??. Whatever it is, that's what needs to be restarted.
Beats me, Mark. Brian, do you know?
> > I then logged in, but the same lists are showing. It
> > either takes the system a long time to reset or it has ignored the
> > setting.
> > Just tried it again, and the lists are all showing. Do I need to manually recompile the
> > file?
> >
> > c. I then
> > moved on to the templates and added a template for the message text to send to new
> > subscribers. That resulted in the following error message when I went in as moderator to
> > approve of a new subscription:
> > Something went wrong
> > Mailman REST API not available. Please start Mailman core.
> > Postorius is unable to access core's REST API. Is Mailman running?
> > Well, I was able to post to the lists, so I assume it is. Listing at processes, I
> > see a bunch of postgres, python3, nginx, django-adminp but
> > nothing explicitly with a ‘mailman’ string.
> If you do ps ax|grep runner=, what do you see? If you don't see at
> least three processes with --runner=rest:0:1, stop Mailman and start
> Mailman.
Yep. I did not get the whole string before. With your options I see three
of these rest:0:1 processes. So I guess the REST stuff is running anyway.
> If so, what's
> in /opt/mailman/mm/var/logs/mailmansuite.log or whatever it's
> called - defined as filename in the file handler in the LOGGING
> definition in settings(_local).py.
> hansen@rccrmail:/opt/mailman/mm/logs$ tail -f mailmansuite.log
> return Site.objects.get_current(request)
> File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/contrib/sites/models.py",
> line 60, in get_current
> return self._get_site_by_request(request)
> File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/contrib/sites/models.py",
> line 45, in _get_site_by_request
> SITE_CACHE[domain] = self.get(domain__iexact=domain)
> File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/db/models/manager.py",
> line 82, in manager_method
> return getattr(self.get_queryset(), name)(*args, **kwargs)
> File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/db/models/query.py", line
> 408, in get
> self.model._meta.object_name
> django.contrib.sites.models.Site.DoesNotExist: Site matching query does not exist.
> This is because of the domain change. In settings(_local).py you have a
> setting for SITE_ID. Possibly, setting that in settings_local.py to a
> value one greater that the current setting will do.
Trying setting it to 1 (it was 0 before).
> To be certain of the
> correct value, you need to look at the django_site table in mailman's
> database. That table has 3 columns, id, domain and name. The id for the
> row of your domain is what needs to be set as SITE_ID.
You lost me here. No idea how to access the Mailman database.
Brian, do you know?
> > [ABH] At this point I click to accept a subsription
> > request:
> > ERROR 2020-01-06 07:32:41,439 699 postorius.middleware Mailman REST API not available
> > Traceback (most recent call last):
> > File "/opt/mailman/mm/venv/lib/python3.7/site-packages/urllib3/connectionpool.py", line
> > 672, in urlopen
> > chunked=chunked,
> > File "/opt/mailman/mm/venv/lib/python3.7/site packages/urllib3/connectionpool.py", line
> > 421, in _make_request
> > six.raise_from(e, None)
> > File "<string>", line 3, in raise_from
> > File "/opt/mailman/mm/venv/lib/python3.7/site-packages/urllib3/connectionpool.py", line
> > 416, in _make_request
> > httplib_response = conn.getresponse()
> > File "/usr/lib/python3.7/http/client.py", line 1321, in getresponse
> > response.begin()
> > File "/usr/lib/python3.7/http/client.py", line 296, in begin
> > version, status, reason = self._read_status()
> > File "/usr/lib/python3.7/http/client.py", line 265, in _read_status
> > raise RemoteDisconnected("Remote end closed connection without"
> > http.client.RemoteDisconnected: Remote end closed connection without response
> > So yes, the REST API is not there. How can I get it going?
> Stop Mailman and then start it.
No idea here, either. I looked online and found this:
$ from mailman.commands.cli_control import Stop
But it complained:
from: too many arguments
Must have found an out-of-date page. :-)
Yours,
Allan
6 years, 10 months
[MM3-users] Re: Member Issue Discovered
by Abhilash Raj
I am a bit late to this thread, but I am going to try to respond to some of the points raised in the thread.
On 10/19/20 7:42 PM, Brian Carpenter wrote:
> On 10/19/20 10:23 PM, Mark Sapiro wrote:
>> And the import21 created the user and address records for this user.
> Does the same thing for a new subscriber as well. So there is no pathway
> to change a real name that is associated with an email address. None.
> Zilch.
Yes, this is a limitation of the REST API, the display_name attribute can't be updated. Hence, Postorius can't provide a way for anyone to update the name. I have opened an issue for this[1] and I think it should be allowed.
[1]: https://gitlab.com/mailman/mailman/-/issues/786
> I am admin for a list. Users got subscribed with bulk import during
> transition from MM2 to MM3.
> So in a sense I am responsible for adding these to a db. BUT there is
> no way for me to remove them. Only mailman admin with access to the db
> can do it manually.
The fact that a user's memberships & User as an entity that owns email address is a design choice that Mailman developers made after some experience of using and administering Mailing lists running on Mailman 2. It was annoying to have to manage several different passwords and accounts to manage membership on same mailing list server.
The policy decision that Mailman would allow a user/address to exist even if there are no subscriptions on it isn't un-resonable in certain environments and maybe it is in some. I don't think anyone here denies that either of those behavior could be an expectation from someone using Mailman. But Mailman is an open source project with decent amount of extensibility via HTTP API & Python plugin system.
If the default policy doesn't match the expectations of some users, I don't think it is difficult to cleanup users/address with 0 subscriptions in a nightly cron script. It is trivial with some basic scripting and we are happy to help out with such a mechanism. I wouldn't be opposed to directly adding a command in Core that lets you clean up all sorts of stuff.
On Wed, Oct 21, 2020, at 10:20 AM, Apollinaris Schöll wrote:
> There might be a handful of these.
>
> But the bigger problem is a user can’t be removed entirely.
>
> User can delete account and unsubscribe from all lists. But the email
> and user name is still kept in the db. Just tested with Affinity
> List admin can’t do it either.
Front-ends like Affinity should be able to implement such a policy by checking subscriptions of an address on every un-subscription call and delete the user & address if it comes out to be 0. The API is documented here[2], but if there are gaps in there like I mentioned above in my email, please open issues so we know about them.
[2]: https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
> I think the correct action is to remove all records if a email is
> unsubscribed from all lists and that user has not registered for an
> account.
> If a user has registered for an account all information including
> display name must be removed from that particular list subscription.
> It should not matter if a user unsubscribes or a list admin
> unsubscribes. There shouldn’t be any data kept.
Also, like mentioned above, as a list admin, you can request the Site Admin to get the address fully scrubbed or if this is an expectation from all list admins, the Site Admin has the ability to automate such a task. The fact the Mailman doesn't do it by default is because the definition of "correct" action is different.
User should have the ability to delete themselves from the system and if it doesn't wipe everything yet from database, it should be considered a bug in Postorius and be fixed. Postorius track users separately than Core, so the it should make sure to delete in both places and there are appropriate APIs in core to delete Users and Addresses.
Now, the ability in Postorius to edit the display_name. The side effect of the model where User is a Site level thing, makes it impossible to customize user's display_name on a per-list basis, for both list admin and the user themselves. That is a trade-off and it is possible that there were use-cases where that was desirable in Mailman 2, but with the superior subscription management functionality in Postorius, I feel the decision is justified. I respect that some of y'all think that it probably isn't if it doesn't suit you particular use cases.
From the thread, I gather than folks mostly agree that a list admin shouldn't be allowed to edit a user's display name. Site Admins however should be able to edit that, which brings me to next point.
Like Mark brought up, there is definitely a big missing feature of User management in Postorius. This future management page would be for Site Admins (Superusers) to manage Users and have the ability to change pretty much everything about users including their addresses, memberships and preferences and also be able to wipe off the users from all the databases if they want to. If there are more features than that which folks think should be a part of this, please feel free to add to it. As it is hopefully implied from the description, it is a big task and needs substantial chunk of time, part of which this hasn't been picked up yet.
>
>
>
>
>
>
> > On Oct 21, 2020, at 1:43 AM, Jörg Schulz <info(a)joergschulz.de> wrote:
> >
> > So, the issue seems to be, like in the following scenario
> >
> > We imagine a list server for the domains fruiteaters and meateaters.
> > We have two listadmins, anna (fruit) and carl (meat). They don't share anything.
> > We have a user who subscribes to fruiteaters and meateaters using his address hunger(a)eatall.com
> >
> > He wants to show up in the fruiteaters list as fullname wormy wonder, but in the meateaters list as fritz the cat.
> > While he can do so using two different email addresses, he cannot do so using
> >
> > wormy wonder <hunger(a)eatall.com>
> > fritz the cat <hunger(a)eatall.com>
> >
> > as from: addresses because all requests will be matched to the one email address.
> >
> > Worse, if Carl would be able to change the name to from wormy wonder to fritz the cat, Anna would see that name change and like to change it back because the user she had known, user has been identified as wormy wonder.
> >
> > So, if these user properties are stored somewhere not related to the lists, we don't seem to have a chance of display name changes by list admins as long as the data model isn't changed. This doesn't seem to be easy.
> >
> > So, only some kind of super-Admin should currently be able to change these display names, and these changes would be visible for all lists, and one email address can only have one display name for all lists.
> >
> > Not optimal for some rare conditions - that's the way it seems to be???
> > _______________________________________________
> > 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/
> _______________________________________________
> 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)
6 years
[MM3-users] Re: using SSH/TLS with external MTA
by Odhiambo Washington
On Sun, Jul 28, 2024 at 4:42 PM Roland Giesler via Mailman-users <
mailman-users(a)mailman3.org> wrote:
>
> On 2024/07/28 15:26, Roland Giesler via Mailman-users wrote:
> > On 2024/07/28 00:39, Mark Sapiro wrote:
> >> On 7/27/24 15:16, Roland Giesler via Mailman-users wrote:
> >>>
> >>> The server runs power-mailinabox, which uses Postfix indeed. All my
> >>> mail, and quite a few others' mail is sent from the using SMTP-Auth
> >>> on port 465. Actually, this message is sent via that server too.
> >>> So it's clear to me that MM3 is not authenticating for some reason.
> >>
> >> What do you see in Mailman's smtp.log and in the mail.log on the mail
> >> server?
> >
> > The smtp log is in syslog...
>
> I also see this in /var/log/mailman3/web/mailman-web.log
>
> *** Starting uWSGI 2.0.20-debian (64bit) on [Sun Jul 28 15:27:48 2024] ***
> compiled with version: 11.2.0 on 21 March 2022 11:00:44
> os: Linux-5.15.108-1-pve #1 SMP PVE 5.15.108-2 (2023-07-20T10:06Z)
> nodename: mailman
> machine: x86_64
> clock source: unix
> pcre jit disabled
> detected number of CPU cores: 1
> current working directory: /
> detected binary path: /usr/bin/uwsgi-core
> setgid() to 33
> setuid() to 33
> chdir() to /usr/share/mailman3-web
> your processes number limit is 513922
> your memory page size is 4096 bytes
> detected max file descriptor number: 1024
> lock engine: pthread robust mutexes
> thunder lock: disabled (you can enable it with --thunder-lock)
> uwsgi socket 0 bound to UNIX address /run/mailman3-web/uwsgi.sock fd 4
> Python version: 3.10.12 (main, Mar 22 2024, 16:50:05) [GCC 11.4.0]
> Python main interpreter initialized at 0x561ce813d1d0
> python threads support enabled
> your server socket listen backlog is limited to 100 connections
> your mercy for graceful operations on workers is 60 seconds
> mapped 166752 bytes (162 KB) for 2 cores
> *** Operational MODE: threaded ***
> /usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
> and timeout are misconfigured. Set retry larger than timeout,
> failure to do so will cause the tasks to be retriggered before
> completion.
> See
> https://django-q.readthedocs.io/en/latest/configure.html#retry for
> details.
> warn(
> WSGI app 0 (mountpoint='') ready in 5 seconds on interpreter
> 0x561ce813d1d0 pid: 113 (default app)
> *** uWSGI is running in multiple interpreter mode ***
> spawned uWSGI master process (pid: 113)
> spawned uWSGI worker 1 (pid: 339, cores: 2)
> [uwsgi-daemons] spawning "python3 manage.py qcluster" (uid: 33 gid: 33)
> /usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
> and timeout are misconfigured. Set retry larger than timeout,
> failure to do so will cause the tasks to be retriggered before
> completion.
> See
> https://django-q.readthedocs.io/en/latest/configure.html#retry for
> details.
> warn(
> System check identified some issues:
>
> WARNINGS:
> django_mailman3.MailDomain: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> DjangoMailman3Config.default_auto_field attribute to point to a subclass
> of AutoField, e.g. 'django.db.models.BigAutoField'.
> django_mailman3.Profile: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> DjangoMailman3Config.default_auto_field attribute to point to a subclass
> of AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Attachment: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Email: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Favorite: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.LastView: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.MailingList: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Profile: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Tag: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Tagging: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Thread: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.ThreadCategory: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Vote: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> postorius.EmailTemplate: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> PostoriusConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> 15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet starting.
> 15:27:55 [Q] INFO Process-1 guarding cluster low-vermont-harry-fillet
> 15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet running.
> 15:27:55 [Q] INFO Process-1:3 pushing tasks at 386
> 15:27:55 [Q] INFO Process-1:2 monitoring at 385
> 15:27:55 [Q] INFO Process-1:1 ready for work at 384
>
# Asynchronous tasks
# https://django-q.readthedocs.io/en/latest/configure.html
Q_CLUSTER = {
'name': 'mailman3-web',
'workers': 8,
'retry': 360,
'timeout': 300,
'save_limit': 100,
'orm': 'default',
}
# Maintain type of autogenerated keys going forward
#
https://docs.djangoproject.com/en/3.2/releases/3.2/#customizing-type-of-aut…
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
2 years, 3 months
[MM3-users] Re: error changed after restart
by Abhilash Raj
On Sun, Feb 7, 2021, at 1:07 AM, Guillermo Hernandez (Oldno7) via Mailman-users wrote:
> On 6/2/21 21:19, Abhilash Raj wrote:
> >
> >
> > On Sat, Feb 6, 2021 at 19:44, Guillermo Hernandez (Oldno7) via
> > Mailman-users <mailman-users(a)mailman3.org> wrote:
> >> On 6/2/21 18:08, Abhilash Raj wrote:
> >>
> >> On Sat, Feb 6, 2021, at 3:04 AM, Guillermo Hernandez (Oldno7) via
> >> Mailman-users wrote:
> >>
> >> I restarted de server and the error changed. Now the log
> >> shows "KeyError: 'subscription_mode'":
> >>
> >> Did you also restart Mailman Core after the upgrade?
> >>
> >> Yes, indeed: I stopped mailman core and all the processes related.
> >> Did the upgrades. Started all again. Find the errors in the web user
> >> interface. Stopped all again. Looked for errors in the log. Restarted
> >> the complete server. Found the second error that this second mail is
> >> about to. It happens when, in the main page that shows all the lists
> >> you click to see one of them. It seems to me that it has been
> >> database structure changes in django that the upgrade is not aware...
> >> but it's a very long shot from my side.
> > `subscription_mode` was added in Mailman Core 3.3.2 and it is actually
> > a derived atrribute and not stored in Database. Mailman's API should be
> > returning this attribute for each Member, but for some reason it seems
> > to me like it isn't doing that even though do have Mailman 3.3.3 running
> > like you said.
> > If you have Curl installed, can you send me the output of:
> > $ curl -u <user>:<pass> http://localhost:8001/3.1/members?count=5&page=1
>
> This is the output you asked for (it's the same you can see when you try
> to interact with one list):
>
> /usr/local/mailman3 # curl -u XXXXXX:XXXXXX
> http://localhost:8001/3.1/members?count=5&page=1
> /usr/local/mailman3 # <html>
> <head>
> <title>Internal Server Error</title>
> </head>
> <body>
> <h1><p>Internal Server Error</p></h1>
>
> </body>
> </html>
>
> No log entry has been produced...
This is weird, if you have working Core, then there should be *some* json returned
from the above command. Do you have the Gunicorn running? What is the
output of `ps -ef | grep mailman`?
Are you able to run `mailman members` command to list the members of a list?
Also, how did you actually install Mailman?
Abhilash.
> TIA.
>
>
>
>
> > It should ideally return an output that looks something like shown
> > here[1]. You
> > can put the username/password of Core's API server in the above command.
> > [1]:
> > https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
> >
> > Abhilash
> >> I'm using sqlite as django database and mysql for mailman.
> >>
> >> ERROR 2021-02-06 11:47:49,015 26798 django.request Internal
> >> Server Error:
> >> /mailman3/mailman3/lists/name_and_domain.of.the.list
> >> Traceback (most recent call last): File
> >> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> >> line 119, in __getattr__ return self._get(name) File
> >> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> >> line 86, in _get raise KeyError(key) KeyError:
> >> 'subscription_mode' During handling of the above exception,
> >> another exception occurred: Traceback (most recent call
> >> last): File
> >> "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py",
> >> line 34, in inner response = get_response(request) File
> >> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
> >> line 115, in _get_response response =
> >> self.process_exception_by_middleware(e, request) File
> >> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
> >> line 113, in _get_response response =
> >> wrapped_callback(request, *callback_args, **callback_kwargs)
> >> File
> >> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
> >> line 71, in view return self.dispatch(request, *args,
> >> **kwargs) File
> >> "/usr/local/lib/python3.7/site-packages/postorius/views/generic.py",
> >> line 74, in dispatch return super(MailingListView,
> >> self).dispatch(request, *args, **kwargs) File
> >> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
> >> line 97, in dispatch return handler(request, *args,
> >> **kwargs) File
> >> "/usr/local/lib/python3.7/site-packages/postorius/views/list.py",
> >> line 295, in get member.subscription_mode == File
> >> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> >> line 124, in __getattr__ self.__class__.__name__, name))
> >> AttributeError: 'Member' object has no attribute
> >> 'subscription_mode' *********************** some info about
> >> the installed versions via pip list: pip list | grep django
> >> django-allauth 0.44.0
> >> django-appconf 1.0.4
> >> django-compressor 2.4
> >> django-extensions 3.1.0
> >> django-gravatar2 1.4.4
> >> django-haystack 3.0
> >> django-mailman3 1.3.5
> >> django-picklefield 3.0.1
> >> django-q 1.3.4
> >> djangorestframework 3.12.2 pip list | grep mailman
> >> django-mailman3 1.3.5
> >> mailman 3.3.3
> >> mailman-hyperkitty 1.1.0
> >> mailmanclient 3.3.2 pip list | grep postorius
> >> postorius 1.3.4 On 6/2/21 11:12,
> >> Guillermo Hernandez (Oldno7) via Mailman-users wrote:
> >>
> >> I've just upgrade mailman 3 installation following Mr.
> >> Sapiro advice: did a pip install --upgrade
> >> django-mailman3 hyperkitty mailman mailmanclient
> >> mailman-hyperkitty postorius I did a "python3 manage.py
> >> migrate" after, too. And all seemed to run well. All the
> >> lists showed in postorius via web, but when I try to
> >> accesss into one of them the browser shows an error. In
> >> the log you can see: *-*-*-*-*-*-* Traceback (most recent
> >> call last): File
> >> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> >> line 119, in __getattr__ return self._get(name)
> >> File
> >> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
> >> line 86, in _get raise KeyError(key) KeyError:
> >> 'get_requests_count' .. (And after all the traceback
> >> lines) AttributeError: 'MailingList' object has no
> >> attribute 'get_requests_count' *-*-*-*-*-*-*-* The lists
> >> seem to be distributing messeages well.. but I cannot
> >> acces via web administration (django/postorius) Can
> >> anyone point me in the right direction to solve this,
> >> please? _______________________________________________
> >> Mailman-users mailing list -- mailman-users(a)mailman3.org
> >> <mailto:mailman-users@mailman3.org> To unsubscribe send
> >> an email to mailman-users-leave(a)mailman3.org
> >> <mailto:mailman-users-leave@mailman3.org>
> >> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
> >>
> >>
> >> _______________________________________________ Mailman-users
> >> mailing list -- mailman-users(a)mailman3.org
> >> <mailto:mailman-users@mailman3.org> To unsubscribe send an
> >> email to mailman-users-leave(a)mailman3.org
> >> <mailto:mailman-users-leave@mailman3.org>
> >> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
> >>
> >>
> >> _______________________________________________ Mailman-users mailing
> >> list -- mailman-users(a)mailman3.org
> >> <mailto:mailman-users@mailman3.org> To unsubscribe send an email to
> >> mailman-users-leave(a)mailman3.org
> >> <mailto:mailman-users-leave@mailman3.org>
> >> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>
>
> _______________________________________________
> 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, 9 months
[MM3-users] Re: Hyperkitty "All Threads" results in error
by Mark Dadgar
Aaaand I spoke too soon. I am now seeing the same error when I click the All Threads button in hyperkitty. Not every time, because that would be too easy, but often.
I really only have one high-volume list with archives, so I can’t tell if it’s list-specific.
I ran the mailman-post-update script after the last update, which I believe executes all the commands suggested below.
Here’s the crash trace.
Any thoughts?
- Mark
Internal Server Error: /archives/list/trackjunkies(a)pdc-racing.net <mailto:archives/list/trackjunkies@pdc-racing.net>/latest
VariableDoesNotExist at /archives/list/trackjunkies(a)pdc-racing.net <mailto:archives/list/trackjunkies@pdc-racing.net>/latest
Failed lookup for key [sender] in None
Request Method: GET
Request URL: https://mail.pdc-racing.net/archives/list/trackjunkies@pdc-racing.net/latest <https://mail.pdc-racing.net/archives/list/trackjunkies@pdc-racing.net/latest>
Django Version: 3.0.12
Python Executable: /opt/mailman/mm/venv/bin/python
Python Version: 3.8.5
Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/opt/mailman/mm/venv/lib/python3.8/site-packages']
Server time: Mon, 1 Mar 2021 23:25:02 -0800
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'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')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 828, in _resolve_lookup
current = current[bit]
During handling of the above exception ('NoneType' object is not subscriptable), another exception occurred:
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 836, in _resolve_lookup
current = getattr(current, bit)
During handling of the above exception ('NoneType' object has no attribute 'sender'), another exception occurred:
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 842, in _resolve_lookup
current = current[int(bit)]
During handling of the above exception (invalid literal for int() with base 10: 'sender'), another exception occurred:
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/hyperkitty/lib/view_helpers.py", line 134, in inner
return func(request, *args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/hyperkitty/views/mlist.py", line 115, in archives
return _thread_list(request, mlist, threads, extra_context=extra_context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/hyperkitty/views/mlist.py", line 144, in _thread_list
return render(request, template_name, context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 209, in render
nodelist.append(node.render_annotated(context))
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 188, in render
return template.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 173, in render
return self._render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 513, in render
return self.nodelist.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/templatetags/i18n.py", line 132, in render
context.update({var: val.resolve(context) for var, val in self.extra_context.items()})
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/templatetags/i18n.py", line 132, in <dictcomp>
context.update({var: val.resolve(context) for var, val in self.extra_context.items()})
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 691, in resolve
arg_vals.append(arg.resolve(context))
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 795, in resolve
value = self._resolve_lookup(context)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/base.py", line 847, in _resolve_lookup
raise VariableDoesNotExist("Failed lookup for key "
Exception Type: VariableDoesNotExist at /archives/list/trackjunkies(a)pdc-racing.net <mailto:archives/list/trackjunkies@pdc-racing.net>/latest
Exception Value: Failed lookup for key [sender] in None
Request information:
USER: mark
GET: No GET data
POST: No POST data
FILES: No FILES data
On Feb 17, 2021, at 5:34 PM, Mark Dadgar <mark(a)pdc-racing.net> wrote:
>
> On Oct 14, 2020, at 4:37 PM, Mark Sapiro <mark(a)msapiro.net> wrote:
>> On 10/14/20 11:12 AM, Mark Dadgar wrote:
>>>> On Oct 4, 2020, at 10:34 AM, Mark Dadgar <mark(a)pdc-racing.net> wrote:
>>>>
>>>> So I have been wrestling with this problem for a while now. Most times, but not every time, when someone clicks on the All Threads link in hyperkitty, a 500 error is generated.
>>
>>
>> Does this happen on all lists, only some lists or only one list?
>>
>>
>>>> I googled it, obviously, and at first I thought it was related to this issue, but that has not proven to be the case:
>>>>
>>>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
>>
>> What did you google? This query gets a lot of stuff with some hints, but
>> nothing definitive.
>>
>> django render raises VariableDoesNotExist("Failed lookup for key "
>>
>> One thing I noted at
>> <https://askbot.org/en/question/3095/django-error-variabledoesnotexist-faile…>
>> was
>>
>> models out of date - run python manage.py syncdb and python manage.py
>> migrate
>>
>> You could try that. Note that your django admin command might be
>> something other than `python manage.py`. Also note syncdb has been
>> removed from Django >=1.9. Currently, the above becomes `makemigrations`
>> followed by `migrate`.
>>
>> I also suggest running the django admin commands
>>
>> `collectstatic --clear --noinput`
>> and
>> `compress`
>
>
> My re-install seems to have fixed this issue as well. BONUS!
>
> - Mark
> -----
> mark(a)pdc-racing.net | 408-348-2878
>
>
> _______________________________________________
> 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/
- Mark
-----
mark(a)pdc-racing.net | 408-348-2878
5 years, 8 months
[MM3-users] Re: psycopg2 error?
by Odhiambo Washington
On Fri, Oct 27, 2023 at 6:23 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 10/27/23 01:09, Odhiambo Washington wrote:
> >
> > So my database is PostgreSQL-15:
>
> Try the following in your venv.
> ```
> pip uninstall psycopg2-binary
> pip cache remove psycopg2-binary
> pip install psycopg2-binary
> ```
>
```
root@debian12:/home/wash# su - mailman
(venv) mailman@debian12:~$ pip uninstall psycopg2-binary
Found existing installation: psycopg2-binary 2.8.6
Uninstalling psycopg2-binary-2.8.6:
Would remove:
/opt/mailman/venv/lib/python3.11/site-packages/psycopg2/*
/opt/mailman/venv/lib/python3.11/site-packages/psycopg2_binary-2.8.6.dist-info/*
Proceed (Y/n)? y
Successfully uninstalled psycopg2-binary-2.8.6
(venv) mailman@debian12:~$ pip cache remove psycopg2-binary
WARNING: No matching packages for pattern "psycopg2-binary"
Files removed: 0
(venv) mailman@debian12:~$ pip install psycopg2-binary
Collecting psycopg2-binary
Using cached
psycopg2_binary-2.9.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
(3.0 MB)
Installing collected packages: psycopg2-binary
Successfully installed psycopg2-binary-2.9.9
(venv) mailman@debian12:~$ mailman info
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 1969, in _exec_single_context
self.dialect.do_execute(
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/default.py",
line 922, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.InsufficientPrivilege: permission denied for schema public
LINE 2: CREATE TABLE ban (
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/mailman/venv/bin/mailman", line 33, in <module>
sys.exit(load_entry_point('mailman==3.3.9', 'console_scripts',
'mailman')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1077, in main
with self.make_context(prog_name, args, **extra) as ctx:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
943, in make_context
self.parse_args(ctx, args)
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1644, in parse_args
rest = super().parse_args(ctx, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1408, in parse_args
value, args = param.handle_parse_result(ctx, opts, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
2400, in handle_parse_result
value = self.process_value(ctx, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
2362, in process_value
value = self.callback(ctx, self, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/bin/mailman.py",
line 95, in initialize_config
initialize(value)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/core/initialize.py",
line 229, in initialize
initialize_2(propagate_logs=propagate_logs)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/core/initialize.py",
line 187, in initialize_2
config.db = getUtility(IDatabaseFactory, utility_name).create()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/database/factory.py",
line 58, in create
SchemaManager(database).setup_database()
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/database/factory.py",
line 97, in setup_database
Model.metadata.create_all(self._database.engine)
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/sql/schema.py",
line 5828, in create_all
bind._run_ddl_visitor(
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 3243, in _run_ddl_visitor
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 2447, in _run_ddl_visitor
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/sql/visitors.py",
line 671, in traverse_single
return meth(obj, **kw)
^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/sql/ddl.py",
line 919, in visit_metadata
self.traverse_single(
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/sql/visitors.py",
line 671, in traverse_single
return meth(obj, **kw)
^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/sql/ddl.py",
line 957, in visit_table
)._invoke_with(self.connection)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/sql/ddl.py",
line 315, in _invoke_with
return bind.execute(self)
^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 1416, in execute
return meth(
^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/sql/ddl.py",
line 181, in _execute_on_connection
return connection._execute_ddl(
^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 1528, in _execute_ddl
ret = self._execute_context(
^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 1848, in _execute_context
return self._exec_single_context(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 1988, in _exec_single_context
self._handle_dbapi_exception(
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 2343, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/base.py",
line 1969, in _exec_single_context
self.dialect.do_execute(
File
"/opt/mailman/venv/lib/python3.11/site-packages/sqlalchemy/engine/default.py",
line 922, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.InsufficientPrivilege)
permission denied for schema public
LINE 2: CREATE TABLE ban (
^
[SQL:
CREATE TABLE ban (
id SERIAL NOT NULL,
email VARCHAR,
list_id VARCHAR,
PRIMARY KEY (id)
)
]
(Background on this error at: https://sqlalche.me/e/20/f405)
```
I then followed the directions for GRANTing access the public schema:
```
postgres=# \c mailman postgres
You are now connected to database "mailman" as user "postgres".
mailman=# GRANT ALL ON SCHEMA public TO mailman;
GRANT
mailman=# \c mailmanweb postgres
You are now connected to database "mailmanweb" as user "postgres".
mailmanweb=# GRANT ALL ON SCHEMA public TO mailman;
GRANT
mailmanweb=#
```
...and tested IF mailman user could create a table in the mailman db:
```
(venv) mailman@debian12:~$ psql -h localhost -U mailman -d mailman -W
Password:
psql (15.3 (Debian 15.3-0+deb12u1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384,
compression: off)
Type "help" for help.
mailman=> create table xyz(a varchar(100));
CREATE TABLE
mailman=> DROP TABLE xyz;
DROP TABLE
mailman=> \q
```
But then again `mailman info` groks!
```
(venv) mailman@debian12:~$ mailman info
Traceback (most recent call last):
File "/opt/mailman/venv/bin/mailman", line 33, in <module>
sys.exit(load_entry_point('mailman==3.3.9', 'console_scripts',
'mailman')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1077, in main
with self.make_context(prog_name, args, **extra) as ctx:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
943, in make_context
self.parse_args(ctx, args)
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1644, in parse_args
rest = super().parse_args(ctx, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
1408, in parse_args
value, args = param.handle_parse_result(ctx, opts, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
2400, in handle_parse_result
value = self.process_value(ctx, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line
2362, in process_value
value = self.callback(ctx, self, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/bin/mailman.py",
line 95, in initialize_config
initialize(value)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/core/initialize.py",
line 229, in initialize
initialize_2(propagate_logs=propagate_logs)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/core/initialize.py",
line 198, in initialize_2
initialize_pipelines()
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/core/pipelines.py",
line 73, in initialize
add_components('handlers', IHandler, config.handlers)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/utilities/modules.py",
line 218, in add_components
for component_class in find_pluggable_components(subpackage, interface):
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/utilities/modules.py",
line 177, in find_pluggable_components
yield from find_components('mailman.' + subpackage, interface)
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/utilities/modules.py",
line 150, in find_components
module = import_module(module_name)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/importlib/__init__.py", line 126, in
import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
File "<frozen importlib._bootstrap>", line 1149, in
_find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 940, in exec_module
File "<frozen importlib._bootstrap>", line 241, in
_call_with_frames_removed
File
"/opt/mailman/venv/lib/python3.11/site-packages/mailman/handlers/arc_sign.py",
line 22, in <module>
from authheaders import sign_message
File
"/opt/mailman/venv/lib/python3.11/site-packages/authheaders/__init__.py",
line 25, in <module>
from authheaders.dmarc_lookup import dns_query, receiver_record,
receiver_record_walk, get_org_domain
File
"/opt/mailman/venv/lib/python3.11/site-packages/authheaders/dmarc_lookup.py",
line 22, in <module>
from pkg_resources import resource_filename # Part of setuptools
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/pkg_resources/__init__.py",
line 3248, in <module>
@_call_aside
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/pkg_resources/__init__.py",
line 3223, in _call_aside
f(*args, **kwargs)
File
"/opt/mailman/venv/lib/python3.11/site-packages/pkg_resources/__init__.py",
line 3261, in _initialize_master_working_set
working_set = WorkingSet._build_master()
^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/pkg_resources/__init__.py",
line 617, in _build_master
ws.require(__requires__)
File
"/opt/mailman/venv/lib/python3.11/site-packages/pkg_resources/__init__.py",
line 956, in require
needed = self.resolve(parse_requirements(requirements))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/pkg_resources/__init__.py",
line 815, in resolve
dist = self._resolve_dist(
^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/pkg_resources/__init__.py",
line 856, in _resolve_dist
raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'flufl.lock>=5.1' distribution was
not found and is required by mailman
```
Looking at what I have:
(venv) mailman@debian12:~$ pip freeze | grep flufl.lock
flufl.lock==8.0.2
(venv) mailman@debian12:~$
Now I am lost as to what the issue could be.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
3 years
[MM3-users] Re: Newbie question 2: Rewriting issue for bounced emails
by William Oliver
On Sat, 2021-12-25 at 13:34 -0800, Mark Sapiro wrote:
> On 12/25/21 12:42 PM, William Oliver wrote:
> >
> > Is there a "make-the-freaking-virtual- map-database" command in
> > mailman3, or is this postfix thing? Should I just touch the thing
> > and
> > create an empty file? I'm a little scared to... The error message
> > makes me think that it should be populated with something...
>
>
> Did you add an Alias Domain (different from the Mail Host domain) to
> the
> entry for your domain? This is what triggers the creation of
> postfix_vmap.
>
Well, I hope youi had/have/will have a great holiday. I just finished
our dinner and I am now amusing myself by pretending to enjoy the
Hallmark movies my wife is watching and debugging my mailman3
installation when she's not looking. It was either "The twelve cats of
Christmas" or "Die Hard." I put my foot down and said we were watching
Die Hard. So of course we are watching a movie about 12 kittens in a
fire truck.
In any case, I added a line for "virtual_alias_domains" in my main.cf
for postfix. But it doesn't do anything, apparently, except generate
another error line (see the syslog output below). So, just for a lark,
I created an empty /opt/mailman/mm/var/data/postfix_vmap file and ran
postmap on it to create a postfix_vmap.db file.
Now, it no longer complains about there not being a postfix_vmap.db
file. Instead it complains about it being empty. Here's what my
mailmanweb.log has to say:
smtplib.SMTPRecipientsRefused: {'redacted(a)libertyfp.org': (550, b'5.1.1
<redacted(a)libertyfp.org>: Recipient address rejected: User unknown in
virtual alias table')}
I redacted the name because this is supposed to be the admin account --
and it fails on login.
So, here's syslog:
Dec 25 19:08:49 libertyfp postfix/smtpd[44664]: connect from
localhost[::1]
Dec 25 19:08:49 libertyfp postfix/trivial-rewrite[44670]: warning: do
not list domain libertyfp.org in BOTH virtual_alias_domains and
virtual_mailbox_domains
Dec 25 19:08:49 libertyfp postfix/trivial-rewrite[44670]: warning: do
not list domain libertyfp.org in BOTH virtual_alias_domains and
virtual_mailbox_domains
Dec 25 19:08:49 libertyfp postfix/smtpd[44664]: NOQUEUE: reject: RCPT
from localhost[::1]: 550 5.1.1 <redacted(a)libertyfp.org>: Recipient
address rejected: User unknown in virtual alias table;
from=<redacted2(a)libertyfp.org> to=<redacted(a)libertyfp.org> proto=ESMTP
helo=<mail.libertyfp.org>
Dec 25 19:08:49 libertyfp postfix/smtpd[44672]: connect from
localhost[::1]
Dec 25 19:08:49 libertyfp postfix/trivial-rewrite[44670]: warning: do
not list domain libertyfp.org in BOTH virtual_alias_domains and
virtual_mailbox_domains
Dec 25 19:08:49 libertyfp postfix/smtpd[44672]: NOQUEUE: reject: RCPT
from localhost[::1]: 550 5.1.1 <redacted(a)libertyfp.org>: Recipient
address rejected: User unknown in virtual alias table;
from=<root(a)localhost.local> to=<redacted(a)libertyfp.org> proto=ESMTP
helo=<mail.libertyfp.org>
Dec 25 19:08:49 libertyfp postfix/smtpd[44672]: disconnect from
localhost[::1] ehlo=1 auth=1 mail=1 rcpt=0/1 rset=1 quit=1 commands=5/6
where "redacted2" is the name in settings.py for
EMAIL_HOST_USER and DEFAULT_FROM_EMAIL
and "redacted" is the address for "Mailman Suite Admin"
I don't know where "root(a)localhost.local" comes from.
OK, it didn't work when I just had virtual_mailbox_domains defined, and
it didn't work when I had both defined, so I commented out
virtual_mailbox_domains and just left virtual_alias_domains.
That didn't help, either, though it got rid of the warnings in syslog:
Dec 25 19:43:33 libertyfp postfix/smtpd[55192]: connect from
localhost[::1]
Dec 25 19:43:33 libertyfp postfix/smtpd[55192]: NOQUEUE: reject: RCPT
from localhost[::1]: 550 5.1.1 <redacted(a)libertyfp.org>: Recipient
address rejected: User unknown in virtual alias table;
from=<redacted2(a)libertyfp.org> to=<redacted(a)libertyfp.org> proto=ESMTP
helo=<mail.libertyfp.org>
Dec 25 19:43:34 libertyfp postfix/smtpd[55199]: connect from
localhost[::1]
Dec 25 19:43:34 libertyfp postfix/smtpd[55199]: NOQUEUE: reject: RCPT
from localhost[::1]: 550 5.1.1 <redacted(a)libertyfp.org>: Recipient
address rejected: User unknown in virtual alias table;
from=<root(a)localhost.local> to=<reacted(a)libertyfp.org> proto=ESMTP
helo=<mail.libertyfp.org>
Dec 25 19:43:34 libertyfp postfix/smtpd[55199]: disconnect from
localhost[::1] ehlo=1 auth=1 mail=1 rcpt=0/1 rset=1 quit=1 commands=5/6
Here's my postfix configuration:
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
always_add_missing_headers = yes
command_directory = /usr/sbin
compatibility_level = 2
daemon_directory = /usr/lib/postfix/sbin
data_directory = /var/lib/postfix
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd
$daemon_directory/$process_name $process_id & sleep 5
default_destination_concurrency_limit = 15
default_destination_recipient_limit = 30
header_checks = regexp:/etc/postfix/header_checks
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
hash:/opt/mailman/mm/var/data/postfix_lmtp
mail_owner = postfix
mailq_path = /usr/bin/mailq
mydomain = libertyfp.org
myhostname = mail.libertyfp.org
mynetworks = 127.0.0.0/8 10.0.0.0/24
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases
owner_request_special = no
relay_domains = hash:/opt/mailman/mm/var/data/postfix_domains
sendmail_path = /usr/sbin/postfix
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_banner = $myhostname ESMTP
smtpd_recipient_restrictions = permit_mynetworks,
permit_auth_destination, permit_sasl_authenticated, reject
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_cert_file = /etc/letsencrypt/live/libertyfp.org/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/libertyfp.org/privkey.pem
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
transport_maps = hash:/opt/mailman/mm/var/data/postfix_lmtp
unknown_local_recipient_reject_code = 550
virtual_alias_domains = libertyfp.org
virtual_alias_maps = hash:/opt/mailman/mm/var/data/postfix_vmap
virtual_gid_maps = static:20000
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox
virtual_uid_maps = static:20000
Here's my settings.py:
# Mailman Web configuration file.
# /etc/mailman3/settings.py
from mailman_web.settings.base import *
from mailman_web.settings.mailman import *
#: Default list of admins who receive the emails from error logging.
ADMINS = (
('Mailman Suite Admin', 'redacted2(a)libertyfp.org'),
)
# Postgresql database setup.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mailman',
'USER': 'mailman',
# TODO: Replace this with the password.
'PASSWORD': 'passwd',
'HOST': 'localhost',
'PORT': '5432',
}
}
# 'collectstatic' command will copy all the static files here.
# Alias this location from your webserver to `/static`
STATIC_ROOT = '/opt/mailman/web/static'
# Make sure that this directory is created or Django will fail on
start.
LOGGING['handlers']['file']['filename'] =
'/opt/mailman/web/logs/mailmanweb.log'
#: See
https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
ALLOWED_HOSTS = [
"localhost", # Archiving API from Mailman, keep it.
"www.libertyfp.org",
"libertyfp.org",
"mail.libertyfp.org",
"list.libertyfp.org",
"127.0.0.1",
"2.56.57.28"
# "lists.your-domain.org",
# Add here all production domains you have.
]
#: Current Django Site being served. This is used to customize the web
host
#: being used to serve the current website. For more details about
Django
#: site, see: https://docs.djangoproject.com/en/dev/ref/contrib/sites/
SITE_ID = 1
# Set this to a new secret value.
SECRET_KEY = 'passwd'
# Set this to match the api_key setting in
# /opt/mailman/mm/mailman-hyperkitty.cfg (quoted here, not there).
MAILMAN_ARCHIVER_KEY = 'passwd'
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, "fulltext_index"),
},
}
# To be added to Django's settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'redacted(a)libertyfp.org'
EMAIL_HOST_PASSWORD = 'passwd'
DEFAULT_FROM_EMAIL = 'redacted2(a)libertyfp.org'
SITE_ID = 2
Here's my mailman.cfg:
/etc/mailman3/mailman.cfg
[paths.here]
var_dir: /opt/mailman/mm/var
[mailman]
layout: here
# This address is the "site owner" address. Certain messages which must
be
# delivered to a human, but which can't be delivered to a list owner
(e.g. a
# bounce from a list owner), will be sent to this address. It should
point to
# a human.
site_owner: redacted(a)libertyfp.org
[database]
class: mailman.database.postgresql.PostgreSQLDatabase
url: postgres://redacted2:passwd@localhost/mailman
[archiver.prototype]
enable: yes
# For the HyperKitty archiver.
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /opt/mailman/mm/mailman-hyperkitty.cfg
# And, create the /opt/mailman/mm/mailman-hyperkitty.cfg file
containing
# these settings uncommented
#[general]
#base_url: http://127.0.0.1:8000/archives/
#api_key: Secret_Hyperkitty_API_Key
[shell]
history_file: $var_dir/history.py
[shell]
history_file: $var_dir/history.py
[mta]
verp_confirmations: yes
verp_personalized_deliveries: yes
verp_delivery_interval: 1
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
lmtp_host: mail.libertyfp.org
lmtp_port: 8024
smtp_host: mail.libertyfp.org
smtp_port: 25
configuration: python:mailman.config.postfix
recipient_delimiter = +
unknown_local_recipient_reject_code = 550
owner_request_special = no
Here's uwsgi.ini
# /etc/mailman3/uwsgi.ini
#
[uwsgi]
# Port on which uwsgi will be listening.
#http-socket = 127.0.0.1:8000
http-socket = 0.0.0.0:8000
# If running uwsgi from the virtual environment ...
virtualenv = /opt/mailman/venv/
module=mailman_web.wsgi:application
# Add to python import path.
pythonpath = /etc/mailman3/
# The default settings module.
env = DJANGO_SETTINGS_MODULE=settings
# Setup default number of processes and threads per process.
master = true
processes = 2
threads = 2
# Setup the django_q related worker processes.
attach-daemon = /opt/mailman/venv/bin/mailman-web qcluster
# Setup the request log.
req-logger = file:/opt/mailman/web/logs/uwsgi.log
# Log qcluster commands separately.
logger = qcluster file:/opt/mailman/web/logs/uwsgi-qcluster.log
log-route = qcluster uwsgi-daemons
# Last log and it logs the rest of the stuff.
logger = file:/opt/mailman/web/logs/uwsgi-error.log
And, last but not least here's mailman-hyperkitty.cfg:
[general]
base_url: http://127.0.0.1:8000/archives/
api_key: passwd
4 years, 10 months
[MM3-users] Re: Migration from old server to new server failed
by Helio Loureiro
Hi,
Any suggestions here?
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Mon, 19 Feb 2024 at 14:44, Helio Loureiro <helio(a)loureiro.eng.br> wrote:
> Hi,
>
> I repeated the steps today.
>
> First I waited to end the errors raised because the mailman3-web wasn't
> running.
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/urllib3/connectionpool.py",
> line 793, in urlopen
> response = self._make_request(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/urllib3/connectionpool.py",
> line 496, in _make_request
> conn.request(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/urllib3/connection.py",
> line 400, in request
> self.endheaders()
> File "/usr/lib/python3.10/http/client.py", line 1278, in endheaders
> self._send_output(message_body, encode_chunked=encode_chunked)
> File "/usr/lib/python3.10/http/client.py", line 1038, in _send_output
> self.send(msg)
> File "/usr/lib/python3.10/http/client.py", line 976, in send
> self.connect()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/urllib3/connection.py",
> line 238, in connect
> self.sock = self._new_conn()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/urllib3/connection.py",
> line 213, in _new_conn
> raise NewConnectionError(
> urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection
> object at 0x7f0fdc2f72b0>: Failed to establish a new connection: [Errno
> 111] Connection refused
>
> The above exception was the direct cause of the following exception:
>
> Traceback (most recent call last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/requests/adapters.py",
> line 486, in send
> resp = conn.urlopen(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/urllib3/connectionpool.py",
> line 847, in urlopen
> retries = retries.increment(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/urllib3/util/retry.py",
> line 515, in increment
> raise MaxRetryError(_pool, url, reason) from reason # type:
> ignore[arg-type]
> urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1',
> port=8000): Max retries exceeded with url: /archives/api/mailman/archive
> (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at
> 0x7f0fdc2f72b0>: Failed to establish a new connection: [Errno 111]
> Connection refused'))
>
> Which seems to keep forever. So eventually I gave up and moved forward.
> And I changed to use the uwsgi socket instead of the direct port.
>
> (venv) mailman@new-mailman3 ~ (v3.1.1) [0|SIGINT]> mailman-web migrate
> System check identified some issues:
>
> WARNINGS:
> account.EmailAddress: (models.W036) MariaDB does not support unique
> constraints with conditions.
> HINT: A constraint won't be created. Silence this warning if you
> don't care about it.
> account.EmailAddress: (models.W043) MariaDB does not support indexes on
> expressions.
> HINT: An index won't be created. Silence this warning if you don't
> care about it.
> Operations to perform:
> Apply all migrations: account, admin, auth, contenttypes,
> django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> socialaccount
> Running migrations:
> Applying account.0003_alter_emailaddress_create_unique_verified_email...
> OK
> Applying account.0004_alter_emailaddress_drop_unique_email... OK
> Applying account.0005_emailaddress_idx_upper_email... OK
> Applying admin.0003_logentry_add_action_flag_choices... OK
> Applying auth.0009_alter_user_last_name_max_length... OK
> Applying auth.0010_alter_group_name_max_length... OK
> Applying auth.0011_update_proxy_permissions... OK
> Applying auth.0012_alter_user_first_name_max_length... OK
> Applying django_mailman3.0003_sessions... OK
> Applying django_q.0010_auto_20200610_0856... OK
> Applying django_q.0011_auto_20200628_1055... OK
> Applying django_q.0012_auto_20200702_1608... OK
> Applying django_q.0013_task_attempt_count... OK
> Applying django_q.0014_schedule_cluster... OK
> Applying hyperkitty.0016_auto_20180309_0056... OK
> Applying hyperkitty.0017_file_attachments... OK
> Applying hyperkitty.0018_threadcategory_color... OK
> Applying hyperkitty.0019_auto_20190127_null_description... OK
> Applying hyperkitty.0020_auto_20190907_1927... OK
> Applying hyperkitty.0021_add_owners_mods...Traceback (most recent call
> last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 87, in _execute
> return self.cursor.execute(sql)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 261, in query
> _mysql.connection.query(self, query)
> MySQLdb.OperationalError: (1050, "Table
> 'hyperkitty_mailinglist_moderators' already exists")
>
> Then dropping table hyperkitty_mailinglist_moderators.
>
> (venv) mailman@new-mailman3 ~ (v3.1.1)> mailman-web migrate
> System check identified some issues:
>
> WARNINGS:
> account.EmailAddress: (models.W036) MariaDB does not support unique
> constraints with conditions.
> HINT: A constraint won't be created. Silence this warning if you
> don't care about it.
> account.EmailAddress: (models.W043) MariaDB does not support indexes on
> expressions.
> HINT: An index won't be created. Silence this warning if you don't
> care about it.
> Operations to perform:
> Apply all migrations: account, admin, auth, contenttypes,
> django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> socialaccount
> Running migrations:
> Applying hyperkitty.0021_add_owners_mods...Traceback (most recent call
> last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 87, in _execute
> return self.cursor.execute(sql)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 261, in query
> _mysql.connection.query(self, query)
> MySQLdb.OperationalError: (1050, "Table 'hyperkitty_mailinglist_owners'
> already exists")
>
> After dropping table hyperkitty_mailinglist_owners.
>
> (venv) mailman@new-mailman3 ~ (v3.1.1) [0|1]> mailman-web migrate
> System check identified some issues:
>
> WARNINGS:
> account.EmailAddress: (models.W036) MariaDB does not support unique
> constraints with conditions.
> HINT: A constraint won't be created. Silence this warning if you
> don't care about it.
> account.EmailAddress: (models.W043) MariaDB does not support indexes on
> expressions.
> HINT: An index won't be created. Silence this warning if you don't
> care about it.
> Operations to perform:
> Apply all migrations: account, admin, auth, contenttypes,
> django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> socialaccount
> Running migrations:
> Applying hyperkitty.0021_add_owners_mods...Traceback (most recent call
> last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 87, in _execute
> return self.cursor.execute(sql)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 261, in query
> _mysql.connection.query(self, query)
> MySQLdb.OperationalError: (1050, "Table
> 'hyperkitty_mailinglist_moderators' already exists")
>
> After dropping table hyperkitty_mailinglist_moderators.
>
> (venv) mailman@new-mailman3 ~ (v3.1.1) [0|1]> mailman-web migrate
> System check identified some issues:
>
> WARNINGS:
> account.EmailAddress: (models.W036) MariaDB does not support unique
> constraints with conditions.
> HINT: A constraint won't be created. Silence this warning if you
> don't care about it.
> account.EmailAddress: (models.W043) MariaDB does not support indexes on
> expressions.
> HINT: An index won't be created. Silence this warning if you don't
> care about it.
> Operations to perform:
> Apply all migrations: account, admin, auth, contenttypes,
> django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> socialaccount
> Running migrations:
> Applying hyperkitty.0021_add_owners_mods... OK
> Applying hyperkitty.0022_mailinglist_archive_rendering_mode... OK
> Applying hyperkitty.0023_alter_mailinglist_name... OK
> Applying postorius.0004_create_email_template...Traceback (most recent
> call last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
> line 87, in _execute
> return self.cursor.execute(sql)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
> line 75, in execute
> return self.cursor.execute(query, args)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 179, in execute
> res = self._query(mogrified_query)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
> 330, in _query
> db.query(q)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
> line 261, in query
> _mysql.connection.query(self, query)
> MySQLdb.OperationalError: (1050, "Table 'postorius_emailtemplate' already
> exists")
>
> After dropping table postorius_emailtemplate.
>
> (venv) mailman@new-mailman3 ~ (v3.1.1) [0|1]> mailman-web migrate
> System check identified some issues:
>
> WARNINGS:
> account.EmailAddress: (models.W036) MariaDB does not support unique
> constraints with conditions.
> HINT: A constraint won't be created. Silence this warning if you
> don't care about it.
> account.EmailAddress: (models.W043) MariaDB does not support indexes on
> expressions.
> HINT: An index won't be created. Silence this warning if you don't
> care about it.
> Operations to perform:
> Apply all migrations: account, admin, auth, contenttypes,
> django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
> socialaccount
> Running migrations:
> Applying postorius.0004_create_email_template... OK
> Applying postorius.0005_auto_20180707_1107... OK
> Applying postorius.0006_auto_20180711_1359... OK
> Applying postorius.0007_auto_20180712_0536... OK
> Applying postorius.0008_auto_20190310_0717... OK
> Applying postorius.0009_auto_20190508_1604... OK
> Applying postorius.0010_auto_20190821_0621... OK
> Applying postorius.0011_auto_20191109_1219... OK
> Applying postorius.0012_auto_20200420_2136... OK
> Applying postorius.0013_auto_20201116_0058... OK
> Applying postorius.0014_auto_20210329_2248... OK
> Applying postorius.0015_auto_20210619_0509... OK
> Applying postorius.0016_auto_20210810_2157... OK
> Applying postorius.0017_alter_emailtemplate_language... OK
> Applying postorius.0018_alter_emailtemplate_language... OK
> Applying socialaccount.0004_app_provider_id_settings... OK
> Applying socialaccount.0005_socialtoken_nullable_app... OK
> Applying socialaccount.0006_alter_socialaccount_extra_data... OK
>
> At this point the errors remains about not reaching web part. So I
> started mailman3-web.
>
> Then I see these errors on var/log/mailman.log
>
> Feb 19 15:35:14 2024 (543890) Traceback (most recent call last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
> <html><head>
> <title>404 Not Found</title>
> </head><body>
> <h1>Not Found</h1>
> <p>The requested URL was not found on this server.</p>
> <hr>
> <address>Apache/2.4.52 (Ubuntu) Server at 127.0.0.1 Port 80</address>
> </body></html>
>
> Feb 19 15:35:14 2024 (543890) HyperKitty failure on
> http://127.0.0.1/archives/api/mailman/archive: <!DOCTYPE HTML PUBLIC
> "-//IETF//DTD HTML 2.0//EN">
> <html><head>
> <title>404 Not Found</title>
> </head><body>
> <h1>Not Found</h1>
> <p>The requested URL was not found on this server.</p>
> <hr>
> <address>Apache/2.4.52 (Ubuntu) Server at 127.0.0.1 Port 80</address>
> </body></html>
> (404)
> Feb 19 15:35:14 2024 (543890) Could not archive the message with id <
> ff1707bb-d105-4f37-b3f8-9766b3563127(a)SESAMR604.domain.com>
> Feb 19 15:35:14 2024 (543890) archiving failed, re-queuing (mailing-list
> mylist.new-mailman.domain.com, message <
> ff1707bb-d105-4f37-b3f8-9766b3563127(a)machine.domain.com>)
> Feb 19 15:35:14 2024 (543890) Exception in the HyperKitty archiver:
> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
> <html><head>
> <title>404 Not Found</title>
> </head><body>
> <h1>Not Found</h1>
> <p>The requested URL was not found on this server.</p>
> <hr>
> <address>Apache/2.4.52 (Ubuntu) Server at 127.0.0.1 Port 80</address>
> </body></html>
>
> And I can't get access to the hyperkitty at all.
>
> On var/logs/uwsgi-error.log:
>
> --- Logging error ---
> Traceback (most recent call last):
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 356, in pusher
> task = SignedPackage.loads(task[1])
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/signing.py",
> line 25, in loads
> return signing.loads(
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
> line 35, in loads
> base64d = force_bytes(TimestampSigner(key, salt=salt).unsign(s,
> max_age=max_age))
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
> line 70, in unsign
> result = super(TimestampSigner, self).unsign(value)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
> line 55, in unsign
> raise BadSignature('Signature "%s" does not match' % sig)
> django.core.signing.BadSignature: Signature "48do9gGvueBxakX_a4uNmSwD7cs"
> does not match
>
> During handling of the above exception, another exception occurred:
>
> Traceback (most recent call last):
> File "/usr/lib/python3.10/logging/__init__.py", line 1100, in emit
> msg = self.format(record)
> File "/usr/lib/python3.10/logging/__init__.py", line 943, in format
> return fmt.format(record)
> File "/usr/lib/python3.10/logging/__init__.py", line 678, in format
> record.message = record.getMessage()
> File "/usr/lib/python3.10/logging/__init__.py", line 368, in getMessage
> msg = msg % self.args
> TypeError: not all arguments converted during string formatting
> Call stack:
> File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
> sys.exit(main())
> File
> "/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
> line 90, in main
> execute_from_command_line(sys.argv)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
> line 446, in execute_from_command_line
> utility.execute()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
> line 440, in execute
> self.fetch_command(subcommand).run_from_argv(self.argv)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 402, in run_from_argv
> self.execute(*args, **cmd_options)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
> line 448, in execute
> output = self.handle(*args, **options)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/management/commands/qcluster.py",
> line 22, in handle
> q.start()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 78, in start
> self.sentinel.start()
> File "/usr/lib/python3.10/multiprocessing/process.py", line 121, in start
> self._popen = self._Popen(self)
> File "/usr/lib/python3.10/multiprocessing/context.py", line 224, in
> _Popen
> return _default_context.get_context().Process._Popen(process_obj)
> File "/usr/lib/python3.10/multiprocessing/context.py", line 281, in
> _Popen
> return Popen(process_obj)
> File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 19, in
> __init__
> self._launch(process_obj)
> File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 71, in
> _launch
> code = process_obj._bootstrap(parent_sentinel=child_r)
> File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in
> _bootstrap
> self.run()
> File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
> self._target(*self._args, **self._kwargs)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 168, in __init__
> self.start()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 172, in start
> self.spawn_cluster()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 248, in spawn_cluster
> self.pusher = self.spawn_pusher()
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 201, in spawn_pusher
> return self.spawn_process(pusher, self.task_queue, self.event_out,
> self.broker)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 197, in spawn_process
> p.start()
> File "/usr/lib/python3.10/multiprocessing/process.py", line 121, in start
> self._popen = self._Popen(self)
> File "/usr/lib/python3.10/multiprocessing/context.py", line 224, in
> _Popen
> return _default_context.get_context().Process._Popen(process_obj)
> File "/usr/lib/python3.10/multiprocessing/context.py", line 281, in
> _Popen
> return Popen(process_obj)
> File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 19, in
> __init__
> self._launch(process_obj)
> File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 71, in
> _launch
> code = process_obj._bootstrap(parent_sentinel=child_r)
> File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in
> _bootstrap
> self.run()
> File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run
> self._target(*self._args, **self._kwargs)
> File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 358, in pusher
> logger.error(e, traceback.format_exc())
> Message: BadSignature('Signature "48do9gGvueBxakX_a4uNmSwD7cs" does not
> match')
> Arguments: ('Traceback (most recent call last):\n File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py",
> line 356, in pusher\n task = SignedPackage.loads(task[1])\n File
> "/local/mailman/venv/lib/python3.10/sit
> e-packages/django_q/signing.py", line 25, in loads\n return
> signing.loads(\n File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
> line 35, in loads\n base64d = force_bytes(TimestampSigner(key, salt=sa
> lt).unsign(s, max_age=max_age))\n File
> "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py",
> line 70, in unsign\n result = super(TimestampSigner,
> self).unsign(value)\n File "/local/mailman/venv/lib/python3.10
> /site-packages/django_q/core_signing.py", line 55, in unsign\n raise
> BadSignature(\'Signature "%s" does not match\' %
> sig)\ndjango.core.signing.BadSignature: Signature
> "48do9gGvueBxakX_a4uNmSwD7cs" does not match\n',)
>
> I'm using uwsgi via apache:
>
> (venv) mailman@new-mailman3 ~ (v3.1.1)> more
> /etc/apache2/conf-enabled/mailman3.conf
> Alias /mailman3/favicon.ico /local/mailman/web/static/favicon.ico
> Alias /mailman/favicon.ico /local/mailman/web/static/favicon.ico
> Alias /favicon.ico /local/mailman/web/static/favicon.ico
> Alias /mailman3/static /local/mailman/web/static
> Alias /mailman/static /local/mailman/web/static
> Alias /static /local/mailman/web/static
>
> <Directory "/local/mailman/web/static">
> Require all granted
> </Directory>
>
> <IfModule mod_proxy_uwsgi.c>
> ProxyPass /mailman3/favicon.ico !
> ProxyPass /mailman/favicon.ico !
> ProxyPass /favicon.ico !
> ProxyPass /mailman3/static !
> ProxyPass /mailman/static !
> ProxyPass /static !
> ProxyPass /mailman3
> unix:/local/mailman/var/uwsgi.sock|uwsgi://localhost/
> ProxyPass /mailman
> unix:/local/mailman/var/uwsgi.sock|uwsgi://localhost/
> #ProxyPass /mailman3 http://localhost:8000/ timeout=180
> #ProxyPass /mailman http://localhost:8000/ timeout=180
> #ProxyPass / http://localhost:8000/ timeout=180
> </IfModule>
>
> Best Regards,
> Helio Loureiro
> https://helio.loureiro.eng.br
> https://github.com/helioloureiro
> https://mastodon.social/@helioloureiro
>
>
> On Fri, 16 Feb 2024 at 22:39, Mark Sapiro <mark(a)msapiro.net> wrote:
>
>> On 2/16/24 07:12, Helio Loureiro wrote:
>>
>> > - start mailman3 and mailman-3web
>> > - run mailman3-web migrate
>>
>> You should run mailman3-web migrate when mailman-3web is not running.
>>
>> > django.db.utils.OperationalError: (1050, "Table
>> > 'hyperkitty_mailinglist_moderators' already exists")
>> >
>> > I tried to drop the table, but then it complained about another one. I
>> > dropped all the complained tables and as result hypperkitty never
>> > started. So I went back to see why the first error happened.
>>
>> The errors occurred because you had recently added tables in your
>> database so they couldn't be added by the migrations. Dropping the
>> tables was the correct thing to do.
>>
>> Did you ultimately successfully run all the migrations?
>>
>> When you say `hypperkitty never started`, what exactly does that mean?
>> What happens when you try to access the archives? Can you access
>> postorius? Are any errors logged in mailman3-web's log?
>>
>> --
>> 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/
>> Archived at:
>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>>
>> This message sent to helio(a)loureiro.eng.br
>>
>
2 years, 8 months
[MM3-users] RFC-2369 List-Unsubscribe header missing
by paul.sparks@us.idemia.com
Thanks to Mark Sapiro and others who have answered questions on this list. It has made my job easier. I'm hoping someone can help with another issue I'm seeing.
I'm setting up a new mailman 3 server and doing some test posts to a list. This server is intended only as an announcement list with limited members allowed to post. The resulting emails coming from the list do not include the List-Unsubscribe header although other "List-XXX" headers are included. I'm trying to figure out why the header is missing. It seems clear from the code that the header should be included.
Here is partial text of the email source as received from the list. I've tried viewing in Outlook.com, Thunderbird, and even captured the email text at postfix prior to sending to look for the missing header. My domain has been replaced with "example.com" throughout. This is from the postfix capture
________
...
To: "test1(a)example.com"
<test1(a)example.com>
Thread-Topic: Post 8 test
Thread-Index: AQHb8oBBzPBOYgrDxUOIiAxhvUzthA==
Date: Fri, 11 Jul 2025 16:24:38 +0000
Accept-Language: en-US
Content-Language: en-US
msip_labels:
authentication-results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=example.com;
MIME-Version: 1.0
Message-ID-Hash: FWHZCRE4EA6IFP4BZTPIF23DKAKVRMDT
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop;
banned-address; emergency; member-moderation; nonmember-moderation;
administrivia; implicit-dest; max-recipients; max-size; news-moderation;
no-subject; digests; suspicious-header
X-Content-Filtered-By: Mailman/MimeDel 3.3.10
From: "Somewhere1, SW" <test1(a)example.com>
X-Mailman-Version: 3.3.10
Precedence: list
Reply-To: no-reply(a)example.com
Subject: [Test1] Post 8 test
List-Id: "Somewhere1, SW" <test1.example.com>
List-Help:
<mailto:test1-request@example.com?subject=help>
List-Owner: <mailto:test1-owner@example.com>
List-Post: NO
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Message-Id: <20250711163343.017C31DBB79(a)example.com>
Body text
...
__________
Details on my test setup:
# Mailman version.
__version__ = '3.3.10'
OS: Amazon Linux 2023 (RHEL 9 compatible)
MTA: postfix-3.7.2
I am using the following code with mailman shell to configure the list. include_rfc2369_headers is left at the default value of True (verified via mailman shell)
____________
# Description value must be passed as a parameter
def configure_list(ml, description):
#ml.accept_these_nonmembers = allowed_to_post
ml.admin_immed_notify = False
ml.advertised = False
ml.allow_list_posts = False
ml.anonymous_list = True
ml.archive_policy = ArchivePolicy.never
ml.bounce_info_stale_after = datetime.timedelta(days=90)
ml.bounce_notify_owner_on_disable = False
ml.bounce_notify_owner_on_removal = False
ml.bounce_score_threshold = 3
ml.bounce_you_are_disabled_warnings = 0
ml.default_member_action = Action.discard
ml.default_nonmember_action = Action.discard
ml.description = description
ml.digests_enabled = False
ml.filter_content = True
ml.first_strip_reply_to = True
ml.forward_auto_discards = False
ml.max_days_to_hold = 1
ml.max_message_size = 0
ml.nntp_prefix_subject_too = False
ml.pass_extensions = []
ml.pass_types = ['text/plain','multipart/alternative']
ml.reply_goes_to_list = ReplyToMunging.explicit_header
ml.reply_to_address = "no-reply(a)example.com"
ml.require_explicit_destination = False
ml.respond_to_post_requests = False
# Allow select members to post to list
for mbr in ml.members.members:
if str(mbr.address) in allowed_to_post:
mbr.moderation_action = Action.defer
print('end',mbr.address,mbr.moderation_action)
_______________
/etc/mailman3/mailman.cfg file:
# /etc/mailman3/mailman.cfg
# These settings override the defaults in the following 2 config files
# /opt/mailman/lib/python3.9/site-packages/mailman/config/schema.cfg
# /opt/mailman/lib/python3.9/site-packages/mailman/config/mailman.cfg
[paths.custom]
var_dir: /data/lib/mailman
pid_file: /data/lib/mailman/pid/master.pid
lock_file: /data/lib/mailman/pid/master.lock
[mailman]
layout: custom
# This address is the "site owner" address. Certain messages which must be
# delivered to a human, but which can't be delivered to a list owner (e.g. a
# bounce from a list owner), will be sent to this address. It should point to
# a human.
site_owner: ml-owner(a)example.com
[database]
class: mailman.database.postgresql.PostgreSQLDatabase
url: postgresql:///mailman
# No archiving enabled
[archiver.prototype]
enable: no
[archiver.hyperkitty]
enable: no
[shell]
history_file: $var_dir/history.py
[mta]
verp_confirmations: yes
verp_personalized_deliveries: yes
verp_delivery_interval: 1
[passwords]
# When Mailman generates them, this is the default length of passwords.
password_length: 15
[logging.debug]
path: debug.log
level: debug
______________
With debug enabled I see the rfc-2369 pipeline being run when processing the post to the list.
Jul 11 17:51:32 2025 (444088) [IncomingRunner] starting oneloop
Jul 11 17:51:32 2025 (444088) [IncomingRunner] processing filebase: 1752256291.9136803+bfd305a28151ce750dde5114b413b351fa4d1284
Jul 11 17:51:32 2025 (444088) [IncomingRunner] processing onefile
Jul 11 17:51:32 2025 (444090) [OutgoingRunner] starting oneloop
Jul 11 17:51:32 2025 (444090) [OutgoingRunner] ending oneloop: 0
Jul 11 17:51:32 2025 (444097) [DigestRunner] starting oneloop
Jul 11 17:51:32 2025 (444097) [DigestRunner] ending oneloop: 0
Jul 11 17:51:32 2025 (444088) [IncomingRunner] finishing filebase: 1752256291.9136803+bfd305a28151ce750dde5114b413b351fa4d1284
Jul 11 17:51:32 2025 (444088) [IncomingRunner] doing periodic
Jul 11 17:51:32 2025 (444088) [IncomingRunner] committing transaction
Jul 11 17:51:32 2025 (444088) [IncomingRunner] checking short circuit
Jul 11 17:51:32 2025 (444088) [IncomingRunner] ending oneloop: 1
Jul 11 17:51:32 2025 (444088) [IncomingRunner] starting oneloop
Jul 11 17:51:32 2025 (444088) [IncomingRunner] ending oneloop: 0
Jul 11 17:51:32 2025 (444087) [CommandRunner] starting oneloop
Jul 11 17:51:32 2025 (444087) [CommandRunner] ending oneloop: 0
Jul 11 17:51:32 2025 (444091) [PipelineRunner] starting oneloop
Jul 11 17:51:32 2025 (444091) [PipelineRunner] processing filebase: 1752256292.373131+a372784a3ff7a76a662ed1c62c224a53a8008b8b
Jul 11 17:51:32 2025 (444091) [PipelineRunner] processing onefile
Jul 11 17:51:32 2025 (444096) [VirginRunner] starting oneloop
Jul 11 17:51:32 2025 (444096) [VirginRunner] ending oneloop: 0
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: validate-authenticity
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: mime-delete
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: tagger
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: member-recipients
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: avoid-duplicates
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: cleanse
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: cleanse-dkim
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: cook-headers
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: subject-prefix
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: rfc-2369
Jul 11 17:51:32 2025 (444091) RFC 2369 process
Jul 11 17:51:32 2025 (444091) RFC 2369 process continue 1
Jul 11 17:51:32 2025 (444091) RFC 2369 process headers extend
Jul 11 17:51:32 2025 (444091) RFC 2369 process header for loop
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: to-archive
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: to-digest
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: to-usenet
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: after-delivery
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: acknowledge
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: dmarc
Jul 11 17:51:32 2025 (444091) <20250711175131.B8CEC1DA51B(a)example.com> pipeline default-posting-pipeline processing: to-outgoing
Jul 11 17:51:32 2025 (444091) [PipelineRunner] finishing filebase: 1752256292.373131+a372784a3ff7a76a662ed1c62c224a53a8008b8b
Jul 11 17:51:32 2025 (444091) [PipelineRunner] doing periodic
Jul 11 17:51:32 2025 (444091) [PipelineRunner] committing transaction
Jul 11 17:51:32 2025 (444091) [PipelineRunner] checking short circuit
Jul 11 17:51:32 2025 (444091) [PipelineRunner] ending oneloop: 1
Jul 11 17:51:32 2025 (444091) [PipelineRunner] starting oneloop
Jul 11 17:51:32 2025 (444091) [PipelineRunner] ending oneloop: 0
Jul 11 17:51:32 2025 (444085) [ArchiveRunner] starting oneloop
Jul 11 17:51:32 2025 (444085) [ArchiveRunner] ending oneloop: 0
Jul 11 17:51:33 2025 (444090) [OutgoingRunner] starting oneloop
Jul 11 17:51:33 2025 (444090) [OutgoingRunner] processing filebase: 1752256292.8885148+5e5c4a68eacfead13561df616fe7ca19e1d1d182
Jul 11 17:51:33 2025 (444090) [OutgoingRunner] processing onefile
Jul 11 17:51:33 2025 (444097) [DigestRunner] starting oneloop
Jul 11 17:51:33 2025 (444097) [DigestRunner] ending oneloop: 0
Jul 11 17:51:33 2025 (444090) [outgoing] <function deliver at 0x7f21ed7b1310>: <175225629286.444091.14942604217243398224(a)ip-10-0-0-168.us-gov-west-1.compute.internal>
Jul 11 17:51:33 2025 (444088) [IncomingRunner] starting oneloop
_____________
I tried inserting some log.debug calls into lib/python3.9/site-packages/mailman/handlers/rfc_2369.py to see where headers were being removed and added.
I modified: log = logging.getLogger('mailman.debug')
and inserted log.debug throughout the process function and one in the top level.
___________
...
@public
@implementer(IHandler)
class RFC2369:
"""Add the RFC 2369 List-* headers."""
name = 'rfc-2369'
description = _('Add the RFC 2369 List-* headers.')
log.debug('RFC 2369 processing')
def process(self, mlist, msg, msgdata):
"""See `IHandler`."""
process(mlist, msg, msgdata)
__________
When running with debug enabled, I see this top level message many times at the top of the debug.log file during mailman startup, but not after that. I don't see any of my other debug messages.
_____________
Jul 11 16:03:36 2025 (409226) RFC 2369 processing
Jul 11 16:03:40 2025 (409244) RFC 2369 processing
Jul 11 16:03:41 2025 (409250) RFC 2369 processing
Jul 11 16:03:49 2025 (409271) RFC 2369 processing
Jul 11 16:03:50 2025 (409271) [DigestRunner] starting oneloop
Jul 11 16:03:50 2025 (409271) [DigestRunner] ending oneloop: 0
Jul 11 16:03:50 2025 (409261) RFC 2369 processing
Jul 11 16:03:50 2025 (409261) [BounceRunner] starting oneloop
Jul 11 16:03:50 2025 (409261) [BounceRunner] ending oneloop: 0
Jul 11 16:03:50 2025 (409264) RFC 2369 processing
Jul 11 16:03:50 2025 (409267) RFC 2369 processing
Jul 11 16:03:51 2025 (409262) RFC 2369 processing
Jul 11 16:03:51 2025 (409262) [CommandRunner] starting oneloop
Jul 11 16:03:51 2025 (409262) [CommandRunner] ending oneloop: 0
Jul 11 16:03:51 2025 (409266) RFC 2369 processing
Jul 11 16:03:51 2025 (409266) [PipelineRunner] starting oneloop
Jul 11 16:03:51 2025 (409266) [PipelineRunner] ending oneloop: 0
...
__________
Any suggestions on where else I can look? Any thoughts on why my debug calls are not showing in the logs?
1 year, 4 months
[MM3-users] Re: Hyperkitty CPU usage
by Alain Kohli
I'm running a custom image which is based on an older version of the one
here: https://github.com/maxking/docker-mailman. I attached it below.
But I separated postorius and hyperkitty, so hyperkitty is running in
its own container. I'm deploying the image with a plain 'docker run'
behind nginx. I made fulltext_index persistent now, but it didn't get
populated with anything yet. I don't really have an error traceback
because there is never an error thrown. The only thing with some content
is uwsgi-error.log, which you can find below. I'm also still getting the
"A string literal cannot contain NUL (0x00) characters." messages. I
also noticed that it takes incredibly long for the webinterface to load
(several minutes) even though there doesn't seem to be any process
consuming notable resources apart from the minutely job.
Funnily enough, I have the exact same image deployed on a second server
as well for testing. On that one everything works fine. The only
difference is that on the problematic one I have a lot more mailing
lists/archives and that I imported them from mailman2. Could something
have gone wrong during the import? I used the regular hyperkitty_import
command.
uwsgi-error.log:
*** Starting uWSGI 2.0.18 (64bit) on [Sat Apr 27 22:50:17 2019] ***
compiled with version: 6.4.0 on 27 April 2019 22:48:42
os: Linux-4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19)
nodename: hyperkitty.docker
machine: x86_64
clock source: unix
detected number of CPU cores: 4
current working directory: /home/hyperkitty
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
setgid() to 82
setuid() to 82
chdir() to /home/hyperkitty
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address 0.0.0.0:8081 fd 8
uwsgi socket 1 bound to TCP address 0.0.0.0:8080 fd 9
Python version: 3.6.8 (default, Jan 30 2019, 23:54:38) [GCC 6.4.0]
Python main interpreter initialized at 0x55dfaa41c980
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
[uwsgi-cron] command "./manage.py runjobs minutely" registered as
cron task
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" registered
as cron task
[uwsgi-cron] command "./manage.py runjobs hourly" registered as cron
task
[uwsgi-cron] command "./manage.py runjobs daily" registered as cron task
[uwsgi-cron] command "./manage.py runjobs monthly" registered as
cron task
[uwsgi-cron] command "./manage.py runjobs weekly" registered as cron
task
[uwsgi-cron] command "./manage.py runjobs yearly" registered as cron
task
mapped 208576 bytes (203 KB) for 4 cores
*** Operational MODE: threaded ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter
0x55dfaa41c980 pid: 1 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 1)
spawned uWSGI worker 1 (pid: 40, cores: 4)
Sat Apr 27 22:50:18 2019 - [uwsgi-cron] running "./manage.py runjobs
minutely" (pid 45)
[uwsgi-daemons] spawning "./manage.py qcluster" (uid: 82 gid: 82)
22:50:21 [Q] INFO Q Cluster-47 starting.
22:50:21 [Q] INFO Process-1:1 ready for work at 59
22:50:21 [Q] INFO Process-1:2 ready for work at 60
22:50:21 [Q] INFO Process-1:3 ready for work at 61
22:50:21 [Q] INFO Process-1:4 ready for work at 62
22:50:21 [Q] INFO Process-1:5 monitoring at 63
22:50:21 [Q] INFO Process-1 guarding cluster at 58
22:50:21 [Q] INFO Process-1:6 pushing tasks at 64
22:50:21 [Q] INFO Q Cluster-47 running.
22:59:31 [Q] INFO Enqueued 3403
22:59:31 [Q] INFO Process-1:1 processing [update_from_mailman]
22:59:33 [Q] INFO Processed [update_from_mailman]
Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
quarter_hourly" (pid 73)
Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
hourly" (pid 74)
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
with pid 73 exited after 64 second(s)
23:01:28 [Q] INFO Enqueued 3404
23:01:29 [Q] INFO Process-1:2 processing
[rebuild_mailinglist_cache_recent]
[uwsgi-cron] command "./manage.py runjobs hourly" running with pid
74 exited after 91 second(s)
Sat Apr 27 23:01:36 2019 - uwsgi_response_write_body_do(): Broken
pipe [core/writer.c line 341] during GET / (212.203.58.154)
OSError: write error
23:01:36 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
Sat Apr 27 23:15:00 2019 - [uwsgi-cron] running "./manage.py runjobs
quarter_hourly" (pid 88)
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
with pid 88 exited after 4 second(s)
23:28:24 [Q] INFO Enqueued 3405
23:28:24 [Q] INFO Process-1:3 processing [update_from_mailman]
23:28:25 [Q] INFO Processed [update_from_mailman]
Sat Apr 27 23:30:00 2019 - [uwsgi-cron] running "./manage.py runjobs
quarter_hourly" (pid 96)
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
with pid 96 exited after 4 second(s)
23:44:40 [Q] INFO Enqueued 3406
23:44:40 [Q] INFO Process-1:4 processing [update_from_mailman]
23:44:41 [Q] INFO Processed [update_from_mailman]
Sat Apr 27 23:45:00 2019 - [uwsgi-cron] running "./manage.py runjobs
quarter_hourly" (pid 104)
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
with pid 104 exited after 4 second(s)
Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
quarter_hourly" (pid 113)
Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
hourly" (pid 114)
Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
daily" (pid 115)
Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
weekly" (pid 116)
[uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
with pid 113 exited after 55 second(s)
[uwsgi-cron] command "./manage.py runjobs weekly" running with pid
116 exited after 55 second(s)
00:01:36 [Q] INFO Enqueued 3407
00:01:36 [Q] INFO Process-1:1 processing
[rebuild_mailinglist_cache_recent]
[uwsgi-cron] command "./manage.py runjobs hourly" running with pid
114 exited after 99 second(s)
00:01:50 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
00:04:52 [Q] INFO Enqueued 3408
00:04:52 [Q] INFO Process-1:2 processing [update_from_mailman]
00:04:54 [Q] INFO Processed [update_from_mailman]
Dockerfile:
FROM python:3.6-alpine3.7 # Add startup script to container COPY
assets/docker-entrypoint.sh /usr/local/bin/ # Install packages and
dependencies for hyperkitty and add user for executing apps. # It's
important that the user has the UID/GID 82 so nginx can access the
files. RUN set -ex \&& apk add --no-cache --virtual .build-deps gcc
libc-dev linux-headers git \postgresql-dev \&& apk add --no-cache
--virtual .mailman-rundeps bash sassc mailcap \postgresql-client
curl \&& pip install -U django==2.2 \&& pip install
git+https://gitlab.com/eestec/mailmanclient
\git+https://gitlab.com/mailman/hyperkitty@c9fa4d4bfc295438d3e01cd93090064d004cf44d
\git+https://gitlab.com/eestec/django-mailman3 \whoosh \uwsgi
\psycopg2 \dj-database-url \typing \&& apk del .build-deps \&&
addgroup -S -g 82 hyperkitty \&& adduser -S -u 82 -G hyperkitty
hyperkitty \&& chmod u+x /usr/local/bin/docker-entrypoint.sh# Add
needed files for uwsgi server + settings for django COPY
assets/__init__.py /home/hyperkittyCOPY assets/manage.py
/home/hyperkittyCOPY assets/urls.py /home/hyperkittyCOPY
assets/wsgi.py /home/hyperkittyCOPY assets/uwsgi.ini
/home/hyperkittyCOPY assets/settings.py /home/hyperkitty# Change
ownership for uwsgi+django files and set execution rights for
management script RUN chown -R hyperkitty /home/hyperkitty && chmod
u+x /home/hyperkitty/manage.py# Make sure we are in the correct
working dir WORKDIR /home/hyperkittyEXPOSE 8080 8081# Use stop
signal for uwsgi server STOPSIGNAL SIGINTENTRYPOINT
["docker-entrypoint.sh"]CMD ["uwsgi", "--ini",
"/home/hyperkitty/uwsgi.ini"]
On 4/27/19 7:58 PM, Abhilash Raj wrote:
> On Sat, Apr 27, 2019, at 9:40 AM, Alain Kohli wrote:
>> I have run "python manage.py rebuild_index" before, doesn't that do
>> clear_index as well? Apart from that, I run hyperkitty in a docker
>> container and didn't know fulltext_index should be persistent, so that
>> got deleted after every version update for sure.
> Which images are you using and how are you deploying them?
>
> You should persist fulltext_index, yes, and possibly logs if you need
> them for debugging later.
>
> Can you paste the entire error traceback?
>
>>
>> On 4/26/19 10:18 PM, Mark Sapiro wrote:
>>> On 4/26/19 11:14 AM, Alain Kohli wrote:
>>>> I see loads of "A string literal cannot contain NUL (0x00) characters."
>>>> messages, but I haven't found missing messages in the archives yet. Not
>>>> sure how that could be related, though. Apart from that I don't see
>>>> anything unusual. The other jobs (quarter_hourly, hourly, etc.) seem to
>>>> run and finish normally.
>>> Did you upgrade from a Python 2.7 version of HyperKitty to a Python 3
>>> version? The Haystack/Whoosh search engine databases are not compatible
>>> between the two and "A string literal cannot contain NUL (0x00)
>>> characters." is the symptom.
>>>
>>> You need to run 'python manage.py clear_index' or just remove all the
>>> files from the directory defined as 'PATH' under HAYSTACK_CONNECTIONS in
>>> your settings file (normally 'fulltext_index' in the same directory that
>>> contains your settings.py.
>>>
>> _______________________________________________
>> 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/
>>
7 years, 6 months
[MM3-users] Re: How to delete empty archives by script?
by Washington Odhiambo
On Mon, Oct 12, 2026 at 12:52 PM Andreas Vetter <
andreas.vetter(a)uni-wuerzburg.de> wrote:
> Am Monday, 12 October 2026, 11:20:27 Central European Summer Time schrieb
> Washington Odhiambo:
> > On Mon, Oct 12, 2026 at 12:13 PM Andreas Vetter <
> >
> > andreas.vetter(a)uni-wuerzburg.de> wrote:
> > > Am Thursday, 8 October 2026, 15:23:44 Central European Summer Time
> schrieb
> > >
> > > Mark Sapiro:
> > > > On 10/8/26 5:03 AM, Andreas Vetter wrote:
> > > > > Cool. And since there are a lot of empty archives: How would I find
> > > > > the
> > > > > empty archives to feed to this? Can MailingList.objects.get() come
> up
> > > > > with something like a number of archived mails or threads or used
> > >
> > > space?
> > >
> > > > Something like
> > > > ```
> > > >
> > > > >>> from hyperkitty.models import MailingList
> > > >
> > > > >>> for mlist in MailingList.objects.all():
> > > > ... if len(mlist.emails.all()) == 0:
> > > > ... print(mlist.name)
> > > > ...
> > > > ```
> > > > will print the names of all empty archived lists. either replace
> > > > `print(mlist.name)` with `mlist.delete` or add `mlist.delete`
> (indented
> > > > the same amount) after `print(mlist.name)` to delete them.
> > >
> > > First try, first problem:
> > >
> > > (venv) mailman@lists:~> django-admin shell
> > > Python 3.11.15 (main, Aug 14 2026, 20:29:30) [GCC] on linux
> > > Type "help", "copyright", "credits" or "license" for more information.
> > > (InteractiveConsole)
> > >
> > > >>> from hyperkitty.models import MailingList
> > >
> > > Traceback (most recent call last):
> > > File "<console>", line 1, in <module>
> > > File
> > > "/opt/mailman/venv/lib64/python3.11/site-packages/hyperkitty/models/
> > >
> > > __init__.py", line 25, in <module>
> > >
> > > from .category import ThreadCategory
> > >
> > > File
> > > "/opt/mailman/venv/lib64/python3.11/site-packages/hyperkitty/models/
> > >
> > > category.py", line 64, in <module>
> > >
> > > class ThreadCategory(models.Model):
> > > File
> "/opt/mailman/venv/lib64/python3.11/site-packages/django/db/models/
> > >
> > > base.py", line 129, in __new__
> > >
> > > app_config = apps.get_containing_app_config(module)
> > >
> > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > >
> > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/apps/
> > >
> > > registry.py", line 260, in get_containing_app_config
> > >
> > > self.check_apps_ready()
> > >
> > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/apps/
> > >
> > > registry.py", line 137, in check_apps_ready
> > >
> > > settings.INSTALLED_APPS
> > >
> > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/conf/
> > >
> > > __init__.py", line 102, in __getattr__
> > >
> > > self._setup(name)
> > >
> > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/conf/
> > >
> > > __init__.py", line 82, in _setup
> > >
> > > raise ImproperlyConfigured(
> > >
> > > django.core.exceptions.ImproperlyConfigured: Requested setting
> > > INSTALLED_APPS,
> > > but settings are not configured. You must either define the environment
> > > variable
> > > DJANGO_SETTINGS_MODULE or call settings.configure() before accessing
> > > settings.
> > >
> > > I don't see INSTALLED_APPS in any of the configuration files. Where
> should
> > > this
> > > be defined?
> >
> > What does your /etc/mailman3/settings.py look like?
>
> It is not in there (redacted for privacy):
>
> (venv) mailman@lists:~> cat /etc/mailman3/settings.py
> # Mailman Web configuration file.
> # /etc/mailman3/settings.py
>
> # Get the default settings.
> from mailman_web.settings.base import *
> from mailman_web.settings.mailman import *
>
> # Settings below supplement or override the defaults.
>
> #: Default list of admins who receive the emails from error logging.
> ADMINS = (
> ('Mailman Suite Admin', 'redacted@redacted'),
> )
>
> # Postgresql database setup.
> DATABASES = {
> 'default': {
> #'ENGINE': 'django.db.backends.postgresql_psycopg2',
> 'ENGINE': 'django.db.backends.mysql',
> 'NAME': 'mailmanweb',
> 'USER': 'mailman',
> # TODO: Replace this with the password.
> 'PASSWORD': 'redacted',
> 'HOST': 'localhost',
> 'PORT': '',
> # For MySQL/MariaDB, in addition to changing the 'ENGINE' setting,
> # uncomment the following to enable utf8 4-byte encodings.
> 'OPTIONS': {'charset': 'utf8mb4'},
> }
> }
>
> # 'collectstatic' command will copy all the static files here.
> # Alias this location from your webserver to `/static`
> STATIC_ROOT = '/opt/mailman/web/static'
>
> HAYSTACK_CONNECTIONS['default']['PATH'] = '/opt/mailman/fulltext_index'
>
> HYPERKITTY_ATTACHMENT_FOLDER = '/opt/mailman/hyperkitty'
> HYPERKITTY_ENABLE_GRAVATAR = False
>
> # enable the 'compress' command.
> COMPRESS_ENABLED = True
>
> # Make sure that this directory is created or Django will fail on start.
> LOGGING['handlers']['file']['filename'] =
> '/opt/mailman/web/logs/mailmanweb.log'
>
> #: See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
> ALLOWED_HOSTS = [
> "localhost", # Archiving API from Mailman, keep it.
> "127.0.0.1",
> "lists.redacted"
> # "lists.your-domain.org",
> # Add here all production domains you have.
> ]
>
> #: See
> https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins
> #: For Django <4.0 these are of the form 'lists.example.com' or
> #: '.example.com' to include subdomains and for Django >=4.0 they include
> #: the scheme as in 'https://lists.example.com' or 'https://*.example.com
> '.
> CSRF_TRUSTED_ORIGINS = [
> "https://lists.redacted"
> # "lists.your-domain.org",
> # Add here all production domains you have.
> ]
>
> #: Current Django Site being served. This is used to customize the web host
> #: being used to serve the current website. For more details about Django
> #: site, see: https://docs.djangoproject.com/en/dev/ref/contrib/sites/
> SITE_ID = 1
>
> # Set this to a new secret value.
> SECRET_KEY = 'redacted'
>
> # Set this to match the api_key setting in
> # /opt/mailman/mm/mailman-hyperkitty.cfg (quoted here, not there).
> MAILMAN_ARCHIVER_KEY = 'redacted'
>
> # The sender of emails from Django such as address confirmation requests.
> # Set this to a valid email address.
> DEFAULT_FROM_EMAIL = 'redacted'
>
> # The sender of error messages from Django. Set this to a valid email
> # address.
> SERVER_EMAIL = 'redacted'
>
> ##############################
> # Disable Sign-Up
> # AV following
> https://docs.mailman3.org/en/latest/faq.html#how-to-disable-signup
> ACCOUNT_ADAPTER = 'django_mailman3.views.user_adapter.DisableSignupAdapter'
> #
> # Disable Email verification, since we are using LDAP
> ACCOUNT_EMAIL_VERIFICATION = "none"
> #
> # At Login allow only username, not mailaddress
> del ACCOUNT_AUTHENTICATION_METHOD
> # Fehler: settings.ACCOUNT_AUTHENTICATION_METHOD is deprecated, use:
> settings.ACCOUNT_LOGIN_METHODS = {'username'}
> ACCOUNT_LOGIN_METHODS = {'username'}
> # Fehler: settings.ACCOUNT_EMAIL_REQUIRED is deprecated, use:
> settings.ACCOUNT_SIGNUP_FIELDS = ['email*', 'username*', 'password1*',
> 'password2*']
> del ACCOUNT_EMAIL_REQUIRED
>
> # LDAP setup
> # AV following https://gitlab.com/mailman/postorius/-/issues/132
> AUTH_LDAP_SERVER_URI = "redacted"
> AUTH_LDAP_BIND_DN = "redacted"
> AUTH_LDAP_BIND_PASSWORD = "redacted"
> # If you use ldaps:// you must *not* set AUTH_LDAP_START_TLS.
> # AUTH_LDAP_START_TLS = True
>
> import ldap
> from django_auth_ldap.config import LDAPSearch
> from django_auth_ldap.config import PosixGroupType
>
> # This allow login using a username or an email address to login.
> AUTH_LDAP_USER_SEARCH = LDAPSearch("redacted",
> ldap.SCOPE_SUBTREE, "(&(objectClass=posixAccount)(uid=%(user)s))")
>
> #AUTH_LDAP_GROUP_TYPE = PosixGroupType()
> #AUTH_LDAP_GROUP_SEARCH = LDAPSearch("redacted",
> # ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)")
>
> AUTH_LDAP_USER_ATTR_MAP = {
> "username": "uid",
> "first_name": "givenName",
> "last_name": "sn",
> "email": "mail"
> }
>
> #AUTH_LDAP_USER_FLAGS_BY_GROUP = {
> # "is_superuser": "cn=mailman-
> admins,ou=groups,dc=phl,dc=univie,dc=ac,dc=at"
> #}
>
> AUTHENTICATION_BACKENDS = (
> "django_auth_ldap.backend.LDAPBackend",
> "django.contrib.auth.backends.ModelBackend"
> )
>
While INSTALLED_APPS += ['XXXXXX'] would go into the settings.py, were you
not supposed to be running 'mailman shell' instead of 'django-admin shell'?
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
1 month
[MM3-users] Re: Held messages not delivered after approval
by Krinetzki, Stephan
Hi all,
after the Weekend, this is the status of the queues:
/opt/mailman/var/queue/archive:
total 0
drwxrwx--- 2 mailman mailman 6 Aug 4 08:47 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/bad:
total 3016
drwxrwx--- 2 mailman mailman 4096 Aug 2 00:02 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
-rw-rw---- 1 mailman mailman 221723 Aug 1 17:26 1754061973.4885209+46b1ae3716439bf3ef98090296dfce0320fc3017.psv
-rw-rw---- 1 mailman mailman 32912 Aug 2 00:00 1754085602.191851+3576cf33232db110fa7761233f67245564553652.psv
-rw-rw---- 1 mailman mailman 416 Aug 2 00:00 1754085604.0204346+ad485da0c45cb0ad17a5dc42613c3eb3f313c20e.psv
-rw-rw---- 1 mailman mailman 1407649 Aug 2 00:00 1754085623.275817+f23139c8127c454b4fe65453af3db18e558b0e87.psv
-rw-rw---- 1 mailman mailman 1407634 Aug 2 00:02 1754085729.3529432+1643f907bac39a22a7d71e50b031c4f8a574082c.psv
/opt/mailman/var/queue/bounces:
total 0
drwxrwx--- 2 mailman mailman 6 Aug 4 05:22 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/command:
total 0
drwxrwx--- 2 mailman mailman 6 Aug 4 08:14 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/digest:
total 0
drwxrwx--- 2 mailman mailman 6 Aug 4 08:21 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/in:
total 0
drwxrwx--- 2 mailman mailman 6 Aug 4 08:47 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/nntp:
total 0
drwxrwx--- 2 mailman mailman 6 Jun 27 2024 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/out:
total 1772
drwxrwx--- 2 mailman mailman 4096 Aug 4 08:49 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
-rw-rw---- 1 mailman mailman 1407649 Aug 2 00:00 1754085626.995262+ebf03275f7441b1bc7bbaf063cb6238bec30ff9f.pck.tmp
-rw-rw---- 1 mailman mailman 50244 Aug 3 00:00 1754172045.4400518+1da9c6fd82ee0dbc0e893eeca713d498a7273150.pck.tmp
-rw-rw---- 1 mailman mailman 31122 Aug 4 08:49 1754290173.7476344+7237c062741059807b66024091571ce3399d8eda.pck
-rw-rw---- 1 mailman mailman 18091 Aug 4 08:49 1754290173.8104873+cb4c78dffcd7147a5deca51b2cfd92829c06af9d.pck
-rw-rw---- 1 mailman mailman 18243 Aug 4 08:49 1754290173.8333225+d77876f47de73141dd5f6f9ac8d33d937bf6a727.pck
-rw-rw---- 1 mailman mailman 17585 Aug 4 08:49 1754290173.8802657+cb8103f6db5193a75706a7c1bc0d4f90126e587a.pck
-rw-rw---- 1 mailman mailman 217073 Aug 4 08:49 1754290173.9709926+90b2bfd3adf5faa7d0ec336f07dbe2267e666c75.pck
-rw-rw---- 1 mailman mailman 33494 Aug 4 08:49 1754290174.019171+553fc3546ae6c5f8e1b0f27ffc60e154629b9f1d.pck
/opt/mailman/var/queue/pipeline:
total 0
drwxrwx--- 2 mailman mailman 6 Aug 4 08:47 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/retry:
total 0
drwxrwx--- 2 mailman mailman 6 Feb 18 08:57 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
/opt/mailman/var/queue/shunt:
total 9012
drwxrwx--- 2 mailman mailman 8192 Aug 4 00:00 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
-rw-rw---- 1 mailman mailman 490 Aug 1 10:26 1754036797.3635633+4a7750d6b8765f9f982dbfcbf9e972d8055bb4c5.pck
-rw-rw---- 1 mailman mailman 445 Aug 1 10:26 1754036797.618993+a6e6aefca6a76ed55c5bb4fae448f59c42a6f246.pck
-rw-rw---- 1 mailman mailman 443 Aug 1 10:26 1754036797.647361+67d36f287c76ea09b0524dcf03e080d68604d063.pck
-rw-rw---- 1 mailman mailman 443 Aug 1 10:26 1754036797.67375+0a78febb8e89d073607be70ccf90196b3e7fac17.pck
-rw-rw---- 1 mailman mailman 14233 Aug 1 10:50 1754038238.585611+3814bb1ce4232c97991a9cbcaed482966788e7c6.pck
-rw-rw---- 1 mailman mailman 14206 Aug 1 10:50 1754038251.6686325+2cacc5d5709cf5c9d8ce571947c8395eb0da37c9.pck
-rw-rw---- 1 mailman mailman 14466 Aug 1 10:51 1754038263.7415857+7f8260ca4bdf6f109be00206e07d03e717bfa6e1.pck
-rw-rw---- 1 mailman mailman 14297 Aug 1 10:51 1754038273.8673453+9ccb00ea1dc05fcbfb2bc0ef071e1f3083b0e73f.pck
-rw-rw---- 1 mailman mailman 443 Aug 1 13:30 1754047820.8963482+a122a01a47aa5c6dd8240d8ea7bc35fb3960a46d.pck
-rw-rw---- 1 mailman mailman 10870 Aug 1 15:21 1754054475.6638494+f8156ebc84effc7680b64ec03edc7d86b8f6eb65.pck
-rw-rw---- 1 mailman mailman 14782 Aug 1 16:02 1754056965.1972625+8273637db3056c2325a0903b7171725fb6f4d5e8.pck
-rw-rw---- 1 mailman mailman 221723 Aug 1 17:26 1754061973.4941757+4dc6368d88536bc195afdbce9432375166817413.pck
-rw-rw---- 1 mailman mailman 32912 Aug 2 00:00 1754085603.42874+d0b308c26d31e682d256e6cda3786797cad7b062.pck.tmp
-rw-rw---- 1 mailman mailman 17773 Aug 2 00:00 1754085627.0487497+cf822cd6608fcca545f5350124eae405df598f59.pck
-rw-rw---- 1 mailman mailman 478 Aug 2 00:00 1754085627.2411385+cbc654e510b8d618a2999274476b000542feff0e.pck
-rw-rw---- 1 mailman mailman 733213 Aug 2 00:00 1754085627.264005+5a16138d0e33252f2606ceb69577bb58d88bb2e5.pck.tmp
-rw-rw---- 1 mailman mailman 86108 Aug 2 00:00 1754085646.590158+624db84af49b742971e10004557f4289a2c5bccf.pck
-rw-rw---- 1 mailman mailman 446 Aug 2 00:00 1754085646.7170782+9ee0dedf32447f0e860dbe589fed9a272ceeadf8.pck.tmp
-rw-rw---- 1 mailman mailman 18750 Aug 2 00:01 1754085665.8180223+2d11df5f3b4b96ba710fc1bd24551cf67598be79.pck
-rw-rw---- 1 mailman mailman 21926 Aug 2 00:01 1754085665.823551+63198e22da918bc7193d93ec2e3cc01f8aaf5e44.pck
-rw-rw---- 1 mailman mailman 60639 Aug 2 00:01 1754085665.901899+4e47db603c553fa357350865de35092a4ebef5fe.pck
-rw-rw---- 1 mailman mailman 85888 Aug 2 00:01 1754085665.9268048+8ec4679a850410c2e574d4e63f0a4f3ab602af3b.pck
-rw-rw---- 1 mailman mailman 449 Aug 2 00:01 1754085666.0164568+fee1f138066b27b2752812f59e8154f47a534df7.pck
-rw-rw---- 1 mailman mailman 1407870 Aug 2 00:01 1754085696.4017332+94ab6c71d0e984764abd160f14775bb7f73b1222.pck
-rw-rw---- 1 mailman mailman 475 Aug 2 00:01 1754085696.6109+ced325862a46537b64b26257214a9190c3dde0f2.pck
-rw-rw---- 1 mailman mailman 311196 Aug 2 00:01 1754085715.0974422+7b9989730c03cff548e08961591887e17cc2324c.pck
-rw-rw---- 1 mailman mailman 437 Aug 2 00:01 1754085715.1049805+27e5b8943991e847faf240e5e29f8d0c08af4503.pck
-rw-rw---- 1 mailman mailman 29278 Aug 2 00:01 1754085715.1054037+b2fa0b025564ef9ba8d6917b8390cbe8fadf7b94.pck
-rw-rw---- 1 mailman mailman 20878 Aug 2 00:01 1754085715.1229646+805071d12ddfe493768a1e83f05db70aa92fb3bb.pck
-rw-rw---- 1 mailman mailman 7376 Aug 2 00:01 1754085715.2501519+16602d78716c922920e770b6d9e17609bdbc4adb.pck
-rw-rw---- 1 mailman mailman 1407649 Aug 2 00:02 1754085734.1192129+c43923f712a65cc4a111ad09a8f610df855a8692.pck.tmp
-rw-rw---- 1 mailman mailman 458 Aug 2 00:02 1754085734.1719563+31c0d3d15642b9c7c9f8fbfb94cc0ad8bfccd912.pck
-rw-rw---- 1 mailman mailman 12960 Aug 2 00:02 1754085734.21608+0265fcd448c9fb539c801f3a19ddb18c4956aa0e.pck
-rw-rw---- 1 mailman mailman 17254 Aug 2 15:26 1754141215.9892564+3b3dc4f6023516ad41b8a0430887f10701fccb3c.pck
-rw-rw---- 1 mailman mailman 38992 Aug 3 00:00 1754172001.3344436+8a1c1a9b3703f0421263c2b24fc27c9a9bb9116d.pck
-rw-rw---- 1 mailman mailman 1332842 Aug 3 00:00 1754172001.3540711+13acca94280dbcbb1a1cb8e730fbf87971b31aa9.pck
-rw-rw---- 1 mailman mailman 752482 Aug 3 00:00 1754172001.3596764+d2d772c50ff9812632bd6b054dfb9973758ed5c4.pck
-rw-rw---- 1 mailman mailman 18267 Aug 3 00:00 1754172026.4244561+b2e097258a1123092a199858a50f7d4cb4d5ca65.pck
-rw-rw---- 1 mailman mailman 17241 Aug 3 00:00 1754172026.4761071+9818446a413647ef57fc5f60d8fa51da43d85da8.pck
-rw-rw---- 1 mailman mailman 1407668 Aug 3 00:00 1754172026.4913034+c3055e1f383c0b3226169006e1cb79322e09846d.pck
-rw-rw---- 1 mailman mailman 50244 Aug 3 00:00 1754172045.543335+521b1a4d393691e85c86fd3a313efc6d90008b30.pck
-rw-rw---- 1 mailman mailman 32173 Aug 3 00:00 1754172045.5646617+ea2a4f2a232dfa9750e58c5b8cf9150c933e8ae7.pck
-rw-rw---- 1 mailman mailman 37411 Aug 3 00:01 1754172102.5104077+c9cabab5571fb2db62cbc688b6cc0e05f2fa2bfb.pck
-rw-rw---- 1 mailman mailman 25419 Aug 3 00:01 1754172102.5282032+20946f26d1adf7c481e504de4d589cdb1cc21edb.pck
-rw-rw---- 1 mailman mailman 276542 Aug 3 00:02 1754172120.9135556+ddbc3a3e9ce4afc78b95d03d73b0c8737f3f6606.pck
-rw-rw---- 1 mailman mailman 18018 Aug 3 00:02 1754172140.6559258+621dad8dc6a84e2ddc5413cedd7f8860b267c27c.pck
-rw-rw---- 1 mailman mailman 12887 Aug 4 00:00 1754258401.069818+189eeede43be7771f2932f2fb0954f1b09cb9fb9.pck
-rw-rw---- 1 mailman mailman 311196 Aug 4 00:00 1754258421.5529852+ca4e152d308b15023f5203309cc583929177cda2.pck
-rw-rw---- 1 mailman mailman 66982 Aug 4 00:00 1754258441.022148+91e14500fe3abe2bdcf69e56f5f200ca851e3a7e.pck
-rw-rw---- 1 mailman mailman 84863 Aug 4 00:00 1754258441.0448039+48b144d7abc1fe88b2fc6aef25398993c6bdc2e5.pck
-rw-rw---- 1 mailman mailman 20951 Aug 4 00:00 1754258459.2980123+485ba78453a56be2211e9a02277087ad5cf12b22.pck
/opt/mailman/var/queue/virgin:
total 0
drwxrwx--- 2 mailman mailman 6 Aug 4 08:47 .
drwxr-xr-x 14 mailman mailman 165 Jun 27 2024 ..
So let's start with bad queue:
mailman qfile /opt/mailman/var/queue/bad/1754061973.4885209+46b1ae3716439bf3ef98090296dfce0320fc3017.psv
Traceback (most recent call last):
File "/opt/mailman/mailman-venv/bin/mailman", line 8, in <module>
sys.exit(main())
^^^^^^
File "/opt/mailman/mailman-venv/lib64/python3.11/site-packages/click/core.py", line 1157, in __call__
return self.main(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/mailman-venv/lib64/python3.11/site-packages/click/core.py", line 1078, in main
rv = self.invoke(ctx)
^^^^^^^^^^^^^^^^
File "/opt/mailman/mailman-venv/lib64/python3.11/site-packages/mailman/bin/mailman.py", line 69, in invoke
return super().invoke(ctx)
^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/mailman-venv/lib64/python3.11/site-packages/click/core.py", line 1688, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/mailman-venv/lib64/python3.11/site-packages/click/core.py", line 1434, in invoke
return ctx.invoke(self.callback, **ctx.params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/mailman-venv/lib64/python3.11/site-packages/click/core.py", line 783, in invoke
return __callback(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/mailman-venv/lib64/python3.11/site-packages/mailman/commands/cli_qfile.py", line 63, in qfile
m.append(pickle.load(fp))
^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 25: invalid start byte
Seems to be an decoding error
mailman qfile /opt/mailman/var/queue/bad/1754061973.4885209+46b1ae3716439bf3ef98090296dfce0320fc3017.psv
First Object is the E-Mail with a lot of HTML (Outlook seems to be the client, so...)
The Second:
{ '_parsemsg': False,
'approved': True,
'envsender': 'noreply(a)lists.example.com,
'lang': 'de',
'listid': 'kennziffern.lists.example.com,
'member_moderation_action': 'hold',
'moderation_reasons': ['The message comes from a moderated member'],
'moderation_sender': '<Sender Address>,
'moderator_approved': True,
'original_sender': <Sender Address>',
'original_size': 28614,
'original_subject': '=?iso-8859-1?Q?=C4nderungen_im_Orgaverzeichnis?=',
'received_time': datetime.datetime(2025, 7, 31, 11, 16, 46, 475199),
'recipients': { <some recipients>},
'rule_hits': ['member-moderation'],
'rule_misses': [ 'dmarc-mitigation',
'no-senders',
'approved',
'loop',
'banned-address',
'header-match-config-1',
'emergency'],
'stripped_subject': 'Änderungen im Orgaverzeichnis',
'to_list': True,
'type': 'data',
'verp': False,
'version': 3,
'whichq': 'out'}
I don't see here a problem. But the timestamp seems to be related to the restart of mailman. Can I skip this in the logrotate?
mailman qfile /opt/mailman/var/queue/bad/1754085604.0204346+ad485da0c45cb0ad17a5dc42613c3eb3f313c20e.psv
It's a digest:
[----- start pickle -----]
<----- start object 1 ----->
<----- start object 2 ----->
{ '_parsemsg': False,
'digest_number': 7,
'digest_path': '/opt/mailman/var/lists/doc-infos.lists.example.com/digest.134.7.mmdf',
'listid': 'doc-infos.lists.example.com',
'version': 3,
'volume': 134}
[----- end pickle -----]
Btw: The crontab is the following:
#####0 */2 * * * apache /opt/mailman/mailman-venv/bin/django-admin runjobs minutely --pythonpath /opt/mailman/mailman-suite/mailman-suite_project --settings settings
#*/30 * * * * mailman /opt/mailman/mailman-venv/bin/django-admin runjobs minutely --pythonpath /etc/mailman3/ --settings settings
@hourly mailman /opt/mailman/mailman-venv/bin/django-admin runjobs hourly --pythonpath /etc/mailman3/ --settings settings
#####@daily apache /opt/mailman/mailman-venv/bin/django-admin runjobs daily --pythonpath /etc/mailman3/ --settings settings
@monthly mailman /opt/mailman/mailman-venv/bin/django-admin runjobs monthly --pythonpath /etc/mailman3/ --settings settings
@yearly mailman /opt/mailman/mailman-venv/bin/django-admin runjobs yearly --pythonpath /etc/mailman3/ --settings settings
@daily mailman cd /opt/mailman; source /opt/mailman/mailman-venv/bin/activate; /opt/mailman/mailman-venv/bin/mailman digests --send > /dev/null 2>&1
mailman qfile /opt/mailman/var/queue/bad/1754085623.275817+f23139c8127c454b4fe65453af3db18e558b0e87.psv
That's the Mail which should be send to ~43000 Members.
Header says:
Received: from <ext. Server> (<IP>)
by lists.example.com (Postfix) with ESMTPS id F16D88016D1C
for <mm(a)lists.example.com>; Thu, 31 Jul 2025 09:58:38 +0200 (CEST)
The date of the file is
-rw-rw---- 1 mailman mailman 1407649 Aug 2 00:00 1754085623.275817+f23139c8127c454b4fe65453af3db18e558b0e87.psv
So i checked the mailman.log:
[2025-08-01 00:00:02 +0200] [324558] [INFO] Handling signal: term
[2025-08-01 00:00:02 +0200] [324568] [INFO] Worker exiting (pid: 324568)
[2025-08-01 00:00:02 +0200] [324571] [INFO] Worker exiting (pid: 324571)
[2025-08-01 00:00:02 +0200] [324572] [INFO] Worker exiting (pid: 324572)
[2025-08-01 00:00:02 +0200] [324574] [INFO] Worker exiting (pid: 324574)
[2025-08-01 00:00:02 +0200] [324558] [ERROR] Worker (pid:324571) was sent SIGTERM!
[2025-08-01 00:00:02 +0200] [324558] [ERROR] Worker (pid:324572) was sent SIGTERM!
[2025-08-01 00:00:02 +0200] [324558] [ERROR] Worker (pid:324568) was sent SIGTERM!
[2025-08-01 00:00:02 +0200] [324558] [ERROR] Worker (pid:324574) was sent SIGTERM!
[2025-08-01 00:00:02 +0200] [324558] [INFO] Shutting down: Master
Aug 01 00:00:11 2025 (567061) Task runner evicted 0 expired pendings
[2025-08-01 00:00:12 +0200] [567059] [INFO] Starting gunicorn 22.0.0
[2025-08-01 00:00:12 +0200] [567059] [INFO] Listening at: http://127.0.0.1:8001 (567059)
[2025-08-01 00:00:12 +0200] [567059] [INFO] Using worker: sync
[2025-08-01 00:00:12 +0200] [567069] [INFO] Booting worker with pid: 567069
[2025-08-01 00:00:12 +0200] [567070] [INFO] Booting worker with pid: 567070
[2025-08-01 00:00:12 +0200] [567071] [INFO] Booting worker with pid: 567071
[2025-08-01 00:00:12 +0200] [567073] [INFO] Booting worker with pid: 567073
Aug 01 00:00:13 2025 (567061) Task runner deleted 0 orphaned workflows
<Ommited GET Request>
Aug 01 00:00:21 2025 (567061) Task runner deleted 0 orphaned requests
[2025-08-01 00:00:23 +0200] [567059] [INFO] Handling signal: term
[2025-08-01 00:00:23 +0200] [567073] [INFO] Worker exiting (pid: 567073)
[2025-08-01 00:00:23 +0200] [567069] [INFO] Worker exiting (pid: 567069)
[2025-08-01 00:00:23 +0200] [567070] [INFO] Worker exiting (pid: 567070)
[2025-08-01 00:00:23 +0200] [567071] [INFO] Worker exiting (pid: 567071)
[2025-08-01 00:00:23 +0200] [567059] [ERROR] Worker (pid:567073) was sent SIGTERM!
[2025-08-01 00:00:23 +0200] [567059] [ERROR] Worker (pid:567070) was sent SIGTERM!
[2025-08-01 00:00:23 +0200] [567059] [ERROR] Worker (pid:567071) was sent SIGTERM!
[2025-08-01 00:00:23 +0200] [567059] [ERROR] Worker (pid:567069) was sent SIGTERM!
[2025-08-01 00:00:23 +0200] [567059] [INFO] Shutting down: Master
[2025-08-01 00:00:35 +0200] [567206] [INFO] Starting gunicorn 22.0.0
[2025-08-01 00:00:35 +0200] [567206] [INFO] Listening at: http://127.0.0.1:8001 (567206)
[2025-08-01 00:00:35 +0200] [567206] [INFO] Using worker: sync
[2025-08-01 00:00:35 +0200] [567246] [INFO] Booting worker with pid: 567246
[2025-08-01 00:00:35 +0200] [567250] [INFO] Booting worker with pid: 567250
[2025-08-01 00:00:35 +0200] [567252] [INFO] Booting worker with pid: 567252
[2025-08-01 00:00:35 +0200] [567253] [INFO] Booting worker with pid: 567253
<Ommited GET Requests>
Aug 01 00:00:36 2025 (567208) Task runner evicted 0 expired pendings
<Ommited GET Requests>
Aug 01 00:00:38 2025 (567208) Task runner deleted 0 orphaned workflows
[2025-08-01 00:00:42 +0200] [567206] [INFO] Handling signal: term
[2025-08-01 00:00:42 +0200] [567246] [INFO] Worker exiting (pid: 567246)
[2025-08-01 00:00:42 +0200] [567253] [INFO] Worker exiting (pid: 567253)
[2025-08-01 00:00:42 +0200] [567250] [INFO] Worker exiting (pid: 567250)
[2025-08-01 00:00:42 +0200] [567252] [INFO] Worker exiting (pid: 567252)
[2025-08-01 00:00:42 +0200] [567206] [ERROR] Worker (pid:567250) was sent SIGTERM!
[2025-08-01 00:00:42 +0200] [567206] [ERROR] Worker (pid:567252) was sent SIGTERM!
[2025-08-01 00:00:42 +0200] [567206] [ERROR] Worker (pid:567246) was sent SIGTERM!
[2025-08-01 00:00:42 +0200] [567206] [ERROR] Worker (pid:567253) was sent SIGTERM!
[2025-08-01 00:00:42 +0200] [567206] [INFO] Shutting down: Master
Aug 01 00:00:54 2025 (567280) Task runner evicted 2 expired pendings
Aug 01 00:00:56 2025 (567280) Task runner deleted 0 orphaned workflows
[2025-08-01 00:00:58 +0200] [567278] [INFO] Starting gunicorn 22.0.0
[2025-08-01 00:00:58 +0200] [567278] [INFO] Listening at: http://127.0.0.1:8001 (567278)
[2025-08-01 00:00:58 +0200] [567278] [INFO] Using worker: sync
[2025-08-01 00:00:58 +0200] [567327] [INFO] Booting worker with pid: 567327
[2025-08-01 00:00:58 +0200] [567328] [INFO] Booting worker with pid: 567328
[2025-08-01 00:00:58 +0200] [567329] [INFO] Booting worker with pid: 567329
[2025-08-01 00:00:58 +0200] [567330] [INFO] Booting worker with pid: 567330
<Ommited GET Requests>
[2025-08-01 00:01:00 +0200] [567278] [INFO] Handling signal: term
[2025-08-01 00:01:00 +0200] [567327] [INFO] Worker exiting (pid: 567327)
[2025-08-01 00:01:00 +0200] [567328] [INFO] Worker exiting (pid: 567328)
[2025-08-01 00:01:00 +0200] [567329] [INFO] Worker exiting (pid: 567329)
[2025-08-01 00:01:00 +0200] [567330] [INFO] Worker exiting (pid: 567330)
[2025-08-01 00:01:01 +0200] [567278] [ERROR] Worker (pid:567328) was sent SIGTERM!
[2025-08-01 00:01:01 +0200] [567278] [ERROR] Worker (pid:567329) was sent SIGTERM!
[2025-08-01 00:01:01 +0200] [567278] [ERROR] Worker (pid:567330) was sent SIGTERM!
[2025-08-01 00:01:01 +0200] [567278] [ERROR] Worker (pid:567327) was sent SIGTERM!
[2025-08-01 00:01:01 +0200] [567278] [INFO] Shutting down: Master
Aug 01 00:01:12 2025 (567381) Task runner evicted 2 expired pendings
[2025-08-01 00:01:13 +0200] [567379] [INFO] Starting gunicorn 22.0.0
[2025-08-01 00:01:13 +0200] [567379] [INFO] Listening at: http://127.0.0.1:8001 (567379)
[2025-08-01 00:01:13 +0200] [567379] [INFO] Using worker: sync
[2025-08-01 00:01:13 +0200] [567397] [INFO] Booting worker with pid: 567397
[2025-08-01 00:01:13 +0200] [567398] [INFO] Booting worker with pid: 567398
[2025-08-01 00:01:13 +0200] [567399] [INFO] Booting worker with pid: 567399
[2025-08-01 00:01:13 +0200] [567400] [INFO] Booting worker with pid: 567400
<Ommited GET Request>
Aug 01 00:01:13 2025 (567381) Task runner deleted 0 orphaned workflows
<Ommited GET Requests>
Aug 01 00:01:19 2025 (567381) Task runner deleted 0 orphaned requests
<Ommited GET Requesta>
[2025-08-01 00:01:34 +0200] [567379] [INFO] Handling signal: term
[2025-08-01 00:01:34 +0200] [567397] [INFO] Worker exiting (pid: 567397)
[2025-08-01 00:01:34 +0200] [567399] [INFO] Worker exiting (pid: 567399)
[2025-08-01 00:01:34 +0200] [567398] [INFO] Worker exiting (pid: 567398)
[2025-08-01 00:01:34 +0200] [567400] [INFO] Worker exiting (pid: 567400)
[2025-08-01 00:01:34 +0200] [567379] [ERROR] Worker (pid:567399) was sent SIGTERM!
[2025-08-01 00:01:34 +0200] [567379] [ERROR] Worker (pid:567398) was sent SIGTERM!
[2025-08-01 00:01:34 +0200] [567379] [ERROR] Worker (pid:567397) was sent SIGTERM!
[2025-08-01 00:01:34 +0200] [567379] [ERROR] Worker (pid:567400) was sent SIGTERM!
[2025-08-01 00:01:34 +0200] [567379] [INFO] Shutting down: Master
[2025-08-01 00:01:46 +0200] [567516] [INFO] Starting gunicorn 22.0.0
[2025-08-01 00:01:46 +0200] [567516] [INFO] Listening at: http://127.0.0.1:8001 (567516)
[2025-08-01 00:01:46 +0200] [567516] [INFO] Using worker: sync
[2025-08-01 00:01:46 +0200] [567525] [INFO] Booting worker with pid: 567525
[2025-08-01 00:01:46 +0200] [567526] [INFO] Booting worker with pid: 567526
[2025-08-01 00:01:46 +0200] [567527] [INFO] Booting worker with pid: 567527
[2025-08-01 00:01:46 +0200] [567528] [INFO] Booting worker with pid: 567528
Aug 01 00:01:47 2025 (567518) Task runner evicted 2 expired pendings
Aug 01 00:01:48 2025 (567518) Task runner deleted 0 orphaned workflows
<Ommited GET Request>
[2025-08-01 00:01:52 +0200] [567516] [INFO] Handling signal: term
[2025-08-01 00:01:52 +0200] [567526] [INFO] Worker exiting (pid: 567526)
[2025-08-01 00:01:52 +0200] [567525] [INFO] Worker exiting (pid: 567525)
[2025-08-01 00:01:52 +0200] [567527] [INFO] Worker exiting (pid: 567527)
[2025-08-01 00:01:52 +0200] [567528] [INFO] Worker exiting (pid: 567528)
[2025-08-01 00:01:52 +0200] [567516] [ERROR] Worker (pid:567526) was sent SIGTERM!
[2025-08-01 00:01:52 +0200] [567516] [ERROR] Worker (pid:567525) was sent SIGTERM!
[2025-08-01 00:01:52 +0200] [567516] [ERROR] Worker (pid:567527) was sent SIGTERM!
[2025-08-01 00:01:52 +0200] [567516] [ERROR] Worker (pid:567528) was sent SIGTERM!
[2025-08-01 00:01:52 +0200] [567516] [INFO] Shutting down: Master
Aug 01 00:02:06 2025 (567648) Task runner evicted 2 expired pendings
[2025-08-01 00:02:06 +0200] [567646] [INFO] Starting gunicorn 22.0.0
[2025-08-01 00:02:06 +0200] [567646] [INFO] Listening at: http://127.0.0.1:8001 (567646)
[2025-08-01 00:02:06 +0200] [567646] [INFO] Using worker: sync
[2025-08-01 00:02:06 +0200] [567688] [INFO] Booting worker with pid: 567688
[2025-08-01 00:02:06 +0200] [567689] [INFO] Booting worker with pid: 567689
[2025-08-01 00:02:06 +0200] [567690] [INFO] Booting worker with pid: 567690
[2025-08-01 00:02:06 +0200] [567691] [INFO] Booting worker with pid: 567691
Aug 01 00:02:07 2025 (567648) Task runner deleted 0 orphaned workflows
[2025-08-01 00:02:11 +0200] [567646] [INFO] Handling signal: term
[2025-08-01 00:02:11 +0200] [567689] [INFO] Worker exiting (pid: 567689)
[2025-08-01 00:02:11 +0200] [567688] [INFO] Worker exiting (pid: 567688)
[2025-08-01 00:02:11 +0200] [567690] [INFO] Worker exiting (pid: 567690)
[2025-08-01 00:02:11 +0200] [567691] [INFO] Worker exiting (pid: 567691)
[2025-08-01 00:02:11 +0200] [567646] [ERROR] Worker (pid:567688) was sent SIGTERM!
[2025-08-01 00:02:11 +0200] [567646] [ERROR] Worker (pid:567689) was sent SIGTERM!
[2025-08-01 00:02:11 +0200] [567646] [ERROR] Worker (pid:567690) was sent SIGTERM!
[2025-08-01 00:02:11 +0200] [567646] [ERROR] Worker (pid:567691) was sent SIGTERM!
[2025-08-01 00:02:11 +0200] [567646] [INFO] Shutting down: Master
[2025-08-01 00:02:24 +0200] [567717] [INFO] Starting gunicorn 22.0.0
[2025-08-01 00:02:24 +0200] [567717] [INFO] Listening at: http://127.0.0.1:8001 (567717)
[2025-08-01 00:02:24 +0200] [567717] [INFO] Using worker: sync
[2025-08-01 00:02:24 +0200] [567786] [INFO] Booting worker with pid: 567786
[2025-08-01 00:02:24 +0200] [567789] [INFO] Booting worker with pid: 567789
[2025-08-01 00:02:24 +0200] [567792] [INFO] Booting worker with pid: 567792
[2025-08-01 00:02:24 +0200] [567794] [INFO] Booting worker with pid: 567794
<Ommited GET Requests>
Aug 01 00:02:25 2025 (567719) Task runner evicted 2 expired pendings
Aug 01 00:02:26 2025 (567719) Task runner deleted 0 orphaned workflows
<Ommited GET Requests>
Aug 01 00:02:33 2025 (567719) Task runner deleted 0 orphaned requests
[01/Aug/2025:00:02:35 +0200] "GET /3.1/lists/ifip-tc6(a)lists.rwth-aachen.de HTTP/1.1" 200 423 "-" "GNU Mailman REST client v3.3.5"
[01/Aug/2025:00:02:35 +0200] "GET /3.1/lists/smartlist(a)lists.rwth-aachen.de HTTP/1.1" 200 438 "-" "GNU Mailman REST client v3.3.5"
Aug 01 00:02:42 2025 (567719) Task runner deleted 2 orphaned messages
Aug 01 00:02:42 2025 (567719) Task runner deleted 0 orphaned message files
Aug 01 00:02:42 2025 (567719) Task runner evicted 2 expired bounce events
Aug 01 00:02:42 2025 (567719) Task runner evicted expired cache entries
Well...i will stop the restart after the log rotate today.
>>
>> IIRC all of the shunted messages that Stephen looked at with qfiles
> were those special digest messages (ie, message component empty,
>> pointer to lists/$LIST/something.mmdf in the msg_data component). So
>> something is going wrong in the to-digest handler.
>
>
>And for every one of those shunted messages there should be an exception with traceback logged in mailman.log. Those tracebacks should be helpful.
If there were any. Maybe the "debug" level should be "info". But for which logs?
Maybe the restart at night after the lograte maybe the issue.
--
Stephan Krinetzki
IT Center
Gruppe: Anwendungsbetrieb und Cloud
Abteilung: Systeme und Betrieb
RWTH Aachen University
Seffenter Weg 23
52074 Aachen
Tel: +49 241 80-24866
Fax: +49 241 80-22134
krinetzki(a)itc.rwth-aachen.de
www.itc.rwth-aachen.de
Social Media Kanäle des IT Centers:
https://blog.rwth-aachen.de/itc/
https://www.facebook.com/itcenterrwth
https://www.linkedin.com/company/itcenterrwth
https://twitter.com/ITCenterRWTH
https://www.youtube.com/channel/UCKKDJJukeRwO0LP-ac8x8rQ
-----Original Message-----
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Saturday, August 2, 2025 6:11 PM
To: Stephen J. Turnbull <steve(a)turnbull.jp>
Cc: mailman-users(a)mailman3.org
Subject: [MM3-users] Re: Held messages not delivered after approval
On 8/2/25 01:51, Stephen J. Turnbull wrote:
>
> IIRC all of the shunted messages that Stephen looked at with qfiles
> were those special digest messages (ie, message component empty,
> pointer to lists/$LIST/something.mmdf in the msg_data component). So
> something is going wrong in the to-digest handler.
And for every one of those shunted messages there should be an exception with traceback logged in mailman.log. Those tracebacks should be helpful.
> The number of .tmp files lying around bothers me. AFA grep CS, the
> only place that can happen is in switchboard.py:136 in .enqueue:
>
> with open(tmpfile, 'wb') as fp:
> fp.write(msgsave)
> pickle.dump(data, fp, protocol)
> fp.flush()
> os.fsync(fp.fileno())
> os.rename(tmpfile, filename)
>
> where `msgsave` is already a pickled object. So either pickle.dump is
> choking on something in data (the metadata, which I believe is all
> primitive Python data types), or something (OOM kill?) is happening at
> the OS level. A crash in pickle.dump should leave an exception log
> and backtrace in the logs.
>
> AFAIK, Mailman does not clean up .tmp files at startup, right?
That is correct. The *.pck.tmp file is created by the above code and immediately after writing is renamed to *.pck. It is done this way to prevent another process picking up a partially written *.pck.
If a *.pck.tmp file is somehow left behind, it is never looked at or deleted by any Mailman code.
--
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/
Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
This message sent to krinetzki(a)itc.rwth-aachen.de
1 year, 3 months
[MM3-users] Re: Fwd: Re: Removing a mail addresses and users
by Abhilash Raj
On Sun, Jun 14, 2020, at 12:45 PM, Allan Hansen wrote:
> All,
>
> Thank you for your thoughtful responses to my call for a removal of the
> core vs. Django disconnect. From your responses it appears that my
> suggestion my issues were caused by the Mailman Core was not based in
> reality. Instead, the issue is how Postorius interacts with the Core.
> My apologies for overreaching, as the cause of my issues is not an
> issue to me. Keeping Core a simple list manager is fine, if Postorius
> is easy to use and does the expected.
>
> As a Subscriber, you are able to do switch emails in subscriptions from
> your options page. The URL to which is displayed in the List's Summary
> page when you are logged in. Yes, it requires an approval if the list's
> settings are set to moderate but that is going to be fixed, see this
> issue[1]. It is quite simple IMO to fix this one, if someone wants to
> take this up.
>
> Well, it’s more than that. Based on the current setup, I have asked my
> subscribers who want to change their subscription addresses to:
> a. Create an account if you do not already have one.
> b. Go to the user profile page.
> c. Select ‘E-mail Addresses’.
> d. Add the new e-mail to the user profile.
> e. Wait for the verification notice and verify the new address.
> e1. If it does not show send email to hansen(a)rc.org
> <mailto:hansen@rc.org> to get the email verified manually.
> f. Sign in to the account again and to the user profile (or refresh
> the page if not signed out).
> g. Select the new address as the primary address.
> h. Click on ‘Manage Lists’
> i. For each list you are subscribed to:
> i1. Select the list
> i2. Click ‘List Options Page.’
> i3. Pull down the ’Select Email’ menu.
> i4 Select your new email.
> i5. Press ‘Change email used for subscription.
> i6. When the moderator contacts you, explain that you are just
> changing your email.
> i6.1. If the moderator is late, send a reminder or send email to
> hansen(a)rc.org <mailto:hansen@rc.org> to bypass the moderator.
So, a-f is something we still always want to keep since we aren't going to deal with un-verified email addresses.
Now, Primary Address is something interesting in Mailman 3, which wasn't utilized until now in Postorius. I recently added a new feature to Postorius which allows users to subscribe via their Primary Address and it switches the delivery address when you switch your primary address. You can play with how it looks at https://lists.mailman3.org (Mailman instance serving this list) where you will see "Primary Address (myprimaryemail(a)example.com)" as an option when subscribing/switching address.
This is still somewhat new feature and there are gaps to it, but it will grow over time. For example, as as admin, you can only subscribe a User's address and not their Primary Address (from Mass Subscription page, or through the CLI commands).
As a User, you are able to switch to using your primary address and then every time you switch your primary address, all your subscription shifts to that new address without any extra steps.
Also, I just created a fix for i6[1], so switching email addresses won't require approvals anymore. I am still debating if this should be configurable by list owners.
[1]: https://gitlab.com/mailman/postorius/-/merge_requests/532
>
> Most people choke on these instructions, so I have unfortunately
> resorted to just asking them to subscribe the new address and forget
> about the old. This is not good for our reputation when the old
> addresses start bouncing. So, in more detail:
>
> I would like to ask my subscribers who want to change their address to:
> a. Create an account if you did not already have one.
> b. Go to the user profile page.
> c. Select ‘E-mail Addresses’.
> d. Select an existing address e-mail listed the user profile.
> e. Press new button ‘Change address’.
> f. When page refreshes, enter the new e-mail address.
> g. Press ‘Apply.'
> d. Wait for the verification notice.
> d1. If it does not show send email to hansen(a)rc.org
> <mailto:hansen@rc.org> to get the email verified manually.
>
> In other words, in addition to ‘Make Primary’ and ‘Re-send
> Verification’ and ‘Remove’, another button says: ‘Change Address’ or’
> ‘Replace Address’ or some such.
>
> This button brings up another page that looks the same, but instead of
> ‘Add E-mail Adress’ is says : Enter New E-mail Address’
> and instead of ‘Add E-mail’ is says: ‘Apply’. Then the page refreshes
> back to the original page, but the new address is now
> replacing the old address. Optionally, it can show the old address
> still with a ‘pending change’ until verification.
I am still thinking about a few implementation details of this one, I've created an issue[2]
[2]: https://gitlab.com/mailman/postorius/-/issues/435
I am thinking we could minimize changes by retaining the same workflow for adding and verifying new address, but add a new workflow of some sort to switch subscriptions to a new address with a single button click. This should simplify the Loop of going to each option page and switching addresses. Finally, the old address can be removed.
Another train of thought is that when you Delete your email address, you get an option to switch all the subscriptions on that address to some other address. I could do this by adding a page after you click on "Remove" button. Although, this would restrict the ability to switch subscriptions by only deleting the original one, which I don't want.
Maybe I'll end up implementing both of these.
What do others think about this?
>
> Further, when the new address is verified, all lists get updated with
> the new address replacing the old
> address and all settings associated with the old address are now
> associated with the new address. No moderator or admin
> involvement needed (other than d1).
The fix[1] I mentioned above should already resolve this issue.
>
> You are able to sign in via web and manage your email and
> subscriptions. The preferences also work exactly how you described
> above where the lower level override the default and/or upper level
> settings.
>
> To some extent that is true, Abhilash, and I appreciate that. The above
> (address change) is a missing piece in that picture and I look forward
> to seeing it added, if you have time.
>
> Yours,
>
> Allan Hansen
> hansen(a)rc.org
>
>
>
>
> > On Jun 14, 2020, at 0:19 , Stephen J. Turnbull <turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
> >
> > Mark Sapiro writes:
> >
> >> Then the people who developed the web based management UI (Postorius)
> >> and archive UI (HyperKitty) chose to develop those within a Django
> >> framework and Django has its own concept of User separate from Mailman
> >> Core and that is where the disconnect occurs.
> >>
> >> It's not that Mailman Core lacks what you want. It's that Django doesn't
> >> use it.
> >
> > I think that's mostly right, in terms of the features that users miss.
> > However, as far as I know, Mailman core does lack facilities for
> > identification, authentication, and authorization of connections to
> > the REST API. And that means that the front ends have to handle
> > this. I would guess that's why the web interfaces are built around
> > Django user authentication.
> >
> > I think it would be possible to have somewhat tighter integration
> > between the Django "web users" and the Mailman core User objects, but
> > it's not necessarily going to be trivial.
> >
> > I see that Abhilash is pretty optimistic, but I fear this this is
> > going to be a long-tail situation where we're going to be seeing core
> > user vs. web-gui user integration issues in 2030 (maybe by then only 1
> > every 450 days ;-). I have some ideas, maybe in a couple weeks I can
> > sketch them out.
> >
> > Steve
> > _______________________________________________
> > 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/
>
> _______________________________________________
> 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)
6 years, 4 months
[MM3-users] Re: Held messages not delivered after approval
by Krinetzki, Stephan
>The django-admin commands aren't directly related, I'm going to ignore them for now. The only thing I know for *sure* runs at midnight daily is "mailman digests --send". On my Debian Linode, the default (which I left alone) is for logrotate's cron job to live in >/etc/cron.daily, which is run at 06:25 daily using "run-parts". (This is quite a common setup on Linux.) So we need to know where the logrotate job is specified (crontab, cron.d, or cron.daily) and at what time (@daily =
>midnight) to be sure that the mailman restart is related to the bad and shunt queue files.
The logrotate is executed by a system Timer (Rocky 9 OS btw) and is planned for:
Tue 2025-08-05 00:00:00 CEST 7h left Mon 2025-08-04 00:00:00 CEST 16h ago logrotate.timer logrotate.service
So every day at midnight.
>That is not normal. Your control process is crashing every 15-20 seconds. I think it probably is a problem with the digests, not with the restart. What appears to be happening is that the digest process gets triggered, it creates a message and queues it, then fails to >send it so nastily that Mailman restarts (or stops and something like systemd restarts it). On restart, Mailman finds the digest message (probably in the out queue), tries to send it again, crashes again, and eventually decides that isn't going to work, sends it to bad, >and stops crashing.
I saw this but I don't have any idea how this happens. Currently there are ~42 Mails after 'mailman unshunt' and I think, mailman loops over them (queue doesn't get shorter). But mails are delivered for a lot of lists.
>According to the config you posted earlier, you're sending most channels to separate log files. Have you checked any of them other than mailman.log and smtp.log? Also, note that httpd.log and error.log are normally used by Mailman core's gunicorn (ie, the REST >API). I'm not sure what effect directing Mailman's error channel to error.log will have, but I suspect you could end up losing logs or having text from different sources mixed.
So I should update my logging config. Do you have a good example or maybe even the dist?
--
Stephan Krinetzki
IT Center
Gruppe: Anwendungsbetrieb und Cloud
Abteilung: Systeme und Betrieb
RWTH Aachen University
Seffenter Weg 23
52074 Aachen
Tel: +49 241 80-24866
Fax: +49 241 80-22134
krinetzki(a)itc.rwth-aachen.de
www.itc.rwth-aachen.de
Social Media Kanäle des IT Centers:
https://blog.rwth-aachen.de/itc/
https://www.facebook.com/itcenterrwth
https://www.linkedin.com/company/itcenterrwth
https://twitter.com/ITCenterRWTH
https://www.youtube.com/channel/UCKKDJJukeRwO0LP-ac8x8rQ
-----Original Message-----
From: Stephen J. Turnbull <steve(a)turnbull.jp>
Sent: Monday, August 4, 2025 1:51 PM
To: Krinetzki, Stephan <Krinetzki(a)itc.rwth-aachen.de>
Cc: Mark Sapiro <mark(a)msapiro.net>; mailman-users(a)mailman3.org
Subject: RE: [MM3-users] Re: Held messages not delivered after approval
Krinetzki, Stephan writes:
> /opt/mailman/var/queue/bad:
> -rw-rw---- 1 mailman mailman 221723 Aug 1 17:26 1754061973.4885209+46b1ae3716439bf3ef98090296dfce0320fc3017.psv
This one might be spam, but it's weird that it managed to get pickled but can't be read.
> -rw-rw---- 1 mailman mailman 32912 Aug 2 00:00 1754085602.191851+3576cf33232db110fa7761233f67245564553652.psv
> -rw-rw---- 1 mailman mailman 416 Aug 2 00:00 1754085604.0204346+ad485da0c45cb0ad17a5dc42613c3eb3f313c20e.psv
> -rw-rw---- 1 mailman mailman 1407649 Aug 2 00:00 1754085623.275817+f23139c8127c454b4fe65453af3db18e558b0e87.psv
> -rw-rw---- 1 mailman mailman 1407634 Aug 2 00:02 1754085729.3529432+1643f907bac39a22a7d71e50b031c4f8a574082c.psv
I have no clue about these four (see below for comments on cron).
> /opt/mailman/var/queue/out:
Looks normal for your configuration.
> /opt/mailman/var/queue/shunt:
I don't understand why on August 1st you see shunts at intervals throughout the working day, then suddenly on the 2nd they all happen at midnight.
Have you tried "mailman unshunt"? If not what happens when you do?
If the shunts are happening because of the restart, then they should go through on unshunt. If they don't, there's some other problem.
You can also try renaming the .psvs to .pck, and check the metadata in the pickle for which queue to move it to. That's more risky, and you shouldn't try it if the output of "mailman qfile" isn't as expected.
> I don't see here a problem. But the timestamp seems to be related > to the restart of mailman. Can I skip this in the logrotate?
As I mentioned before, there was (and may still be) a bug in Mailman's logging such that Mailman fails to reopen the logs, and typically after a couple of days you end up with a nameless open file collecting the logs and uselessly consuming more and more disk space. The restart is intended to work around this problem.
> Btw: The crontab is the following:
> @daily mailman cd /opt/mailman; source /opt/mailman/mailman-venv/bin/activate; /opt/mailman/mailman-venv/bin/mailman digests --send > /dev/null 2>&1
The django-admin commands aren't directly related, I'm going to ignore them for now. The only thing I know for *sure* runs at midnight daily is "mailman digests --send". On my Debian Linode, the default (which I left alone) is for logrotate's cron job to live in /etc/cron.daily, which is run at 06:25 daily using "run-parts". (This is quite a common setup on Linux.) So we need to know where the logrotate job is specified (crontab, cron.d, or cron.daily) and at what time (@daily =
midnight) to be sure that the mailman restart is related to the bad and shunt queue files.
> So i checked the mailman.log:
>
> [2025-08-01 00:00:02 +0200] [324558] [INFO] Shutting down: Master > [2025-08-01 00:00:23 +0200] [567059] [INFO] Shutting down: Master > [2025-08-01 00:00:42 +0200] [567206] [INFO] Shutting down: Master > [2025-08-01 00:01:01 +0200] [567278] [INFO] Shutting down: Master > [2025-08-01 00:01:34 +0200] [567379] [INFO] Shutting down: Master > [2025-08-01 00:01:52 +0200] [567516] [INFO] Shutting down: Master > [2025-08-01 00:02:11 +0200] [567646] [INFO] Shutting down: Master
That is not normal. Your control process is crashing every 15-20 seconds. I think it probably is a problem with the digests, not with the restart. What appears to be happening is that the digest process gets triggered, it creates a message and queues it, then fails to send it so nastily that Mailman restarts (or stops and something like systemd restarts it). On restart, Mailman finds the digest message (probably in the out queue), tries to send it again, crashes again, and eventually decides that isn't going to work, sends it to bad, and stops crashing.
There's normally lot more chatter at startup and shutdown, for example about runners being started. That's probably because you have that redirected to a separate log file, or maybe that information doesn't get output with a log level of "warn". Maybe the crash information is in the runner.log.
According to the config you posted earlier, you're sending most channels to separate log files. Have you checked any of them other than mailman.log and smtp.log? Also, note that httpd.log and error.log are normally used by Mailman core's gunicorn (ie, the REST API). I'm not sure what effect directing Mailman's error channel to error.log will have, but I suspect you could end up losing logs or having text from different sources mixed.
I haven't thought about it carefully, but I would have separate logs for bounces, subscriptions, smtp, and nntp because they are quite separate. Everything else would go into mailman.log, because that makes it easier to trace a single message through the whole process.
Until you know that you don't need it, I would have most channels at the info level. The debug level is almost never useful unless you're a developer trying to fix something (vs a troubleshooter trying to diagnose the problem). The logs compress very well (often 70% reduction), so it's generally a good idea to include the extra information at info level. Remember, the real explosion is logging is that outgoing mail gets logged up to 43k times per incoming post. Of course you can do quite a bit better if you can sacrifice the personalized footers, but most sites don't anymore because there are strict rules about convenience of unsubscription.
> Well...i will stop the restart after the log rotate today.
You can do that if you want, but it's likely that you'll end up losing logs.
> >And for every one of those shunted messages there should be an > >exception with traceback logged in mailman.log. Those tracebacks > >should be helpful.
>
> If there were any. Maybe the "debug" level should be "info". But > for which logs?
Setting the channel to "debug" gives maximum verbosity, and unhandled exceptions are logged at "warn" or "error" level (maximum severity).
> Maybe the restart at night after the lograte maybe the issue.
Not with Mailman bouncing up and down pretty much as fast as it can.
The restart can only account for one restart, the other 6 were caused by something else.
--
GNU Mailman consultant (installation, migration, customization)
Sirius Open Source https://www.siriusopensource.com/
Software systems consulting in Europe, North America, and Japan
1 year, 3 months
[MM3-users] Re: MTA setup
by Arte Chambers
Update: After changing the DMARC settings messages are now going through to
my inbox, however they are still not being archived.
Thank you,
Paul 'Arte Chambers' Robey
502-408-6922
On Mon, Dec 23, 2024 at 12:01 PM Arte Chambers <paul.m.robey(a)gmail.com>
wrote:
> Output from mailman log after sending a test message to the list:
>
> Dec 23 16:52:23 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:52:23 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:52:23 2024 (684048) Could not archive the message with id <
> CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>
> Dec 23 16:52:23 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message <
> CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>)
> Dec 23 16:52:23 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:52:23 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:52:23 2024 (684058) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/urls:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
>
>
> I sent another test after changing the DMARC settings for the list
> mailman.log:
>
> Dec 23 16:58:48 2024 (684052) ACCEPT:
> <CAM05vAcs3mL2MMX_NNsrHHyLz8p_tTvCHRRiROCgt=U5Oi6x5w(a)mail.gmail.com>
> Dec 23 16:58:49 2024 (684063) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/urls:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:49 2024 (684063) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/urls:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:50 2024 (684058) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/urls:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:50 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:50 2024 (684048) Could not archive the message with id
> <CAPesOD2KavP948Oq6n9mvYF9WW3-sXRRTxAMm2roMgzL+=s8Dw(a)mail.gmail.com>
> Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message
> <CAPesOD2KavP948Oq6n9mvYF9WW3-sXRRTxAMm2roMgzL+=s8Dw(a)mail.gmail.com>)
> Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:50 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:50 2024 (684048) Could not archive the message with id
> <CAM05vAcN5RZ3Mzg-xXd-u=X7_inDULsBR8A=ehPwk5oy+y+ZLg(a)mail.gmail.com>
> Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message
> <CAM05vAcN5RZ3Mzg-xXd-u=X7_inDULsBR8A=ehPwk5oy+y+ZLg(a)mail.gmail.com>)
> Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:50 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:50 2024 (684048) Could not archive the message with id <
> CAM05vAfoHZmvu42wojk5SpCeynQs4rM01iKw+U5KpWMChHXGWw(a)mail.gmail.com>
> Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message <
> CAM05vAfoHZmvu42wojk5SpCeynQs4rM01iKw+U5KpWMChHXGWw(a)mail.gmail.com>)
> Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:50 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:50 2024 (684048) Could not archive the message with id <
> CAM05vAdx7VGPpApAEtF_J8RW2eXBoS6D-_6BCp8wKGUF5_Cyyw(a)mail.gmail.com>
> Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message <
> CAM05vAdx7VGPpApAEtF_J8RW2eXBoS6D-_6BCp8wKGUF5_Cyyw(a)mail.gmail.com>)
> Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:50 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:50 2024 (684048) Could not archive the message with id
> <CAPesOD1y0fEaG=GFodz=Lgs1m_hqRErPnQcpXCNtKsBbJ=BJ7Q(a)mail.gmail.com>
> Dec 23 16:58:50 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message
> <CAPesOD1y0fEaG=GFodz=Lgs1m_hqRErPnQcpXCNtKsBbJ=BJ7Q(a)mail.gmail.com>)
> Dec 23 16:58:50 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:50 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:51 2024 (684058) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/urls:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:51 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:51 2024 (684048) Could not archive the message with id
> <CAM05vAdLwKNNLgFGMKPm_yv6YykcL=SynJSDYf70hyGufryyCw(a)mail.gmail.com>
> Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message
> <CAM05vAdLwKNNLgFGMKPm_yv6YykcL=SynJSDYf70hyGufryyCw(a)mail.gmail.com>)
> Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:51 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:51 2024 (684048) Could not archive the message with id
> <CAM05vAcG99mHboPkZ82q=+d+uB3L3+iEmhwSCNAVFwSua80LoQ(a)mail.gmail.com>
> Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message
> <CAM05vAcG99mHboPkZ82q=+d+uB3L3+iEmhwSCNAVFwSua80LoQ(a)mail.gmail.com>)
> Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:51 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:51 2024 (684048) Could not archive the message with id <
> CAPesOD1ZJG3zyEagCqYd+nce76g_hbwJK9wQF51Pi6iyJhBKvA(a)mail.gmail.com>
> Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message <
> CAPesOD1ZJG3zyEagCqYd+nce76g_hbwJK9wQF51Pi6iyJhBKvA(a)mail.gmail.com>)
> Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:51 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:51 2024 (684048) Could not archive the message with id <
> CAM05vAdR3n-zhrLHCPhzi4xHOkLsmTUUgXnwgSwJM1oao2j3tg(a)mail.gmail.com>
> Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message <
> CAM05vAdR3n-zhrLHCPhzi4xHOkLsmTUUgXnwgSwJM1oao2j3tg(a)mail.gmail.com>)
> Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:51 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:51 2024 (684048) Could not archive the message with id <
> CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>
> Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message <
> CAM05vAcLAhTzjdcFKsp6i0RSKpfhQ9H_KpOLJyVmNZy4KcaWzQ(a)mail.gmail.com>)
> Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:51 2024 (684048) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/archive:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
> Dec 23 16:58:51 2024 (684048) Could not archive the message with id
> <CAM05vAcs3mL2MMX_NNsrHHyLz8p_tTvCHRRiROCgt=U5Oi6x5w(a)mail.gmail.com>
> Dec 23 16:58:51 2024 (684048) archiving failed, re-queuing (mailing-list
> testing.list.louisvillecommunitygrocery.com, message
> <CAM05vAcs3mL2MMX_NNsrHHyLz8p_tTvCHRRiROCgt=U5Oi6x5w(a)mail.gmail.com>)
> Dec 23 16:58:51 2024 (684048) Exception in the HyperKitty archiver:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> Dec 23 16:58:51 2024 (684048) Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 158, in _archive_message
> url = self._send_message(mlist, msg)
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> File
> "/opt/mailman/venv/lib/python3.12/site-packages/mailman_hyperkitty/__init__.py",
> line 228, in _send_message
> raise ValueError(result.text)
> ValueError:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
>
> Dec 23 16:58:51 2024 (684058) HyperKitty failure on
> http://127.0.0.1:8000/archives/api/mailman/urls:
> <!doctype html>
> <html lang="en">
> <head>
> <title>Bad Request (400)</title>
> </head>
> <body>
> <h1>Bad Request (400)</h1><p></p>
> </body>
> </html>
> (400)
>
> Thank you,
> Paul 'Arte Chambers' Robey
> 502-408-6922
>
>
> On Sun, Dec 22, 2024 at 11:31 PM Mark Sapiro <mark(a)msapiro.net> wrote:
>
>> On 12/22/24 20:10, Arte Chambers via Mailman-users wrote:
>> > I'm not sure how to check mailmans shunt queue.
>>
>> `ls var/queue/shunt`
>>
>> > I'm not seeing any errors in mailman logs
>> >
>> > There are several .pck files in Mailman's
>> > var/archives/hyperkitty/spool/
>> These are message that failed to archive. There should be messages in
>> mailman.log about these failures indicating what the issue is.
>>
>> > I can send email from the server using mail utilities as long as the
>> "from
>> > email address" contains the server's domain name. I also notice that in
>> > this MM3-Users list the "from" email shows senders(a)emailaddress.com VIA
>> > mailman3.org. I'm wondering if I've missed something that would allow
>> my
>> > server to behave this way.
>>
>>
>> In the list's Settings -> DMARC Mitigations set DMARC mitigation action
>> to Replace From: with list address and set DMARC Mitigate
>> unconditionally to Yes.
>>
>> --
>> 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/
>> Archived at:
>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>>
>> This message sent to paul.m.robey(a)gmail.com
>>
>
1 year, 10 months
[MM3-users] Re: A little stuck with installation of MM3 - ModuleNotFoundError: No module named 'flufl.lock'
by Odhiambo Washington
On Sun, 26 Jul 2020 at 00:17, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 7/25/20 12:54 PM, Odhiambo Washington wrote:
> >
> > Finally, I have adapted your init script to get some rudimentary one
> that I
> > could use on FreeBSD.
> > I have to change /opt/mailman to be owned by mailman3:mailman3 (because I
> > have "live" MLs on this server, using mailman-2.1.34.
> > I am not sure if they can co-exist. I suppose they could, but what might
> be
> > the security implication, if any??
>
> I manage more than one server that supports both Mailman 2.1 and Mailman
> 3 running as user `mailman`. I'm not aware of any security issues.
>
>
> > This is what the init script looks like (rudimentary!!):
> > (venv) [root@gw /usr/local/etc/rc.d]# less mailman3
> > ### BEGIN INIT INFO
> > # Provides: GNU Mailman
> > # Short-Description: Mailman3 Service
> > # Description: service control for Mailman3
> > ### END INIT INFO
> >
> >
> PATH=/opt/mailman/mm/bin:/opt/mailman/mm/venv/bin:/usr/sbin:/usr/bin:/bin:/sbin:
> > DESC="GNU Mailman service"
> > DAEMON=/opt/mailman/mm/bin/mailman
> > NAME=mailman
> > USER=mailman3
> > GROUP=mailman3
> >
> > # Needed by click
> > export LANG=en_US.UTF-8
> >
> > # Exit if the package is not installed
> > [ -x "$DAEMON" ] || exit 0
> >
> > # Load the VERBOSE setting and other rcS variables
> > #. /lib/init/vars.sh
> >
> > # Define LSB log_* functions.
> > # Depend on lsb-base (>= 3.2-14) to ensure that this file is present
> > # and status_of_proc is working.
> > #. /lib/lsb/init-functions
> >
> > case "$1" in
> > start)
> > [ "$VERBOSE" != no ] && echo "Starting $DESC" "$NAME"
> > # use --force to remove a stale lock.
> > /usr/local/bin/sudo -u $USER $DAEMON start --force
>
> T don't recommend using --force in init scripts. It *shouldn't* matter
> because even with --force the master shouldn't break the lock if the pip
> that set it still exists, but I prefer not to use it.
>
>
> > ;;
> > stop)
> > [ "$VERBOSE" != no ] && echo "Stopping $DESC" "$NAME"
> > /usr/local/bin/sudo -u $USER $DAEMON stop
> > ;;
> > status)
> > /usr/local/bin/sudo -u $USER $DAEMON status
> > ;;
> > reopen)
> > /usr/local/bin/sudo -u $USER $DAEMON reopen
> > ;;
> > restart)
> > log_daemon_msg "Restarting $DESC" "$NAME"
> > /usr/local/bin/sudo -u $USER $DAEMON restart
> > ;;
> > *)
> > echo "Usage: $SCRIPTNAME {start|stop|status|reopen|restart}" >&2
> > exit 3
> > ;;
> > esac
> >
> > It does start mailman3 for sure, but also complains after a few seconds
> > with the message:
> >
> > (venv) [root@gw /usr/local/etc/rc.d]#
> >
> */opt/mailman/mm/venv/lib/python3.7/site-packages/mailman-3.3.2b1-py3.7.egg/mailman/rest/wsgiapp.py:180:
> > DeprecatedWarning: Call to deprecated function __init__(...). API class
> may
> > be removed in a future release, use falcon.App instead.*
> > * **kws)*
>
>
> Hmm... strange, My various MM 3 installs are running falcon 1.4.0, 2.0.0
> and 3.0.0a1 and I don't see this warning, but it is only a deprecation
> warning. It doesn't mean it won't work.
>
>
> > But:
> >
> > (venv) [root@gw /usr/local/etc/rc.d]# ps ax | grep mailman
> ...
>
> It seems Mailman core and the rest runner and its workers are all running.
>
>
> >
> > Assuming that I am using mod_wsgi with Apache, and that I have configured
> > apache right using
> >
> https://wiki.list.org/DOC/Mailman%203%20installation%20experience?action=At…
> > ..
> > should I be able to access the MM3 web UI??
>
> Yes, I think so.
>
>
> > At that point, I am feeling somewhat confused as to what to try next.
> >
> > (venv) [root@gw /opt/mailman/mm/var/logs]# less mailman.log
> > Jul 25 22:53:16 2020 (40670) Master started
> > Jul 25 22:53:18 2020 (42036) bounces runner started.
> > Jul 25 22:53:18 2020 (45205) out runner started.
> > Jul 25 22:53:19 2020 (41191) archive runner started.
> > Jul 25 22:53:19 2020 (46670) retry runner started.
> > Jul 25 22:53:19 2020 (44567) nntp runner started.
> > Jul 25 22:53:19 2020 (43069) in runner started.
> > Jul 25 22:53:19 2020 (46960) virgin runner started.
> > Jul 25 22:53:20 2020 (45720) pipeline runner started.
> > Jul 25 22:53:20 2020 (47326) digest runner started.
> > Jul 25 22:53:20 2020 (43755) lmtp runner started.
> > Jul 25 22:53:20 2020 (45922) rest runner started.
> > [2020-07-25 22:53:20 +0300] [45922] [INFO] Starting gunicorn 20.0.4
> > [2020-07-25 22:53:20 +0300] [45922] [INFO] Listening at:
> > http://127.0.0.1:8001 (45922)
> > [2020-07-25 22:53:20 +0300] [45922] [INFO] Using worker: sync
> > [2020-07-25 22:53:20 +0300] [54732] [INFO] Booting worker with pid: 54732
> > [2020-07-25 22:53:20 +0300] [55467] [INFO] Booting worker with pid: 55467
> > Jul 25 22:53:21 2020 (42743) command runner started.
>
>
> The above is all fine, but it is just Mailman core.
>
>
> > How do I access the web UI for MM3 now?
>
>
> The Apache config points to /opt/mailman/mm/wsgi.py, a sampole of which
> is at
> <
> https://wiki.list.org/DOC/Mailman%203%20installation%20experience?action=At…
> >.
> Do you have that?
>
Yes, I have that file.
> If you installed the Apache config literally, the location for Mailman 3
> is defined by
> <
> https://wiki.list.org/DOC/Mailman%203%20installation%20experience?action=At…
> >
> and the URL would be http(s)://your.server/mm3 - have you tried that?
>
>
There is still some confusion on my part about the directives in the file
so allow me to seek some clarifications.
The following are the contents of a file I have created and placed in my
Apache Includes/ directory.
I was hoping that with it, I can now access http://lists.my.server/mm3 and
get the UI.
<CUT>
# Global section
WSGIDaemonProcess mailman-web display-name=mailman-web
maximum-requests=1000 umask=0002 user=mailman3 \
group=mailman3
python-path=/opt/mailman/mm/venv/lib/python3.7/site-packages:/opt/mailman/mm/venv/lib/python3.7
\
python-home=/opt/mailman/mm/venv home=/opt/mailman/mm/var
WSGIRestrictSignal Off
<VirtualHost *:80>
ServerName lists.my.server
ServerAdmin odhiambo(a)gmail.com
# (I'm not sure that WSGIRestrictSignal Off is required, but it was in the
# provided example so I kept it. I also made changes to WSGIDaemonProcess
# based on my own mod_wsgi experience elsewhere.)
ErrorLog /var/log/myserver-error.log
LogLevel debug
# This goes in the VirtualHost block for the domain.
# Mailman 3 stuff
Alias /static "/var/spool/mailman-web/static" *<----- Where is this
directory supposed to be and what/who creates it and with what permissions?*
<Directory "/var/spool/mailman-web/static">
Require all granted
</Directory>
WSGIScriptAlias /mm3 /opt/mailman/mm/wsgi.py
<Directory "/opt/mailman/mm/">
<Files wsgi.py>
Order deny,allow
Allow from all
Require all granted
</Files>
WSGIProcessGroup mailman-web
</Directory>
</VirtualHost>
</CUT-HERE>
I end up with an "Internal server error" and from the error log I see:
[Sun Jul 26 12:04:43.444127 2020] [wsgi:info] [pid 6444] [remote
197.232.81.246:53383] mod_wsgi (pid=6444, process='mailman-web',
application='lists.my.server|/mm3'): Loading Python script file
'/opt/mailman/mm/wsgi.py'.
[Sun Jul 26 12:04:44.091922 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] mod_wsgi (pid=6444): Failed to exec Python script
file '/opt/mailman/mm/wsgi.py'.
[Sun Jul 26 12:04:44.092006 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] mod_wsgi (pid=6444): Exception occurred processing
WSGI script '/opt/mailman/mm/wsgi.py'.
[Sun Jul 26 12:04:44.092940 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] Traceback (most recent call last):
[Sun Jul 26 12:04:44.093019 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File "/opt/mailman/mm/wsgi.py", line 38, in <module>
[Sun Jul 26 12:04:44.093029 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] application = get_wsgi_application()
[Sun Jul 26 12:04:44.093048 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/core/wsgi.py",
line 12, in get_wsgi_application
[Sun Jul 26 12:04:44.093057 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] django.setup(set_prefix=False)
[Sun Jul 26 12:04:44.093071 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/__init__.py",
line 19, in setup
[Sun Jul 26 12:04:44.093090 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] configure_logging(settings.LOGGING_CONFIG,
settings.LOGGING)
[Sun Jul 26 12:04:44.093108 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/conf/__init__.py",
line 76, in __getattr__
[Sun Jul 26 12:04:44.093117 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] self._setup(name)
[Sun Jul 26 12:04:44.093130 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/conf/__init__.py",
line 63, in _setup
[Sun Jul 26 12:04:44.093138 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] self._wrapped = Settings(settings_module)
[Sun Jul 26 12:04:44.093158 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File
"/opt/mailman/mm/venv/lib/python3.7/site-packages/Django-3.0.8-py3.7.egg/django/conf/__init__.py",
line 142, in __init__
[Sun Jul 26 12:04:44.093166 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] mod =
importlib.import_module(self.SETTINGS_MODULE)
[Sun Jul 26 12:04:44.093179 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File
"/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
[Sun Jul 26 12:04:44.093187 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] return _bootstrap._gcd_import(name[level:],
package, level)
[Sun Jul 26 12:04:44.093210 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File "<frozen importlib._bootstrap>", line 994, in
_gcd_import
[Sun Jul 26 12:04:44.093224 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File "<frozen importlib._bootstrap>", line 971, in
_find_and_load
[Sun Jul 26 12:04:44.093239 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] File "<frozen importlib._bootstrap>", line 953, in
_find_and_load_unlocked
[Sun Jul 26 12:04:44.093265 2020] [wsgi:error] [pid 6444] [remote
197.232.81.246:53383] ModuleNotFoundError: No module named 'settings'
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", grep ^[^#] :-)
6 years, 3 months
[MM3-users] Re: error changed after restart
by Guillermo Hernandez (Oldno7)
On 7/2/21 19:04, Abhilash Raj wrote:
>
> On Sun, Feb 7, 2021, at 1:07 AM, Guillermo Hernandez (Oldno7) via Mailman-users wrote:
>> On 6/2/21 21:19, Abhilash Raj wrote:
>>>
>>> On Sat, Feb 6, 2021 at 19:44, Guillermo Hernandez (Oldno7) via
>>> Mailman-users <mailman-users(a)mailman3.org> wrote:
>>>> On 6/2/21 18:08, Abhilash Raj wrote:
>>>>
>>>> On Sat, Feb 6, 2021, at 3:04 AM, Guillermo Hernandez (Oldno7) via
>>>> Mailman-users wrote:
>>>>
>>>> I restarted de server and the error changed. Now the log
>>>> shows "KeyError: 'subscription_mode'":
>>>>
>>>> Did you also restart Mailman Core after the upgrade?
>>>>
>>>> Yes, indeed: I stopped mailman core and all the processes related.
>>>> Did the upgrades. Started all again. Find the errors in the web user
>>>> interface. Stopped all again. Looked for errors in the log. Restarted
>>>> the complete server. Found the second error that this second mail is
>>>> about to. It happens when, in the main page that shows all the lists
>>>> you click to see one of them. It seems to me that it has been
>>>> database structure changes in django that the upgrade is not aware...
>>>> but it's a very long shot from my side.
>>> `subscription_mode` was added in Mailman Core 3.3.2 and it is actually
>>> a derived atrribute and not stored in Database. Mailman's API should be
>>> returning this attribute for each Member, but for some reason it seems
>>> to me like it isn't doing that even though do have Mailman 3.3.3 running
>>> like you said.
>>> If you have Curl installed, can you send me the output of:
>>> $ curl -u <user>:<pass> http://localhost:8001/3.1/members?count=5&page=1
>> This is the output you asked for (it's the same you can see when you try
>> to interact with one list):
>>
>> /usr/local/mailman3 # curl -u XXXXXX:XXXXXX
>> http://localhost:8001/3.1/members?count=5&page=1
>> /usr/local/mailman3 # <html>
>> <head>
>> <title>Internal Server Error</title>
>> </head>
>> <body>
>> <h1><p>Internal Server Error</p></h1>
>>
>> </body>
>> </html>
>>
>> No log entry has been produced...
> This is weird, if you have working Core, then there should be *some* json returned
> from the above command. Do you have the Gunicorn running?
I have the uwsgi approach running...
> What is the
> output of `ps -ef | grep mailman`?
none
but if I do an ps ax | grep mailman it shows
/usr/local/mailman3 # ps ax | grep mailman
26803 - IsJ 0:00.87 /usr/local/bin/python3.7 /usr/local/bin/master
--force -C /usr/local/mailman3/var/et
26834 - SJ 0:07.57 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26835 - IJ 0:05.84 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26836 - SJ 0:07.16 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26837 - SJ 0:08.74 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26838 - SJ 0:03.16 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26839 - SJ 0:07.07 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26840 - SJ 0:08.12 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26841 - SJ 0:09.07 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26842 - SJ 0:07.45 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26843 - IJ 0:00.95 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26844 - SJ 0:07.27 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26845 - SJ 0:07.69 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26859 - IJ 0:01.01 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
26860 - IJ 0:05.75 /usr/local/bin/python3.7 /usr/local/bin/runner -C
/usr/local/mailman3/var/etc/mailma
50153 - IsJ 0:00.16 /usr/local/bin/uwsgi --ini
/usr/local/mailman3/uwsgi.ini
50481 2 S+J 0:00.00 grep mailman
26808 1 SJ 0:02.09 /usr/local/bin/uwsgi --ini
/usr/local/mailman3/uwsgi.ini
26832 1 IJ 0:00.00 /usr/local/bin/uwsgi --ini
/usr/local/mailman3/uwsgi.ini
> Are you able to run `mailman members` command to list the members of a list?
Yes. All the commands are working as expected.
> Also, how did you actually install Mailman?
Using pip. Here is a detailled post of how I did put all together:
https://forums.FreeBSD.org/threads/mailman-3.61050/post-488128
Thanks for your support
>
> Abhilash.
>
>> TIA.
>>
>>
>>
>>
>>> It should ideally return an output that looks something like shown
>>> here[1]. You
>>> can put the username/password of Core's API server in the above command.
>>> [1]:
>>> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
>>>
>>> Abhilash
>>>> I'm using sqlite as django database and mysql for mailman.
>>>>
>>>> ERROR 2021-02-06 11:47:49,015 26798 django.request Internal
>>>> Server Error:
>>>> /mailman3/mailman3/lists/name_and_domain.of.the.list
>>>> Traceback (most recent call last): File
>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>> line 119, in __getattr__ return self._get(name) File
>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>> line 86, in _get raise KeyError(key) KeyError:
>>>> 'subscription_mode' During handling of the above exception,
>>>> another exception occurred: Traceback (most recent call
>>>> last): File
>>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py",
>>>> line 34, in inner response = get_response(request) File
>>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>>>> line 115, in _get_response response =
>>>> self.process_exception_by_middleware(e, request) File
>>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>>>> line 113, in _get_response response =
>>>> wrapped_callback(request, *callback_args, **callback_kwargs)
>>>> File
>>>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>>>> line 71, in view return self.dispatch(request, *args,
>>>> **kwargs) File
>>>> "/usr/local/lib/python3.7/site-packages/postorius/views/generic.py",
>>>> line 74, in dispatch return super(MailingListView,
>>>> self).dispatch(request, *args, **kwargs) File
>>>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>>>> line 97, in dispatch return handler(request, *args,
>>>> **kwargs) File
>>>> "/usr/local/lib/python3.7/site-packages/postorius/views/list.py",
>>>> line 295, in get member.subscription_mode == File
>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>> line 124, in __getattr__ self.__class__.__name__, name))
>>>> AttributeError: 'Member' object has no attribute
>>>> 'subscription_mode' *********************** some info about
>>>> the installed versions via pip list: pip list | grep django
>>>> django-allauth 0.44.0
>>>> django-appconf 1.0.4
>>>> django-compressor 2.4
>>>> django-extensions 3.1.0
>>>> django-gravatar2 1.4.4
>>>> django-haystack 3.0
>>>> django-mailman3 1.3.5
>>>> django-picklefield 3.0.1
>>>> django-q 1.3.4
>>>> djangorestframework 3.12.2 pip list | grep mailman
>>>> django-mailman3 1.3.5
>>>> mailman 3.3.3
>>>> mailman-hyperkitty 1.1.0
>>>> mailmanclient 3.3.2 pip list | grep postorius
>>>> postorius 1.3.4 On 6/2/21 11:12,
>>>> Guillermo Hernandez (Oldno7) via Mailman-users wrote:
>>>>
>>>> I've just upgrade mailman 3 installation following Mr.
>>>> Sapiro advice: did a pip install --upgrade
>>>> django-mailman3 hyperkitty mailman mailmanclient
>>>> mailman-hyperkitty postorius I did a "python3 manage.py
>>>> migrate" after, too. And all seemed to run well. All the
>>>> lists showed in postorius via web, but when I try to
>>>> accesss into one of them the browser shows an error. In
>>>> the log you can see: *-*-*-*-*-*-* Traceback (most recent
>>>> call last): File
>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>> line 119, in __getattr__ return self._get(name)
>>>> File
>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>> line 86, in _get raise KeyError(key) KeyError:
>>>> 'get_requests_count' .. (And after all the traceback
>>>> lines) AttributeError: 'MailingList' object has no
>>>> attribute 'get_requests_count' *-*-*-*-*-*-*-* The lists
>>>> seem to be distributing messeages well.. but I cannot
>>>> acces via web administration (django/postorius) Can
>>>> anyone point me in the right direction to solve this,
>>>> please? _______________________________________________
>>>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>>>> <mailto:mailman-users@mailman3.org> To unsubscribe send
>>>> an email to mailman-users-leave(a)mailman3.org
>>>> <mailto:mailman-users-leave@mailman3.org>
>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>>>
>>>>
>>>> _______________________________________________ Mailman-users
>>>> mailing list -- mailman-users(a)mailman3.org
>>>> <mailto:mailman-users@mailman3.org> To unsubscribe send an
>>>> email to mailman-users-leave(a)mailman3.org
>>>> <mailto:mailman-users-leave@mailman3.org>
>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>>>
>>>>
>>>> _______________________________________________ Mailman-users mailing
>>>> list -- mailman-users(a)mailman3.org
>>>> <mailto:mailman-users@mailman3.org> To unsubscribe send an email to
>>>> mailman-users-leave(a)mailman3.org
>>>> <mailto:mailman-users-leave@mailman3.org>
>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>
>> _______________________________________________
>> 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/
>>
5 years, 9 months
[MM3-users] Re: Hyperkitty CPU usage
by Abhilash Raj
On Sat, Apr 27, 2019, at 6:22 PM, Alain Kohli wrote:
> I'm running a custom image which is based on an older version of the one
> here: https://github.com/maxking/docker-mailman. I attached it below.
> But I separated postorius and hyperkitty, so hyperkitty is running in
> its own container. I'm deploying the image with a plain 'docker run'
> behind nginx. I made fulltext_index persistent now, but it didn't get
> populated with anything yet. I don't really have an error traceback
> because there is never an error thrown. The only thing with some content
> is uwsgi-error.log, which you can find below. I'm also still getting the
> "A string literal cannot contain NUL (0x00) characters." messages. I
> also noticed that it takes incredibly long for the webinterface to load
> (several minutes) even though there doesn't seem to be any process
> consuming notable resources apart from the minutely job.
>
> Funnily enough, I have the exact same image deployed on a second server
> as well for testing. On that one everything works fine. The only
> difference is that on the problematic one I have a lot more mailing
> lists/archives and that I imported them from mailman2. Could something
> have gone wrong during the import? I used the regular hyperkitty_import
> command.
Yes, this is because `whoosh`, the library set by default to run fulltext
indexing is a pure python implementation and quite slow in busy lists.
We do support more backends though, see [1] for a list of all the supported
search backends. Something like Xapian(C++) or Elasticsearch/Solr(Java)
should be much better in terms of performance.
[1]: https://django-haystack.readthedocs.io/en/master/backend_support.html
>
> uwsgi-error.log:
>
> *** Starting uWSGI 2.0.18 (64bit) on [Sat Apr 27 22:50:17 2019] ***
> compiled with version: 6.4.0 on 27 April 2019 22:48:42
> os: Linux-4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19)
> nodename: hyperkitty.docker
> machine: x86_64
> clock source: unix
> detected number of CPU cores: 4
> current working directory: /home/hyperkitty
> detected binary path: /usr/local/bin/uwsgi
> !!! no internal routing support, rebuild with pcre support !!!
> setgid() to 82
> setuid() to 82
> chdir() to /home/hyperkitty
> your memory page size is 4096 bytes
> detected max file descriptor number: 1048576
> lock engine: pthread robust mutexes
> thunder lock: disabled (you can enable it with --thunder-lock)
> uwsgi socket 0 bound to TCP address 0.0.0.0:8081 fd 8
> uwsgi socket 1 bound to TCP address 0.0.0.0:8080 fd 9
> Python version: 3.6.8 (default, Jan 30 2019, 23:54:38) [GCC 6.4.0]
> Python main interpreter initialized at 0x55dfaa41c980
> python threads support enabled
> your server socket listen backlog is limited to 100 connections
> your mercy for graceful operations on workers is 60 seconds
> [uwsgi-cron] command "./manage.py runjobs minutely" registered as
> cron task
> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" registered
> as cron task
> [uwsgi-cron] command "./manage.py runjobs hourly" registered as cron
> task
> [uwsgi-cron] command "./manage.py runjobs daily" registered as cron task
> [uwsgi-cron] command "./manage.py runjobs monthly" registered as
> cron task
> [uwsgi-cron] command "./manage.py runjobs weekly" registered as cron
> task
> [uwsgi-cron] command "./manage.py runjobs yearly" registered as cron
> task
> mapped 208576 bytes (203 KB) for 4 cores
> *** Operational MODE: threaded ***
> WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter
> 0x55dfaa41c980 pid: 1 (default app)
> *** uWSGI is running in multiple interpreter mode ***
> spawned uWSGI master process (pid: 1)
> spawned uWSGI worker 1 (pid: 40, cores: 4)
> Sat Apr 27 22:50:18 2019 - [uwsgi-cron] running "./manage.py runjobs
> minutely" (pid 45)
> [uwsgi-daemons] spawning "./manage.py qcluster" (uid: 82 gid: 82)
> 22:50:21 [Q] INFO Q Cluster-47 starting.
> 22:50:21 [Q] INFO Process-1:1 ready for work at 59
> 22:50:21 [Q] INFO Process-1:2 ready for work at 60
> 22:50:21 [Q] INFO Process-1:3 ready for work at 61
> 22:50:21 [Q] INFO Process-1:4 ready for work at 62
> 22:50:21 [Q] INFO Process-1:5 monitoring at 63
> 22:50:21 [Q] INFO Process-1 guarding cluster at 58
> 22:50:21 [Q] INFO Process-1:6 pushing tasks at 64
> 22:50:21 [Q] INFO Q Cluster-47 running.
> 22:59:31 [Q] INFO Enqueued 3403
> 22:59:31 [Q] INFO Process-1:1 processing [update_from_mailman]
> 22:59:33 [Q] INFO Processed [update_from_mailman]
> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> quarter_hourly" (pid 73)
> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> hourly" (pid 74)
> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
> with pid 73 exited after 64 second(s)
> 23:01:28 [Q] INFO Enqueued 3404
> 23:01:29 [Q] INFO Process-1:2 processing
> [rebuild_mailinglist_cache_recent]
> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
> 74 exited after 91 second(s)
> Sat Apr 27 23:01:36 2019 - uwsgi_response_write_body_do(): Broken
> pipe [core/writer.c line 341] during GET / (212.203.58.154)
> OSError: write error
> 23:01:36 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
> Sat Apr 27 23:15:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> quarter_hourly" (pid 88)
> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
> with pid 88 exited after 4 second(s)
> 23:28:24 [Q] INFO Enqueued 3405
> 23:28:24 [Q] INFO Process-1:3 processing [update_from_mailman]
> 23:28:25 [Q] INFO Processed [update_from_mailman]
> Sat Apr 27 23:30:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> quarter_hourly" (pid 96)
> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
> with pid 96 exited after 4 second(s)
> 23:44:40 [Q] INFO Enqueued 3406
> 23:44:40 [Q] INFO Process-1:4 processing [update_from_mailman]
> 23:44:41 [Q] INFO Processed [update_from_mailman]
> Sat Apr 27 23:45:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> quarter_hourly" (pid 104)
> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
> with pid 104 exited after 4 second(s)
> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> quarter_hourly" (pid 113)
> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> hourly" (pid 114)
> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> daily" (pid 115)
> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
> weekly" (pid 116)
> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
> with pid 113 exited after 55 second(s)
> [uwsgi-cron] command "./manage.py runjobs weekly" running with pid
> 116 exited after 55 second(s)
> 00:01:36 [Q] INFO Enqueued 3407
> 00:01:36 [Q] INFO Process-1:1 processing
> [rebuild_mailinglist_cache_recent]
> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
> 114 exited after 99 second(s)
> 00:01:50 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
> 00:04:52 [Q] INFO Enqueued 3408
> 00:04:52 [Q] INFO Process-1:2 processing [update_from_mailman]
> 00:04:54 [Q] INFO Processed [update_from_mailman]
>
> Dockerfile:
>
> FROM python:3.6-alpine3.7 # Add startup script to container COPY
> assets/docker-entrypoint.sh /usr/local/bin/ # Install packages and
> dependencies for hyperkitty and add user for executing apps. # It's
> important that the user has the UID/GID 82 so nginx can access the
> files. RUN set -ex \&& apk add --no-cache --virtual .build-deps gcc
> libc-dev linux-headers git \postgresql-dev \&& apk add --no-cache
> --virtual .mailman-rundeps bash sassc mailcap \postgresql-client
> curl \&& pip install -U django==2.2 \&& pip install
> git+https://gitlab.com/eestec/mailmanclient
>
> \git+https://gitlab.com/mailman/hyperkitty@c9fa4d4bfc295438d3e01cd93090064d004cf44d
> \git+https://gitlab.com/eestec/django-mailman3 \whoosh \uwsgi
> \psycopg2 \dj-database-url \typing \&& apk del .build-deps \&&
> addgroup -S -g 82 hyperkitty \&& adduser -S -u 82 -G hyperkitty
> hyperkitty \&& chmod u+x /usr/local/bin/docker-entrypoint.sh# Add
> needed files for uwsgi server + settings for django COPY
> assets/__init__.py /home/hyperkittyCOPY assets/manage.py
> /home/hyperkittyCOPY assets/urls.py /home/hyperkittyCOPY
> assets/wsgi.py /home/hyperkittyCOPY assets/uwsgi.ini
> /home/hyperkittyCOPY assets/settings.py /home/hyperkitty# Change
> ownership for uwsgi+django files and set execution rights for
> management script RUN chown -R hyperkitty /home/hyperkitty && chmod
> u+x /home/hyperkitty/manage.py# Make sure we are in the correct
> working dir WORKDIR /home/hyperkittyEXPOSE 8080 8081# Use stop
> signal for uwsgi server STOPSIGNAL SIGINTENTRYPOINT
> ["docker-entrypoint.sh"]CMD ["uwsgi", "--ini",
> "/home/hyperkitty/uwsgi.ini"]
>
> On 4/27/19 7:58 PM, Abhilash Raj wrote:
> > On Sat, Apr 27, 2019, at 9:40 AM, Alain Kohli wrote:
> >> I have run "python manage.py rebuild_index" before, doesn't that do
> >> clear_index as well? Apart from that, I run hyperkitty in a docker
> >> container and didn't know fulltext_index should be persistent, so that
> >> got deleted after every version update for sure.
> > Which images are you using and how are you deploying them?
> >
> > You should persist fulltext_index, yes, and possibly logs if you need
> > them for debugging later.
> >
> > Can you paste the entire error traceback?
> >
> >>
> >> On 4/26/19 10:18 PM, Mark Sapiro wrote:
> >>> On 4/26/19 11:14 AM, Alain Kohli wrote:
> >>>> I see loads of "A string literal cannot contain NUL (0x00) characters."
> >>>> messages, but I haven't found missing messages in the archives yet. Not
> >>>> sure how that could be related, though. Apart from that I don't see
> >>>> anything unusual. The other jobs (quarter_hourly, hourly, etc.) seem to
> >>>> run and finish normally.
> >>> Did you upgrade from a Python 2.7 version of HyperKitty to a Python 3
> >>> version? The Haystack/Whoosh search engine databases are not compatible
> >>> between the two and "A string literal cannot contain NUL (0x00)
> >>> characters." is the symptom.
> >>>
> >>> You need to run 'python manage.py clear_index' or just remove all the
> >>> files from the directory defined as 'PATH' under HAYSTACK_CONNECTIONS in
> >>> your settings file (normally 'fulltext_index' in the same directory that
> >>> contains your settings.py.
> >>>
> >> _______________________________________________
> >> 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/
> >>
>
> _______________________________________________
> 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)
7 years, 6 months
[MM3-users] Re: How to delete empty archives by script?
by Andreas Vetter
Am Monday, 12 October 2026, 12:08:40 Central European Summer Time schrieben
Sie:
> On Mon, Oct 12, 2026 at 12:52 PM Andreas Vetter <
>
> andreas.vetter(a)uni-wuerzburg.de> wrote:
> > Am Monday, 12 October 2026, 11:20:27 Central European Summer Time schrieb
> >
> > Washington Odhiambo:
> > > On Mon, Oct 12, 2026 at 12:13 PM Andreas Vetter <
> > >
> > > andreas.vetter(a)uni-wuerzburg.de> wrote:
> > > > Am Thursday, 8 October 2026, 15:23:44 Central European Summer Time
> >
> > schrieb
> >
> > > > Mark Sapiro:
> > > > > On 10/8/26 5:03 AM, Andreas Vetter wrote:
> > > > > > Cool. And since there are a lot of empty archives: How would I
> > > > > > find
> > > > > > the
> > > > > > empty archives to feed to this? Can MailingList.objects.get() come
> >
> > up
> >
> > > > > > with something like a number of archived mails or threads or used
> > > >
> > > > space?
> > > >
> > > > > Something like
> > > > > ```
> > > > >
> > > > > >>> from hyperkitty.models import MailingList
> > > > >
> > > > > >>> for mlist in MailingList.objects.all():
> > > > > ... if len(mlist.emails.all()) == 0:
> > > > > ... print(mlist.name)
> > > > > ...
> > > > > ```
> > > > > will print the names of all empty archived lists. either replace
> > > > > `print(mlist.name)` with `mlist.delete` or add `mlist.delete`
> >
> > (indented
> >
> > > > > the same amount) after `print(mlist.name)` to delete them.
> > > >
> > > > First try, first problem:
> > > >
> > > > (venv) mailman@lists:~> django-admin shell
> > > > Python 3.11.15 (main, Aug 14 2026, 20:29:30) [GCC] on linux
> > > > Type "help", "copyright", "credits" or "license" for more information.
> > > > (InteractiveConsole)
> > > >
> > > > >>> from hyperkitty.models import MailingList
> > > >
> > > > Traceback (most recent call last):
> > > > File "<console>", line 1, in <module>
> > > > File
> > > > "/opt/mailman/venv/lib64/python3.11/site-packages/hyperkitty/models/
> > > >
> > > > __init__.py", line 25, in <module>
> > > >
> > > > from .category import ThreadCategory
> > > >
> > > > File
> > > > "/opt/mailman/venv/lib64/python3.11/site-packages/hyperkitty/models/
> > > >
> > > > category.py", line 64, in <module>
> > > >
> > > > class ThreadCategory(models.Model):
> > > > File
> >
> > "/opt/mailman/venv/lib64/python3.11/site-packages/django/db/models/
> >
> > > > base.py", line 129, in __new__
> > > >
> > > > app_config = apps.get_containing_app_config(module)
> > > >
> > > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > > >
> > > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/apps/
> > > >
> > > > registry.py", line 260, in get_containing_app_config
> > > >
> > > > self.check_apps_ready()
> > > >
> > > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/apps/
> > > >
> > > > registry.py", line 137, in check_apps_ready
> > > >
> > > > settings.INSTALLED_APPS
> > > >
> > > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/conf/
> > > >
> > > > __init__.py", line 102, in __getattr__
> > > >
> > > > self._setup(name)
> > > >
> > > > File "/opt/mailman/venv/lib64/python3.11/site-packages/django/conf/
> > > >
> > > > __init__.py", line 82, in _setup
> > > >
> > > > raise ImproperlyConfigured(
> > > >
> > > > django.core.exceptions.ImproperlyConfigured: Requested setting
> > > > INSTALLED_APPS,
> > > > but settings are not configured. You must either define the
> > > > environment
> > > > variable
> > > > DJANGO_SETTINGS_MODULE or call settings.configure() before accessing
> > > > settings.
> > > >
> > > > I don't see INSTALLED_APPS in any of the configuration files. Where
> >
> > should
> >
> > > > this
> > > > be defined?
> > >
> > > What does your /etc/mailman3/settings.py look like?
> >
> > It is not in there (redacted for privacy):
> >
> > (venv) mailman@lists:~> cat /etc/mailman3/settings.py
> > # Mailman Web configuration file.
> > # /etc/mailman3/settings.py
> >
> > # Get the default settings.
> > from mailman_web.settings.base import *
> > from mailman_web.settings.mailman import *
> >
> > # Settings below supplement or override the defaults.
> >
> > #: Default list of admins who receive the emails from error logging.
> > ADMINS = (
> >
> > ('Mailman Suite Admin', 'redacted@redacted'),
> >
> > )
> >
> > # Postgresql database setup.
> > DATABASES = {
> >
> > 'default': {
> >
> > #'ENGINE': 'django.db.backends.postgresql_psycopg2',
> > 'ENGINE': 'django.db.backends.mysql',
> > 'NAME': 'mailmanweb',
> > 'USER': 'mailman',
> > # TODO: Replace this with the password.
> > 'PASSWORD': 'redacted',
> > 'HOST': 'localhost',
> > 'PORT': '',
> > # For MySQL/MariaDB, in addition to changing the 'ENGINE' setting,
> > # uncomment the following to enable utf8 4-byte encodings.
> > 'OPTIONS': {'charset': 'utf8mb4'},
> >
> > }
> >
> > }
> >
> > # 'collectstatic' command will copy all the static files here.
> > # Alias this location from your webserver to `/static`
> > STATIC_ROOT = '/opt/mailman/web/static'
> >
> > HAYSTACK_CONNECTIONS['default']['PATH'] = '/opt/mailman/fulltext_index'
> >
> > HYPERKITTY_ATTACHMENT_FOLDER = '/opt/mailman/hyperkitty'
> > HYPERKITTY_ENABLE_GRAVATAR = False
> >
> > # enable the 'compress' command.
> > COMPRESS_ENABLED = True
> >
> > # Make sure that this directory is created or Django will fail on start.
> > LOGGING['handlers']['file']['filename'] =
> > '/opt/mailman/web/logs/mailmanweb.log'
> >
> > #: See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
> > ALLOWED_HOSTS = [
> >
> > "localhost", # Archiving API from Mailman, keep it.
> > "127.0.0.1",
> > "lists.redacted"
> > # "lists.your-domain.org",
> > # Add here all production domains you have.
> >
> > ]
> >
> > #: See
> > https://docs.djangoproject.com/en/dev/ref/settings/#csrf-trusted-origins
> > #: For Django <4.0 these are of the form 'lists.example.com' or
> > #: '.example.com' to include subdomains and for Django >=4.0 they include
> > #: the scheme as in 'https://lists.example.com' or 'https://*.example.com
> > '.
> > CSRF_TRUSTED_ORIGINS = [
> >
> > "https://lists.redacted"
> >
> > # "lists.your-domain.org",
> > # Add here all production domains you have.
> >
> > ]
> >
> > #: Current Django Site being served. This is used to customize the web
> > host
> > #: being used to serve the current website. For more details about Django
> > #: site, see: https://docs.djangoproject.com/en/dev/ref/contrib/sites/
> > SITE_ID = 1
> >
> > # Set this to a new secret value.
> > SECRET_KEY = 'redacted'
> >
> > # Set this to match the api_key setting in
> > # /opt/mailman/mm/mailman-hyperkitty.cfg (quoted here, not there).
> > MAILMAN_ARCHIVER_KEY = 'redacted'
> >
> > # The sender of emails from Django such as address confirmation requests.
> > # Set this to a valid email address.
> > DEFAULT_FROM_EMAIL = 'redacted'
> >
> > # The sender of error messages from Django. Set this to a valid email
> > # address.
> > SERVER_EMAIL = 'redacted'
> >
> > ##############################
> > # Disable Sign-Up
> > # AV following
> > https://docs.mailman3.org/en/latest/faq.html#how-to-disable-signup
> > ACCOUNT_ADAPTER =
> > 'django_mailman3.views.user_adapter.DisableSignupAdapter'
> > #
> > # Disable Email verification, since we are using LDAP
> > ACCOUNT_EMAIL_VERIFICATION = "none"
> > #
> > # At Login allow only username, not mailaddress
> > del ACCOUNT_AUTHENTICATION_METHOD
> > # Fehler: settings.ACCOUNT_AUTHENTICATION_METHOD is deprecated, use:
> > settings.ACCOUNT_LOGIN_METHODS = {'username'}
> > ACCOUNT_LOGIN_METHODS = {'username'}
> > # Fehler: settings.ACCOUNT_EMAIL_REQUIRED is deprecated, use:
> > settings.ACCOUNT_SIGNUP_FIELDS = ['email*', 'username*', 'password1*',
> > 'password2*']
> > del ACCOUNT_EMAIL_REQUIRED
> >
> > # LDAP setup
> > # AV following https://gitlab.com/mailman/postorius/-/issues/132
> > AUTH_LDAP_SERVER_URI = "redacted"
> > AUTH_LDAP_BIND_DN = "redacted"
> > AUTH_LDAP_BIND_PASSWORD = "redacted"
> > # If you use ldaps:// you must *not* set AUTH_LDAP_START_TLS.
> > # AUTH_LDAP_START_TLS = True
> >
> > import ldap
> > from django_auth_ldap.config import LDAPSearch
> > from django_auth_ldap.config import PosixGroupType
> >
> > # This allow login using a username or an email address to login.
> > AUTH_LDAP_USER_SEARCH = LDAPSearch("redacted",
> >
> > ldap.SCOPE_SUBTREE, "(&(objectClass=posixAccount)(uid=%(user)s))")
> >
> > #AUTH_LDAP_GROUP_TYPE = PosixGroupType()
> > #AUTH_LDAP_GROUP_SEARCH = LDAPSearch("redacted",
> > # ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)")
> >
> > AUTH_LDAP_USER_ATTR_MAP = {
> >
> > "username": "uid",
> > "first_name": "givenName",
> > "last_name": "sn",
> > "email": "mail"
> >
> > }
> >
> > #AUTH_LDAP_USER_FLAGS_BY_GROUP = {
> > # "is_superuser": "cn=mailman-
> > admins,ou=groups,dc=phl,dc=univie,dc=ac,dc=at"
> > #}
> >
> > AUTHENTICATION_BACKENDS = (
> >
> > "django_auth_ldap.backend.LDAPBackend",
> > "django.contrib.auth.backends.ModelBackend"
> >
> > )
>
> While INSTALLED_APPS += ['XXXXXX'] would go into the settings.py, were you
> not supposed to be running 'mailman shell' instead of 'django-admin shell'?
From Marks Post:
You could do the following in `django-admin shell`
```
>>> from hyperkitty.models import MailingList
>>> mlist = MailingList.objects.get(name='list(a)example.com')
>>> mlist.delete
```
replacing 'list(a)example.com' with the actual list.
regards,
Andreas
1 month
[MM3-users] Re: User settings triggers error
by Mark Dadgar
On Jun 16, 2020, at 11:47 AM, Mark Sapiro <mark(a)msapiro.net> wrote:
>> File "/usr/lib/python3/dist-packages/mailmanclient/restbase/connection.py" in call
>> 99. raise HTTPError(url, response.status, content, response, None)
>
> And gets a 500 from core.
>
>
>> During handling of the above exception (HTTP Error 500: b'A server error occurred. Please contact the administrator.'), another exception occurred:
>
>
> Which we aren't interested in.
>
> The next step is to look in core's mailman.log to see what the rest call
> was and the exception and hopefully traceback the caused the 500 response.
Here’s what’s logged during that error:
Jun 16 12:16:54 2020 (1326) 127.0.0.1 - - "GET /3.1/users/mark(a)pdc-racing.net HTTP/1.1" 200 432
Jun 16 12:16:54 2020 (1326) REST request handler error:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
self.dialect.do_execute(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 581, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.UndefinedFunction: operator does not exist: text = uuid
LINE 4: WHERE "user"._user_id = '05dcbeb4-b784-45eb-96f8-6f9e4b7ab6c...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.8/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 218, in __call__
return super().__call__(environ, start_response)
File "falcon/api.py", line 232, in falcon.api.API.__call__
File "falcon/api.py", line 229, in falcon.api.API.__call__
File "falcon/api.py", line 582, in falcon.api.API._get_responder
File "/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 131, in find
attribute = getattr(resource, name, MISSING)
File "/usr/lib/python3/dist-packages/mailman/rest/users.py", line 203, in _user
return user_manager.get_user_by_id(user_id)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3/dist-packages/mailman/model/usermanager.py", line 94, in get_user_by_id
if users.count() == 0:
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3630, in count
return self.from_self(col).scalar()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3355, in scalar
ret = self.one()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3325, in one
ret = self.one_or_none()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3294, in one_or_none
ret = list(self)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3367, in __iter__
return self._execute_and_instances(context)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3392, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 982, in execute
return meth(self, multiparams, params)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1095, in _execute_clauseelement
ret = self._execute_context(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
self._handle_dbapi_exception(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception
util.raise_from_cause(sqlalchemy_exception, exc_info)
File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 152, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
self.dialect.do_execute(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 581, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedFunction) operator does not exist: text = uuid
LINE 4: WHERE "user"._user_id = '05dcbeb4-b784-45eb-96f8-6f9e4b7ab6c...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
[SQL: SELECT count(*) AS count_1
FROM (SELECT "user".password AS user_password, "user".id AS user_id, "user".display_name AS user_display_name, "user"._user_id AS user__user_id, "user"._created_on AS user__created_on, "user".is_server_owner AS user_is_server_owner, "user"._preferred_address_id AS user__preferred_address_id, "user".preferences_id AS user_preferences_id
FROM "user"
WHERE "user"._user_id = %(user_id_1)s) AS anon_1]
[parameters: {'user_id_1': UUID('05dcbeb4-b784-45eb-96f8-6f9e4b7ab6cb')}]
(Background on this error at: http://sqlalche.me/e/f405)
Jun 16 12:16:54 2020 (1326) 127.0.0.1 - - "GET /3.1/users/05dcbeb4b78445eb96f86f9e4b7ab6cb/addresses HTTP/1.1" 500 59
Jun 16 12:16:54 2020 (1326) REST request handler error:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
self.dialect.do_execute(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 581, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.UndefinedFunction: operator does not exist: text = uuid
LINE 4: WHERE "user"._user_id = '05dcbeb4-b784-45eb-96f8-6f9e4b7ab6c...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.8/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 218, in __call__
return super().__call__(environ, start_response)
File "falcon/api.py", line 232, in falcon.api.API.__call__
File "falcon/api.py", line 229, in falcon.api.API.__call__
File "falcon/api.py", line 582, in falcon.api.API._get_responder
File "/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 131, in find
attribute = getattr(resource, name, MISSING)
File "/usr/lib/python3/dist-packages/mailman/rest/users.py", line 203, in _user
return user_manager.get_user_by_id(user_id)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3/dist-packages/mailman/model/usermanager.py", line 94, in get_user_by_id
if users.count() == 0:
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3630, in count
return self.from_self(col).scalar()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3355, in scalar
ret = self.one()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3325, in one
ret = self.one_or_none()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3294, in one_or_none
ret = list(self)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3367, in __iter__
return self._execute_and_instances(context)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3392, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 982, in execute
return meth(self, multiparams, params)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1095, in _execute_clauseelement
ret = self._execute_context(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
self._handle_dbapi_exception(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception
util.raise_from_cause(sqlalchemy_exception, exc_info)
File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 152, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
self.dialect.do_execute(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 581, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedFunction) operator does not exist: text = uuid
LINE 4: WHERE "user"._user_id = '05dcbeb4-b784-45eb-96f8-6f9e4b7ab6c...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
[SQL: SELECT count(*) AS count_1
FROM (SELECT "user".password AS user_password, "user".id AS user_id, "user".display_name AS user_display_name, "user"._user_id AS user__user_id, "user"._created_on AS user__created_on, "user".is_server_owner AS user_is_server_owner, "user"._preferred_address_id AS user__preferred_address_id, "user".preferences_id AS user_preferences_id
FROM "user"
WHERE "user"._user_id = %(user_id_1)s) AS anon_1]
[parameters: {'user_id_1': UUID('05dcbeb4-b784-45eb-96f8-6f9e4b7ab6cb')}]
(Background on this error at: http://sqlalche.me/e/f405)
Jun 16 12:16:54 2020 (1326) 127.0.0.1 - - "GET /3.1/users/05dcbeb4b78445eb96f86f9e4b7ab6cb/addresses HTTP/1.1" 500 59
Jun 16 12:16:54 2020 (1326) REST request handler error:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
self.dialect.do_execute(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 581, in do_execute
cursor.execute(statement, parameters)
psycopg2.errors.UndefinedFunction: operator does not exist: text = uuid
LINE 4: WHERE "user"._user_id = '05dcbeb4-b784-45eb-96f8-6f9e4b7ab6c...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3.8/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 218, in __call__
return super().__call__(environ, start_response)
File "falcon/api.py", line 232, in falcon.api.API.__call__
File "falcon/api.py", line 229, in falcon.api.API.__call__
File "falcon/api.py", line 582, in falcon.api.API._get_responder
File "/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 131, in find
attribute = getattr(resource, name, MISSING)
File "/usr/lib/python3/dist-packages/mailman/rest/users.py", line 203, in _user
return user_manager.get_user_by_id(user_id)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3/dist-packages/mailman/model/usermanager.py", line 94, in get_user_by_id
if users.count() == 0:
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3630, in count
return self.from_self(col).scalar()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3355, in scalar
ret = self.one()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3325, in one
ret = self.one_or_none()
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3294, in one_or_none
ret = list(self)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3367, in __iter__
return self._execute_and_instances(context)
File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3392, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 982, in execute
return meth(self, multiparams, params)
File "/usr/lib/python3/dist-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1095, in _execute_clauseelement
ret = self._execute_context(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
self._handle_dbapi_exception(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1476, in _handle_dbapi_exception
util.raise_from_cause(sqlalchemy_exception, exc_info)
File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb, cause=cause)
File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 152, in reraise
raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1245, in _execute_context
self.dialect.do_execute(
File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 581, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedFunction) operator does not exist: text = uuid
LINE 4: WHERE "user"._user_id = '05dcbeb4-b784-45eb-96f8-6f9e4b7ab6c...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
[SQL: SELECT count(*) AS count_1
FROM (SELECT "user".password AS user_password, "user".id AS user_id, "user".display_name AS user_display_name, "user"._user_id AS user__user_id, "user"._created_on AS user__created_on, "user".is_server_owner AS user_is_server_owner, "user"._preferred_address_id AS user__preferred_address_id, "user".preferences_id AS user_preferences_id
FROM "user"
WHERE "user"._user_id = %(user_id_1)s) AS anon_1]
[parameters: {'user_id_1': UUID('05dcbeb4-b784-45eb-96f8-6f9e4b7ab6cb')}]
(Background on this error at: http://sqlalche.me/e/f405)
Jun 16 12:16:54 2020 (1326) 127.0.0.1 - - "GET /3.1/users/05dcbeb4b78445eb96f86f9e4b7ab6cb/addresses HTTP/1.1" 500 59
- Mark
-----
mark(a)pdc-racing.net | 408-348-2878
6 years, 4 months
[MM3-users] Re: Hyperkitty CPU usage
by Alain Kohli
Well, I understand that it might take a while, but the process is
running for over 200h now, I doubt it can really take _that_ long if
everything is working properly. Especially because the rebuild_index
command is only taking a few hours at most, doesn't that essentially do
the same?
We have ~700k messages in ~300 mailing lists in case that helps you
estimate how long it could take. I can take a look at alternative
backends, though.
On 5/7/19 4:32 PM, Abhilash Raj wrote:
> On Sat, Apr 27, 2019, at 6:22 PM, Alain Kohli wrote:
>> I'm running a custom image which is based on an older version of the one
>> here: https://github.com/maxking/docker-mailman. I attached it below.
>> But I separated postorius and hyperkitty, so hyperkitty is running in
>> its own container. I'm deploying the image with a plain 'docker run'
>> behind nginx. I made fulltext_index persistent now, but it didn't get
>> populated with anything yet. I don't really have an error traceback
>> because there is never an error thrown. The only thing with some content
>> is uwsgi-error.log, which you can find below. I'm also still getting the
>> "A string literal cannot contain NUL (0x00) characters." messages. I
>> also noticed that it takes incredibly long for the webinterface to load
>> (several minutes) even though there doesn't seem to be any process
>> consuming notable resources apart from the minutely job.
>>
>> Funnily enough, I have the exact same image deployed on a second server
>> as well for testing. On that one everything works fine. The only
>> difference is that on the problematic one I have a lot more mailing
>> lists/archives and that I imported them from mailman2. Could something
>> have gone wrong during the import? I used the regular hyperkitty_import
>> command.
> Yes, this is because `whoosh`, the library set by default to run fulltext
> indexing is a pure python implementation and quite slow in busy lists.
>
> We do support more backends though, see [1] for a list of all the supported
> search backends. Something like Xapian(C++) or Elasticsearch/Solr(Java)
> should be much better in terms of performance.
>
> [1]: https://django-haystack.readthedocs.io/en/master/backend_support.html
>
>> uwsgi-error.log:
>>
>> *** Starting uWSGI 2.0.18 (64bit) on [Sat Apr 27 22:50:17 2019] ***
>> compiled with version: 6.4.0 on 27 April 2019 22:48:42
>> os: Linux-4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19)
>> nodename: hyperkitty.docker
>> machine: x86_64
>> clock source: unix
>> detected number of CPU cores: 4
>> current working directory: /home/hyperkitty
>> detected binary path: /usr/local/bin/uwsgi
>> !!! no internal routing support, rebuild with pcre support !!!
>> setgid() to 82
>> setuid() to 82
>> chdir() to /home/hyperkitty
>> your memory page size is 4096 bytes
>> detected max file descriptor number: 1048576
>> lock engine: pthread robust mutexes
>> thunder lock: disabled (you can enable it with --thunder-lock)
>> uwsgi socket 0 bound to TCP address 0.0.0.0:8081 fd 8
>> uwsgi socket 1 bound to TCP address 0.0.0.0:8080 fd 9
>> Python version: 3.6.8 (default, Jan 30 2019, 23:54:38) [GCC 6.4.0]
>> Python main interpreter initialized at 0x55dfaa41c980
>> python threads support enabled
>> your server socket listen backlog is limited to 100 connections
>> your mercy for graceful operations on workers is 60 seconds
>> [uwsgi-cron] command "./manage.py runjobs minutely" registered as
>> cron task
>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" registered
>> as cron task
>> [uwsgi-cron] command "./manage.py runjobs hourly" registered as cron
>> task
>> [uwsgi-cron] command "./manage.py runjobs daily" registered as cron task
>> [uwsgi-cron] command "./manage.py runjobs monthly" registered as
>> cron task
>> [uwsgi-cron] command "./manage.py runjobs weekly" registered as cron
>> task
>> [uwsgi-cron] command "./manage.py runjobs yearly" registered as cron
>> task
>> mapped 208576 bytes (203 KB) for 4 cores
>> *** Operational MODE: threaded ***
>> WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter
>> 0x55dfaa41c980 pid: 1 (default app)
>> *** uWSGI is running in multiple interpreter mode ***
>> spawned uWSGI master process (pid: 1)
>> spawned uWSGI worker 1 (pid: 40, cores: 4)
>> Sat Apr 27 22:50:18 2019 - [uwsgi-cron] running "./manage.py runjobs
>> minutely" (pid 45)
>> [uwsgi-daemons] spawning "./manage.py qcluster" (uid: 82 gid: 82)
>> 22:50:21 [Q] INFO Q Cluster-47 starting.
>> 22:50:21 [Q] INFO Process-1:1 ready for work at 59
>> 22:50:21 [Q] INFO Process-1:2 ready for work at 60
>> 22:50:21 [Q] INFO Process-1:3 ready for work at 61
>> 22:50:21 [Q] INFO Process-1:4 ready for work at 62
>> 22:50:21 [Q] INFO Process-1:5 monitoring at 63
>> 22:50:21 [Q] INFO Process-1 guarding cluster at 58
>> 22:50:21 [Q] INFO Process-1:6 pushing tasks at 64
>> 22:50:21 [Q] INFO Q Cluster-47 running.
>> 22:59:31 [Q] INFO Enqueued 3403
>> 22:59:31 [Q] INFO Process-1:1 processing [update_from_mailman]
>> 22:59:33 [Q] INFO Processed [update_from_mailman]
>> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> quarter_hourly" (pid 73)
>> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> hourly" (pid 74)
>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>> with pid 73 exited after 64 second(s)
>> 23:01:28 [Q] INFO Enqueued 3404
>> 23:01:29 [Q] INFO Process-1:2 processing
>> [rebuild_mailinglist_cache_recent]
>> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
>> 74 exited after 91 second(s)
>> Sat Apr 27 23:01:36 2019 - uwsgi_response_write_body_do(): Broken
>> pipe [core/writer.c line 341] during GET / (212.203.58.154)
>> OSError: write error
>> 23:01:36 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
>> Sat Apr 27 23:15:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> quarter_hourly" (pid 88)
>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>> with pid 88 exited after 4 second(s)
>> 23:28:24 [Q] INFO Enqueued 3405
>> 23:28:24 [Q] INFO Process-1:3 processing [update_from_mailman]
>> 23:28:25 [Q] INFO Processed [update_from_mailman]
>> Sat Apr 27 23:30:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> quarter_hourly" (pid 96)
>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>> with pid 96 exited after 4 second(s)
>> 23:44:40 [Q] INFO Enqueued 3406
>> 23:44:40 [Q] INFO Process-1:4 processing [update_from_mailman]
>> 23:44:41 [Q] INFO Processed [update_from_mailman]
>> Sat Apr 27 23:45:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> quarter_hourly" (pid 104)
>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>> with pid 104 exited after 4 second(s)
>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> quarter_hourly" (pid 113)
>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> hourly" (pid 114)
>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> daily" (pid 115)
>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py runjobs
>> weekly" (pid 116)
>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>> with pid 113 exited after 55 second(s)
>> [uwsgi-cron] command "./manage.py runjobs weekly" running with pid
>> 116 exited after 55 second(s)
>> 00:01:36 [Q] INFO Enqueued 3407
>> 00:01:36 [Q] INFO Process-1:1 processing
>> [rebuild_mailinglist_cache_recent]
>> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
>> 114 exited after 99 second(s)
>> 00:01:50 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
>> 00:04:52 [Q] INFO Enqueued 3408
>> 00:04:52 [Q] INFO Process-1:2 processing [update_from_mailman]
>> 00:04:54 [Q] INFO Processed [update_from_mailman]
>>
>> Dockerfile:
>>
>> FROM python:3.6-alpine3.7 # Add startup script to container COPY
>> assets/docker-entrypoint.sh /usr/local/bin/ # Install packages and
>> dependencies for hyperkitty and add user for executing apps. # It's
>> important that the user has the UID/GID 82 so nginx can access the
>> files. RUN set -ex \&& apk add --no-cache --virtual .build-deps gcc
>> libc-dev linux-headers git \postgresql-dev \&& apk add --no-cache
>> --virtual .mailman-rundeps bash sassc mailcap \postgresql-client
>> curl \&& pip install -U django==2.2 \&& pip install
>> git+https://gitlab.com/eestec/mailmanclient
>>
>> \git+https://gitlab.com/mailman/hyperkitty@c9fa4d4bfc295438d3e01cd93090064d004cf44d
>> \git+https://gitlab.com/eestec/django-mailman3 \whoosh \uwsgi
>> \psycopg2 \dj-database-url \typing \&& apk del .build-deps \&&
>> addgroup -S -g 82 hyperkitty \&& adduser -S -u 82 -G hyperkitty
>> hyperkitty \&& chmod u+x /usr/local/bin/docker-entrypoint.sh# Add
>> needed files for uwsgi server + settings for django COPY
>> assets/__init__.py /home/hyperkittyCOPY assets/manage.py
>> /home/hyperkittyCOPY assets/urls.py /home/hyperkittyCOPY
>> assets/wsgi.py /home/hyperkittyCOPY assets/uwsgi.ini
>> /home/hyperkittyCOPY assets/settings.py /home/hyperkitty# Change
>> ownership for uwsgi+django files and set execution rights for
>> management script RUN chown -R hyperkitty /home/hyperkitty && chmod
>> u+x /home/hyperkitty/manage.py# Make sure we are in the correct
>> working dir WORKDIR /home/hyperkittyEXPOSE 8080 8081# Use stop
>> signal for uwsgi server STOPSIGNAL SIGINTENTRYPOINT
>> ["docker-entrypoint.sh"]CMD ["uwsgi", "--ini",
>> "/home/hyperkitty/uwsgi.ini"]
>>
>> On 4/27/19 7:58 PM, Abhilash Raj wrote:
>>> On Sat, Apr 27, 2019, at 9:40 AM, Alain Kohli wrote:
>>>> I have run "python manage.py rebuild_index" before, doesn't that do
>>>> clear_index as well? Apart from that, I run hyperkitty in a docker
>>>> container and didn't know fulltext_index should be persistent, so that
>>>> got deleted after every version update for sure.
>>> Which images are you using and how are you deploying them?
>>>
>>> You should persist fulltext_index, yes, and possibly logs if you need
>>> them for debugging later.
>>>
>>> Can you paste the entire error traceback?
>>>
>>>> On 4/26/19 10:18 PM, Mark Sapiro wrote:
>>>>> On 4/26/19 11:14 AM, Alain Kohli wrote:
>>>>>> I see loads of "A string literal cannot contain NUL (0x00) characters."
>>>>>> messages, but I haven't found missing messages in the archives yet. Not
>>>>>> sure how that could be related, though. Apart from that I don't see
>>>>>> anything unusual. The other jobs (quarter_hourly, hourly, etc.) seem to
>>>>>> run and finish normally.
>>>>> Did you upgrade from a Python 2.7 version of HyperKitty to a Python 3
>>>>> version? The Haystack/Whoosh search engine databases are not compatible
>>>>> between the two and "A string literal cannot contain NUL (0x00)
>>>>> characters." is the symptom.
>>>>>
>>>>> You need to run 'python manage.py clear_index' or just remove all the
>>>>> files from the directory defined as 'PATH' under HAYSTACK_CONNECTIONS in
>>>>> your settings file (normally 'fulltext_index' in the same directory that
>>>>> contains your settings.py.
>>>>>
>>>> _______________________________________________
>>>> 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/
>>>>
>> _______________________________________________
>> 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/
>>
7 years, 6 months
[MM3-users] seems solved (was: Re: error changed after restart)
by Guillermo Hernandez (Oldno7)
On 7/2/21 19:33, Guillermo Hernandez (Oldno7) via Mailman-users wrote:
> On 7/2/21 19:04, Abhilash Raj wrote:
Well... I did reinstall all mailman relationed apps with a
pip install --upgrade --force-reinstall --no-deps --no-cache-dir
django-mailman3 mailman mailman-hyperkitty mailmanclient
Restarted thee apache24 server...
Aaaaaand closed de admin session and reopened it... (just for a "what
if" sensation).
I can not tell what have been the solution here, but now I can access
the administrative pages and attend de pending subscriptions and discard
retained messages.
Thanks Abhilash and Mark for your support.
>>
>> On Sun, Feb 7, 2021, at 1:07 AM, Guillermo Hernandez (Oldno7) via
>> Mailman-users wrote:
>>> On 6/2/21 21:19, Abhilash Raj wrote:
>>>>
>>>> On Sat, Feb 6, 2021 at 19:44, Guillermo Hernandez (Oldno7) via
>>>> Mailman-users <mailman-users(a)mailman3.org> wrote:
>>>>> On 6/2/21 18:08, Abhilash Raj wrote:
>>>>>
>>>>> On Sat, Feb 6, 2021, at 3:04 AM, Guillermo Hernandez (Oldno7)
>>>>> via
>>>>> Mailman-users wrote:
>>>>>
>>>>> I restarted de server and the error changed. Now the log
>>>>> shows "KeyError: 'subscription_mode'":
>>>>>
>>>>> Did you also restart Mailman Core after the upgrade?
>>>>>
>>>>> Yes, indeed: I stopped mailman core and all the processes related.
>>>>> Did the upgrades. Started all again. Find the errors in the web user
>>>>> interface. Stopped all again. Looked for errors in the log. Restarted
>>>>> the complete server. Found the second error that this second mail is
>>>>> about to. It happens when, in the main page that shows all the lists
>>>>> you click to see one of them. It seems to me that it has been
>>>>> database structure changes in django that the upgrade is not aware...
>>>>> but it's a very long shot from my side.
>>>> `subscription_mode` was added in Mailman Core 3.3.2 and it is actually
>>>> a derived atrribute and not stored in Database. Mailman's API
>>>> should be
>>>> returning this attribute for each Member, but for some reason it seems
>>>> to me like it isn't doing that even though do have Mailman 3.3.3
>>>> running
>>>> like you said.
>>>> If you have Curl installed, can you send me the output of:
>>>> $ curl -u <user>:<pass>
>>>> http://localhost:8001/3.1/members?count=5&page=1
>>> This is the output you asked for (it's the same you can see when you
>>> try
>>> to interact with one list):
>>>
>>> /usr/local/mailman3 # curl -u XXXXXX:XXXXXX
>>> http://localhost:8001/3.1/members?count=5&page=1
>>> /usr/local/mailman3 # <html>
>>> <head>
>>> <title>Internal Server Error</title>
>>> </head>
>>> <body>
>>> <h1><p>Internal Server Error</p></h1>
>>>
>>> </body>
>>> </html>
>>>
>>> No log entry has been produced...
>> This is weird, if you have working Core, then there should be *some*
>> json returned
>> from the above command. Do you have the Gunicorn running?
> I have the uwsgi approach running...
>> What is the
>> output of `ps -ef | grep mailman`?
>
> none
>
> but if I do an ps ax | grep mailman it shows
>
> /usr/local/mailman3 # ps ax | grep mailman
> 26803 - IsJ 0:00.87 /usr/local/bin/python3.7 /usr/local/bin/master
> --force -C /usr/local/mailman3/var/et
> 26834 - SJ 0:07.57 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26835 - IJ 0:05.84 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26836 - SJ 0:07.16 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26837 - SJ 0:08.74 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26838 - SJ 0:03.16 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26839 - SJ 0:07.07 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26840 - SJ 0:08.12 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26841 - SJ 0:09.07 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26842 - SJ 0:07.45 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26843 - IJ 0:00.95 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26844 - SJ 0:07.27 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26845 - SJ 0:07.69 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26859 - IJ 0:01.01 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 26860 - IJ 0:05.75 /usr/local/bin/python3.7 /usr/local/bin/runner
> -C /usr/local/mailman3/var/etc/mailma
> 50153 - IsJ 0:00.16 /usr/local/bin/uwsgi --ini
> /usr/local/mailman3/uwsgi.ini
> 50481 2 S+J 0:00.00 grep mailman
> 26808 1 SJ 0:02.09 /usr/local/bin/uwsgi --ini
> /usr/local/mailman3/uwsgi.ini
> 26832 1 IJ 0:00.00 /usr/local/bin/uwsgi --ini
> /usr/local/mailman3/uwsgi.ini
>
>> Are you able to run `mailman members` command to list the members of
>> a list?
>
> Yes. All the commands are working as expected.
>
>> Also, how did you actually install Mailman?
>
> Using pip. Here is a detailled post of how I did put all together:
>
> https://forums.FreeBSD.org/threads/mailman-3.61050/post-488128
>
> Thanks for your support
>
>>
>> Abhilash.
>>
>>> TIA.
>>>
>>>
>>>
>>>
>>>> It should ideally return an output that looks something like shown
>>>> here[1]. You
>>>> can put the username/password of Core's API server in the above
>>>> command.
>>>> [1]:
>>>> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
>>>>
>>>>
>>>> Abhilash
>>>>> I'm using sqlite as django database and mysql for mailman.
>>>>>
>>>>> ERROR 2021-02-06 11:47:49,015 26798 django.request Internal
>>>>> Server Error:
>>>>> /mailman3/mailman3/lists/name_and_domain.of.the.list
>>>>> Traceback (most recent call last): File
>>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>>>
>>>>> line 119, in __getattr__ return self._get(name) File
>>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>>>
>>>>> line 86, in _get raise KeyError(key) KeyError:
>>>>> 'subscription_mode' During handling of the above exception,
>>>>> another exception occurred: Traceback (most recent call
>>>>> last): File
>>>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py",
>>>>> line 34, in inner response = get_response(request)
>>>>> File
>>>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>>>>>
>>>>> line 115, in _get_response response =
>>>>> self.process_exception_by_middleware(e, request) File
>>>>> "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py",
>>>>>
>>>>> line 113, in _get_response response =
>>>>> wrapped_callback(request, *callback_args, **callback_kwargs)
>>>>> File
>>>>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>>>>>
>>>>> line 71, in view return self.dispatch(request, *args,
>>>>> **kwargs) File
>>>>> "/usr/local/lib/python3.7/site-packages/postorius/views/generic.py",
>>>>> line 74, in dispatch return super(MailingListView,
>>>>> self).dispatch(request, *args, **kwargs) File
>>>>> "/usr/local/lib/python3.7/site-packages/django/views/generic/base.py",
>>>>>
>>>>> line 97, in dispatch return handler(request, *args,
>>>>> **kwargs) File
>>>>> "/usr/local/lib/python3.7/site-packages/postorius/views/list.py",
>>>>> line 295, in get member.subscription_mode == File
>>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>>>
>>>>> line 124, in __getattr__ self.__class__.__name__, name))
>>>>> AttributeError: 'Member' object has no attribute
>>>>> 'subscription_mode' *********************** some info about
>>>>> the installed versions via pip list: pip list | grep django
>>>>> django-allauth 0.44.0
>>>>> django-appconf 1.0.4
>>>>> django-compressor 2.4
>>>>> django-extensions 3.1.0
>>>>> django-gravatar2 1.4.4
>>>>> django-haystack 3.0
>>>>> django-mailman3 1.3.5
>>>>> django-picklefield 3.0.1
>>>>> django-q 1.3.4
>>>>> djangorestframework 3.12.2 pip list | grep mailman
>>>>> django-mailman3 1.3.5
>>>>> mailman 3.3.3
>>>>> mailman-hyperkitty 1.1.0
>>>>> mailmanclient 3.3.2 pip list | grep
>>>>> postorius
>>>>> postorius 1.3.4 On 6/2/21 11:12,
>>>>> Guillermo Hernandez (Oldno7) via Mailman-users wrote:
>>>>>
>>>>> I've just upgrade mailman 3 installation following Mr.
>>>>> Sapiro advice: did a pip install --upgrade
>>>>> django-mailman3 hyperkitty mailman mailmanclient
>>>>> mailman-hyperkitty postorius I did a "python3 manage.py
>>>>> migrate" after, too. And all seemed to run well. All the
>>>>> lists showed in postorius via web, but when I try to
>>>>> accesss into one of them the browser shows an error. In
>>>>> the log you can see: *-*-*-*-*-*-* Traceback (most
>>>>> recent
>>>>> call last): File
>>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>>>
>>>>> line 119, in __getattr__ return self._get(name)
>>>>> File
>>>>> "/usr/local/lib/python3.7/site-packages/mailmanclient/restbase/base.py",
>>>>>
>>>>> line 86, in _get raise KeyError(key) KeyError:
>>>>> 'get_requests_count' .. (And after all the traceback
>>>>> lines) AttributeError: 'MailingList' object has no
>>>>> attribute 'get_requests_count' *-*-*-*-*-*-*-* The lists
>>>>> seem to be distributing messeages well.. but I cannot
>>>>> acces via web administration (django/postorius) Can
>>>>> anyone point me in the right direction to solve this,
>>>>> please? _______________________________________________
>>>>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>>>>> <mailto:mailman-users@mailman3.org> To unsubscribe send
>>>>> an email to mailman-users-leave(a)mailman3.org
>>>>> <mailto:mailman-users-leave@mailman3.org>
>>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Mailman-users
>>>>> mailing list -- mailman-users(a)mailman3.org
>>>>> <mailto:mailman-users@mailman3.org> To unsubscribe send an
>>>>> email to mailman-users-leave(a)mailman3.org
>>>>> <mailto:mailman-users-leave@mailman3.org>
>>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>>>>
>>>>>
>>>>> _______________________________________________ Mailman-users mailing
>>>>> list -- mailman-users(a)mailman3.org
>>>>> <mailto:mailman-users@mailman3.org> To unsubscribe send an email to
>>>>> mailman-users-leave(a)mailman3.org
>>>>> <mailto:mailman-users-leave@mailman3.org>
>>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>>> <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3org/>
>>>>>
>>>
>>> _______________________________________________
>>> 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/
>>>
> _______________________________________________
> 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/
>
5 years, 9 months
[MM3-users] Re: Hyperkitty CPU usage
by Alain Kohli
I have not seen any improvement over time, so I switched the backend to
Xapian. That works like a charm now, I guess our lists were indeed just
too busy for whoosh.
On 5/7/19 5:15 PM, Alain Kohli wrote:
> Well, I understand that it might take a while, but the process is
> running for over 200h now, I doubt it can really take _that_ long if
> everything is working properly. Especially because the rebuild_index
> command is only taking a few hours at most, doesn't that essentially
> do the same?
>
> We have ~700k messages in ~300 mailing lists in case that helps you
> estimate how long it could take. I can take a look at alternative
> backends, though.
>
>
> On 5/7/19 4:32 PM, Abhilash Raj wrote:
>> On Sat, Apr 27, 2019, at 6:22 PM, Alain Kohli wrote:
>>> I'm running a custom image which is based on an older version of the
>>> one
>>> here: https://github.com/maxking/docker-mailman. I attached it below.
>>> But I separated postorius and hyperkitty, so hyperkitty is running in
>>> its own container. I'm deploying the image with a plain 'docker run'
>>> behind nginx. I made fulltext_index persistent now, but it didn't get
>>> populated with anything yet. I don't really have an error traceback
>>> because there is never an error thrown. The only thing with some
>>> content
>>> is uwsgi-error.log, which you can find below. I'm also still getting
>>> the
>>> "A string literal cannot contain NUL (0x00) characters." messages. I
>>> also noticed that it takes incredibly long for the webinterface to load
>>> (several minutes) even though there doesn't seem to be any process
>>> consuming notable resources apart from the minutely job.
>>>
>>> Funnily enough, I have the exact same image deployed on a second server
>>> as well for testing. On that one everything works fine. The only
>>> difference is that on the problematic one I have a lot more mailing
>>> lists/archives and that I imported them from mailman2. Could something
>>> have gone wrong during the import? I used the regular hyperkitty_import
>>> command.
>> Yes, this is because `whoosh`, the library set by default to run
>> fulltext
>> indexing is a pure python implementation and quite slow in busy lists.
>>
>> We do support more backends though, see [1] for a list of all the
>> supported
>> search backends. Something like Xapian(C++) or Elasticsearch/Solr(Java)
>> should be much better in terms of performance.
>>
>> [1]:
>> https://django-haystack.readthedocs.io/en/master/backend_support.html
>>
>>> uwsgi-error.log:
>>>
>>> *** Starting uWSGI 2.0.18 (64bit) on [Sat Apr 27 22:50:17 2019]
>>> ***
>>> compiled with version: 6.4.0 on 27 April 2019 22:48:42
>>> os: Linux-4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19)
>>> nodename: hyperkitty.docker
>>> machine: x86_64
>>> clock source: unix
>>> detected number of CPU cores: 4
>>> current working directory: /home/hyperkitty
>>> detected binary path: /usr/local/bin/uwsgi
>>> !!! no internal routing support, rebuild with pcre support !!!
>>> setgid() to 82
>>> setuid() to 82
>>> chdir() to /home/hyperkitty
>>> your memory page size is 4096 bytes
>>> detected max file descriptor number: 1048576
>>> lock engine: pthread robust mutexes
>>> thunder lock: disabled (you can enable it with --thunder-lock)
>>> uwsgi socket 0 bound to TCP address 0.0.0.0:8081 fd 8
>>> uwsgi socket 1 bound to TCP address 0.0.0.0:8080 fd 9
>>> Python version: 3.6.8 (default, Jan 30 2019, 23:54:38) [GCC 6.4.0]
>>> Python main interpreter initialized at 0x55dfaa41c980
>>> python threads support enabled
>>> your server socket listen backlog is limited to 100 connections
>>> your mercy for graceful operations on workers is 60 seconds
>>> [uwsgi-cron] command "./manage.py runjobs minutely" registered as
>>> cron task
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly"
>>> registered
>>> as cron task
>>> [uwsgi-cron] command "./manage.py runjobs hourly" registered as
>>> cron
>>> task
>>> [uwsgi-cron] command "./manage.py runjobs daily" registered as
>>> cron task
>>> [uwsgi-cron] command "./manage.py runjobs monthly" registered as
>>> cron task
>>> [uwsgi-cron] command "./manage.py runjobs weekly" registered as
>>> cron
>>> task
>>> [uwsgi-cron] command "./manage.py runjobs yearly" registered as
>>> cron
>>> task
>>> mapped 208576 bytes (203 KB) for 4 cores
>>> *** Operational MODE: threaded ***
>>> WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter
>>> 0x55dfaa41c980 pid: 1 (default app)
>>> *** uWSGI is running in multiple interpreter mode ***
>>> spawned uWSGI master process (pid: 1)
>>> spawned uWSGI worker 1 (pid: 40, cores: 4)
>>> Sat Apr 27 22:50:18 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> minutely" (pid 45)
>>> [uwsgi-daemons] spawning "./manage.py qcluster" (uid: 82 gid: 82)
>>> 22:50:21 [Q] INFO Q Cluster-47 starting.
>>> 22:50:21 [Q] INFO Process-1:1 ready for work at 59
>>> 22:50:21 [Q] INFO Process-1:2 ready for work at 60
>>> 22:50:21 [Q] INFO Process-1:3 ready for work at 61
>>> 22:50:21 [Q] INFO Process-1:4 ready for work at 62
>>> 22:50:21 [Q] INFO Process-1:5 monitoring at 63
>>> 22:50:21 [Q] INFO Process-1 guarding cluster at 58
>>> 22:50:21 [Q] INFO Process-1:6 pushing tasks at 64
>>> 22:50:21 [Q] INFO Q Cluster-47 running.
>>> 22:59:31 [Q] INFO Enqueued 3403
>>> 22:59:31 [Q] INFO Process-1:1 processing [update_from_mailman]
>>> 22:59:33 [Q] INFO Processed [update_from_mailman]
>>> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 73)
>>> Sat Apr 27 23:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> hourly" (pid 74)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 73 exited after 64 second(s)
>>> 23:01:28 [Q] INFO Enqueued 3404
>>> 23:01:29 [Q] INFO Process-1:2 processing
>>> [rebuild_mailinglist_cache_recent]
>>> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
>>> 74 exited after 91 second(s)
>>> Sat Apr 27 23:01:36 2019 - uwsgi_response_write_body_do(): Broken
>>> pipe [core/writer.c line 341] during GET / (212.203.58.154)
>>> OSError: write error
>>> 23:01:36 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
>>> Sat Apr 27 23:15:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 88)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 88 exited after 4 second(s)
>>> 23:28:24 [Q] INFO Enqueued 3405
>>> 23:28:24 [Q] INFO Process-1:3 processing [update_from_mailman]
>>> 23:28:25 [Q] INFO Processed [update_from_mailman]
>>> Sat Apr 27 23:30:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 96)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 96 exited after 4 second(s)
>>> 23:44:40 [Q] INFO Enqueued 3406
>>> 23:44:40 [Q] INFO Process-1:4 processing [update_from_mailman]
>>> 23:44:41 [Q] INFO Processed [update_from_mailman]
>>> Sat Apr 27 23:45:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 104)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 104 exited after 4 second(s)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> quarter_hourly" (pid 113)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> hourly" (pid 114)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> daily" (pid 115)
>>> Sun Apr 28 00:00:00 2019 - [uwsgi-cron] running "./manage.py
>>> runjobs
>>> weekly" (pid 116)
>>> [uwsgi-cron] command "./manage.py runjobs quarter_hourly" running
>>> with pid 113 exited after 55 second(s)
>>> [uwsgi-cron] command "./manage.py runjobs weekly" running with pid
>>> 116 exited after 55 second(s)
>>> 00:01:36 [Q] INFO Enqueued 3407
>>> 00:01:36 [Q] INFO Process-1:1 processing
>>> [rebuild_mailinglist_cache_recent]
>>> [uwsgi-cron] command "./manage.py runjobs hourly" running with pid
>>> 114 exited after 99 second(s)
>>> 00:01:50 [Q] INFO Processed [rebuild_mailinglist_cache_recent]
>>> 00:04:52 [Q] INFO Enqueued 3408
>>> 00:04:52 [Q] INFO Process-1:2 processing [update_from_mailman]
>>> 00:04:54 [Q] INFO Processed [update_from_mailman]
>>>
>>> Dockerfile:
>>>
>>> FROM python:3.6-alpine3.7 # Add startup script to container COPY
>>> assets/docker-entrypoint.sh /usr/local/bin/ # Install packages and
>>> dependencies for hyperkitty and add user for executing apps. #
>>> It's
>>> important that the user has the UID/GID 82 so nginx can access the
>>> files. RUN set -ex \&& apk add --no-cache --virtual .build-deps
>>> gcc
>>> libc-dev linux-headers git \postgresql-dev \&& apk add --no-cache
>>> --virtual .mailman-rundeps bash sassc mailcap \postgresql-client
>>> curl \&& pip install -U django==2.2 \&& pip install
>>> git+https://gitlab.com/eestec/mailmanclient
>>> \git+https://gitlab.com/mailman/hyperkitty@c9fa4d4bfc295438d3e01cd93090064d004cf44d
>>> \git+https://gitlab.com/eestec/django-mailman3 \whoosh \uwsgi
>>> \psycopg2 \dj-database-url \typing \&& apk del .build-deps \&&
>>> addgroup -S -g 82 hyperkitty \&& adduser -S -u 82 -G hyperkitty
>>> hyperkitty \&& chmod u+x /usr/local/bin/docker-entrypoint.sh# Add
>>> needed files for uwsgi server + settings for django COPY
>>> assets/__init__.py /home/hyperkittyCOPY assets/manage.py
>>> /home/hyperkittyCOPY assets/urls.py /home/hyperkittyCOPY
>>> assets/wsgi.py /home/hyperkittyCOPY assets/uwsgi.ini
>>> /home/hyperkittyCOPY assets/settings.py /home/hyperkitty# Change
>>> ownership for uwsgi+django files and set execution rights for
>>> management script RUN chown -R hyperkitty /home/hyperkitty &&
>>> chmod
>>> u+x /home/hyperkitty/manage.py# Make sure we are in the correct
>>> working dir WORKDIR /home/hyperkittyEXPOSE 8080 8081# Use stop
>>> signal for uwsgi server STOPSIGNAL SIGINTENTRYPOINT
>>> ["docker-entrypoint.sh"]CMD ["uwsgi", "--ini",
>>> "/home/hyperkitty/uwsgi.ini"]
>>>
>>> On 4/27/19 7:58 PM, Abhilash Raj wrote:
>>>> On Sat, Apr 27, 2019, at 9:40 AM, Alain Kohli wrote:
>>>>> I have run "python manage.py rebuild_index" before, doesn't that do
>>>>> clear_index as well? Apart from that, I run hyperkitty in a docker
>>>>> container and didn't know fulltext_index should be persistent, so
>>>>> that
>>>>> got deleted after every version update for sure.
>>>> Which images are you using and how are you deploying them?
>>>>
>>>> You should persist fulltext_index, yes, and possibly logs if you need
>>>> them for debugging later.
>>>>
>>>> Can you paste the entire error traceback?
>>>>
>>>>> On 4/26/19 10:18 PM, Mark Sapiro wrote:
>>>>>> On 4/26/19 11:14 AM, Alain Kohli wrote:
>>>>>>> I see loads of "A string literal cannot contain NUL (0x00)
>>>>>>> characters."
>>>>>>> messages, but I haven't found missing messages in the archives
>>>>>>> yet. Not
>>>>>>> sure how that could be related, though. Apart from that I don't see
>>>>>>> anything unusual. The other jobs (quarter_hourly, hourly, etc.)
>>>>>>> seem to
>>>>>>> run and finish normally.
>>>>>> Did you upgrade from a Python 2.7 version of HyperKitty to a
>>>>>> Python 3
>>>>>> version? The Haystack/Whoosh search engine databases are not
>>>>>> compatible
>>>>>> between the two and "A string literal cannot contain NUL (0x00)
>>>>>> characters." is the symptom.
>>>>>>
>>>>>> You need to run 'python manage.py clear_index' or just remove all
>>>>>> the
>>>>>> files from the directory defined as 'PATH' under
>>>>>> HAYSTACK_CONNECTIONS in
>>>>>> your settings file (normally 'fulltext_index' in the same
>>>>>> directory that
>>>>>> contains your settings.py.
>>>>>>
>>>>> _______________________________________________
>>>>> 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/
>>>>>
>>> _______________________________________________
>>> 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/
>>>
>
7 years, 5 months
[MM3-users] Re: Mailman sends Welcome emails, but does not send [List] postings emails
by Nelson Strother
Here are the (four identical, but for timestamps and process numbers, at
a glance) tracebacks, and some related info:
--- from /var/log/syslog
Jun 8 03:35:47 localhost mailman[13107]: Traceback (most recent call last):
Jun 8 03:35:48 localhost mailman[13107]: File
"/var/tmp/mailman/.local/bin/runner", line 8, in <module>
Jun 8 03:35:48 localhost mailman[13107]: sys.exit(main())
Jun 8 03:35:48 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1130, in __call__
Jun 8 03:35:48 localhost mailman[13107]: return self.main(*args,
**kwargs)
Jun 8 03:35:48 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1055, in main
Jun 8 03:35:48 localhost mailman[13107]: rv = self.invoke(ctx)
Jun 8 03:35:48 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1404, in invoke
Jun 8 03:35:48 localhost mailman[13107]: return
ctx.invoke(self.callback, **ctx.params)
Jun 8 03:35:48 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 760, in invoke
Jun 8 03:35:48 localhost mailman[13107]: return __callback(*args,
**kwargs)
Jun 8 03:35:48 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/decorators.py",
line 26, in new_func
Jun 8 03:35:48 localhost mailman[13107]: return
f(get_current_context(), *args, **kwargs)
Jun 8 03:35:48 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/bin/runner.py",
line 160, in main
Jun 8 03:35:49 localhost mailman[13107]: initialize(config_file, verbose)
Jun 8 03:35:49 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 231, in initialize
Jun 8 03:35:49 localhost mailman[13107]:
initialize_2(propagate_logs=propagate_logs)
Jun 8 03:35:49 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 189, in initialize_2
Jun 8 03:35:49 localhost mailman[13107]: config.db =
getUtility(IDatabaseFactory, utility_name).create()
Jun 8 03:35:49 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/database/factory.py",
line 60, in create
Jun 8 03:35:49 localhost mailman[13107]: return database
Jun 8 03:35:49 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 470, in __exit__
Jun 8 03:35:49 localhost mailman[13107]: self.unlock()
Jun 8 03:35:49 localhost mailman[13107]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 420, in unlock
Jun 8 03:35:49 localhost mailman[13107]: raise
NotLockedError('Already unlocked')
Jun 8 03:35:49 localhost mailman[13107]:
flufl.lock._lockfile.NotLockedError: Already unlocked
Jun 8 03:35:49 localhost dhclient[633]: RCV: Advertise message on
ens192 from fe80::250:56ff:fe95:b457.
Jun 8 03:36:46 localhost mailman[13100]: Traceback (most recent call last):
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/bin/runner", line 8, in <module>
Jun 8 03:36:46 localhost mailman[13100]: sys.exit(main())
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1130, in __call__
Jun 8 03:36:46 localhost mailman[13100]: return self.main(*args,
**kwargs)
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1055, in main
Jun 8 03:36:46 localhost mailman[13100]: rv = self.invoke(ctx)
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1404, in invoke
Jun 8 03:36:46 localhost mailman[13100]: return
ctx.invoke(self.callback, **ctx.params)
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 760, in invoke
Jun 8 03:36:46 localhost mailman[13100]: return __callback(*args,
**kwargs)
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/decorators.py",
line 26, in new_func
Jun 8 03:36:46 localhost mailman[13100]: return
f(get_current_context(), *args, **kwargs)
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/bin/runner.py",
line 160, in main
Jun 8 03:36:46 localhost mailman[13100]: initialize(config_file, verbose)
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 231, in initialize
Jun 8 03:36:46 localhost mailman[13100]:
initialize_2(propagate_logs=propagate_logs)
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 189, in initialize_2
Jun 8 03:36:46 localhost mailman[13100]: config.db =
getUtility(IDatabaseFactory, utility_name).create()
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/database/factory.py",
line 60, in create
Jun 8 03:36:46 localhost mailman[13100]: return database
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 470, in __exit__
Jun 8 03:36:46 localhost mailman[13100]: self.unlock()
Jun 8 03:36:46 localhost mailman[13100]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 420, in unlock
Jun 8 03:36:46 localhost mailman[13100]: raise
NotLockedError('Already unlocked')
Jun 8 03:36:46 localhost mailman[13100]:
flufl.lock._lockfile.NotLockedError: Already unlocked
Jun 8 03:36:56 localhost mailman[13109]: Traceback (most recent call last):
Jun 8 03:36:56 localhost mailman[13109]: File
"/var/tmp/mailman/.local/bin/runner", line 8, in <module>
Jun 8 03:36:56 localhost mailman[13109]: sys.exit(main())
Jun 8 03:36:56 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1130, in __call__
Jun 8 03:36:56 localhost mailman[13109]: return self.main(*args,
**kwargs)
Jun 8 03:36:56 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1055, in main
Jun 8 03:36:56 localhost mailman[13109]: rv = self.invoke(ctx)
Jun 8 03:36:56 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1404, in invoke
Jun 8 03:36:56 localhost mailman[13109]: return
ctx.invoke(self.callback, **ctx.params)
Jun 8 03:36:56 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 760, in invoke
Jun 8 03:36:56 localhost mailman[13109]: return __callback(*args,
**kwargs)
Jun 8 03:36:56 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/decorators.py",
line 26, in new_func
Jun 8 03:36:56 localhost mailman[13109]: return
f(get_current_context(), *args, **kwargs)
Jun 8 03:36:56 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/bin/runner.py",
line 160, in main
Jun 8 03:36:56 localhost postfix/anvil[13147]: statistics: max
connection rate 1/60s for (smtp:163.123.143.10) at Jun 8 03:33:27
Jun 8 03:37:00 localhost postfix/anvil[13147]: statistics: max
connection count 1 for (smtp:163.123.143.10) at Jun 8 03:33:27
Jun 8 03:37:00 localhost mailman[13109]: initialize(config_file, verbose)
Jun 8 03:37:01 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 231, in initialize
Jun 8 03:37:01 localhost mailman[13109]:
initialize_2(propagate_logs=propagate_logs)
Jun 8 03:37:01 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 189, in initialize_2
Jun 8 03:37:01 localhost mailman[13109]: config.db =
getUtility(IDatabaseFactory, utility_name).create()
Jun 8 03:37:01 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/database/factory.py",
line 60, in create
Jun 8 03:37:01 localhost mailman[13109]: return database
Jun 8 03:37:01 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 470, in __exit__
Jun 8 03:37:01 localhost mailman[13109]: self.unlock()
Jun 8 03:37:01 localhost mailman[13109]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 420, in unlock
Jun 8 03:37:01 localhost mailman[13109]: raise
NotLockedError('Already unlocked')
Jun 8 03:37:01 localhost mailman[13109]:
flufl.lock._lockfile.NotLockedError: Already unlocked
Jun 8 03:37:01 localhost postfix/anvil[13147]: statistics: max cache
size 1 at Jun 8 03:33:27
Jun 8 03:37:01 localhost mailman[13110]: Traceback (most recent call last):
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/bin/runner", line 8, in <module>
Jun 8 03:37:01 localhost mailman[13110]: sys.exit(main())
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1130, in __call__
Jun 8 03:37:01 localhost mailman[13110]: return self.main(*args,
**kwargs)
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1055, in main
Jun 8 03:37:01 localhost mailman[13110]: rv = self.invoke(ctx)
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 1404, in invoke
Jun 8 03:37:01 localhost mailman[13110]: return
ctx.invoke(self.callback, **ctx.params)
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/core.py",
line 760, in invoke
Jun 8 03:37:01 localhost mailman[13110]: return __callback(*args,
**kwargs)
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/click/decorators.py",
line 26, in new_func
Jun 8 03:37:01 localhost mailman[13110]: return
f(get_current_context(), *args, **kwargs)
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/bin/runner.py",
line 160, in main
Jun 8 03:37:01 localhost mailman[13110]: initialize(config_file, verbose)
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 231, in initialize
Jun 8 03:37:01 localhost mailman[13110]:
initialize_2(propagate_logs=propagate_logs)
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 189, in initialize_2
Jun 8 03:37:01 localhost mailman[13110]: config.db =
getUtility(IDatabaseFactory, utility_name).create()
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/database/factory.py",
line 60, in create
Jun 8 03:37:01 localhost mailman[13110]: return database
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 470, in __exit__
Jun 8 03:37:01 localhost mailman[13110]: self.unlock()
Jun 8 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 420, in unlock
Jun 8 03:37:01 localhost mailman[13110]: raise
NotLockedError('Already unlocked')
Jun 8 03:37:01 localhost mailman[13110]:
flufl.lock._lockfile.NotLockedError: Already unlocked
--- note that processes 13100, 13107, 13109, and 13110 are the ones
missing from the sequential process numbers shown by systemctl status
mailman below, were presumably momentarily the missing command, digests,
retry, and virgin runners ...
-- all of the recent lines from /var/tmp/mailman/logs/mailman.log :
Jun 08 03:24:17 2023 (4268) Master stopped
Jun 08 03:30:18 2023 (13093) Master started
Jun 08 03:43:31 2023 (13108) task runner started.
Jun 08 03:43:52 2023 (13108) Task runner evicted 0 expired pendings
Jun 08 03:43:52 2023 (13108) Task runner deleted 0 orphaned workflows
Jun 08 03:43:53 2023 (13108) Task runner deleted 0 orphaned requests
Jun 08 03:43:54 2023 (13108) Task runner deleted 0 orphaned messages
Jun 08 03:43:54 2023 (13108) Task runner evicted expired cache entries
Jun 08 03:44:17 2023 (13101) in runner started.
Jun 08 03:44:23 2023 (13105) pipeline runner started.
Jun 08 03:44:54 2023 (13103) nntp runner started.
Jun 08 03:45:59 2023 (13098) archive runner started.
Jun 08 03:46:06 2023 (13104) out runner started.
Jun 08 03:46:23 2023 (13099) bounces runner started.
Jun 08 03:46:43 2023 (13106) rest runner started.
[2023-06-08 03:46:43 +0000] [13106] [INFO] Starting gunicorn 20.1.0
[2023-06-08 03:46:43 +0000] [13106] [INFO] Listening at:
http://127.0.0.1:8001 (13106)
[2023-06-08 03:46:43 +0000] [13106] [INFO] Using worker: sync
[2023-06-08 03:46:44 +0000] [13345] [INFO] Booting worker with pid: 13345
[2023-06-08 03:46:44 +0000] [13346] [INFO] Booting worker with pid: 13346
Jun 08 03:46:46 2023 (13102) lmtp runner started.
Jun 08 04:44:04 2023 (13108) Task runner evicted 0 expired pendings
Jun 08 04:44:04 2023 (13108) Task runner deleted 0 orphaned workflows
Jun 08 04:44:05 2023 (13108) Task runner deleted 0 orphaned requests
Jun 08 04:44:05 2023 (13108) Task runner deleted 0 orphaned messages
Jun 08 04:44:05 2023 (13108) Task runner evicted expired cache entries
{with these last five lines being repeated hourly since ...}
--
root@localhost:~# systemctl status mailman
● mailman.service - GNU Mailing List Manager
Loaded: loaded (/etc/systemd/system/mailman.service; enabled;
vendor preset: enabled)
Active: active (running) since Thu 2023-06-08 03:30:18 UTC; 13h ago
Process: 13092 ExecStart=/var/tmp/mailman/.local/bin/mailman
--config /var/tmp/mailman/var/etc/mailman.cfg start (code=exited,
status=0/SUCCESS)
Main PID: 13093 (python3)
Tasks: 17 (limit: 465)
Memory: 73.5M
CPU: 15min 23.511s
CGroup: /system.slice/mailman.service
├─13093 /usr/bin/python3
/var/tmp/mailman/.local/bin/master -C /var/tmp/mailman/var/etc/mailman.cfg
├─13098 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=archive:0:1
├─13099 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=bounces:0:1
├─13101 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=in:0:1
├─13102 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=lmtp:0:1
├─13103 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=nntp:0:1
├─13104 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=out:0:1
├─13105 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=pipeline:0:1
├─13106 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=rest:0:1
├─13108 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=task:0:1
├─13345 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=rest:0:1
└─13346 /usr/bin/python3
/var/tmp/mailman/.local/bin/runner -C
/var/tmp/mailman/var/etc/mailman.cfg --runner=rest:0:1
Jun 08 03:37:01 localhost mailman[13110]:
initialize_2(propagate_logs=propagate_logs)
Jun 08 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/core/initialize.py",
line 189, in initialize_2
Jun 08 03:37:01 localhost mailman[13110]: config.db =
getUtility(IDatabaseFactory, utility_name).create()
Jun 08 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/mailman/database/factory.py",
line 60, in create
Jun 08 03:37:01 localhost mailman[13110]: return database
Jun 08 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 470, in __exit__
Jun 08 03:37:01 localhost mailman[13110]: self.unlock()
Jun 08 03:37:01 localhost mailman[13110]: File
"/var/tmp/mailman/.local/lib/python3.9/site-packages/flufl/lock/_lockfile.py",
line 420, in unlock
Jun 08 03:37:01 localhost mailman[13110]: raise
NotLockedError('Already unlocked')
Jun 08 03:37:01 localhost mailman[13110]:
flufl.lock._lockfile.NotLockedError: Already unlocked
root@localhost:~#
On 6/8/23 13:02, Mark Sapiro wrote:
> On 6/7/23 21:30, Nelson Strother wrote:
>>
>> Interestingly if I use `systemctl start mailman` thus far the results
>> are:
>> - the wall clock duration is shorter than when `mailman start` is
>> issued from the command line, and
>> -- either that all of the runners remain present once they are started,
>> -- or I can see in syslog a traceback from each missing runner
>> process starting from .../mailman/.local/bin/runner and ending with
>> "flufl.lock._lockfile.NotLockedError: Already unlocked".
>>
>> I do not yet understand how to make use of these clues, but at least
>> one can see an epitaph from each deceased process.
>
>
> The NotLockedError is most likely because a lock has been set with a
> lifetime and its lifetime has passed and some other process has broken
> the lock before the original process tries to unlock it. This probably
> has something to do with the long times to do start/restart.
>
> However, the only lock that should be involved is the master lock set
> by the master watcher, so I don't really understand what might be
> happening.
>
> What is the full traceback from these errors?
>
3 years, 5 months
[MM3-users] Re: signup / registration error - permissions and cert chains
by David Newman
On 12/31/21 4:56 PM, Mark Sapiro wrote:
> On 12/30/21 4:48 PM, David Newman wrote:
>>
>> The etc/mailman3/settings.py file includes these settings:
>>
>> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
>> EMAIL_HOST = 'localhost'
>> EMAIL_PORT = 25
>
> These 2 (localhost and port 25) are defaults.
>
>
>> EMAIL_HOST_USER = 'dnewman(a)networktest.com'
>> EMAIL_HOST_PASSWORD = 'wouldnt-you-like-to-know'
>
> Why are you authenticating? This should not be necessary.
>
>
>> EMAIL_USE_TLS = 'True'
>> EMAIL_SSL_CERTFILE = '/etc/ssl/certs/myhost.crt'
>> EMAIL_SSL_KEYFILE = '/etc/ssl/private/myhost.key'
>
> And why are you trying to use TLS? This is only for SMTP between Django
> and the MTA on the loopback port. TLS is overkill.
After stripping this down to the defaults:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
and restarting mailman3 (necessary?) and mailmanweb, the system emails
me (as alias for root) an error like the one pasted below after I try
creating a new user account.
After changing EMAIL_HOST to the system's canonical FQDN and again
restarting mailman3 and mailmanweb, the error is the same, and still
from postorius@localhost.
Also, FWIW, the user is created and is visible in the Django admin
panel, but any login attempt produces the same error as the one pasted
below.
The hostname settings in postfix's main.cf are as follows:
# hostname
myhostname = mail9.networktest.com
myorigin = /etc/mailname
mydomain = networktest.com
Here is the error, sanitized with 'dom1.tld' and 'dom2.tld' addresses.
Thanks in advance for additional troubleshooting clues.
Internal Server Error: /accounts/signup/
SMTPRecipientsRefused at /accounts/signup/
{'newuser(a)dom1.tld': (504, b'5.5.2 <postorius@localhost>: Sender address
rejected: need fully-qualified address')}
Request Method: POST
Request URL: http://mail.dom2.tld/accounts/signup/
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.9.2
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python39.zip',
'/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload',
'/opt/mailman/venv/lib/python3.9/site-packages']
Server time: Fri, 31 Dec 2021 17:30:30 -0800
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'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']
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/handlers/exception.py",
line 34, in inner
response = get_response(request)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/handlers/base.py",
line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/handlers/base.py",
line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/views/generic/base.py",
line 71, in view
return self.dispatch(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/utils/decorators.py",
line 43, in _wrapper
return bound_method(*args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/views/decorators/debug.py",
line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
230, in dispatch
return super(SignupView, self).dispatch(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
74, in dispatch
response = super(RedirectAuthenticatedUserMixin, self).dispatch(
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
204, in dispatch
return super(CloseableSignupMixin, self).dispatch(request, *args,
**kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/views/generic/base.py",
line 97, in dispatch
return handler(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
102, in post
response = self.form_valid(form)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
248, in form_valid
return complete_signup(
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/utils.py", line
209, in complete_signup
return perform_login(
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/utils.py", line
175, in perform_login
send_email_confirmation(request, user, signup=signup, email=email)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/utils.py", line
346, in send_email_confirmation
email_address.send_confirmation(request, signup=signup)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/models.py",
line 62, in send_confirmation
confirmation.send(request, signup=signup)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/models.py",
line 169, in send
get_adapter(request).send_confirmation_mail(request, self, signup)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/adapter.py",
line 464, in send_confirmation_mail
self.send_mail(email_template,
emailconfirmation.email_address.email, ctx)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/adapter.py",
line 136, in send_mail
msg.send()
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/mail/message.py",
line 284, in send
return self.get_connection(fail_silently).send_messages([self])
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/mail/backends/smtp.py",
line 109, in send_messages
sent = self._send(message)
File
"/opt/mailman/venv/lib/python3.9/site-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.9/smtplib.py", line 885, in sendmail
raise SMTPRecipientsRefused(senderrs)
Exception Type: SMTPRecipientsRefused at /accounts/signup/
Exception Value: {'newuser(a)dom1.tld': (504, b'5.5.2
<postorius@localhost>: Sender address rejected: need fully-qualified
address')}
Request information:
USER: AnonymousUser
GET: No GET data
POST:
csrfmiddlewaretoken =
'Nk6NjFAaf4bWPOWUZJzrKcTHvIHIXVjSdTb79KeRoM9LpRqK9ljKhXWdWKbfAwMf'
email = 'newuser(a)dom1.tld'
username = 'newuser(a)dom1.tld'
password1 = '********************'
password2 = '********************'
next = '/accounts/login/'
FILES: No FILES data
COOKIES:
roundcube_sessid = 'epth5c1jhmbjrfquire5p9chd9'
csrftoken =
'uRqeKMsMSoItwOWLTRXT7dEwGoN0cCy2UqvyAR6t16Gi6RqB3tHcEYH27qhxPd1p'
META:
CONTENT_LENGTH = '217'
CONTENT_TYPE = 'application/x-www-form-urlencoded'
CSRF_COOKIE =
'uRqeKMsMSoItwOWLTRXT7dEwGoN0cCy2UqvyAR6t16Gi6RqB3tHcEYH27qhxPd1p'
HTTP_ACCEPT =
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9'
HTTP_CACHE_CONTROL = 'max-age=0'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'roundcube_sessid=epth5c1jhmbjrfquire5p9chd9;
csrftoken=uRqeKMsMSoItwOWLTRXT7dEwGoN0cCy2UqvyAR6t16Gi6RqB3tHcEYH27qhxPd1p'
HTTP_DNT = '1'
HTTP_HOST = 'mail.dom2.tld'
HTTP_ORIGIN = 'https://mail.dom2.tld'
HTTP_REFERER = 'https://mail.dom2.tld/'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_SEC_GPC = '1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
HTTP_X_FORWARDED_FOR = '75.82.86.131'
PATH_INFO = '/accounts/signup/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'POST'
REQUEST_URI = '/accounts/signup/'
SCRIPT_NAME = ''
SERVER_NAME = 'mail9'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
uwsgi.core = 1
uwsgi.node = b'mail9'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7fb27a13a3b0>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'http'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'hostmaster(a)networktest.com'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', '162.251.233.247',
'mail9.networktest.com', 'lists.networktest.com', 'lists.dom1.tld',
'mail.dom2.tld']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js':
'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css':
['compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.cssmin.rCSSMinFilter'], 'js':
['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fb27d6eb550>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile}
{outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':
'mailmanweb', 'USER': 'mailman', 'PASSWORD': '********************',
'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'charset': 'utf8mb4'},
'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME':
None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y
%H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER =
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius@localhost'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail9.networktest.com'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS =
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = True
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/opt/mailman/web/fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', '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']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'),
('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn',
'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'),
('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'),
('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au',
'Australian English'), ('en-gb', 'British English'), ('eo',
'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'),
('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni',
'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et',
'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'),
('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish
Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr',
'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy',
'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'),
('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka',
'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'),
('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt',
'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml',
'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'),
('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn',
'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl',
'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'),
('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl',
'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn',
'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'),
('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'),
('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'),
('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant',
'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'},
'file': {'level': 'INFO', 'class':
'logging.handlers.WatchedFileHandler', 'filename':
'/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius':
{'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters':
{'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s
%(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm':
'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)localhost.local'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 2
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'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'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS =
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
dn
>
>
>> But this might only be for email, not Postorius/Django.
>
>
> Actually it is only for mail from Django
>
>
4 years, 10 months
[MM3-users] Re: uncaught bounce messages
by Seth Seeger
On Sat, Oct 23, 2021, at 9:05 PM, Mark Sapiro wrote:
> On 10/23/21 5:29 PM, David Bremner wrote:
>>
>> Oh great, I just upgraded to Mailman 3.3.0, so I'll see what happens.
>>
>> I did notice a bunch (10 or 20?) of subscribers being disabled for being
>> over the bounce threshhold right after the upgrade, I wonder if that is
>> related.
>
>
> See the thread at
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
>
> There is an example `mailman shell` session at
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
> that will reenable delivery for members disabled by bounce if you think
> the disables were spurious.
I have just upgraded to 3.3.4 from 3.3.2 (via docker).
Do we need to do anything more than reset the delivery status? I am getting (seemingly) continual emails about bounces. I keep running the recipe in the link which resets everyone's delivery status. I've grep'd one member's address out of bounce.log (see below my signature).
Is it just catching up on old bounces?
Thanks,
Seth
Oct 26 14:30:03 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 1.
Oct 26 14:30:10 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:30:56 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 2.
Oct 26 14:30:59 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:31:10 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:32:31 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 1.
Oct 26 14:32:39 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 2.
Oct 26 14:32:46 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:33:04 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 3.
Oct 26 14:33:49 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 4.
Oct 26 14:33:52 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:33:55 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:33:58 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:34:01 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:34:35 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 5.
Oct 26 14:34:35 2021 (37) Disabling delivery for max(a)example.com on list listname.lists.example.net by bounce
Oct 26 14:34:35 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score 5 >= threshold 5, disabling delivery.
Oct 26 14:34:39 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:35:06 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:35:09 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:35:18 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:35:20 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:36:01 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:19 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:27 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:33 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:36 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:40 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:42 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:44 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:47 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:49 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:51 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:37:58 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:38:01 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:38:14 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:38:15 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:38:18 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:40:38 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 1.
Oct 26 14:40:51 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 2.
Oct 26 14:41:02 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 3.
Oct 26 14:41:10 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 14:41:40 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 4.
Oct 26 14:41:43 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 5.
Oct 26 14:41:43 2021 (37) Disabling delivery for max(a)example.com on list listname.lists.example.net by bounce
Oct 26 14:41:43 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score 5 >= threshold 5, disabling delivery.
Oct 26 14:41:48 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:41:52 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:41:54 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:41:57 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:41:59 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:12 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:17 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:24 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:45 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:47 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:50 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:53 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:42:55 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:43:05 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 6.
Oct 26 14:43:05 2021 (37) Disabling delivery for max(a)example.com on list listname.lists.example.net by bounce
Oct 26 14:43:05 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score 6 >= threshold 5, disabling delivery.
Oct 26 14:43:17 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:43:19 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:43:22 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:43:25 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:43:31 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:44:57 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:45:41 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:45:44 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:45:47 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:45:52 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:45:58 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:45:59 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:04 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:09 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:15 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:19 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:23 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:27 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:33 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:36 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:39 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:42 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:44 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:48 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:49 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:53 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:56 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:46:57 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:00 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:01 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:05 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:08 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:10 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:13 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:15 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:18 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:22 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:24 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:27 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:28 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:31 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:33 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:35 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:38 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:40 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:42 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:45 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:46 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:49 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:51 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:54 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:47:57 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:03 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:04 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:06 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:08 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:14 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:16 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:19 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:24 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:27 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:29 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:32 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:48:34 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:49:07 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:49:33 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:16 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:18 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:20 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:23 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:27 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:30 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:36 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:41 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:47 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:50:49 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 14:51:00 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 15:04:36 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 1.
Oct 26 15:04:39 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 15:04:41 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 15:04:43 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 15:04:54 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 2.
Oct 26 15:04:57 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 15:05:59 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 15:06:02 2021 (37) Member max(a)example.com already scored a bounce on list listname.lists.example.net today.
Oct 26 15:10:00 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 3.
Oct 26 15:11:51 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 4.
Oct 26 15:12:30 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score = 5.
Oct 26 15:12:30 2021 (37) Disabling delivery for max(a)example.com on list listname.lists.example.net by bounce
Oct 26 15:12:30 2021 (37) Member max(a)example.com on list listname.lists.example.net, bounce score 5 >= threshold 5, disabling delivery.
Oct 26 15:12:45 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 15:12:52 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
Oct 26 15:14:36 2021 (37) Residual bounce received for member max(a)example.com on list listname.lists.example.net.
5 years
[MM3-users] Re: using SSH/TLS with external MTA
by Roland Giesler
On 2024/07/28 00:39, Mark Sapiro wrote:
> On 7/27/24 15:16, Roland Giesler via Mailman-users wrote:
>>
>> The server runs power-mailinabox, which uses Postfix indeed. All my
>> mail, and quite a few others' mail is sent from the using SMTP-Auth
>> on port 465. Actually, this message is sent via that server too. So
>> it's clear to me that MM3 is not authenticating for some reason.
>
> What do you see in Mailman's smtp.log and in the mail.log on the mail
> server?
The smtp log is in syslog...
Jul 28 12:48:19 mailman postfix/smtpd[63855]: connect from localhost[::1]
Jul 28 12:48:19 mailman postfix/smtpd[63855]: NOQUEUE: reject: RCPT from
localhost[::1]: 454 4.7.1 <roland(a)giesler.za.net>: Relay access denied;
from=<postorius(a)giesler.za.net> to=<roland(a)giesler.za.net> proto=ESMTP
helo=<mailman.fast.za.net>
Jul 28 12:48:19 mailman postfix/smtpd[63769]: lost connection after RSET
from localhost[::1]
Jul 28 12:48:19 mailman postfix/smtpd[63769]: disconnect from
localhost[::1] ehlo=1 mail=1 rcpt=0/1 rset=1 commands=3/4
Jul 28 12:48:19 mailman postfix/smtpd[63769]: connect from localhost[::1]
Jul 28 12:48:19 mailman postfix/smtpd[63769]: 4D0DE120A5B:
client=localhost[::1]
Jul 28 12:48:19 mailman postfix/cleanup[63291]: 4D0DE120A5B:
message-id=<172217089931.2150.9004701361968608890(a)mailman.fast.za.net>
Jul 28 12:48:19 mailman postfix/qmgr[330]: 4D0DE120A5B:
from=<root(a)giesler.za.net>, size=21782, nrcpt=1 (queue active)
Jul 28 12:48:19 mailman postfix/smtpd[63769]: disconnect from
localhost[::1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Jul 28 12:48:19 mailman postfix/local[63575]: 4D0DE120A5B:
to=<root@localhost>, relay=local, delay=0.01, delays=0.01/0/0/0,
dsn=2.0.0, status=sent (delivered to mailbox)
Jul 28 12:48:19 mailman postfix/qmgr[330]: 4D0DE120A5B: removed
I think I see what's going on here. The mail is being sent from
postorius(a)giesler.za.net and there is no log entry on
box2.gtahardware.co.za that shows this logon attempt. So it seems it's
not going to that server, but rather to the local postfix.
A mail was sent to root on the localhost with the following content:
Return-Path: <root(a)giesler.za.net>
X-Original-To: root@localhost
Delivered-To: root@localhost
Received: from mailman.fast.za.net (localhost [IPv6:::1])
by mailman.localdomain (Postfix) with ESMTP id 2174A120A5B
for <root@localhost>; Sun, 28 Jul 2024 13:11:03 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error:
/accounts/login/
From: root(a)giesler.za.net
To: root@localhost
Date: Sun, 28 Jul 2024 13:11:03 -0000
Message-ID: <172217226313.2150.10895652368679013629(a)mailman.fast.za.net>
Internal Server Error: /accounts/login/
SMTPRecipientsRefused at /accounts/login/
{'roland(a)giesler.za.net': (454, b'4.7.1 <roland(a)giesler.za.net>: Relay acce=
ss denied')}
Request Method: POST
Request URL: http://192.168.161.103/accounts/login/
Django Version: 3.2.12
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.10.12
Python Path: ['.', '', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/u=
sr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', =
'/usr/lib/python3/dist-packages', '/usr/lib/python3.10/dist-packages']
Server time: Sun, 28 Jul 2024 15:11:03 +0200
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'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')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File
"/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line
47, in inner
response =3D get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py",
line 181, in _get_response
response =3D 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 =3D 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 =3D 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=3Dsuccess_url)
File "/usr/lib/python3/dist-packages/allauth/account/forms.py", line
196, in login
ret =3D perform_login(
File "/usr/lib/python3/dist-packages/allauth/account/utils.py", line
175, in perform_login
send_email_confirmation(request, user, signup=3Dsignup, email=3Demail)
File "/usr/lib/python3/dist-packages/allauth/account/utils.py", line
346, in send_email_confirmation
email_address.send_confirmation(request, signup=3Dsignup)
File "/usr/lib/python3/dist-packages/allauth/account/models.py", line
62, in send_confirmation
confirmation.send(request, signup=3Dsignup)
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 =3D 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=3D'\r\n'))
File "/usr/lib/python3.10/smtplib.py", line 901, in sendmail
raise SMTPRecipientsRefused(senderrs)
Exception Type: SMTPRecipientsRefused at /accounts/login/
Exception Value: {'roland(a)giesler.za.net': (454, b'4.7.1
<roland(a)giesler.za.net>: Relay access denied')}
Request information:
USER: AnonymousUser
GET: No GET data
POST:
csrfmiddlewaretoken =3D
'41gp97hhfO2FhiEzOFLf1c5P3WLxk5TZvOgF0Qske6zI3EHtk8YK3w6wlEhLQAVS'
login =3D 'roland(a)giesler.za.net'
password =3D '********************'
next =3D '/postorius/lists/'
FILES: No FILES data
COOKIES:
csrftoken =3D
'aW8mw1heNIcuQ1YTMwnWMzi9DMaDFES6BJ8CnKshM0JxCn1NiZArOTjQVuGRb9UZ'
META:
CONTENT_LENGTH =3D '164'
CONTENT_TYPE =3D 'application/x-www-form-urlencoded'
CSRF_COOKIE =3D
'aW8mw1heNIcuQ1YTMwnWMzi9DMaDFES6BJ8CnKshM0JxCn1NiZArOTjQVuGRb9UZ'
DOCUMENT_ROOT =3D '/usr/share/nginx/html'
HTTP_ACCEPT =3D
'text/html,application/xhtml+xml,application/xml;q=3D0.9,image/avif,image/webp,image/apng,*/*;q=3D0.8'
HTTP_ACCEPT_ENCODING =3D 'gzip, deflate'
HTTP_ACCEPT_LANGUAGE =3D 'en-GB,en'
HTTP_CACHE_CONTROL =3D 'max-age=3D0'
HTTP_CONNECTION =3D 'keep-alive'
HTTP_CONTENT_LENGTH =3D '164'
HTTP_CONTENT_TYPE =3D 'application/x-www-form-urlencoded'
HTTP_COOKIE =3D
'csrftoken=3DaW8mw1heNIcuQ1YTMwnWMzi9DMaDFES6BJ8CnKshM0JxCn1NiZArOTjQVuGRb9UZ'
HTTP_HOST =3D '192.168.161.103'
HTTP_ORIGIN =3D 'http://192.168.161.103'
HTTP_REFERER =3D
'http://192.168.161.103/accounts/login/?next=3D/postorius/lists/'
HTTP_SEC_GPC =3D '1'
HTTP_UPGRADE_INSECURE_REQUESTS =3D '1'
HTTP_USER_AGENT =3D 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
PATH_INFO =3D '/accounts/login/'
QUERY_STRING =3D ''
REMOTE_ADDR =3D '192.168.131.150'
REMOTE_PORT =3D '60098'
REQUEST_METHOD =3D 'POST'
REQUEST_SCHEME =3D 'http'
REQUEST_URI =3D '/accounts/login/'
SCRIPT_NAME =3D ''
SERVER_NAME =3D ''
SERVER_PORT =3D '80'
SERVER_PROTOCOL =3D 'HTTP/1.1'
uwsgi.core =3D 1
uwsgi.node =3D b'mailman'
uwsgi.version =3D b'2.0.20-debian'
wsgi.errors =3D <_io.TextIOWrapper name=3D2 mode=3D'w'
encoding=3D'ANSI_X3.4-1968'>
wsgi.file_wrapper =3D <built-in function uwsgi_sendfile>
wsgi.input =3D <uwsgi._Input object at 0x7facb44bd530>
wsgi.multiprocess =3D False
wsgi.multithread =3D True
wsgi.run_once =3D False
wsgi.url_scheme =3D 'http'
wsgi.version =3D '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES =3D {}
ACCOUNT_AUTHENTICATION_METHOD =3D 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL =3D 'https'
ACCOUNT_EMAIL_REQUIRED =3D True
ACCOUNT_EMAIL_VERIFICATION =3D 'mandatory'
ACCOUNT_UNIQUE_EMAIL =3D True
ADMINS =3D "(('Mailman Suite Admin', 'root@localhost'),)"
ALLOWED_HOSTS =3D ['*']
APPEND_SLASH =3D True
AUTHENTICATION_BACKENDS =3D
"('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS =3D '********************'
AUTH_USER_MODEL =3D 'auth.User'
BASE_DIR =3D '/usr/share/mailman3-web'
CACHES =3D {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS =3D 'default'
CACHE_MIDDLEWARE_KEY_PREFIX =3D '********************'
CACHE_MIDDLEWARE_SECONDS =3D 600
COMPRESSORS =3D {'css': 'compressor.css.CssCompressor', 'js':
'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS =3D '()'
COMPRESS_CACHE_BACKEND =3D 'default'
COMPRESS_CACHE_KEY_FUNCTION =3D '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS =3D ''
COMPRESS_CLEAN_CSS_BINARY =3D 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS =3D ''
COMPRESS_CLOSURE_COMPILER_BINARY =3D 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD =3D 'mtime'
COMPRESS_DATA_URI_MAX_SIZE =3D 1024
COMPRESS_DEBUG_TOGGLE =3D None
COMPRESS_ENABLED =3D True
COMPRESS_FILTERS =3D {'css':
['compressor.filters.css_default.CssAbsoluteFilter'], 'js':
['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT =3D <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7facb6a52b00>
COMPRESS_MINT_DELAY =3D 30
COMPRESS_MTIME_DELAY =3D 10
COMPRESS_OFFLINE =3D True
COMPRESS_OFFLINE_CONTEXT =3D {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST =3D 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT =3D 31536000
COMPRESS_OUTPUT_DIR =3D 'CACHE'
COMPRESS_PARSER =3D 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS =3D '()'
COMPRESS_REBUILD_TIMEOUT =3D 2592000
COMPRESS_ROOT =3D '/var/lib/mailman3/web/static'
COMPRESS_STORAGE =3D 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT =3D {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL =3D '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER =3D '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE =3D False
COMPRESS_YUGLIFY_BINARY =3D 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS =3D '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS =3D '--terminal'
COMPRESS_YUI_BINARY =3D 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS =3D ''
COMPRESS_YUI_JS_ARGUMENTS =3D ''
CSRF_COOKIE_AGE =3D 31449600
CSRF_COOKIE_DOMAIN =3D None
CSRF_COOKIE_HTTPONLY =3D False
CSRF_COOKIE_NAME =3D 'csrftoken'
CSRF_COOKIE_PATH =3D '/'
CSRF_COOKIE_SAMESITE =3D 'Lax'
CSRF_COOKIE_SECURE =3D False
CSRF_FAILURE_VIEW =3D 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME =3D 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS =3D []
CSRF_USE_SESSIONS =3D False
DATABASES =3D {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':
'mailman3web', 'USER': 'mailman3web', 'PASSWORD':
'********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS':
{'init_command': "SET sql_mode=3D'STRICT_TRANS_TABLES'"},
'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None,
'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS =3D []
DATA_UPLOAD_MAX_MEMORY_SIZE =3D 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS =3D 1000
DATA_UPLOAD_MAX_NUMBER_FILES =3D 100
DATETIME_FORMAT =3D 'N j, Y, P'
DATETIME_INPUT_FORMATS =3D ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y
%H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT =3D 'N j, Y'
DATE_INPUT_FORMATS =3D ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG =3D False
DEBUG_PROPAGATE_EXCEPTIONS =3D False
DECIMAL_SEPARATOR =3D '.'
DEFAULT_AUTO_FIELD =3D 'django.db.models.AutoField'
DEFAULT_CHARSET =3D 'utf-8'
DEFAULT_EXCEPTION_REPORTER =3D 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER =3D
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE =3D 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL =3D 'postorius(a)giesler.za.net'
DEFAULT_HASHING_ALGORITHM =3D 'sha256'
DEFAULT_INDEX_TABLESPACE =3D ''
DEFAULT_TABLESPACE =3D ''
DISALLOWED_USER_AGENTS =3D []
EMAILNAME =3D 'giesler.za.net'
EMAIL_BACKEND =3D 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST =3D 'localhost'
EMAIL_HOST_PASSWORD =3D '********************'
EMAIL_HOST_USER =3D ''
EMAIL_PORT =3D 25
EMAIL_SSL_CERTFILE =3D None
EMAIL_SSL_KEYFILE =3D '********************'
EMAIL_SUBJECT_PREFIX =3D '[Django] '
EMAIL_TIMEOUT =3D None
EMAIL_USE_LOCALTIME =3D False
EMAIL_USE_SSL =3D False
EMAIL_USE_TLS =3D False
FILE_UPLOAD_DIRECTORY_PERMISSIONS =3D None
FILE_UPLOAD_HANDLERS =3D
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE =3D 2621440
FILE_UPLOAD_PERMISSIONS =3D 420
FILE_UPLOAD_TEMP_DIR =3D None
FILTER_VHOST =3D False
FIRST_DAY_OF_WEEK =3D 0
FIXTURE_DIRS =3D []
FORCE_SCRIPT_NAME =3D None
FORMAT_MODULE_PATH =3D None
FORM_RENDERER =3D 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS =3D {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME =3D 'localhost.local'
IGNORABLE_404_URLS =3D []
INSTALLED_APPS =3D "('hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', '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')"
INTERNAL_IPS =3D []
LANGUAGES =3D [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz',
'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg',
'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'),
('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'),
('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el',
'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb',
'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar',
'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx',
'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve',
'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa',
'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'),
('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he',
'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper
Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia',
'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'),
('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka',
'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'),
('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb',
'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk',
'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr',
'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokm=C3=A5l'), ('ne',
'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os',
'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'),
('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru',
'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'),
('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'),
('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'),
('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'),
('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'),
('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant',
'Traditional Chinese')]
LANGUAGES_BIDI =3D ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE =3D 'en-za'
LANGUAGE_COOKIE_AGE =3D None
LANGUAGE_COOKIE_DOMAIN =3D None
LANGUAGE_COOKIE_HTTPONLY =3D False
LANGUAGE_COOKIE_NAME =3D 'django_language'
LANGUAGE_COOKIE_PATH =3D '/'
LANGUAGE_COOKIE_SAMESITE =3D None
LANGUAGE_COOKIE_SECURE =3D False
LOCALE_PATHS =3D []
LOGGING =3D {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'},
'file': {'level': 'INFO', 'class':
'logging.handlers.RotatingFileHandler', 'filename':
'/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}}, 'formatters':
{'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s
%(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG =3D 'logging.config.dictConfig'
LOGIN_REDIRECT_URL =3D 'list_index'
LOGIN_URL =3D 'account_login'
LOGOUT_REDIRECT_URL =3D None
LOGOUT_URL =3D 'account_logout'
MAILMAN_ARCHIVER_FROM =3D "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY =3D '********************'
MAILMAN_REST_API_PASS =3D '********************'
MAILMAN_REST_API_URL =3D '********************'
MAILMAN_REST_API_USER =3D '********************'
MANAGERS =3D []
MEDIA_ROOT =3D ''
MEDIA_URL =3D '/'
MESSAGE_STORAGE =3D
'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS =3D {40: 'danger'}
MIDDLEWARE =3D "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES =3D {}
MONTH_DAY_FORMAT =3D 'F j'
NUMBER_GROUPING =3D 0
PASSWORD_HASHERS =3D '********************'
PASSWORD_RESET_TIMEOUT =3D '********************'
PASSWORD_RESET_TIMEOUT_DAYS =3D '********************'
POSTORIUS_TEMPLATE_BASE_URL =3D 'http://localhost/mailman3/'
PREPEND_WWW =3D False
Q_CLUSTER =3D {'timeout': 300, 'save_limit': 100, 'orm': 'default',
'poll': 5}
ROOT_URLCONF =3D 'urls'
SECRET_KEY =3D '********************'
SECURE_BROWSER_XSS_FILTER =3D False
SECURE_CONTENT_TYPE_NOSNIFF =3D True
SECURE_HSTS_INCLUDE_SUBDOMAINS =3D False
SECURE_HSTS_PRELOAD =3D False
SECURE_HSTS_SECONDS =3D 0
SECURE_PROXY_SSL_HEADER =3D None
SECURE_REDIRECT_EXEMPT =3D []
SECURE_REFERRER_POLICY =3D 'same-origin'
SECURE_SSL_HOST =3D None
SECURE_SSL_REDIRECT =3D False
SERVER_EMAIL =3D 'root(a)giesler.za.net'
SESSION_CACHE_ALIAS =3D 'default'
SESSION_COOKIE_AGE =3D 1209600
SESSION_COOKIE_DOMAIN =3D None
SESSION_COOKIE_HTTPONLY =3D True
SESSION_COOKIE_NAME =3D 'sessionid'
SESSION_COOKIE_PATH =3D '/'
SESSION_COOKIE_SAMESITE =3D 'Lax'
SESSION_COOKIE_SECURE =3D False
SESSION_ENGINE =3D 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE =3D False
SESSION_FILE_PATH =3D None
SESSION_SAVE_EVERY_REQUEST =3D False
SESSION_SERIALIZER =3D
'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE =3D 'settings'
SHORT_DATETIME_FORMAT =3D 'm/d/Y P'
SHORT_DATE_FORMAT =3D 'm/d/Y'
SIGNING_BACKEND =3D 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS =3D []
SITE_ID =3D 1
SOCIALACCOUNT_PROVIDERS =3D {}
STATICFILES_DIRS =3D '()'
STATICFILES_FINDERS =3D
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =3D
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT =3D '/var/lib/mailman3/web/static'
STATIC_URL =3D '/mailman3/static/'
TEMPLATES =3D [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS =3D []
TEST_RUNNER =3D 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR =3D ','
TIME_FORMAT =3D 'P'
TIME_INPUT_FORMATS =3D ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE =3D 'Africa/Johannesburg'
USE_I18N =3D True
USE_L10N =3D True
USE_THOUSAND_SEPARATOR =3D False
USE_TZ =3D True
USE_X_FORWARDED_HOST =3D True
USE_X_FORWARDED_PORT =3D False
WSGI_APPLICATION =3D 'wsgi.application'
X_FRAME_OPTIONS =3D 'DENY'
YEAR_MONTH_FORMAT =3D 'F Y'
2 years, 3 months
[MM3-users] Re: hyperkitty threads by month question
by Bryan Fields
Sorry for the delay, I was on some travel last week.
On 7/19/24 7:30 PM, Mark Sapiro wrote:
> That URL gives me as server error. What's in the Django (mailman-web)
> logs for that?
I did notice hitting a 500 error on occasion, sometimes it works.
When this happens, I get an email error below.
> Are you running all the Django periodic jobs and is qcluster running?
Ok, the docs said that qcluster service wasn't needed under uWSGI
https://docs.mailman3.org/en/latest/install/virtualenv.html#automatically-s…
qcluster does appear to be running:
218916 ? Sl 0:00 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
218929 ? Sl 0:00 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940851 ? Ss 0:00 /bin/sh -c /opt/mailman/venv/bin/mailman-web qcluster
3940854 ? S 0:01 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940856 ? S 117:32 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940860 ? S 0:28 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940861 ? Sl 3048:11 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
=== Email Error ===
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/list/nanog(a)nanog-mm3.keekles.org/
Internal Server Error: /archives/list/nanog(a)nanog-mm3.keekles.org/
NoReverseMatch at /archives/list/nanog(a)nanog-mm3.keekles.org/
Reverse for 'hk_archives_with_month' with keyword arguments '{'year': 999, 'mlist_fqdn': 'nanog(a)nanog-mm3.keekles.org', 'month': 12}' not found. 2 pattern(s) tried: ['archives/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$', 'hyperkitty/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$']
Request Method: GET
Request URL: http://nanog-mm3.keekles.org/archives/list/nanog@nanog-mm3.keekles.org/
Django Version: 4.2.13
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.10.12
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/opt/mailman/venv/lib/python3.10/site-packages']
Server time: Thu, 25 Jul 2024 18:16:17 +0000
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('allauth.account.middleware.AccountMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/lib/view_helpers.py", line 137, in inner
return func(request, *args, **kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/views/mlist.py", line 239, in overview
return render(request, "hyperkitty/overview.html", context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/templatetags/cache.py", line 53, in render
value = self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 208, in render
return template.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 177, in render
return self._render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 471, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/urls/base.py", line 88, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 828, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /archives/list/nanog(a)nanog-mm3.keekles.org/
Exception Value: Reverse for 'hk_archives_with_month' with keyword arguments '{'year': 999, 'mlist_fqdn': 'nanog(a)nanog-mm3.keekles.org', 'month': 12}' not found. 2 pattern(s) tried: ['archives/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$', 'hyperkitty/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$']
Raised during: hyperkitty.views.mlist.overview
Request information:
USER: nanogadmin
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = '********************'
sessionid = '********************'
META:
CSRF_COOKIE = '6F7ioB7blmJwLwKQLH0DPuAoWTW8mQGI'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.5'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_COOKIE = '********************'
HTTP_HOST = 'nanog-mm3.keekles.org'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'none'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:109.0) Gecko/20100101 Firefox/115.0'
HTTP_X_FORWARDED_FOR = '47.206.239.202'
HTTP_X_FORWARDED_HOST = 'nanog-mm3.keekles.org'
HTTP_X_FORWARDED_SERVER = 'nanog-mm3.keekles.org'
PATH_INFO = '/archives/list/nanog(a)nanog-mm3.keekles.org/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/archives/list/nanog(a)nanog-mm3.keekles.org/'
SCRIPT_NAME = ''
SERVER_NAME = 'nanog-mm3'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 1
uwsgi.node = b'nanog-mm3'
uwsgi.version = b'2.0.26'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x7ff7bcd9f850>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'root@localhost'), ('bryan fields', 'bryan(a)bryanfields.net'))"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'nanog-mm3.keekles.org']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7ff7bdb09750>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_MASKED = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = ['https://nanog-mm3.keekles.org']
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailmanweb', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATA_UPLOAD_MAX_NUMBER_FILES = 100
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'admin(a)nanog-mm3.keekles.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'PATH': '/opt/mailman/web/xapian_index', 'ENGINE': 'xapian_backend.XapianEngine'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('ckb', 'Central Kurdish (Sorani)'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}, 'q': {'level': 'WARNING', 'propagate': False, 'handlers': ['console', 'file']}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('allauth.account.middleware.AccountMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default', 'workers': 2}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECRET_KEY_FALLBACKS = '********************'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'admin(a)nanog-mm3.keekles.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'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'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_DEPRECATED_PYTZ = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
--
Bryan Fields
727-409-1194 - Voice
http://bryanfields.net
2 years, 3 months
[MM3-users] Re: Internal Server Errors in mailmanweb.log
by Washington Odhiambo
On Thu, Dec 25, 2025 at 10:46 AM Washington Odhiambo <odhiambo(a)gmail.com>
wrote:
>
>
> On Thu, Dec 25, 2025 at 12:07 AM Mark Sapiro <mark(a)msapiro.net> wrote:
>
>> On 12/18/25 03:07, Washington Odhiambo via Mailman-users wrote:
>> > I keep seeing several errors like the below in my mailmanweb.log and not
>> > sure what the causa is.
>>
>> What is your HyperKitty version? If it is 1.3.12 from PyPI and not the
>> latest from gitlab, See
>> https://gitlab.com/mailman/hyperkitty/-/issues/529 and
>> https://gitlab.com/mailman/hyperkitty/-/merge_requests/660 for a patch
>> to fix this.
>>
>
> It is version 1.3.12. Patch applied.
>
> Thank you.
>
For some reason, my mailmanweb (I am using Gunicorn) has been misbehaving
lately.
The last change I ever made to my MM3 installation is when I applied the
patch mentioned in this thread.
The misbehavior manifests in the Postrorius web UI becoming inaccessible,
much as mailmanweb is running.
Checking on its status, I see very high RAM utilization:
```
root@eu:/home/wash# systemctl status mailmanweb
● mailmanweb.service - GNU Mailman Web UI
Loaded: loaded (/etc/systemd/system/mailmanweb.service; enabled;
preset: enabled)
Active: active (running) since Thu 2026-01-22 11:17:17 EAT; 20min ago
Main PID: 3684 (gunicorn)
Tasks: 3 (limit: 28775)
Memory: 2.1G
CPU: 9min 8.614s
CGroup: /system.slice/mailmanweb.service
├─ 3684 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
├─24724 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
└─25445 /opt/mailman/venv/bin/python3
/opt/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf.py
mailman_web.wsgi:application
Jan 22 11:17:17 eu.kictanet.or.ke systemd[1]: Started mailmanweb.service -
GNU Mailman Web UI.
Jan 22 11:17:20 eu.kictanet.or.ke gunicorn[3900]: Updated PYTHONPATH to :
/etc/mailman3/:/etc/mailman3
Jan 22 11:17:20 eu.kictanet.or.ke gunicorn[3863]: Updated PYTHONPATH to :
/etc/mailman3/:/etc/mailman3
Jan 22 11:18:00 eu.kictanet.or.ke gunicorn[18740]: Updated PYTHONPATH to :
/etc/mailman3/:/etc/mailman3
Jan 22 11:18:03 eu.kictanet.or.ke gunicorn[19263]: Updated PYTHONPATH to :
/etc/mailman3/:/etc/mailman3
Jan 22 11:18:32 eu.kictanet.or.ke gunicorn[24724]: Updated PYTHONPATH to :
/etc/mailman3/:/etc/mailman3
Jan 22 11:18:34 eu.kictanet.or.ke gunicorn[25445]: Updated PYTHONPATH to :
/etc/mailman3/:/etc/mailman3
root@eu:/home/wash#
```
And my /etc/mailman3/gunicorn.conf:
```
bind = ['127.0.0.1:8010']
proc_name = "mailman-web"
# If you are having response issues you can tune the number of workers.
# The suggested starting point is (2 x $num_cores) + 1
# See https://docs.gunicorn.org/en/latest/design.html#how-many-workers
workers = 2
chdir = "/opt/mailman/mm"
pidfile = "/opt/mailman/mm/var/gunicorn.pid"
accesslog = "/opt/mailman/mm/var/logs/access.log"
errorlog = "/opt/mailman/mm/var/logs/error.log"
```
The errorlog file has these:
[2026-01-22 00:00:06 +0300] [3837679] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-KBKSRHFZN3JH2LLDWYO2SGF6IZJTTOTK.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 331, in _query
self._do_get_result(db)
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 136, in _do_get_result
self._result = result = self._get_result()
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 363, in _get_result
return self._get_db().store_result()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File "/opt/mailman/venv/lib/python3.11/site-packages/django/db/utils.py",
line 70, in __exit__
def __exit__(self, exc_type, exc_value, traceback):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 00:00:06 +0300] [3837679] [INFO] Worker exiting (pid: 3837679)
[2026-01-22 00:00:06 +0300] [3837389] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-BJZOZO7YBWUSMA5X5MMO2YMMCJCCPKTW.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 331, in _query
self._do_get_result(db)
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 136, in _do_get_result
self._result = result = self._get_result()
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 363, in _get_result
return self._get_db().store_result()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File "/opt/mailman/venv/lib/python3.11/site-packages/django/db/utils.py",
line 70, in __exit__
def __exit__(self, exc_type, exc_value, traceback):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 00:00:06 +0300] [3837389] [INFO] Worker exiting (pid: 3837389)
[2026-01-22 00:00:17 +0300] [4126021] [INFO] Starting gunicorn 23.0.0
[2026-01-22 00:00:17 +0300] [4126021] [INFO] Listening at:
http://127.0.0.1:8010 (4126021)
[2026-01-22 00:00:17 +0300] [4126021] [INFO] Using worker: sync
[2026-01-22 00:00:17 +0300] [4126033] [INFO] Booting worker with pid:
4126033
[2026-01-22 00:00:17 +0300] [4126034] [INFO] Booting worker with pid:
4126034
[2026-01-22 00:16:13 +0300] [4126021] [CRITICAL] WORKER TIMEOUT
(pid:4126033)
[2026-01-22 00:16:13 +0300] [4126033] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-4TAUYJ42B7TW6RMTTD6NY73CVSW5TYOC.mbox.gz
Traceback (most recent call last):
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1969, in
get_address
token, value = get_group(value)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1927, in
get_group
raise errors.HeaderParseError("expected ':' at end of group "
email.errors.HeaderParseError: expected ':' at end of group display name
but found '@lists.kictanet.or.ke'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1795, in
get_mailbox
token, value = get_name_addr(value)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1781, in
get_name_addr
token, value = get_angle_addr(value)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1706, in
get_angle_addr
raise errors.HeaderParseError(
email.errors.HeaderParseError: expected angle-addr but found '@
lists.kictanet.or.ke'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 173, in as_message
msg[header_name] = unfold(header_value)
~~~^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 436, in __setitem__
self._headers.append(self.policy.header_store_parse(name, val))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/policy.py", line 148, in
header_store_parse
return (name, self.header_factory(name, value))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 604, in __call__
return self[name](name, value)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 192, in __new__
cls.parse(value, kwds)
File "/usr/lib/python3.11/email/headerregistry.py", line 342, in parse
kwds['parse_tree'] = address_list = cls.value_parser(value)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 333, in
value_parser
address_list, value = parser.get_address_list(value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1992, in
get_address_list
token, value = get_address(value)
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1972, in
get_address
token, value = get_mailbox(value)
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1798, in
get_mailbox
token, value = get_addr_spec(value)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1644, in
get_addr_spec
token, value = get_local_part(value)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1481, in
get_local_part
local_part.value.encode('ascii')
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 00:16:13 +0300] [4126033] [INFO] Worker exiting (pid: 4126033)
[2026-01-22 00:16:14 +0300] [4126021] [ERROR] Worker (pid:4126033) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 00:16:14 +0300] [4149001] [INFO] Booting worker with pid:
4149001
[2026-01-22 04:03:41 +0300] [4126021] [CRITICAL] WORKER TIMEOUT
(pid:4126034)
[2026-01-22 04:03:41 +0300] [4126034] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-PCHD3VO4FWCMYLJVZBAVAQWWTGGRRYQP.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 04:03:41 +0300] [4126034] [INFO] Worker exiting (pid: 4126034)
[2026-01-22 04:03:42 +0300] [4126021] [ERROR] Worker (pid:4126034) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 04:03:42 +0300] [290024] [INFO] Booting worker with pid: 290024
[2026-01-22 05:38:12 +0300] [4126021] [CRITICAL] WORKER TIMEOUT
(pid:4149001)
[2026-01-22 05:38:12 +0300] [4149001] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-TT3DIZNJFJHQ3ZYE34Y7O732SYAT5N74.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 190, in as_message
msg.add_attachment(attachment.get_content(), maintype=mimetype[0],
File "/usr/lib/python3.11/email/message.py", line 1183, in add_attachment
self._add_multipart('mixed', *args, _disp='attachment', **kw)
File "/usr/lib/python3.11/email/message.py", line 1171, in _add_multipart
part.set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1198, in set_content
super().set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1128, in set_content
content_manager.set_content(self, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 37, in
set_content
handler(msg, obj, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 248, in
set_bytes_content
_finalize_set(msg, disposition, filename, cid, params)
File "/usr/lib/python3.11/email/contentmanager.py", line 120, in
_finalize_set
msg.set_param('filename',
File "/usr/lib/python3.11/email/message.py", line 774, in set_param
self.replace_header(header, ctype)
File "/usr/lib/python3.11/email/message.py", line 582, in replace_header
self._headers[i] = self.policy.header_store_parse(k, _value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/policy.py", line 148, in
header_store_parse
return (name, self.header_factory(name, value))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 604, in __call__
return self[name](name, value)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 192, in __new__
cls.parse(value, kwds)
File "/usr/lib/python3.11/email/headerregistry.py", line 448, in parse
kwds['parse_tree'] = parse_tree = cls.value_parser(value)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 2709, in
parse_content_disposition_header
disp_header.append(parse_mime_parameters(value[1:]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 2573, in
parse_mime_parameters
token, value = get_parameter(value)
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 2496, in
get_parameter
token, value = get_value(value)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 2407, in
get_value
token, value = get_quoted_string(value)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1294, in
get_quoted_string
quoted_string = QuotedString()
^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 124, in
__init__
super().__init__(*args, **kw)
^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 05:38:12 +0300] [4149001] [INFO] Worker exiting (pid: 4149001)
[2026-01-22 05:38:13 +0300] [4126021] [ERROR] Worker (pid:4149001) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 05:38:13 +0300] [430585] [INFO] Booting worker with pid: 430585
[2026-01-22 05:38:14 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:290024)
[2026-01-22 05:38:14 +0300] [290024] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-O2GES34AARQMEQJ7YFC3FLITXEFS7JOO.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 218, in __get__
rel_obj = self.field.get_cached_value(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/mixins.py",
line 15, in get_cached_value
return instance._state.fields_cache[cache_name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'sender'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 160, in as_message
self.sender.address, self.archived_date.strftime("%c"))
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 236, in __get__
rel_obj = self.get_object(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 199, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 633, in get
num = len(clone)
^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 380, in __len__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1549, in execute_sql
sql, params = self.as_sql()
^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 736, in as_sql
extra_select, order_by, group_by = self.pre_sql_setup(
^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 86, in pre_sql_setup
self.where, self.having, self.qualify =
self.query.where.split_having_qualify(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/where.py",
line 45, in split_having_qualify
if not self.contains_aggregate and not self.contains_over_clause:
^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/utils/functional.py",
line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/where.py",
line 244, in contains_aggregate
return self._contains_aggregate(self)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/where.py",
line 239, in _contains_aggregate
return any(cls._contains_aggregate(c) for c in obj.children)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/where.py",
line 239, in <genexpr>
return any(cls._contains_aggregate(c) for c in obj.children)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/where.py",
line 240, in _contains_aggregate
return obj.contains_aggregate
^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/utils/functional.py",
line 57, in __get__
res = instance.__dict__[self.name] = self.func(instance)
^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/expressions.py",
line 241, in contains_aggregate
return any(
^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/expressions.py",
line 241, in <genexpr>
return any(
^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 05:38:14 +0300] [290024] [INFO] Worker exiting (pid: 290024)
[2026-01-22 05:38:15 +0300] [4126021] [ERROR] Worker (pid:290024) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 05:38:15 +0300] [430657] [INFO] Booting worker with pid: 430657
[2026-01-22 06:59:27 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:430585)
[2026-01-22 06:59:27 +0300] [430585] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-2012-11.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 06:59:27 +0300] [430585] [INFO] Worker exiting (pid: 430585)
[2026-01-22 06:59:28 +0300] [4126021] [ERROR] Worker (pid:430585) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 06:59:28 +0300] [551385] [INFO] Booting worker with pid: 551385
[2026-01-22 07:00:07 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:430657)
[2026-01-22 07:00:07 +0300] [430657] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-5SJEKLZAOKQVNUAJ4JBX6FXH76AN6NKU.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 218, in __get__
rel_obj = self.field.get_cached_value(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/mixins.py",
line 15, in get_cached_value
return instance._state.fields_cache[cache_name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'sender'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 160, in as_message
self.sender.address, self.archived_date.strftime("%c"))
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 236, in __get__
rel_obj = self.get_object(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 199, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 633, in get
num = len(clone)
^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 380, in __len__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 07:00:07 +0300] [430657] [INFO] Worker exiting (pid: 430657)
[2026-01-22 07:00:09 +0300] [4126021] [ERROR] Worker (pid:430657) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 07:00:09 +0300] [552645] [INFO] Booting worker with pid: 552645
[2026-01-22 08:58:41 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:551385)
[2026-01-22 08:58:41 +0300] [551385] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-2007-07.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 08:58:41 +0300] [551385] [INFO] Worker exiting (pid: 551385)
[2026-01-22 08:58:42 +0300] [4126021] [ERROR] Worker (pid:551385) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 08:58:42 +0300] [727705] [INFO] Booting worker with pid: 727705
[2026-01-22 08:58:52 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:552645)
[2026-01-22 08:58:52 +0300] [552645] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-DFQWJCB7NZCGCGMARN2KGSSMKDPM5CDT.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 188, in as_message
for attachment in self.attachments.order_by("counter"):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 08:58:53 +0300] [552645] [INFO] Worker exiting (pid: 552645)
[2026-01-22 08:58:53 +0300] [4126021] [ERROR] Worker (pid:552645) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 08:58:53 +0300] [727955] [INFO] Booting worker with pid: 727955
[2026-01-22 11:03:01 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:727705)
[2026-01-22 11:03:01 +0300] [727705] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-2019-01.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 190, in as_message
msg.add_attachment(attachment.get_content(), maintype=mimetype[0],
File "/usr/lib/python3.11/email/message.py", line 1183, in add_attachment
self._add_multipart('mixed', *args, _disp='attachment', **kw)
File "/usr/lib/python3.11/email/message.py", line 1171, in _add_multipart
part.set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1198, in set_content
super().set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1128, in set_content
content_manager.set_content(self, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 37, in
set_content
handler(msg, obj, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 235, in
set_bytes_content
data = _encode_base64(data, max_line_length=msg.policy.max_line_length)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/contentmanager.py", line 140, in
_encode_base64
encoded_lines.append(binascii.b2a_base64(thisline).decode('ascii'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:03:01 +0300] [727705] [INFO] Worker exiting (pid: 727705)
[2026-01-22 11:03:02 +0300] [4126021] [ERROR] Worker (pid:727705) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 11:03:02 +0300] [912941] [INFO] Booting worker with pid: 912941
[2026-01-22 11:04:11 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:727955)
[2026-01-22 11:04:11 +0300] [727955] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-CEC5IW36NPUECABNFH7YYGFCOY2SSP7U.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 188, in as_message
for attachment in self.attachments.order_by("counter"):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:04:11 +0300] [727955] [INFO] Worker exiting (pid: 727955)
[2026-01-22 11:04:12 +0300] [4126021] [ERROR] Worker (pid:727955) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 11:04:12 +0300] [914576] [INFO] Booting worker with pid: 914576
[2026-01-22 11:09:58 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:912941)
[2026-01-22 11:09:58 +0300] [912941] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-AZSKWVRXPFM3ZPVLNTP7JOMSMTIUX5DX.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:09:58 +0300] [912941] [INFO] Worker exiting (pid: 912941)
[2026-01-22 11:09:59 +0300] [4126021] [ERROR] Worker (pid:912941) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 11:09:59 +0300] [949587] [INFO] Booting worker with pid: 949587
[2026-01-22 11:10:34 +0300] [4126021] [CRITICAL] WORKER TIMEOUT (pid:914576)
[2026-01-22 11:10:34 +0300] [914576] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-X3EFQYUYVVHKM4AI6JNJA5JTC3423EVX.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 188, in as_message
for attachment in self.attachments.order_by("counter"):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:10:34 +0300] [914576] [INFO] Worker exiting (pid: 914576)
[2026-01-22 11:10:35 +0300] [4126021] [ERROR] Worker (pid:914576) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 11:10:35 +0300] [952365] [INFO] Booting worker with pid: 952365
[2026-01-22 11:12:15 +0300] [4126021] [INFO] Handling signal: int
[2026-01-22 11:12:15 +0300] [952365] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-K3M2ZFG3KE7446IQELVSSS6PTODVGJVT.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 332, in _query
self._post_get_result()
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 366, in _post_get_result
self._rows = self._fetch_row(0)
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 339, in _fetch_row
return self._result.fetch_row(size, self._fetch_type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/times.py",
line 66, in DateTime_or_None
def DateTime_or_None(s):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 198, in handle_quit
time.sleep(0.1)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:12:15 +0300] [949587] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-ULMBFEMCYDTXCG5SAIR2G2YSANSTPLTI.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 332, in _query
self._post_get_result()
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 366, in _post_get_result
self._rows = self._fetch_row(0)
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 339, in _fetch_row
return self._result.fetch_row(size, self._fetch_type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/times.py",
line 66, in DateTime_or_None
def DateTime_or_None(s):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 198, in handle_quit
time.sleep(0.1)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:12:15 +0300] [952365] [INFO] Worker exiting (pid: 952365)
[2026-01-22 11:12:15 +0300] [949587] [INFO] Worker exiting (pid: 949587)
[2026-01-22 11:12:17 +0300] [4126021] [INFO] Shutting down: Master
[2026-01-22 11:12:17 +0300] [953914] [INFO] Starting gunicorn 23.0.0
[2026-01-22 11:12:17 +0300] [953914] [INFO] Listening at:
http://127.0.0.1:8010 (953914)
[2026-01-22 11:12:17 +0300] [953914] [INFO] Using worker: sync
[2026-01-22 11:12:17 +0300] [953915] [INFO] Booting worker with pid: 953915
[2026-01-22 11:12:17 +0300] [953916] [INFO] Booting worker with pid: 953916
[2026-01-22 11:12:49 +0300] [953914] [CRITICAL] WORKER TIMEOUT (pid:953915)
[2026-01-22 11:12:49 +0300] [953915] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-TULZY2KKSWJ76QJEPLBSH7XVLZRO5PHK.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 188, in as_message
for attachment in self.attachments.order_by("counter"):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1549, in execute_sql
sql, params = self.as_sql()
^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 736, in as_sql
extra_select, order_by, group_by = self.pre_sql_setup(
^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 85, in pre_sql_setup
order_by = self.get_order_by()
^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 460, in get_order_by
resolved = expr.resolve_expression(self.query, allow_joins=True,
reuse=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/expressions.py",
line 282, in resolve_expression
c = self.copy()
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/expressions.py",
line 422, in copy
return copy.copy(self)
^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/copy.py", line 74, in copy
copier = _copy_dispatch.get(cls)
^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:12:49 +0300] [953915] [INFO] Worker exiting (pid: 953915)
[2026-01-22 11:12:50 +0300] [954172] [INFO] Booting worker with pid: 954172
[2026-01-22 11:12:54 +0300] [953914] [CRITICAL] WORKER TIMEOUT (pid:953916)
[2026-01-22 11:12:54 +0300] [953916] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-X5R6D5RQMGXKX7IPSDC4ROIYLNTMHBHZ.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 190, in as_message
msg.add_attachment(attachment.get_content(), maintype=mimetype[0],
File "/usr/lib/python3.11/email/message.py", line 1183, in add_attachment
self._add_multipart('mixed', *args, _disp='attachment', **kw)
File "/usr/lib/python3.11/email/message.py", line 1171, in _add_multipart
part.set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1198, in set_content
super().set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1128, in set_content
content_manager.set_content(self, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 37, in
set_content
handler(msg, obj, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 235, in
set_bytes_content
data = _encode_base64(data, max_line_length=msg.policy.max_line_length)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/contentmanager.py", line 140, in
_encode_base64
encoded_lines.append(binascii.b2a_base64(thisline).decode('ascii'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:12:54 +0300] [953916] [INFO] Worker exiting (pid: 953916)
[2026-01-22 11:12:55 +0300] [954203] [INFO] Booting worker with pid: 954203
[2026-01-22 11:13:21 +0300] [953914] [CRITICAL] WORKER TIMEOUT (pid:954172)
[2026-01-22 11:13:21 +0300] [954172] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-DSU7LPKXFKEJFQNJD2MXFUM5OVE7G26I.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 218, in __get__
rel_obj = self.field.get_cached_value(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/mixins.py",
line 15, in get_cached_value
return instance._state.fields_cache[cache_name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'sender'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 160, in as_message
self.sender.address, self.archived_date.strftime("%c"))
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 236, in __get__
rel_obj = self.get_object(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 199, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 633, in get
num = len(clone)
^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 380, in __len__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:13:21 +0300] [954172] [INFO] Worker exiting (pid: 954172)
[2026-01-22 11:13:22 +0300] [954843] [INFO] Booting worker with pid: 954843
[2026-01-22 11:13:26 +0300] [953914] [CRITICAL] WORKER TIMEOUT (pid:954203)
[2026-01-22 11:13:26 +0300] [954203] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-XL2NAJHIGKG5B7UMJZCSJDOCGEBXQDME.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 218, in __get__
rel_obj = self.field.get_cached_value(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/mixins.py",
line 15, in get_cached_value
return instance._state.fields_cache[cache_name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'sender'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 160, in as_message
self.sender.address, self.archived_date.strftime("%c"))
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 236, in __get__
rel_obj = self.get_object(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 199, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 625, in get
clone = clone.order_by()
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1659, in order_by
obj.query.add_ordering(*field_names)
^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 310, in query
@property
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:13:26 +0300] [954203] [INFO] Worker exiting (pid: 954203)
[2026-01-22 11:13:27 +0300] [954884] [INFO] Booting worker with pid: 954884
[2026-01-22 11:13:31 +0300] [953914] [INFO] Handling signal: int
[2026-01-22 11:13:33 +0300] [954884] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-APYNKGBUJRM5GGNHILP355EXZXKKDLWE.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File "/opt/mailman/venv/lib/python3.11/site-packages/django/db/utils.py",
line 70, in __exit__
def __exit__(self, exc_type, exc_value, traceback):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:13:33 +0300] [954884] [INFO] Worker exiting (pid: 954884)
[2026-01-22 11:13:38 +0300] [954843] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-OG4SEUGOIPBET2V2J7ZBF2MLQRR7EMUR.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 331, in _query
self._do_get_result(db)
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 136, in _do_get_result
self._result = result = self._get_result()
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 363, in _get_result
return self._get_db().store_result()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File "/opt/mailman/venv/lib/python3.11/site-packages/django/db/utils.py",
line 70, in __exit__
def __exit__(self, exc_type, exc_value, traceback):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:13:38 +0300] [954843] [INFO] Worker exiting (pid: 954843)
[2026-01-22 11:13:38 +0300] [953914] [INFO] Shutting down: Master
[2026-01-22 11:13:41 +0300] [954947] [INFO] Starting gunicorn 23.0.0
[2026-01-22 11:13:41 +0300] [954947] [INFO] Listening at:
http://127.0.0.1:8010 (954947)
[2026-01-22 11:13:41 +0300] [954947] [INFO] Using worker: sync
[2026-01-22 11:13:41 +0300] [954954] [INFO] Booting worker with pid: 954954
[2026-01-22 11:13:41 +0300] [954955] [INFO] Booting worker with pid: 954955
[2026-01-22 11:14:25 +0300] [954947] [CRITICAL] WORKER TIMEOUT (pid:954955)
[2026-01-22 11:14:25 +0300] [954955] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-TG6RZBXER7NO5ZG3S6XLT7KEPW7ZWSVG.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 206, in as_bytes
gen.flatten(msg, unixfrom=True)
File "/usr/lib/python3.11/email/generator.py", line 118, in flatten
self._write(msg)
File "/usr/lib/python3.11/email/generator.py", line 183, in _write
self._dispatch(msg)
File "/usr/lib/python3.11/email/generator.py", line 220, in _dispatch
meth(msg)
File "/usr/lib/python3.11/email/generator.py", line 287, in
_handle_multipart
g.flatten(part, unixfrom=False, linesep=self._NL)
File "/usr/lib/python3.11/email/generator.py", line 118, in flatten
self._write(msg)
File "/usr/lib/python3.11/email/generator.py", line 183, in _write
self._dispatch(msg)
File "/usr/lib/python3.11/email/generator.py", line 220, in _dispatch
meth(msg)
File "/usr/lib/python3.11/email/generator.py", line 447, in _handle_text
super(BytesGenerator,self)._handle_text(msg)
File "/usr/lib/python3.11/email/generator.py", line 264, in _handle_text
self._write_lines(payload)
File "/usr/lib/python3.11/email/generator.py", line 155, in _write_lines
lines = NLCRE.split(lines)
^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:14:25 +0300] [954955] [INFO] Worker exiting (pid: 954955)
[2026-01-22 11:14:25 +0300] [955708] [INFO] Booting worker with pid: 955708
[2026-01-22 11:14:33 +0300] [954947] [CRITICAL] WORKER TIMEOUT (pid:954954)
[2026-01-22 11:14:33 +0300] [954954] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-QEZZWPUCSBYPVAI7RB23CYCW55EXR4KS.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:14:33 +0300] [954954] [INFO] Worker exiting (pid: 954954)
[2026-01-22 11:14:34 +0300] [955743] [INFO] Booting worker with pid: 955743
[2026-01-22 11:14:56 +0300] [954947] [CRITICAL] WORKER TIMEOUT (pid:955708)
[2026-01-22 11:14:56 +0300] [955708] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-RDAJOKFHXCLNREHYVQQ3KIS6VLVOB4ZS.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 173, in as_message
msg[header_name] = unfold(header_value)
~~~^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 426, in __setitem__
max_count = self.policy.header_max_count(name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/policy.py", line 106, in header_max_count
return self.header_factory[name].max_count
~~~~~~~~~~~~~~~~~~~^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 592, in
__getitem__
return type('_'+cls.__name__, (cls, self.base_class), {})
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:14:56 +0300] [955708] [INFO] Worker exiting (pid: 955708)
[2026-01-22 11:14:57 +0300] [955829] [INFO] Booting worker with pid: 955829
[2026-01-22 11:15:01 +0300] [954947] [INFO] Handling signal: int
[2026-01-22 11:15:01 +0300] [955743] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-PJ76ZUBDOE4ATWXNVKJPSLGZGD352XEA.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 206, in as_bytes
gen.flatten(msg, unixfrom=True)
File "/usr/lib/python3.11/email/generator.py", line 118, in flatten
self._write(msg)
File "/usr/lib/python3.11/email/generator.py", line 183, in _write
self._dispatch(msg)
File "/usr/lib/python3.11/email/generator.py", line 220, in _dispatch
meth(msg)
File "/usr/lib/python3.11/email/generator.py", line 295, in
_handle_multipart
boundary = self._make_boundary(alltext)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/generator.py", line 396, in _make_boundary
if not cre.search(text):
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 186, in handle_request
request_time = datetime.now() - request_start
^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:15:01 +0300] [955743] [INFO] Worker exiting (pid: 955743)
[2026-01-22 11:15:06 +0300] [955829] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-EPWDTNNW2NBZ7EAMITN3QQTOHVRP2JVP.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File "/opt/mailman/venv/lib/python3.11/site-packages/django/db/utils.py",
line 70, in __exit__
def __exit__(self, exc_type, exc_value, traceback):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:15:06 +0300] [955829] [INFO] Worker exiting (pid: 955829)
[2026-01-22 11:15:07 +0300] [954947] [INFO] Shutting down: Master
[2026-01-22 11:17:18 +0300] [3684] [INFO] Starting gunicorn 23.0.0
[2026-01-22 11:17:18 +0300] [3684] [INFO] Listening at:
http://127.0.0.1:8010 (3684)
[2026-01-22 11:17:18 +0300] [3684] [INFO] Using worker: sync
[2026-01-22 11:17:18 +0300] [3863] [INFO] Booting worker with pid: 3863
[2026-01-22 11:17:18 +0300] [3900] [INFO] Booting worker with pid: 3900
[2026-01-22 11:17:59 +0300] [3684] [CRITICAL] WORKER TIMEOUT (pid:3900)
[2026-01-22 11:17:59 +0300] [3900] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-YG62TZZWLXUVDHNWY56226PGOKTCSAG6.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 331, in _query
self._do_get_result(db)
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 136, in _do_get_result
self._result = result = self._get_result()
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 363, in _get_result
return self._get_db().store_result()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:17:59 +0300] [3900] [INFO] Worker exiting (pid: 3900)
[2026-01-22 11:18:00 +0300] [18740] [INFO] Booting worker with pid: 18740
[2026-01-22 11:18:02 +0300] [3684] [CRITICAL] WORKER TIMEOUT (pid:3863)
[2026-01-22 11:18:02 +0300] [3863] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-HQMEJPIPIL7BAGGLOCWN2YCRPOGLYJ7D.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 122, in __iter__
obj = model_cls.from_db(
^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/base.py",
line 582, in from_db
new = cls(*values)
^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 78, in __init__
super(Email, self).__init__(*args, **kwargs)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/base.py",
line 572, in __init__
post_init.send(sender=cls, instance=self)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/dispatch/dispatcher.py",
line 176, in send
return [
^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/dispatch/dispatcher.py",
line 177, in <listcomp>
(receiver, receiver(signal=self, sender=sender, **named))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:18:02 +0300] [3863] [INFO] Worker exiting (pid: 3863)
[2026-01-22 11:18:02 +0300] [19263] [INFO] Booting worker with pid: 19263
[2026-01-22 11:18:31 +0300] [3684] [CRITICAL] WORKER TIMEOUT (pid:18740)
[2026-01-22 11:18:31 +0300] [18740] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-E4USSEPZDW3F4ETI3D3BJGJ6YPBJGWFS.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 332, in _query
self._post_get_result()
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 366, in _post_get_result
self._rows = self._fetch_row(0)
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 339, in _fetch_row
return self._result.fetch_row(size, self._fetch_type)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/times.py",
line 66, in DateTime_or_None
def DateTime_or_None(s):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:18:31 +0300] [18740] [INFO] Worker exiting (pid: 18740)
[2026-01-22 11:18:31 +0300] [24724] [INFO] Booting worker with pid: 24724
[2026-01-22 11:18:33 +0300] [3684] [CRITICAL] WORKER TIMEOUT (pid:19263)
[2026-01-22 11:18:33 +0300] [19263] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-VRSOPJ4HQXYPBS22MI6B3JJTBCGN366W.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 121, in __iter__
for row in compiler.results_iter(results):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1500, in apply_converters
value = converter(value, expression, connection)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/operations.py",
line 329, in convert_datetimefield_value
def convert_datetimefield_value(self, value, expression, connection):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:18:33 +0300] [19263] [INFO] Worker exiting (pid: 19263)
[2026-01-22 11:18:34 +0300] [25445] [INFO] Booting worker with pid: 25445
[2026-01-22 11:39:50 +0300] [3684] [INFO] Handling signal: int
[2026-01-22 11:39:56 +0300] [24724] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-K2XPLS35727CDYYXQLJG72I3FM2DP6XS.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 331, in _query
self._do_get_result(db)
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 136, in _do_get_result
self._result = result = self._get_result()
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 363, in _get_result
return self._get_db().store_result()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File "/opt/mailman/venv/lib/python3.11/site-packages/django/db/utils.py",
line 70, in __exit__
def __exit__(self, exc_type, exc_value, traceback):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:39:56 +0300] [24724] [INFO] Worker exiting (pid: 24724)
[2026-01-22 11:39:59 +0300] [25445] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-TVZIXKV7QLX6PSUZNDZPQKHWRADHIHIJ.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 331, in _query
self._do_get_result(db)
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 136, in _do_get_result
self._result = result = self._get_result()
^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 363, in _get_result
return self._get_db().store_result()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 390, in stream_mbox
for email in query.order_by("archived_date").all():
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File "/opt/mailman/venv/lib/python3.11/site-packages/django/db/utils.py",
line 70, in __exit__
def __exit__(self, exc_type, exc_value, traceback):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 199, in handle_quit
sys.exit(0)
SystemExit: 0
[2026-01-22 11:39:59 +0300] [25445] [INFO] Worker exiting (pid: 25445)
[2026-01-22 11:40:00 +0300] [3684] [INFO] Shutting down: Master
[2026-01-22 11:40:01 +0300] [90030] [INFO] Starting gunicorn 23.0.0
[2026-01-22 11:40:01 +0300] [90030] [INFO] Listening at:
http://127.0.0.1:8010 (90030)
[2026-01-22 11:40:01 +0300] [90030] [INFO] Using worker: sync
[2026-01-22 11:40:01 +0300] [90033] [INFO] Booting worker with pid: 90033
[2026-01-22 11:40:01 +0300] [90034] [INFO] Booting worker with pid: 90034
[2026-01-22 11:40:37 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:90034)
[2026-01-22 11:40:37 +0300] [90034] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-I3UL4MGS5HAPKFRLO5IYSO33YL5V4JH5.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 173, in as_message
msg[header_name] = unfold(header_value)
~~~^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 436, in __setitem__
self._headers.append(self.policy.header_store_parse(name, val))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/policy.py", line 148, in
header_store_parse
return (name, self.header_factory(name, value))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 604, in __call__
return self[name](name, value)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 192, in __new__
cls.parse(value, kwds)
File "/usr/lib/python3.11/email/headerregistry.py", line 342, in parse
kwds['parse_tree'] = address_list = cls.value_parser(value)
^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/headerregistry.py", line 333, in
value_parser
address_list, value = parser.get_address_list(value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_header_value_parser.py", line 1989, in
get_address_list
address_list = AddressList()
^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:40:37 +0300] [90034] [INFO] Worker exiting (pid: 90034)
[2026-01-22 11:40:37 +0300] [90870] [INFO] Booting worker with pid: 90870
[2026-01-22 11:40:42 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:90033)
[2026-01-22 11:40:42 +0300] [90033] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-DNGQNXOQAFQ2TP6CXZ4QK7P4QQWDG6EM.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 188, in as_message
for attachment in self.attachments.order_by("counter"):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:40:42 +0300] [90033] [INFO] Worker exiting (pid: 90033)
[2026-01-22 11:40:42 +0300] [90897] [INFO] Booting worker with pid: 90897
[2026-01-22 11:41:08 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:90870)
[2026-01-22 11:41:08 +0300] [90870] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-YQCBFT3VOX72LH7UM7FTNG4OVSEUBJEL.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 184, in as_message
msg.set_content(self.content, subtype='plain')
File "/usr/lib/python3.11/email/message.py", line 1198, in set_content
super().set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1128, in set_content
content_manager.set_content(self, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 37, in
set_content
handler(msg, obj, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 187, in
set_text_content
cte, payload = _encode_text(string, charset, cte, msg.policy)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/contentmanager.py", line 174, in
_encode_text
data = quoprimime.body_encode(normal_body(lines).decode('latin-1'),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/quoprimime.py", line 220, in body_encode
append(line[start:])
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:41:08 +0300] [90870] [INFO] Worker exiting (pid: 90870)
[2026-01-22 11:41:10 +0300] [91275] [INFO] Booting worker with pid: 91275
[2026-01-22 11:41:14 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:90897)
[2026-01-22 11:41:14 +0300] [90897] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-7MLTGAZJNFG56S7J5FWK776PSVEB46GN.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 188, in as_message
for attachment in self.attachments.order_by("counter"):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 398, in __iter__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:41:14 +0300] [90897] [INFO] Worker exiting (pid: 90897)
[2026-01-22 11:41:15 +0300] [91456] [INFO] Booting worker with pid: 91456
[2026-01-22 11:42:18 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:91456)
[2026-01-22 11:42:18 +0300] [91456] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-MDUKNGL2KE5J5OYFSK4G5BUENDISFSWV.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 184, in as_message
msg.set_content(self.content, subtype='plain')
File "/usr/lib/python3.11/email/message.py", line 1198, in set_content
super().set_content(*args, **kw)
File "/usr/lib/python3.11/email/message.py", line 1128, in set_content
content_manager.set_content(self, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 37, in
set_content
handler(msg, obj, *args, **kw)
File "/usr/lib/python3.11/email/contentmanager.py", line 189, in
set_text_content
msg.set_param('charset',
File "/usr/lib/python3.11/email/message.py", line 758, in set_param
[ctype, _formatparam(param, value, requote)])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 67, in _formatparam
return '%s="%s"' % (param, utils.quote(value))
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/_parseaddr.py", line 201, in quote
def quote(str):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:42:18 +0300] [91456] [INFO] Worker exiting (pid: 91456)
[2026-01-22 11:42:19 +0300] [92350] [INFO] Booting worker with pid: 92350
[2026-01-22 11:43:48 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:91275)
[2026-01-22 11:43:48 +0300] [91275] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-AHBE2XCOV6WGVOQMTMEDOF5CT5SUGIVE.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 218, in __get__
rel_obj = self.field.get_cached_value(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/mixins.py",
line 15, in get_cached_value
return instance._state.fields_cache[cache_name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'sender'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 160, in as_message
self.sender.address, self.archived_date.strftime("%c"))
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 236, in __get__
rel_obj = self.get_object(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 199, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 633, in get
num = len(clone)
^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 380, in __len__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:43:48 +0300] [91275] [INFO] Worker exiting (pid: 91275)
[2026-01-22 11:43:49 +0300] [90030] [ERROR] Worker (pid:91275) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 11:43:49 +0300] [93609] [INFO] Booting worker with pid: 93609
[2026-01-22 11:43:52 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:92350)
[2026-01-22 11:43:52 +0300] [92350] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-VWXQKKWFB4TQW3Z7OMW6GWJYLGIZI65E.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 173, in as_message
msg[header_name] = unfold(header_value)
~~~^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 420, in __setitem__
def __setitem__(self, name, val):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:43:52 +0300] [92350] [INFO] Worker exiting (pid: 92350)
[2026-01-22 11:43:54 +0300] [90030] [ERROR] Worker (pid:92350) was sent
SIGKILL! Perhaps out of memory?
[2026-01-22 11:43:54 +0300] [93619] [INFO] Booting worker with pid: 93619
[2026-01-22 11:44:42 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:93609)
[2026-01-22 11:44:42 +0300] [93609] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-QGW7VB4TSJYBOVLI74ODICD6XOR2EJCY.mbox.gz
Traceback (most recent call last):
File "/usr/lib/python3.11/email/message.py", line 661, in
_get_params_preserve
name, val = p.split('=', 1)
^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 1)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 206, in as_bytes
gen.flatten(msg, unixfrom=True)
File "/usr/lib/python3.11/email/generator.py", line 118, in flatten
self._write(msg)
File "/usr/lib/python3.11/email/generator.py", line 183, in _write
self._dispatch(msg)
File "/usr/lib/python3.11/email/generator.py", line 220, in _dispatch
meth(msg)
File "/usr/lib/python3.11/email/generator.py", line 290, in
_handle_multipart
boundary = msg.get_boundary()
^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 856, in get_boundary
boundary = self.get_param('boundary', missing)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 720, in get_param
for k, v in self._get_params_preserve(failobj, header):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.11/email/message.py", line 666, in
_get_params_preserve
name = p.strip()
^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:44:42 +0300] [93609] [INFO] Worker exiting (pid: 93609)
[2026-01-22 11:44:43 +0300] [94475] [INFO] Booting worker with pid: 94475
[2026-01-22 11:44:45 +0300] [90030] [CRITICAL] WORKER TIMEOUT (pid:93619)
[2026-01-22 11:44:45 +0300] [93619] [ERROR] Error handling request
/archives/list/
kictanet@lists.kictanet.or.ke/export/kictanet@lists.kictanet.or.ke-Q52GSLD4YN4QPQDSFJF5XWTHZG772HFW.mbox.gz
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 218, in __get__
rel_obj = self.field.get_cached_value(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/mixins.py",
line 15, in get_cached_value
return instance._state.fields_cache[cache_name]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
KeyError: 'sender'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 134, in handle
self.handle_request(listener, req, client, addr)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/sync.py",
line 182, in handle_request
for item in respiter:
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/mlist.py",
line 391, in stream_mbox
yield compressor.compress(email.as_bytes())
^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 200, in as_bytes
msg = self.as_message()
^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/models/email.py",
line 160, in as_message
self.sender.address, self.archived_date.strftime("%c"))
^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 236, in __get__
rel_obj = self.get_object(instance)
^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/fields/related_descriptors.py",
line 199, in get_object
return qs.get(self.field.get_reverse_related_filter(instance))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 633, in get
num = len(clone)
^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 380, in __len__
self._fetch_all()
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 1881, in _fetch_all
self._result_cache = list(self._iterable_class(self))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 91, in __iter__
results = compiler.execute_sql(
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
line 1562, in execute_sql
cursor.execute(sql, params)
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 179, in execute
res = self._query(mogrified_query)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/cursors.py",
line 330, in _query
db.query(q)
File
"/opt/mailman/venv/lib/python3.11/site-packages/MySQLdb/connections.py",
line 280, in query
_mysql.connection.query(self, query)
File
"/opt/mailman/venv/lib/python3.11/site-packages/gunicorn/workers/base.py",
line 204, in handle_abort
sys.exit(1)
SystemExit: 1
[2026-01-22 11:44:45 +0300] [93619] [INFO] Worker exiting (pid: 93619)
[2026-01-22 11:44:45 +0300] [94504] [INFO] Booting worker with pid: 94504
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
9 months, 3 weeks