添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
(Debian 12) I have the problem that the hyperkitty archive is empty. The file /var/log/mailman3/mailman.log show sometimes the message urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=' www.XXXXX-project.demailman3 ', port=443): Max retries exceeded with url: /hyperkitty/api/mailman/archive (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fa48b43a910>: Failed to establish a new connection: [Errno -2] Name or service not known')) (there is a slash missing between 'project.de' and 'mailman3'). My goal is, of course, to have an running archive. But I think the error message could be a hint about the reason) Do you have an idea what can I do about this? Hi, I'm trying to configure mailman3 on my AlmaLinux 9 server and when checking the mailman3 status, I get the following: # mailman3 status Traceback (most recent call last): File "/usr/lib/python3.9/site-packages/alembic/script/base.py", line 227, in _catch_revision_errors yield File "/usr/lib/python3.9/site-packages/alembic/script/base.py", line 439, in _upgrade_revs for script in reversed(list(revs)) File "/usr/lib/python3.9/site-packages/alembic/script/revision.py", line 793, in iterate_revisions revisions, heads = fn( File "/usr/lib/python3.9/site-packages/alembic/script/revision.py", line 1420, in _collect_upgrade_revisions current_revisions = self.get_revisions(lower) File "/usr/lib/python3.9/site-packages/alembic/script/revision.py", line 525, in get_revisions return sum([self.get_revisions(id_elem) for id_elem in id_], ()) File "/usr/lib/python3.9/site-packages/alembic/script/revision.py", line 525, in <listcomp> return sum([self.get_revisions(id_elem) for id_elem in id_], ()) File "/usr/lib/python3.9/site-packages/alembic/script/revision.py", line 549, in get_revisions return tuple( File "/usr/lib/python3.9/site-packages/alembic/script/revision.py", line 550, in <genexpr> self._revision_for_ident(rev_id, branch_label) File "/usr/lib/python3.9/site-packages/alembic/script/revision.py", line 619, in _revision_for_ident raise ResolutionError( alembic.script.revision.ResolutionError: No such revision or branch '2156fc3f6f7d' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/usr/libexec/mailman3/mailman", line 8, in <module> sys.exit(main()) File "/usr/lib/python3.9/site-packages/click/core.py", line 1128, in __call__ return self.main(*args, **kwargs) File "/usr/lib/python3.9/site-packages/click/core.py", line 1052, in main with self.make_context(prog_name, args, **extra) as ctx: File "/usr/lib/python3.9/site-packages/click/core.py", line 914, in make_context self.parse_args(ctx, args) File "/usr/lib/python3.9/site-packages/click/core.py", line 1615, in parse_args rest = super().parse_args(ctx, args) File "/usr/lib/python3.9/site-packages/click/core.py", line 1370, in parse_args value, args = param.handle_parse_result(ctx, opts, args) File "/usr/lib/python3.9/site-packages/click/core.py", line 2347, in handle_parse_result value = self.process_value(ctx, value) File "/usr/lib/python3.9/site-packages/click/core.py", line 2309, in process_value value = self.callback(ctx, self, value) File "/usr/lib/python3.9/site-packages/mailman/bin/mailman.py", line 95, in initialize_config initialize(value) File "/usr/lib/python3.9/site-packages/mailman/core/initialize.py", line 229, in initialize initialize_2(propagate_logs=propagate_logs) File "/usr/lib/python3.9/site-packages/mailman/core/initialize.py", line 187, in initialize_2 config.db = getUtility(IDatabaseFactory, utility_name).create() File "/usr/lib/python3.9/site-packages/mailman/database/factory.py", line 58, in create SchemaManager(database).setup_database() File "/usr/lib/python3.9/site-packages/mailman/database/factory.py", line 109, in setup_database alembic.command.upgrade(alembic_cfg, 'head') File "/usr/lib/python3.9/site-packages/alembic/command.py", line 320, in upgrade script.run_env() File "/usr/lib/python3.9/site-packages/alembic/script/base.py", line 563, in run_env util.load_python_file(self.dir, "env.py") File "/usr/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 92, in load_python_file module = load_module_py(module_id, path) File "/usr/lib/python3.9/site-packages/alembic/util/pyfiles.py", line 108, in load_module_py spec.loader.exec_module(module) # type: ignore File "<frozen importlib._bootstrap_external>", line 850, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/usr/lib/python3.9/site-packages/mailman/database/alembic/env.py", line 77, in <module> run_migrations_online() File "/usr/lib/python3.9/site-packages/mailman/database/alembic/env.py", line 71, in run_migrations_online context.run_migrations() File "<string>", line 8, in run_migrations File "/usr/lib/python3.9/site-packages/alembic/runtime/environment.py", line 851, in run_migrations self.get_context().run_migrations(**kw) File "/usr/lib/python3.9/site-packages/alembic/runtime/migration.py", line 608, in run_migrations for step in self._migrations_fn(heads, self): File "/usr/lib/python3.9/site-packages/alembic/command.py", line 309, in upgrade return script._upgrade_revs(revision, rev) File "/usr/lib/python3.9/site-packages/alembic/script/base.py", line 435, in _upgrade_revs return [ File "/usr/lib64/python3.9/contextlib.py", line 137, in __exit__ self.gen.throw(typ, value, traceback) File "/usr/lib/python3.9/site-packages/alembic/script/base.py", line 259, in _catch_revision_errors raise util.CommandError(resolution) from re alembic.util.exc.CommandError: Can't locate revision identified by '2156fc3f6f7d' Any ideas why? Before switching from a "git clone" installation to the virtual environment install, "/home/mailman3/mailman/src/mailman" was recommended as the PYTHONPATH setting. Here are some paths that exist in the Mailman3 virtual environment on the server in question: /opt/mailman3/venv/lib/python3.9/site-packages/mailman/archiving /opt/mailman3/venv/lib/python3.9/site-packages/mailman/archiving/__init__.py /opt/mailman3/venv/lib/python3.9/site-packages/mailman/archiving/__pycache__ /opt/mailman3/venv/lib/python3.9/site-packages/mailman/archiving/docs /opt/mailman3/venv/lib/python3.9/site-packages/mailman/archiving/mailarchive.py What is the proper setting for PYTHONPATH in this case? Thanks. ----------- Keith We have a Mailman3 server with quite a few lists all running with no issues. Recently I imported a list from our old Mailman 2 server which went fine. I attempted to remove the current owner and add myself but now when clicking on the list, Postorius shows: An error occurred while processing your request. The output of /opt/mailman/web/logs/mailmanweb.log is here: ERROR 2024-07-09 17:11:33,371 2795 django.request Internal Server Error: /mailman3/lists/net-ops.list.utas.edu.au/ Traceback (most recent call last): File "/opt/mailman/venv/lib64/python3.9/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/views/generic/base.py", line 103, in view return self.dispatch(request, *args, **kwargs) File "/opt/mailman/venv/lib64/python3.9/site-packages/postorius/views/generic.py", line 76, in dispatch return super(MailingListView, self).dispatch(request, *args, **kwargs) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/views/generic/base.py", line 142, in dispatch return handler(request, *args, **kwargs) File "/opt/mailman/venv/lib64/python3.9/site-packages/postorius/views/list.py", line 411, in get return render(request, 'postorius/lists/summary.html', data) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/shortcuts.py", line 24, in render content = loader.render_to_string(template_name, context, request, using=using) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/base.py", line 175, in render return self._render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/base.py", line 167, in _render return self.nodelist.render(context) File "/opt/mailman/venv/lib64/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/venv/lib64/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/venv/lib64/python3.9/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/loader_tags.py", line 157, in render return compiled_parent._render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/base.py", line 167, in _render return self.nodelist.render(context) File "/opt/mailman/venv/lib64/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/venv/lib64/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/venv/lib64/python3.9/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/loader_tags.py", line 63, in render result = block.nodelist.render(context) File "/opt/mailman/venv/lib64/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/venv/lib64/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/venv/lib64/python3.9/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/defaulttags.py", line 321, in render return nodelist.render(context) File "/opt/mailman/venv/lib64/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/venv/lib64/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/venv/lib64/python3.9/site-packages/django/template/base.py", line 966, in render_annotated return self.render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/defaulttags.py", line 52, in render output = self.nodelist.render(context) File "/opt/mailman/venv/lib64/python3.9/site-packages/django/template/base.py", line 1005, in render return SafeString("".join([node.render_annotated(context) for node in self])) TypeError: sequence item 1: expected str instance, NoneType found I've tried removing it and reimporting it to no avail. Is there anything I can besides manually creating it and adding the members and owners from the old server? Cheers Hi, I am noticing a performance issue with Mailman 3 when using the "mailman findmember" CLI command to search for email address or name. On average, it takes about 15 - 20 seconds to run a query which is very slow IMHO. When searching through web administrator interface for Users, it takes only 1 -2 seconds. Is there a reason for such a discrepancy between the two interfaces? Is there any tuning to the CLI that could help with the performance issue? Here is the setup information regarding the VM hosting the Mailman 3 server: Memory: 16G CPU Cores: 6 Mailman CORE version: 3.3.9 Python version: 3.11.5 Database: MariaDB 10.6.15 OS: SLES 15 SP5 Thanks. wesley * * * Wesley Wong Senior Systems Engineer (ACIS) (310) 206-2571 wesley.wong(a)anderson.ucla.edu<mailto:[email protected]> UCLA Anderson School of Management | Transformative Leaders we have recently migrated from Mailman2 to Mailman3 and now discovered that all mails going through Mailman3 have the headers Archived-At and List-Archive repeated identically in the mail header ~100 times each. We are running Mailman3 on Debian Bookworm from the Debian repositories (mailman3 3.3.8-2~deb12u2) with postfix (3.7.11-0+deb12u1) and hyperkitty (1.2.1-1). Can somebody of you help me to get rid of the repeated header? Thanks in advance for you help! Best,   Tobias Tobias Diekershoff >>> System Hacker Free Software Foundation Europe Schönhauser Allee 6/7, 10119 Berlin, Germany | t +49-30-27595290 Registered at Amtsgericht Hamburg, VR 17030 | fsfe.org/support OpenPGP-Key ID ... 0x25FE376FF17694A1 Fingerprint ...... 23EE F484 FDF8 291C BA09                    A406 25FE 376F F176 94A1 ___________________________________________ Mailman's content filtering has removed the following MIME parts from this message. Content-Type: application/pgp-keys Name: OpenPGP_0x25FE376FF17694A1.asc Hi Folks, My Mailman3 installation is receiving a trickle of fake registrations, for which it then attempts to send a "Your confirmation is needed to join..." email, which typically bounce. I suspect these are coming from the "subscribe without creating an account" form on the list summary page. I notice that lists.mailman3.org doesn't show this form at all - you have to create an account to subscribe: https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/ compared to mine with: https://lists.softwarefreedom.com.au/postorius/lists/free-software-melb.lis… Is there a configuration option that does this, or was it a custom change made in the templates? Was the change made to reduce fake registrations? Did it work? Regards, Ben Sturmfels Sturm Software Engineering www.sturm.com.au +61 3 9024 2467 One of my lists is return a 500 error when I try to visit the list's home page: HTTP Error 500: {"title": "500 Internal Server Error"} mailmanweb.log says: ERROR 2024-07-13 15:22:30,073 1668 postorius Un-handled exception: HTTP Error 500: {"title": "500 Internal Server Error"} Traceback (most recent call last): File "/usr/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3.8/site-packages/django/views/generic/base.py", line 71, in view return self.dispatch(request, *args, **kwargs) File "/usr/lib/python3.8/site-packages/postorius/views/generic.py", line 74, in dispatch return super(MailingListView, self).dispatch(request, *args, **kwargs) File "/usr/lib/python3.8/site-packages/django/views/generic/base.py", line 97, in dispatch return handler(request, *args, **kwargs) File "/usr/lib/python3.8/site-packages/postorius/views/list.py", line 275, in get 'hyperkitty' in self.mailing_list.archivers and # noqa: W504 File "/usr/lib/python3.8/_collections_abc.py", line 666, in __contains__ self[key] File "/usr/lib/python3.8/site-packages/mailmanclient/restbase/base.py", line 146, in __getitem__ return self._get(key) File "/usr/lib/python3.8/site-packages/mailmanclient/restbase/base.py", line 88, in _get return self.rest_data[key] File "/usr/lib/python3.8/site-packages/mailmanclient/restbase/base.py", line 74, in rest_data response, content = self._connection.call(self._url) File "/usr/lib/python3.8/site-packages/mailmanclient/restbase/connection.py", line 127, in call raise HTTPError(url, response.status_code, urllib.error.HTTPError: HTTP Error 500: {"title": "500 Internal Server Error"} ERROR 2024-07-13 15:22:30,079 1668 django.request Internal Server Error: /postorius/lists/XXXX/ ERROR 2024-07-13 15:22:30,079 1668 django.request Internal Server Error: /postorius/lists/XXXX/ mailman.log says: [13/Jul/2024:15:23:44 +0000] "GET /3.1/lists/XXXX HTTP/1.1" 200 466 "-" "GNU Mailman REST client v3.3.2" [13/Jul/2024:15:23:44 +0000] "GET /3.1/lists/XXXX/roster/owner HTTP/1.1" 200 2401 "-" "GNU Mailman REST client v3.3.2" [13/Jul/2024:15:23:44 +0000] "GET /3.1/lists/XXXX/roster/moderator HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.2" [13/Jul/2024:15:23:44 +0000] "GET /3.1/lists/XXX@XXXX/config HTTP/1.1" 200 14262 "-" "GNU Mailman REST client v3.3.2" 2024-07-13 15:23:44 [FALCON] [ERROR] GET /3.1/lists/XXXX/archivers => Traceback (most recent call last): File "/usr/lib/python3.8/site-packages/falcon/app.py", line 361, in __call__ responder(req, resp, **params) File "/usr/lib/python3.8/site-packages/mailman/rest/lists.py", line 405, in on_get archiver_set = IListArchiverSet(self._mlist) File "/usr/lib/python3.8/site-packages/zope/component/_api.py", line 152, in adapter_hook return sitemanager.queryAdapter(object, interface, name, default) File "/usr/lib/python3.8/site-packages/zope/interface/registry.py", line 354, in queryAdapter return self.adapters.queryAdapter(object, interface, name, default) 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/mailinglist.py", line 619, in __init__ exists = store.query(ListArchiver).filter( File "/usr/lib/python3.8/site-packages/sqlalchemy/orm/query.py", line 3467, in one_or_none raise orm_exc.MultipleResultsFound( sqlalchemy.orm.exc.MultipleResultsFound: Multiple rows were found for one_or_none() [13/Jul/2024:15:23:44 +0000] "GET /3.1/lists/XXXX/archivers HTTP/1.1" 500 38 "-" "GNU Mailman REST client v3.3.2" Did this one list get corrupted somehow? I'm running GNU Mailman 3.3.4 (Tom Sawyer) in Docker containers on Debian Stretch. Emails to that list are not getting processed. I'm not out of disk space. Anything I should check? Thank you, In the MM2 to MM3 migration project I'm involved with, I see files with names like config.pkl.last along with config.pkl. Is there a special reason for the ".last" extension and if so, what is it? Thanks, -------- Keith After importing from Mailman 2, thousands of badly compiled messages from the past appeared with empty content on the same date (date of import). Is there a safe way to delete them all? If we delete them from the database - hyperkitty_email table - do we need to do some clean-up of hyperkitty_thread table as well? Any advice? Danil Smirnov I am using mailman3 (version 3.3.8) and it mostly works fine, but sometimes (usually several times every day) the error below appears. Any suggestions for what could be done about this? Should it be considered a bug in Django, so not a mailman3 problem, or does it indicate something wrong with mailman3 itself? Best regards, Elias Here is what the error message looks like: ------------------------------------------- [Django] ERROR (EXTERNAL IP): Internal Server Error: /mailman3/postorius/lists/ Internal Server Error: /mailman3/postorius/lists/ ValueError at /postorius/lists/ Need 2 values to unpack in for loop; got 1. [...] Django Version: 3.2.19 [...] Python Version: 3.11.2 [...] Traceback (most recent call last): "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3/dist-packages/postorius/views/list.py", line 1145, in list_index return render( File "/usr/lib/python3/dist-packages/django/shortcuts.py", line 19, in render content = loader.render_to_string(template_name, context, request, using=using) File "/usr/lib/python3/dist-packages/django/template/loader.py", line 62, in render_to_string return template.render(context, request) "/usr/lib/python3/dist-packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 170, in render return self._render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 162, in _render return self.nodelist.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/lib/python3/dist-packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 162, in _render return self.nodelist.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/lib/python3/dist-packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/lib/python3/dist-packages/django/template/defaulttags.py", line 315, in render return nodelist.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/lib/python3/dist-packages/django/template/defaulttags.py", line 315, in render return nodelist.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/lib/python3/dist-packages/django/template/library.py", line 234, in render return t.render(new_context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 172, in render return self._render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 162, in _render return self.nodelist.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File "/usr/lib/python3/dist-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File "/usr/lib/python3/dist-packages/django/template/defaulttags.py", line 203, in render raise ValueError( Exception Type: ValueError at /postorius/lists/ Exception Value: Need 2 values to unpack in for loop; got 1. Request information: USER: AnonymousUser [...] ------------------------------------------- Hi all! I'm trying to use extended placeholders for the [templated texts](https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/res… in the message footer that are sent to the members: > Along with these, Mailman supports placeholder as URLs for web interface when `base_url` property is set at the Domain level. These include: > domain_url - URL to homepage for a domain. > mailinglist_url - URL to homepage for a mailinglist. > held_message_url - URL to page for handling all held messages. > pending_subscriptions_url - URL to page for handling pending subscription requests. > pending_unsubscriptions_url - URL to page for handling pending unsubscriptions. The REST API docs mention `base_url` as the property of the domain: [domain URLs](https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest… But my attempts to use REST API to set it fail: curl --user 'restapi:restpass' \ -X PATCH \ -H "Content-Type: application/json" \ -H 'Accept: application/json' \ -d '{ "base_url": " https://example.net/mailman3 " }' \ http://localhost:8001/3.1/domains/example.net | jq '.' "title": "400 Bad Request", "description": "Unexpected parameters: base_url" My MM3 instance is the latest(3.3.9), provided by the maxking mailman-core docker image. It looks like there is a lot of confusion about `base_url` in general, as hyperkitty seems also use the property with the same name, for example: https://lists.mailman3.org/hyperkitty/list/[email protected]/threa… So what is the correct way to get those extended placeholders to work in the templates? It's also not clear to me, what the the primary domain should be for the installation - server hostname, as in `lists.mailman3.org` or the domain, used in the mailing list(s) itself, like `mailman3.org` for mailman-users(a)mailman3.org... With best regards, Timour Bakeev I have a mailman3 setup in venv with python 3.11.2 mailman 3.3.9 mailman-hyperkitty 1.2.1 I feel I have read a lot about issues with stucked files in spool directory still I am not able to proceed with debugging in my case. Ideas would be welcome and appreciated. Thanks This is the error in archiver.log Jul 09 10:56:12 2024 (47531) HyperKitty archiver processing queued filebase: 1720522497.980487+a88492922feca24ced15594a5ec16556195 6f3ad Jul 09 10:56:12 2024 (47531) hyperkitty archiver: sending message <B9E91239-ED71-4CC6-8FFF-3308C5C4DE2E(a)me.com> Jul 09 10:56:12 2024 (47531) HyperKitty failure on http://127.0.0.1:8000/archives/api/mailman/archive : <!DOCTYPE html> <html lang="en"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Server Error</title> <link rel="shortcut icon" href="/static/postorius/img/favicon.ico"> <link rel="stylesheet" href="/static/postorius/libs/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="/static/django-mailman3/css/main.css"> <link rel="stylesheet" href="/static/postorius/css/style.css"> </head> <div class="container"> <h1>Server error</h1> <div class="alert alert-danger">An error occurred while processing your request.</div> </body> </html> (500) Jul 09 10:56:12 2024 (47531) Could not archive the message with id <B9E91239-ED71-4CC6-8FFF-3308C5C4DE2E(a)me.com> Jul 09 10:56:12 2024 (47531) archiving failed, re-queuing (mailing-list act.lists.contextualscience.org , message <B9E91239-ED71-4CC6-8FFF-3308C5C4DE2E(a)me.com>) Jul 09 10:56:12 2024 (47531) Exception in the HyperKitty archiver: <!DOCTYPE html> <html lang="en"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Server Error</title> <link rel="shortcut icon" href="/static/postorius/img/favicon.ico"> <link rel="stylesheet" href="/static/postorius/libs/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="/static/django-mailman3/css/main.css"> <link rel="stylesheet" href="/static/postorius/css/style.css"> </head> <div class="container"> <h1>Server error</h1> <div class="alert alert-danger">An error occurred while processing your request.</div> </body> </html> Jul 09 10:56:12 2024 (47531) Traceback (most recent call last): File "/opt/mailman/venv/lib/python3.11/site-packages/mailman_hyperkitty/__init__.py", line 158, in _archive_message url = self._send_message(mlist, msg) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/mailman/venv/lib/python3.11/site-packages/mailman_hyperkitty/__init__.py", line 228, in _send_message raise ValueError(result.text) ValueError: <!DOCTYPE html> <html lang="en"> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Server Error</title> <link rel="shortcut icon" href="/static/postorius/img/favicon.ico"> <link rel="stylesheet" href="/static/postorius/libs/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="/static/django-mailman3/css/main.css"> <link rel="stylesheet" href="/static/postorius/css/style.css"> </head> <div class="container"> <h1>Server error</h1> <div class="alert alert-danger">An error occurred while processing your request.</div> </body> </html> With Mailman 2, I have configuration and scripts to reject non-members from posting to lists _during the SMTP connection_. This is better than bouncing (no backscatter), better than discarding messages (the user finds out) and better than moderation (spammy messages aren't forwarded to external email systems). The configuration and scripts are described here: https://code.launchpad.net/~jimpop/mailman/check_subscriber Is anything like this built-in to Mailman 3?  I cannot find it in Gitlab. Thanks, From Mark's reply of Jul 5, 2024, 3:18 PM: RE: The `mailman aliases` command generates the postfix_domains and postfix_lmtp files and calls the configured postmap_command (default /usr/sbin/postmap) to create the .db files. `mailman start` also generates these files by default. 1 [mailman3@somehost ~]$ ./venv/bin/mailman start 2 Starting Mailman's master runner 3 Generating MTA alias maps 4 [mailman3@somehost ~]$ sudo ls -l /opt/mailman3/mm/var/data/postfix_domains 5 ls: cannot access '/opt/mailman3/mm/var/data/postfix_domains': No such file or directory 6 [mailman3@somehost ~]$ ls -dl /opt/mailman3/mm/var/data/ 7 drwxr-xr-x. 2 mailman3 mailman3 6 Jul 5 13:38 /opt/mailman3/mm/var/data/ What should I do about lines 4-7? Thought it might be a permissions issue but it's owned by the correct user. Not sure that i missed any steps, suggestions appreciated. As has been observed, the Ubuntu 24.04 LTS packaging for native Mailman3 can be challenging. I've been solving all kinds of issues, and I'm writing here about something I've so far been unable to solve. The problem: *In Postorius, dropdown menus are not working*. I.e., as a list admin you can click on a menu option like "Users" or "Mass operations," and nothing happens. As a regular user, the top-right icon to manage settings and logout does not do anything. The same behavior occurs regardless of which browser I use. The dropdown in HyperKitty works, and HyperKitty uses a different code base. In the browser developer console (Firefox & others), the error is: “Uncaught TypeError: n.createPopper is not a function.” I've dug deeply into this. The relevant <script> is bootstrap.min.js. Postorius (via django) is using version 5.3.1 via package libjs-bootstrap5: ** This is what django is using: /usr/share/bootstrap-html/js/bootstrap.bundle.min.js -- version 5.3.1, linked to: /usr/share/javascript/bootstrap5/js/bootstrap.bundle.min.js /usr/share/python3-django-postorius/static/postorius/libs/bootstrap/js/bootstrap.bundle.min.js Here is detail of the error from the Firefox developer console: Uncaught TypeError: n.createPopper is not a function _createPopper dropdown.js:241 show dropdown.js:139 toggle dropdown.js:121 <anonymous> dropdown.js:446 i event-handler.js:118 R event-handler.js:184 on event-handler.js:216 <anonymous> dropdown.js:444 <anonymous> bootstrap.bundle.min.js:6 <anonymous> bootstrap.bundle.min.js:6 By temporarily replacing /usr/share/python3-django-postorius/static/postorius/libs/bootstrap/js/bootstrap.bundle.min.js I have tried moving back to 4.6.1 (from libjs-bootstrap4). I have also retrieved the latest 5.3.1 from the CDN, which is slightly different but doesn't change the error: https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js Here's the JavaScript section from the bottom of a sample page from my Postorius site (view-source: https://lists.ogf.org/mailman3/postorius/lists/gfsg.lists.ogf.org/held_mess… <script src="/mailman3/static/postorius/libs/jquery/jquery-3.6.0.min.js"></script> <script src="/mailman3/static/postorius/libs/bootstrap/js/bootstrap.bundle.min.js"></script> <script src="/mailman3/static/django-mailman3/js/main.js"></script> <script src="/mailman3/static/postorius/js/script.js" defer></script> <script> // Add the .js-enabled class to the body so we can style the elements // depending on whether Javascript is enabled. $(document).ready(function(){ $("body").addClass("js-enabled"); $(".gravatar").addClass("rounded-circle"); }); </script> I would appreciate suggestions about how to solve this problem. Thanks to everyone who is doing a great job building and supporting Mailman3. I've been using Mailman2 for a long time, and have dozens of lists on multiple servers. ~ Greg Newby I have installed a testing server for an organization I'm working with to explore migration from MM2 to MM3. Our main list has archives from 1992, and when importing the mbox into hyperkitty/mm3 I notice the archives by month only go back to July 2007, but the messages are there when I search for specific ones from the old archive in the 1992-2007 range. Is there a better way to get this to show up, or perhaps a better format we can display old archives in that's not 400+ line drop down? Thank you, Bryan Fields 727-409-1194 - Voice http://bryanfields.net Our organization is moving to MM3 from MM2, and I'm at the point where I am testing importing our archives. However, many of the lists that we want to transfer over have pretty large mbox files, so it takes a significant amount of time for it to process them. I can throw all of the resources I need at it in order to make it faster, but I'm not sure if the import application is single-threaded only. Is there a way to enable a multi-threaded option? Can I safely run multiple commands at the same time using something like /usr/bin/parallel? Thanks 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). I am getting an e-mail *every* minute that looks like: From www-data(a)deepsoft.com Sat Jul 6 17:38:03 2024 Return-Path: <www-data(a)deepsoft.com> X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on sharky5.deepsoft.com X-Spam-Level: X-Spam-Status: No, score=-850.0 required=5.0 tests�YES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NO_RELAYS,URIBL_BLOCKED, USER_IN_WELCOMELIST autolearn=ham autolearn_force=no version=4.0.0 X-Original-To: www-data Delivered-To: www-data(a)deepsoft.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d�epsoft.com ; s�epsoft.com ; t20301883; bh=qGrVTBfV1NiqgxCIzSaXwoKZ0lKxKvaK56k31yXU2Sk=; h=From:To:Subject:Date:From; b=jTml1ZF+qGkmS2tcz5kgZHjOyPxeaWIQiX1mzAF3ZfZWb0ziVLxutkcej5mGapUOq PpH6ExYM1TEipMTYQ/JRY/74vz2dEpebDrZqjyY3KakxLWiyFFEb5glmQYZGvz9wr2 e5ljD0Shku4fbRoaxO7XMQCn/fmx3+D8tI/ZPbMQReceived: by sharky5.deepsoft.com (Postfix, from userid 33) id 5257D4C1296; Sat, 6 Jul 2024 17:38:03 -0400 (EDT) From: root(a)deepsoft.com (Cron Daemon) To: www-data(a)deepsoft.com Subject: Cron <www-data@sharky5> [ -f /usr/bin/django-admin ] && flock -n /var/run/mailman3-web/cron.minutely /usr/share/mailman3-web/manage.py runjobs minutely MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/var/www> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=www-data> Message-Id: <20240706213803.5257D4C1296(a)sharky5.deepsoft.com> Date: Sat, 6 Jul 2024 17:38:03 -0400 (EDT) X-Scanned-By: MIMEDefang 3.3 on 108.161.129.198 Status: R /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'. And I get this output from sudo mailman-web check --no-color : 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'. System check identified 14 issues (0 silenced). Again, the docs are not helpful (at least not to me). 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 I am using the debian 12 repo versions of mailman3, django, posterious, hyperkitty, and xapian: sharky5% dpkg-query -l python3-{django,django-mailman3,django-hyperkitty,django-postorius,xapian} mailman3\* | grep '^ii' ii mailman3 3.3.8-2~deb12u2 all Mailing list management system ii mailman3-doc 3.3.8-2~deb12u2 all Mailing list management system documentation ii mailman3-web 0+20200530-2.1 all Django project integrating Mailman3 Postorius and HyperKitty ii python3-django 3:3.2.19-1+deb12u1 all High-level Python web development framework ii python3-django-hyperkitty 1.3.7-1 all Web user interface to access GNU Mailman3 archives ii python3-django-mailman3 1.3.9-1 all Django library to help interaction with Mailman3 (Python 3 version) ii python3-django-postorius 1.3.8-3 all Web user interface to access GNU Mailman3 ii python3-xapian 1.4.22-1 amd64 Xapian search engine interface for Python3 Before adding the HAYSTACK_CONNECTIONS options, I have this: sharky5% sudo mailman-web haystack_info --no-color --skip-checks Number of handled 1 index(es). - Model: Email by Index: <hyperkitty.search_indexes.EmailIndex object at 0x7fd0de1b0470> When I add this to /etc/mailman3/maymail_web.py (adapted from the section titled: "Setting up Fulltext search (xapian)" on https://docs.mailman3.org/en/latest/install/virtualenv.html#set-up-xapian HAYSTACK_CONNECTIONS = { 'default': { 'PATH': "/var/lib/mailman3/web/fulltext_index", 'ENGINE': 'xapian_backend.XapianEngine' I get: 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 1142, in _find_and_load_unlocked ModuleNotFoundError: No module named 'xapian_backend' So, do I use Xapian or not? Is something missing somewhere? Is this a documentation bug or 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 We have a user who is proposing that reply messages from a mailing list should be in the following format: Re: [MM3-users] Ubuntu 24.04 upgrade notes and not [MM3-users] Re: Ubuntu 24.04 upgrade notes Their reason... is that mailman2, and other lists, used to do it that way. I myself am agnostic about the difference, and probably prefer to keep things the way mailman3 recommends. The questions are: 1. What could be explained to the user to convince them the new method is preferable. 2. Can this be customized with a Setting? (Not that we will end up modifying it. Just curious). Thanks. --------------------------------------------------------------------------- First issue:Postfix v3.5.8 on RHEL 8. The below is from journalctl -xe: --------------------------------------------------------------------------- Jul 03 08:12:04 somehost.somedomain postfix/qmgr[947499]: error: open database /opt/mailman3/mm/var/data/postfix_domains.db: No such file or directory Jul 03 08:12:42 somehost.somedomain postfix/smtpd[947510]: error: open database /opt/mailman3/mm/var/data/postfix_domains.db: No such file or directory Jul 03 08:12:42 somehost.somedomain postfix/smtpd[947510]: error: open database /opt/mailman3/mm/var/data/postfix_lmtp.db: No such file or directory I manually created the var_dir: /opt/mailman3/mm/var directory specified in the mailman.cfg file. How do I find out how to populate the postfix_domains.db files, and the postfix_lmtp.db file? --------------------------------------------------------------------------- Second issue: Postgresql authentication. PostgreSQL v10.23. --------------------------------------------------------------------------- I have this in the active mailman3.cfg file, where xxxxxxxxxx is the same complex password in the mailman3 config file: url: postgresql://mailman3:xxxxxxxxxx@localhost/mailman3/mailman3 Same password when I created the mailman3 and mailman3web users: create role mailman3 with encrypted password 'xxxxxxxxxx '; create role mailman3web with encrypted password 'xxxxxxxxxx '; psycopg2.OperationalError: connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: Ident authentication failed for user "mailman3" --------------------------------------------------------------------------- Contents of the "live" mailman.cfg file, from "mailman info" --------------------------------------------------------------------------- (venv) [mailman3@someserver ~]$ cat -n /opt/mailman3/var/etc/mailman.cfg 1 # /opt/mailman3/mailman.cfg 2 [paths.here] 3 var_dir: /opt/mailman3/mm/var 5 [mailman] 6 layout: here 7 # This address is the "site owner" address. Certain messages which must be 8 # delivered to a human, but which can't be delivered to a list owner (e.g. a 9 # bounce from a list owner), will be sent to this address. It should point to 10 # a human. 11 site_owner: user(a)example.com 13 [database] 14 class: mailman.database.postgresql.PostgreSQLDatabase 15 ##### url: postgresql://mailman:MYPASSWORD@localhost/mailman 16 # ---------------------------------------------------------------------------------- 17 # Changed: Fri Jun 28 11:56:02 EDT 2024 18 url: postgresql://mailman3:xxxxxxxx@localhost/mailman3/mailman3 19 # Changed: Fri Jun 28 11:56:02 EDT 2024 20 # ---------------------------------------------------------------------------------- 22 [archiver.prototype] 23 enable: yes 25 # For the HyperKitty archiver. 26 [archiver.hyperkitty] 27 class: mailman_hyperkitty.Archiver 28 enable: yes 29 configuration: /opt/mailman3/mailman-hyperkitty.cfg 31 [shell] 32 history_file: $var_dir/history.py 34 [mta] 35 incoming: mailman.mta.postfix.LMTP 36 outgoing: mailman.mta.deliver.deliver 37 lmtp_host: 127.0.0.1 38 lmtp_port: 8024 39 smtp_host: localhost 40 smtp_port: 25 41 configuration: python:mailman.config.postfix 42 verp_confirmations: yes 43 verp_personalized_deliveries: yes 44 verp_delivery_interval: 1 Suggestions appreciated for how to fix the postfix_domains files, and the postgres authentication isssue. ------------- Keith Just thought I would write up my installation experiences on Ubuntu 24.04 following this guide as much as possible: Virtualenv Installation - Mailman Suite 3.3 documentation ( mailman3.org )< https://docs.mailman3.org/en/latest/install/virtualenv.html > Ubuntu packages: I'm trying not to install dev packages on the server if possible and managed to get away with the following packages: python3-psycopg2 sassc lynx python3-venv python3-certbot-nginx postgresql exim4-daemon-light Creating the venv: python3 -m venv --system-site-packages --symlinks venv This creates the venv referencing the system packages as well which is useful as some of the dependencies for Mailman are met by the Certbot and python3-psycopg2 packages. Using Pip I installed the following packages: pip install mailman mailman-hyperkitty mailman-web Postgres: I ran into an issue with the database after running `mailman-web migrate`. This was because a newer version of Django pulled in from the above command needed some tables creating in the public schema, and from Postgres 15 (Ubuntu ships with Postgres 16) that isn't allowed by default. I solved this by making the Mailman role owner of the mailman database. I am aware of discussions around whether its best to do this or give explicit perms on the databases to allow all on the public schema, but I decided to go with this option. My Postgres commands are now: sudo -u postgres psql create database mailman; create user mailman with encrypted password '[...]'; ALTER DATABASE mailman OWNER TO mailman; Django: I ran into an issue with a newer Django installation not allowing any form submission, was getting a 403 returned due to CSRF protection failure. I resolved this by adding this line to my local Settings.py: CSRF_TRUSTED_ORIGINS=[' https://lists.domain.com '] I moved back to using Gunicorn for the backend server, the instructions on this were spot on. I've had this error before but the mailman-web compilemessages command failed because of missing msgfmt. I think I can pull this in from Ubuntu packages but may need to update installation docs with this extra package requirement. Search: I continued to use Woosh as I'm running a very low traffic site and that is what comes with Mailman-Web as part of package requirements. Thanks for the good support as always guys. Andrew. Just thought I would write up my installation experiences on Ubuntu 24.04 following this guide as much as possible: Virtualenv Installation - Mailman Suite 3.3 documentation ( mailman3.org )< https://docs.mailman3.org/en/latest/install/virtualenv.html > Ubuntu packages: I'm trying not to install dev packages on the server if possible and managed to get away with the following packages: python3-psycopg2 sassc lynx python3-venv python3-certbot-nginx postgresql exim4-daemon-light Creating the venv: python3 -m venv --system-site-packages --symlinks venv This creates the venv referencing the system packages as well which is useful as some of the dependencies for Mailman are met by the Certbot and python3-psycopg2 packages. Using Pip I installed the following packages: pip install mailman mailman-hyperkitty mailman-web Postgres: I ran into an issue with the database after running `mailman-web migrate`. This was because a newer version of Django pulled in from the above command needed some tables creating in the public schema, and from Postgres 15 (Ubuntu ships with Postgres 16) that isn't allowed by default. I solved this by making the Mailman role owner of the mailman database. I am aware of discussions around whether its best to do this or give explicit perms on the databases to allow all on the public schema, but I decided to go with this option. My Postgres commands are now: sudo -u postgres psql create database mailman; create user mailman with encrypted password '[...]'; ALTER DATABASE mailman OWNER TO mailman; Django: I ran into an issue with a newer Django installation not allowing any form submission, was getting a 403 returned due to CSRF protection failure. I resolved this by adding this line to my local Settings.py: CSRF_TRUSTED_ORIGINS=[' https://lists.domain.com '] I moved back to using Gunicorn for the backend server, the instructions on this were spot on. I've had this error before but the mailman-web compilemessages command failed because of missing msgfmt. I think I can pull this in from Ubuntu packages but may need to update installation docs with this extra package requirement. Search: I continued to use Woosh as I'm running a very low traffic site and that is what comes with Mailman-Web as part of package requirements. Thanks for the good support as always guys. Andrew. Greetings, I have set up a few lists and all seems to be working as expected, however I get a large number of emails due to internal server errors received when my security application is testing exploits to list URLs such as the following: https://<mylistdomain>/archives/search?sort=177120&cauft=&page=1&q=../../../../../../../../../../tmb/wditeteet424465304.txt. Is there any django logging filter changes that can be made to avoid receiving these emails? Any assistance would be greatly appreciated. Thank you! We just notice a held message from a user's list showing the held reason in Ukrainian, but the interface is in US English and the list's preferred language is English (USA). We could not repeat the issue. What can be the reason behind? [cid:[email protected]] ___________________________________________ Mailman's content filtering has removed the following MIME parts from this message. Content-Type: image/png Name: image001.png Replaced multipart/alternative part with first alternative. If you have a locally installed mailman3 instance, could you try (as an administrator) to visit a thread in Hyperkitty and click "Delete this thread"? Does the thread get deleted, and you return to "Recently active discussions" and everything is fine? Even just a few replies would indicate a pattern. That it's usually ok, for example. I get a spinning wheel, and "Thread matching query does not exist." HyperKitty==1.3.9, PostgreSQL, Ubuntu 22.04, memcached, gunicorn. I have a problem with digests not being sent daily (periodically). Mailman 3.3.9 installed in virtualenv Enable Digests = YES Send Digest Periodically = YES Digest size threshold = 0 Cron is set and is running. An error report (below) is generated and emailed. The last line in the error report says "FileNotFoundError: [Errno 2] No such file or directory ...". Setting the list's folder to 777 didn't help. Any clues on where to start looking for a solution would be greatly appreciated. Thanks, /////////////////////////////////////// CRON IS SET: /////////////////////////////////////// su mailman (venv) mailman:/$ crontab -e 5 6 * * * /opt/mailman/venv/bin/mailman digests --periodic /////////////////////////////////////// CRON RUNS: /////////////////////////////////////// # tail -100 /var/log/cron.log 2024-06-21T06:05:01.815948+00:00 deu CRON[3105464]: (mailman) CMD (/opt/mailman/venv/bin/mailman digests --periodic) /////////////////////////////////////// ERROR REPORT EMAILED BY CRON: /////////////////////////////////////// Traceback (most recent call last): File "/opt/mailman/venv/bin/mailman", line 8, in <module> sys.exit(main()) ^^^^^^ 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 1078, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/mailman/bin/mailman.py", line 69, in invoke return super().invoke(ctx) ^^^^^^^^^^^^^^^^^^^ File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line 1688, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line 1434, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/mailman/venv/lib/python3.11/site-packages/click/core.py", line 783, in invoke return __callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/click/decorators.py", line 33, in new_func return f(get_current_context(), *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/mailman/commands/cli_digests.py", line 126, in digests maybe_send_digest_now(mlist, force=True) "/opt/mailman/venv/lib/python3.11/site-packages/mailman/app/digests.py", line 106, in maybe_send_digest_now os.rename(mailbox_path, mailbox_dest) FileNotFoundError: [Errno 2] No such file or directory: '/opt/mailman/mm/var/lists/LISTNAME.LISTDOMAIN/digest.mmdf' -> '/opt/mailman/mm/var/lists/LISTNAME.LISTDOMAIN/digest.252.14.mmdf' //////////////////////////////////////////////////////////////////////////////// After updating to the most recent version of mailman-web, the migrations script issued an error:  Apply all migrations: account, admin, auth, contenttypes, django_mailman3, django_q, hyperkitty, postorius, sessions, sites, socialaccount mailman-web   | Running migrations: mailman-web   | Traceback (most recent call last): mailman-web   |   File "/usr/lib/python3.12/site-packages/django/db/backends/utils.py", line 89, in _execute mailman-web   |     return self.cursor.execute(sql, params) mailman-web   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mailman-web   | psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "account_emailaddress_user_id_email_987c8728_uniq" mailman-web   | DETAIL:  Key (user_id, email)=(27, John.Doe(a)mynicedomain.de) already exists. mailman-web   |(...) Digging into the db, I found the duplicate to result from a duplicate entry using john.doe(a)mynicedomain.de Obviously, the process that originally created the entry, took case sensitivity literally which doesn't seem to be the case any longer for the migration script. I fixed this by removing one of the duplicates hoping no further errors will come up.... What would have been the better approach? Our organization has been been communicating through about a dozen mailing lists, running on mailman, with ~200 subscribers, for 15-odd years. After Debian 10 LTS ran out, I had to upgrade our organisations Debian server, forcing me into mailman3. I haven't managed, yet, to get the web interface running, so I need to do the most urgent tasks in the shell for now. I have found out that, for example, to discard all held messages from the list "motor", I need to > sudo -u list mailman shell -l motor.our-server.de and in the shell, >>> from mailman.app.moderator import handle_message >>> rdb = IListRequest(m) >>> for req in rdb.held_requests: ... if req.request_type == RequestType.held_message: ... handle_message(m, req.id, Action.discard) > commit() Now, obviously, I put these exact lines in a script, so I don't have to type it out every single time, and try to run it using > sudo -u list mailman shell -l testlist.our-server.de -r ./mm_discard_held.py but that invariably gives me ------------------------ Traceback (most recent call last): File "/usr/bin/mailman", line 33, in <module> sys.exit(load_entry_point('mailman==3.3.8', 'console_scripts', 'mailman')()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/click/core.py", line 1130, in __call__ return self.main(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/click/core.py", line 1055, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/mailman/bin/mailman.py", line 69, in invoke return super().invoke(ctx) ^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/click/core.py", line 1657, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/click/core.py", line 1404, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/click/core.py", line 760, in invoke return __callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/click/decorators.py", line 26, in new_func return f(get_current_context(), *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/mailman/commands/cli_withlist.py", line 294, in shell r = call_name(dotted_name, m, *run_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/mailman/utilities/modules.py", line 69, in call_name named_callable = find_name(dotted_name) ^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/mailman/utilities/modules.py", line 52, in find_name module = import_module(module_path) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.11/importlib/__init__.py", line 121, in import_module raise TypeError(msg.format(name)) TypeError: the 'package' argument is required to perform a relative import for './mm_discard_held' ------------- I've tried a PYTHONPATH=/root/bin , where mm_discard_held.py lives, as suggested. I've tried moving it to the path where the mailman binary lives, as suggested. I always get the same result. What else can I do? Thank you. We are running mailman 3.x in a venv setup using Postgresql. The mailman service hangs during startup and eventually fails with a timeout: # systemctl status mailman3 × mailman3.service - GNU Mailing List Manager Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; preset: disabled) Active: failed (Result: timeout) since Wed 2024-06-12 13:35:23 UTC; 11s ago Process: 1205 ExecStart=/opt/mailman/venv/bin/mailman start (code=killed, signal=TERM) CPU: 1.019s Jun 12 13:33:53 <hostname> systemd[1]: Starting GNU Mailing List Manager... Jun 12 13:35:23 <hostname>systemd[1]: mailman3.service: start operation timed out. Terminating. Jun 12 13:35:23 <hostname> systemd[1]: mailman3.service: Failed with result 'timeout'. Jun 12 13:35:23 <hostname> systemd[1]: Failed to start GNU Mailing List Manager. Jun 12 13:35:23 <hostname> systemd[1]: mailman3.service: Consumed 1.019s CPU time. Searching I found some similar reports where it seemed to be an issue with a stale .lck lock file. But on our system: - /var/lib/mailman is empty - /opt/mailman/mm/var/locks is empty The last entries in /opt/mailman/mm/var/logs/mailman.log is: 2024-06-12 09:23:44 -0400] [2101411] [INFO] Handling signal: term Jun 12 13:23:44 2024 (2101395) Master watcher caught SIGTERM. Exiting. [2024-06-12 13:23:44 +0000] [2101451] [INFO] Worker exiting (pid: 2101451) Jun 12 09:23:44 2024 (2101412) retry runner caught SIGTERM. Stopping. [2024-06-12 13:23:44 +0000] [2101450] [INFO] Worker exiting (pid: 2101450) Jun 12 09:23:44 2024 (2101408) nntp runner caught SIGTERM. Stopping. [2024-06-12 09:23:48 -0400] [2101411] [INFO] Shutting down: Master Jun 12 13:23:50 2024 (2101395) Master stopped Any help would be appreciated. Postgres appears to be up., Postfix is up, nginx is up. The web UI gives me the error: Something went wrong Mailman REST API not available. Please start Mailman core. Running "mailman version" hangs for a long time and then returns: $ mailman version GNU Mailman 3.3.9 (Tom Sawyer) Running "mailman status" hangs for a long time and then returns: $ mailman status GNU Mailman is not running What other logs can be checked for more detail? What possible services or file/dir permissions may have had something changed by the OS updates? Thanks, David Goldsmith > Sorry, that was a wrong information in my mail . I already changed the base url to your suggestion as I wrote the mail (and forgot to change it in the mail) but i‘m getting the same error :-( I have some questions. https://lists.mailman3.org/archives/list/[email protected]/message… you say "Thank you, archiver is now starting. Now there's another problem:". Does this mean messages are being archived in HyperKitty or are they accumulating in (I think the Debian path is) /var/lib/mailman/archives/hyperkitty/spool/? https://lists.mailman3.org/archives/list/[email protected]/message… you say "The Keys are in mailman-hyperkitty.cfg and mailman-web.py and this are the same Keys." To be clear, in mailman-web.py the key is quoted and in mailman-hyperkitty.cfg it is not. E.g., in mailman-hyperkitty.cfg api_key: Some_key and in mailman-web.py MAILMAN_ARCHIVER_KEY = 'Some_key' What are your versions for mailman-hyperkitty and HyperKitty? HyperKitty >= 1.3.5 is incompatible with mailman-hyperkitty < 1.2.0 and if I recall corectly, at least one Debian package was shipped with this incompatibility Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan Hello, mailman list: Trying to add the mailman3.service unit so that mailman3 will start on system boots/reboots. Seeing different behavior with the mailman3.service unit commands vs. with the "/opt/mailman3/venv/bin/mailman" command line. Everyone on this list is more experienced than I with reading systemd error messages and Python code, so your ideas are appreciated. I am using letters and numbers to navigate the six screenshots in this email, I hope this is helpful, without being too much info. Running the following OS and Python versions. Mailman was installed with "pip install wheel mailman psycopg2-binary" per the virtual environment instructions: (venv) [keithchristian@localhost ~]$ cat /etc/redhat-release AlmaLinux release 9.4 (Seafoam Ocelot) (venv) [keithchristian@localhost ~]$ python3 -V Python 3.9.18 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- To begin: here is the current mailman3.service unit file, taken from the "Starting Mailman automatically" portion of: https://docs.mailman3.org/en/latest/install/virtualenv.html , with all /opt/mailman/ paths set to /opt/mailman3/ for my sandbox system. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- A 1 [mailman3@localhost ~]$ cat /etc/systemd/system/mailman3.service A 2 [Unit] A 3 Description=GNU Mailing List Manager A 4 After=syslog.target network.target postgresql.service A 5 A 6 [Service] A 7 Type=forking A 8 PIDFile=/opt/mailman3/mm/var/master.pid A 9 User=mailman3 A 10 Group=mailman3 A 11 ExecStart=/opt/mailman3/venv/bin/mailman start A 12 ExecReload=/opt/mailman3/venv/bin/mailman restart A 13 ExecStop=/opt/mailman3/venv/bin/mailman stop A 14 A 15 [Install] A 16 WantedBy=multi-user.target ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Below in line B-6, systemd thinks mailman isn't running, but with the "/opt/mailman3/venv/bin/mailman" commands, line B-2 says it is. I could be misinterpreting the systemd output, however. Python not happy about some directories. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- B 1 [mailman3@localhost ~]$ /opt/mailman3/venv/bin/mailman status B 2 GNU Mailman is running (master pid: 10004) B 3 [mailman3@localhost ~]$ systemctl status mailman3.service B 4 mailman3.service - GNU Mailing List Manager B 5 Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; preset: disabled) B 6 Active: failed (Result: exit-code) since Sat 2024-06-08 09:35:57 MDT; 7min ago B 7 Process: 10342 ExecStart=/opt/mailman3/venv/bin/mailman start (code=exited, status=1/FAILURE) B 8 CPU: 762ms B 9 B 10 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 256, in ensure_directories_exist B 11 Jun 08 09:35:57 localhost.localdomain mailman[10342]: makedirs(directory) B 12 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/utilities/filesystem.py", line 68, in makedirs B 13 Jun 08 09:35:57 localhost.localdomain mailman[10342]: os.makedirs(path, mode) B 14 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/usr/lib64/python3.9/os.py", line 225, in makedirs B 15 Jun 08 09:35:57 localhost.localdomain mailman[10342]: mkdir(name, mode) B 16 Jun 08 09:35:57 localhost.localdomain mailman[10342]: PermissionError: [Errno 13] Permission denied: '//var/templates' B 17 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Control process exited, code=exited, status=1/FAILURE B 18 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Failed with result 'exit-code'. B 19 Jun 08 09:35:57 localhost.localdomain systemd[1]: Failed to start GNU Mailing List Manager. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Below, we stop mailman with the command line and check status with systemd. C-1, C-2, show stopped. I'd think systemctl status should show stopped but it doesn't. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- C 1 [mailman3@localhost ~]$ /opt/mailman3/venv/bin/mailman stop C 2 Shutting down Mailman's master runner C 3 [mailman3@localhost ~]$ systemctl status mailman3.service C 4 mailman3.service - GNU Mailing List Manager C 5 Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; preset: disabled) C 6 Active: failed (Result: exit-code) since Sat 2024-06-08 09:35:57 MDT; 8min ago C 7 Process: 10342 ExecStart=/opt/mailman3/venv/bin/mailman start (code=exited, status=1/FAILURE) C 8 CPU: 762ms C 9 C 10 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 256, in ensure_directories_exist C 11 Jun 08 09:35:57 localhost.localdomain mailman[10342]: makedirs(directory) C 12 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/utilities/filesystem.py", line 68, in makedirs C 13 Jun 08 09:35:57 localhost.localdomain mailman[10342]: os.makedirs(path, mode) C 14 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/usr/lib64/python3.9/os.py", line 225, in makedirs C 15 Jun 08 09:35:57 localhost.localdomain mailman[10342]: mkdir(name, mode) C 16 Jun 08 09:35:57 localhost.localdomain mailman[10342]: PermissionError: [Errno 13] Permission denied: '//var/templates' C 17 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Control process exited, code=exited, status=1/FAILURE C 18 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Failed with result 'exit-code'. C 19 Jun 08 09:35:57 localhost.localdomain systemd[1]: Failed to start GNU Mailing List Manager. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Below, we start mailman, the "/opt/mailman3/venv/bin/mailman" command line works, D-1 through D-5. Line D-6, the systemd status command (erroneously) shows otherwise. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- D 1 [mailman3@localhost ~]$ /opt/mailman3/venv/bin/mailman start D 2 Starting Mailman's master runner D 3 Generating MTA alias maps D 4 [mailman3@localhost ~]$ /opt/mailman3/venv/bin/mailman status D 5 GNU Mailman is running (master pid: 10457) D 6 [mailman3@localhost ~]$ systemctl status mailman3.service D 7 mailman3.service - GNU Mailing List Manager D 8 Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; preset: disabled) D 9 Active: failed (Result: exit-code) since Sat 2024-06-08 09:35:57 MDT; 10min ago D 10 Process: 10342 ExecStart=/opt/mailman3/venv/bin/mailman start (code=exited, status=1/FAILURE) D 11 CPU: 762ms D 12 D 13 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 256, in ensure_directories_exist D 14 Jun 08 09:35:57 localhost.localdomain mailman[10342]: makedirs(directory) D 15 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/utilities/filesystem.py", line 68, in makedirs D 16 Jun 08 09:35:57 localhost.localdomain mailman[10342]: os.makedirs(path, mode) D 17 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/usr/lib64/python3.9/os.py", line 225, in makedirs D 18 Jun 08 09:35:57 localhost.localdomain mailman[10342]: mkdir(name, mode) D 19 Jun 08 09:35:57 localhost.localdomain mailman[10342]: PermissionError: [Errno 13] Permission denied: '//var/templates' D 20 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Control process exited, code=exited, status=1/FAILURE D 21 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Failed with result 'exit-code'. D 22 Jun 08 09:35:57 localhost.localdomain systemd[1]: Failed to start GNU Mailing List Manager. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------- E 1 [mailman3@localhost ~]$ /opt/mailman3/venv/bin/mailman status E 2 GNU Mailman is running (master pid: 10457) E 3 [mailman3@localhost ~]$ /opt/mailman3/venv/bin/mailman stop E 4 Shutting down Mailman's master runner E 5 [mailman3@localhost ~]$ /opt/mailman3/venv/bin/mailman start E 6 Starting Mailman's master runner E 7 Generating MTA alias maps E 8 [mailman3@localhost ~]$ systemctl status mailman3.service E 9 mailman3.service - GNU Mailing List Manager E 10 Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; preset: disabled) E 11 Active: failed (Result: exit-code) since Sat 2024-06-08 09:35:57 MDT; 2h 21min ago E 12 Process: 10342 ExecStart=/opt/mailman3/venv/bin/mailman start (code=exited, status=1/FAILURE) E 13 CPU: 762ms E 14 E 15 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 256, in ensure_directories_exist E 16 Jun 08 09:35:57 localhost.localdomain mailman[10342]: makedirs(directory) E 17 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/utilities/filesystem.py", line 68, in makedirs E 18 Jun 08 09:35:57 localhost.localdomain mailman[10342]: os.makedirs(path, mode) E 19 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/usr/lib64/python3.9/os.py", line 225, in makedirs E 20 Jun 08 09:35:57 localhost.localdomain mailman[10342]: mkdir(name, mode) E 21 Jun 08 09:35:57 localhost.localdomain mailman[10342]: PermissionError: [Errno 13] Permission denied: '//var/templates' E 22 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Control process exited, code=exited, status=1/FAILURE E 23 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Failed with result 'exit-code'. E 24 Jun 08 09:35:57 localhost.localdomain systemd[1]: Failed to start GNU Mailing List Manager. E 25 [mailman3@localhost ~]$ systemctl stop mailman3.service E 26 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ==== E 27 Authentication is required to stop 'mailman3.service'. E 28 Multiple identities can be used for authentication: E 29 1. keith christian (keithchristian) E 30 2. mailman3 E 31 Choose identity to authenticate as (1-2): 2 E 32 Password: E 33 ==== AUTHENTICATION COMPLETE ==== E 34 [mailman3@localhost ~]$ systemctl status mailman3.service E 35 mailman3.service - GNU Mailing List Manager E 36 Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; preset: disabled) E 37 Active: failed (Result: exit-code) since Sat 2024-06-08 09:35:57 MDT; 2h 21min ago E 38 Process: 10342 ExecStart=/opt/mailman3/venv/bin/mailman start (code=exited, status=1/FAILURE) E 39 CPU: 762ms E 40 E 41 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 256, in ensure_directories_exist E 42 Jun 08 09:35:57 localhost.localdomain mailman[10342]: makedirs(directory) E 43 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/utilities/filesystem.py", line 68, in makedirs E 44 Jun 08 09:35:57 localhost.localdomain mailman[10342]: os.makedirs(path, mode) E 45 Jun 08 09:35:57 localhost.localdomain mailman[10342]: File "/usr/lib64/python3.9/os.py", line 225, in makedirs E 46 Jun 08 09:35:57 localhost.localdomain mailman[10342]: mkdir(name, mode) E 47 Jun 08 09:35:57 localhost.localdomain mailman[10342]: PermissionError: [Errno 13] Permission denied: '//var/templates' E 48 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Control process exited, code=exited, status=1/FAILURE E 49 Jun 08 09:35:57 localhost.localdomain systemd[1]: mailman3.service: Failed with result 'exit-code'. E 50 Jun 08 09:35:57 localhost.localdomain systemd[1]: Failed to start GNU Mailing List Manager. E 51 [mailman3@localhost ~]$ systemctl start mailman3.service E 52 ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ==== E 53 Authentication is required to start 'mailman3.service'. E 54 Multiple identities can be used for authentication: E 55 1. keith christian (keithchristian) E 56 2. mailman3 E 57 Choose identity to authenticate as (1-2): 2 E 58 Password: E 59 ==== AUTHENTICATION COMPLETE ==== E 60 Job for mailman3.service failed because the control process exited with error code. E 61 See "systemctl status mailman3.service" and "journalctl -xeu mailman3.service" for details. E 62 [mailman3@localhost ~]$ journalctl -xeu mailman3.service|tail -20 E 63 Defined-By: systemd E 64 Support: https://wiki.almalinux.org/Help-and-Support E 65 E 66 An ExecStart= process belonging to unit mailman3.service has exited. E 67 E 68 The process' exit code is 'exited' and its exit status is 1. E 69 Jun 08 11:58:52 localhost.localdomain systemd[1]: mailman3.service: Failed with result 'exit-code'. E 70 Subject: Unit failed E 71 Defined-By: systemd E 72 Support: https://wiki.almalinux.org/Help-and-Support E 73 E 74 The unit mailman3.service has entered the 'failed' state with result 'exit-code'. E 75 Jun 08 11:58:52 localhost.localdomain systemd[1]: Failed to start GNU Mailing List Manager. E 76 Subject: A start job for unit mailman3.service has failed E 77 Defined-By: systemd E 78 Support: https://wiki.almalinux.org/Help-and-Support E 79 E 80 A start job for unit mailman3.service has finished with a failure. E 81 E 82 The job identifier is 9400 and the job result is failed. E 83 E 84 [mailman3@localhost ~]$ journalctl -xeu mailman3.service|grep -a "Jun 08 11:5[0-9]:[0-9][0-9]" E 85 Jun 08 11:58:51 localhost.localdomain systemd[1]: Starting GNU Mailing List Manager... E 86 Jun 08 11:58:52 localhost.localdomain mailman[11160]: Traceback (most recent call last): E 87 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/bin/mailman", line 33, in <module> E 88 Jun 08 11:58:52 localhost.localdomain mailman[11160]: sys.exit(load_entry_point('mailman==3.3.9', 'console_scripts', 'mailman')()) E 89 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1157, in __call__ E 90 Jun 08 11:58:52 localhost.localdomain mailman[11160]: return self.main(*args, **kwargs) E 91 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1077, in main E 92 Jun 08 11:58:52 localhost.localdomain mailman[11160]: with self.make_context(prog_name, args, **extra) as ctx: E 93 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 943, in make_context E 94 Jun 08 11:58:52 localhost.localdomain mailman[11160]: self.parse_args(ctx, args) E 95 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1644, in parse_args E 96 Jun 08 11:58:52 localhost.localdomain mailman[11160]: rest = super().parse_args(ctx, args) E 97 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1408, in parse_args E 98 Jun 08 11:58:52 localhost.localdomain mailman[11160]: value, args = param.handle_parse_result(ctx, opts, args) E 99 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 2400, in handle_parse_result E 100 Jun 08 11:58:52 localhost.localdomain mailman[11160]: value = self.process_value(ctx, value) E 101 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 2362, in process_value E 102 Jun 08 11:58:52 localhost.localdomain mailman[11160]: value = self.callback(ctx, self, value) E 103 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/bin/mailman.py", line 95, in initialize_config E 104 Jun 08 11:58:52 localhost.localdomain mailman[11160]: initialize(value) E 105 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/core/initialize.py", line 228, in initialize E 106 Jun 08 11:58:52 localhost.localdomain mailman[11160]: initialize_1(config_path) E 107 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/core/initialize.py", line 122, in initialize_1 E 108 Jun 08 11:58:52 localhost.localdomain mailman[11160]: mailman.config.config.load(config_path) E 109 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 141, in load E 110 Jun 08 11:58:52 localhost.localdomain mailman[11160]: self._post_process() E 111 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 163, in _post_process E 112 Jun 08 11:58:52 localhost.localdomain mailman[11160]: self.ensure_directories_exist() E 113 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 256, in ensure_directories_exist E 114 Jun 08 11:58:52 localhost.localdomain mailman[11160]: makedirs(directory) E 115 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/utilities/filesystem.py", line 68, in makedirs E 116 Jun 08 11:58:52 localhost.localdomain mailman[11160]: os.makedirs(path, mode) E 117 Jun 08 11:58:52 localhost.localdomain mailman[11160]: File "/usr/lib64/python3.9/os.py", line 225, in makedirs E 118 Jun 08 11:58:52 localhost.localdomain mailman[11160]: mkdir(name, mode) E 119 Jun 08 11:58:52 localhost.localdomain mailman[11160]: PermissionError: [Errno 13] Permission denied: '//var/templates' E 120 Jun 08 11:58:52 localhost.localdomain systemd[1]: mailman3.service: Control process exited, code=exited, status=1/FAILURE E 121 Jun 08 11:58:52 localhost.localdomain systemd[1]: mailman3.service: Failed with result 'exit-code'. E 122 Jun 08 11:58:52 localhost.localdomain systemd[1]: Failed to start GNU Mailing List Manager. E 123 [mailman3@localhost ~]$ ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- For the PermissionError: [Errno 13] Permission denied: '//var/templates' in Line E-119 above, every /var/tamplates directory except the last one has write permissions for mailman3, I doubt that the "/home/keithchristian/var/templates directory" had been tried. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- F 1 1716996947 drwxr-xr-x. 2 mailman3 mailman3 6 May 29 09:35 /opt/mailman3/var/templates F 2 1716999414 drwxr-xr-x. 2 mailman3 mailman3 6 May 29 10:16 /opt/mailman3/mailman_install_documentation_edits/var/templates F 3 1717774226 drwxr-xr-x. 2 mailman3 mailman3 6 Jun 7 09:30 /opt/mailman3/venv/var/templates F 4 1717779523 drwxr-xr-x. 2 keithchristian keithchristian 6 Jun 7 10:58 /home/keithchristian/var/templates ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- END OF MAILMAN INSTALL ISSUES SCREENSHOTS ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- This is only a minor issue, however as a nicety for new list owners I am hoping there is work around or something I have missed. I have the following file: templates/domains/<fqdn_listname/en/domain:admin:notice:new-list.txt When I use the mailman create command with the --notify option the new owners receives an email with the correct template info from the above file. However when I use mailmanclient python bindings or Postorius to create an list, there is no email sent. Is there an option to include a notify option when using mailmanclient or the API direct perhaps ? Or even maybe a way to trigger a notification manually at some point once the list is completely setup including both short and long descriptions ? Thank you. Regards, Perry So I seem to have problems with both periodic AND size-triggered digests.  Size first, this is simpler.  Just got one sent out, clearly triggered by a new email getting added to the queued up messages, but the setting for the list is the default 30KB and the digest came out at 23.2 KB.  Is it measuring the accumulated queue as size on disk including metadata and filesystem block sizes or something, rather than the size of what the emailed digest will be? Periodic is much more complicated, even to explain.  I have the cron job running nightly at 11:00 PM and it certainly seems to be working, except for one really odd thing.  The list also definitely has periodic digests enabled in the web UI.  This is a very bursty list, so it will go mad with traffic for a few weeks and then will go mostly idle for a month or so.  The first digest of a burst is definitely size-triggered, but pretty reliably it has the last few messages from the previous burst in there.  So the one I got today had three messages from today and one message from May 4th.  But that May 4th message should have gone out at 11:00 PM on May 4th with the daily digest and then gotten flushed from the pending digest queue, right? Joel Lord My next challenge is to script the setup of a bunch of nonmembers who have a moderation action of accept (or maybe defer) whilst the list itself has a nonmember action of hold. This is due to a relatively heavy use of nested lists, and have a fair number of people who might possibly send to all lists, and are important enough they wouldn't want to be manually allowed each time even if it only once. When using the mailmanclient python bindings I have worked out I can add nonmembers with something like: mailing_list.add_role('nonmember', 'nonmember(a)yourdomain.com', display_name='Non Member') However I can't see anything in the mailmanclient docs which suggest it is possible to configure a member_moderation_action or moderation_action field for that member. I assume I'll need to fall back to using the REST API directly, and most likely something along these lines: 1/ Obtain the member ID for an email address of someone who already been added as a nonmember. 2/ Patch an endpoint which looks something like: /members/{member_id} I'm not able to use the mailman binary (e.g mailman shell) on the mailman-core host itself as I would like to query an existing database of people and reach out to a mailman endpoint from the database host rather than opening that host up to further network access. I figured it might be a good stage in which to ask for a little help and pointers before I continue, perhaps there is something I have missed for a better way to approach this. Thanks. Regards, Perry Dear Mailman-users list, I have embarked on project to stand up a Mailman3 instance for general staff email announcements and a small number of adhoc lists. I have a fair amount up and working using Docker and Postfix, with generally emails to/from lists working well, as well as the web interface. One of the reasons I've used Mailman3 is the API and mailman shell options which I'm slowly trying to wrap my head around, but having some progress. I have a question for the moment on something which has stumped me, and whilst I may have more questions as I continue on this implementation, I am hopeful someone can point out where I am going wrong on this. 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. >>> from zope.component import getUtility >>> from mailman.interfaces.styles import IStyleManager >>> manager = getUtility(IStyleManager) >>> for style in manager.styles: ... print(style.name) legacy-announce legacy-default private-default >>> from zope.interface import implementer >>> from mailman.interfaces.styles import IStyle >>> @implementer(IStyle) ... class TestStyle: ... name = 'AB-Announce-Style' ... description = 'AB Announce mailing list style.' ... def apply(self, mailing_list): ... mailing_list.admin_immed_notify = true ... mailing_list.admin_notify_mchanges = true ... mailing_list.advertised = false ... mailing_list.allow_list_posts = false ... mailing_list.anonymous_list = false ... mailing_list.archive_policy = "private" ... mailing_list.archive_rendering_mode = "markdown" ... mailing_list.collapse_alternatives = false ... mailing_list.convert_html_to_plaintext = false ... mailing_list.default_member_action = "defer" ... mailing_list.default_nonmember_action = "hold" ... mailing_list.digest_send_periodic = false ... mailing_list.digests_enabled = false ... mailing_list.emergency = false ... mailing_list.include_rfc2369_headers = true ... mailing_list.max_message_size = 40000 ... mailing_list.max_num_recipients = 30 ... mailing_list.member_roster_visibility = "moderators" ... mailing_list.send_goodbye_message = true ... mailing_list.send_welcome_message = true ... mailing_list.subscription_policy = "moderate" ... mailing_list.unsubscription_policy = "moderate" >>> manager.register(TestStyle()) >>> commit() >>> for style in manager.styles: ... print(style.name) AB-Announce-Style legacy-announce legacy-default private-default So at this point the style has been registered, however it doesn't look to save this permanently. When I quit the shell and log back in, it only shows the original 3 styles. Nor can I see the style from the web interface. 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. >>> from zope.component import getUtility >>> from mailman.interfaces.styles import IStyleManager >>> manager = getUtility(IStyleManager) >>> for style in manager.styles: ... print(style.name) legacy-announce legacy-default private-default Is there a way to save this style permanently ? Thank you for any assistance you can provide. Regards, PerryK Hello, It seems the mailman & mailman-web memory footprint are somewhat big. It looks a lot of instances are started. I have seen this: https://gitlab.com/mailman/mailman/-/issues/1050 and added this to the end of /etc/mailman3/mailman-web.py: Q_CLUSTER = { 'workers': 2, 'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5, However, it does not seem to really reduce the memory footprint. Any other suggestions? Thank you. Hello, i already send this question to the plesk-forum but it seems that nobody there can help me :-( After updating from Debian 10 to 11 to 12, I now have mailman3 running on my server I then converted all lists from Mailman2 to Mailman3 following the instructions from mailman. I can access it via the web interface, manage everything etc. When I register on the web interface, I also receive the corresponding mails from Mailman (forgotten password...) Mails are also arriving, at least mails that are not allowed go into the mails to be approved. The problem, however, is that it does not send out any mails, nor do they appear in the archive. When I look in the Mailman-Log I find: May 16 01:44:55 2024 (6833) Cannot connect to SMTP server localhost on port 25 May 16 01:48:15 2024 (61252) error opening connection to nntp_host: localhost [Errno 111] Connection refused May 16 01:48:15 2024 (61252) NNTP error for list vereinsmitglieder(a)ludothek.de: [Errno 111] Connection refused The configuration of Mailman.cfg looks like this: 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 In Mailman manuals I find hints that the transport routes have to be added to the Postfix-config. Doesn't Debian/Plesk do this automatically? Does anyone else have an idea what I need to change to get my mails out? I did the conversion from mailman2 to mailman3 with root because it didn't work with "sudo -u list "m, but the files stored in the file system all belong to list, so that shouldn't be the problem. Due to the DMARC mitigation action ‘Replace From: with list address’, it happens often on my lists that someone sends a message to a mangled address, hoping that the message goes to the person listed as the sender. This happens mostly because the mail clients collect previous addresses and use them when as type-ahead candidates for new messages, which may be unrelated to the lists. For example, say the mail client captures my address as “Allan Hansen via <listname>” <listaddress> then later, when the person wants to send a message to me, the type-ahead puts this string in the ’To:’ field: “Allan Hansen via <listname>” and, to make it worse, the actual email address, <listaddress>, is often hidden. The result is that the email gets sent to the list instead of to me, together with (often) personal and (sometimes) embarrassing information. Is there a way to reject messages sent to recipients where the name part of the recipient is of the above format, i.e., "Allan Hansen via <listname>" In other words, filtering is done on the name part of the recipient, not the address part. Should I get onto the other list to request this as an enhancement? Yours, Allan is it possible to sign and encrypt all e-mail responses from the Mailman3 server with a digital certificate? Best regards, Markus Grandpré Markus Ludwig Grandpré Universität Konstanz Kommunikations-, Informations-, Medienzentrum (KIM) Abteilung IT-Dienste Forschung und Lehre, B803, Tel: ++49 7531 88 4342 Sometimes not sure if it's preferable to open a gitlab issue, or chat on the mailing list. I have run a large archive import into mailman3/hyperkitty. After that's done, waited a day, for scheduled cron jobs to complete. In "All Threads", all the email archives are present. The import worked. In "RECENTLY ACTIVE DISCUSSIONS" on the main page, it says: RECENTLY ACTIVE DISCUSSIONS No discussions this month (yet). Nothing there. That means if I direct users to visit the site, the page, it appears empty. That's too bad. :-) It should display recent emails. What would affect this feature during an archive import? Is it a problem with the import script itself, or with a scheduled cron job, or something else? Would you expect "Recently active discussions" be empty when very recent archives do exist? Thanks, Mailman2.1 to Mailman3.9. 2 Planning to copy over the entire production Mailman2.1 to a new directory structure on the Mailman 3.9 machine. 3 Expecting that all .mbox and .pkl files will be present and no special work has to be done to bring them over will a "full" mailman2.1 copy. 4 Can the import21 program find the mailman2.1 .mbox and .pkl files on its own and process them? 5 Other than the mailman2.1 instance being shut down, any other prep that needs to be done? 6 Any special command line parameters to be aware of for import21? 7 Is there a list of troubleshooting steps for commonly encountered migration issues? Thanks. ------------------ Keith Could those be subscribers that Mailman2 saw bouncing and added the appropriate flag, and Mailman3 sent a probe after the import21? I checked for one of the e-mail address and: Mailman2: - that e-mail has the [X] R flag for "noncourriel" (no delivery) Mailman3: - that e-mail is Delivery mode Regular, Bounces to 0 NB: in MM2 and MM3, all users are in Hold for moderation, that's normal. In addition, there are a few mails in /var/lib/mailman/messages for example that same user: one file, showing a bounce from a remote server. So my questions: 1) is this behaviour to "probe" already disabled addresses normal, and not "port over" the "don't deliver"? 2) why are those messages held in messages/ ? 3) should I then, before running import21, clean the MM2 installation of all those users with [X] R flag? If yes, is there a simple command? Thank you for pointers or help. PS: there was no trafic on that imported mailing-list yet, it's a test. I have defined an additional SITE in django and the SITE_ID value in /etc/mailman3/settings.py is set to reference that site's ID value. Messages for a list being distributed that are generating certain bounce errors are resulting in email from Mailman 3.x being sent to the list owners from the address user(a)example.com. Is there something else to update in the settings files, Django or the database to make it use the list owner email address tied to the domain of the site? Thanks, David Goldsmith (venv) [mailman3@localhost-live ~]$ mailman info GNU Mailman 3.3.9 (Tom Sawyer) Python 3.9.18 (main, Jan 24 2024, 00:00:00) [GCC 11.4.1 20231218 (Red Hat 11.4.1-3)] config file: /opt/mailman3/mailman.cfg db url: sqlite:////opt/mailman3/var/data/mailman.db <<<---------------------------------------- devmode: DISABLED REST root url: http://localhost:8001/3.1/ REST credentials: restadmin:restpass Class and url were commented out in the mailman.cfg file, did not recognize postgresql but generated a trace (venv) [mailman3@localhost-live ~]$ grep postgresql /opt/mailman3/mailman.cfg # class: mailman.database.postgresql.PostgreSQLDatabase # url: postgresql://mailman:MYPASSWORD@localhost/mailman Uncommented class and url: class: mailman.database.postgresql.PostgreSQLDatabase <<<---------------------------------------- url: postgresql://mailman:MYPASSWORD@localhost/mailman <<<---------------------------------------- Now I get a stack trace from "mailman info" (venv) [mailman3@localhost-live ~]$ mailman info Traceback (most recent call last): File "/opt/mailman3/venv/bin/mailman", line 33, in <module> sys.exit(load_entry_point('mailman==3.3.9', 'console_scripts', 'mailman')()) File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1157, in __call__ return self.main(*args, **kwargs) File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1077, in main with self.make_context(prog_name, args, **extra) as ctx: File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 943, in make_context self.parse_args(ctx, args) File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1644, in parse_args rest = super().parse_args(ctx, args) File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 1408, in parse_args value, args = param.handle_parse_result(ctx, opts, args) File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 2400, in handle_parse_result value = self.process_value(ctx, value) File "/opt/mailman3/venv/lib64/python3.9/site-packages/click/core.py", line 2362, in process_value value = self.callback(ctx, self, value) File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/bin/mailman.py", line 95, in initialize_config initialize(value) File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/core/initialize.py", line 228, in initialize initialize_1(config_path) File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/core/initialize.py", line 122, in initialize_1 mailman.config.config.load(config_path) File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 145, in load self.push(filename, user_config.read()) File "/opt/mailman3/venv/lib64/python3.9/site-packages/mailman/config/config.py", line 150, in push self._config.push(config_name, config_string) File "/opt/mailman3/venv/lib64/python3.9/site-packages/lazr/config/_config.py", line 582, in push confs = self._getExtendedConfs(conf_name, conf_data) File "/opt/mailman3/venv/lib64/python3.9/site-packages/lazr/config/_config.py", line 615, in _getExtendedConfs _parser_read_file(parser, StringIO(conf_data), conf_filename) File "/opt/mailman3/venv/lib64/python3.9/site-packages/lazr/config/_config.py", line 49, in _parser_read_file parser.read_file(f, source) File "/usr/lib64/python3.9/configparser.py", line 718, in read_file self._read(f, source) File "/usr/lib64/python3.9/configparser.py", line 1085, in _read raise MissingSectionHeaderError(fpname, lineno, line) configparser.MissingSectionHeaderError: File contains no section headers. file: '/opt/mailman3/mailman.cfg', line: 14 <<<---------------------------------------- 'class: mailman.database.postgresql.PostgreSQLDatabase\n' Here is the complete mailman.cfg file: 1 # /etc/mailman3/mailman.cfg 2 # [paths.here] 3 # var_dir: /opt/mailman/mm/var 5 # [mailman] 6 # layout: here 7 # # This address is the "site owner" address. Certain messages which must be 8 # # delivered to a human, but which can't be delivered to a list owner (e.g. a 9 # # bounce from a list owner), will be sent to this address. It should point to 10 # # a human. 11 # site_owner: user(a)example.com 12 # 13 # [database] 14 # class: mailman.database.postgresql.PostgreSQLDatabase 15 # url: postgresql://mailman:MYPASSWORD@localhost/mailman 16 # 17 # [archiver.prototype] 18 # enable: yes 19 # 20 # # For the HyperKitty archiver. 21 # [archiver.hyperkitty] 22 # class: mailman_hyperkitty.Archiver 23 # enable: yes 24 # configuration: /etc/mailman3/mailman-hyperkitty.cfg 25 # 26 # [shell] 27 # history_file: $var_dir/history.py 28 # 29 # [mta] 30 # verp_confirmations: yes 31 # verp_personalized_deliveries: yes 32 # verp_delivery_interval: 1 33 # Ideas? Thanks. I'm trying to setup users with different permissions. For example: I created a group support with an ability to hyperkitty/mailing list/Can add/change/delete/view mailing list. Unfortunately, the user still does not have an ability to create mailing lists as the option does not exist. It does work when the user is set as "Superuser status". I've also tried giving every possible "available user permissions", but it didn't make a difference. Am I missing something? Thank you! So tried, without much success, to get Postorius working on my Mailman3 server and every internet trick& tip I tried did not work so decided to take a new approach as recommended at https://lists.mailman3.org/archives/list/[email protected]/thread/… Used this reference: https://docs.mailman3.org/en/latest/install/virtualenv.html#installing-depe… which I know is more for Debian/Ubuntu systems but I was hoping that 90%+ would also work with Red Hat. Fell at the first hurdle with no packages available called "python3-dev" or "python3-venv" Is there anyone that has managed to install a running version of Mailman3 that has a working GUI whether it is on bare metal or Python virtual environment and if so, could they kindly let me know how they did it?? The closest I've come is a running command line version of Mailman3 which is fine for me of course but not for anyone else as they like access via web browser. Thanks in advance, Andy Macheta I wondered if anybody would be able to assist me in my understanding of the Pending Confirmation list, please. In our Mailman mailing list, our Member Policy settings for both Subscription Policy and Un-subscription Policy are set to Open. Therefore we don't require subscribers to confirm their subscription after they submit a request to join our mailing list. Despite this, a number of subscribers seem to be arriving in the Pending Confirmation (Subscriptions pending user confirmation) list. Others correctly arrive in the Members list, as we would expect. All subscription requests are made by the subscriber sending an email to our "join" email address with the subject "subscribe". I've looked at the settings carefully and can't seem to see any that may cause the above behaviour at any time (although I may have missed something of course). Therefore, does anybody know the circumstances in which subscribers to an open mailing list may somehow arrive in the Pending Confirmation list? If I could understand the cause(s) I could then consider ways to manage it or prevent it from happening. Our Mailman installation is hosted centrally in a large organisation so we while we can alter our mailing list's settings in Postorious, we can't alter the source code or similar, so we don't have great room for manoeuvre. Our Postorius version is 1.3.6. Thanks and regards David After mailman was running so well I was wondering if I really need the restart option in the service configuration. When I commented it out, I got this error a few weeks later: > # systemctl status mailman3 > × mailman3.service - GNU Mailing List Manager >      Loaded: loaded (/etc/systemd/system/mailman3.service; enabled; > vendor preset: enabled) >      Active: failed (Result: exit-code) since Tue 2024-05-14 00:34:37 > CEST; 1 week 6 days ago >     Process: 1159 ExecStart=/opt/mailman/venv/bin/mailman start > (code=exited, status=1/FAILURE) >         CPU: 6.933s > May 14 00:34:36 SERVER.TLD mailman[1159]:     return > f(get_current_context(), *args, **kwargs) > May 14 00:34:36 SERVER.TLD mailman[1159]:   File > "/opt/mailman/venv/lib/python3.10/site-packages/mailman/commands/cli_control.py", > line 109, in start > May 14 00:34:36 SERVER.TLD mailman[1159]: > call_name(config.mta.incoming).regenerate() > May 14 00:34:36 SERVER.TLD mailman[1159]:   File > "/opt/mailman/venv/lib/python3.10/site-packages/mailman/mta/postfix.py", > line 136, in regenerate > May 14 00:34:36 SERVER.TLD mailman[1159]:     raise > RuntimeError(NL.join(errors)) > May 14 00:34:36 SERVER.TLD mailman[1159]: RuntimeError: command > failure: /usr/sbin/postmap /opt/mailman/mm/var/data/postfix_lmtp, 1, > Operation not permitted > May 14 00:34:36 SERVER.TLD systemd[1]: mailman3.service: Control > process exited, code=exited, status=1/FAILURE > May 14 00:34:37 SERVER.TLD systemd[1]: mailman3.service: Failed with > result 'exit-code'. > May 14 00:34:37 SERVER.TLD systemd[1]: Failed to start GNU Mailing > List Manager. > May 14 00:34:37 SERVER.TLD systemd[1]: mailman3.service: Consumed > 6.933s CPU time. I can only guess that the error might be some case of very bad timing, because there shouldn't be any problem with the mentioned call. > # su mailman > (venv) mailman@SERVER:/$ /usr/sbin/postmap > /opt/mailman/mm/var/data/postfix_lmtp Usually works fine. I re-enabled the lines in the server configuration: > Restart=on-failure > RestartSec=15 Hello, I already have some success in auto-migration from Mailman 2.1 (Debian buster) to Mailman 3 (Debian bookworm), using a new container (not upgrading the existing installation, which is obsolete e.g. 32 bit x86). I am doing this using custom scripts. The idea being to be able to import most of the existing configuration and archives, let the list administrators test the new system, and progressively advertise this to users. Then, the old container will be disabled. The basic stuff works (From: domain is OK, HTTP transport works, mail go out, etc) I however bumped into the following problem: How may I automatically (from the command line) replace the example.com which is displayed in the web interface and in the From: comment field of the e-mails (the address itself is OK) -- I only found documentation about changing through the GUI so far. Any pointer? Also, I have a question: if I import my 2.1 config for each ml, will DKIM work-arounds work (e.g. replace This User <user@domain> by This User user@domain <the-mailing-list>) ? Will Mailman 2.1 it required some config changes and also I had to modify mailman using a Debian diversion, AFAIR. Thank you for any input. mailman3 was installed into the below virtual environment: (venv) [mailman3@localhost-live ~]$ pip install wheel mailman psycopg2-binary Should, or must, any of Django, Hyperkitty, Postorius, Dart-Sass, or any other supporting programs be installed into this virtual environment ? PostgreSQL and Postfix have been successfully installed outside of the mailman3 virtual environment and start properly, I assume this is correct. Thanks in advance. ---- Keith Congratulations on securing your Summer of Code project with MM3. As someone who is quite interested in the Mailman3 development plans, I tried to follow the link you provided but with no success.  It timed out.  Is that still a valid or the best link? Can you also please point me to the best source or site to get a general understanding of short and long term *MM3 development plans*, including various upcoming GSOC projects, including yours. Thank you very much in advance. Best regards. Dave Wilson ------------------------------------------------------------------------ ___________________________________________ Mailman's content filtering has removed the following MIME parts from this message. Content-Type: image/png Name: qL0JVbh9Fk99UcFT.png Replaced multipart/alternative part with first alternative. Hello everyone, I’m Liang Liu, a GSoC student this year. I will be responsible for using the publish-subscribe model to improve communication efficiency between the core and clients. The detail of this function is shown in the link below. https://wiki.list.org/DEV/Google%20Summer%20of%20Code%202024#Support_for_RE… I am excited to learn from all of you and share my experiences. Please feel free to reach out to me for any collaboration or discussion—I am keen to contribute and learn as much as I can. Hope we have a productive summer. Where does one obtain a complete and concise description for all of the list configuration attributes? From the documentation, it is shown that the REST "config" interface will provide all of the attribute values associated with a particular list. But how does one find a concise description for all of these attributes? For example, I see that there is a list attribute for "default_nonmember_action" and there are two documentation pages for this attribute, but I can't find a concise description of the attribute and the permitted values. Thanks, Steve The path to the mailman3.py file is: /home/mailman3/mailman/src/mailman/bin/mailman.py I created a mailman3 user, then, set the ownership on all directories and files in /home/mailman3 and below to mailman3:mailman3. When trying to run the "mailman info" command to verify that that mailman3 can start, I get this error: File "/home/mailman3/mailman/src/mailman/bin/mailman.py", line 22 in <module> from mailman.command.cli_help import help as help command Not sure what is going on here, help greatly appreciated. I have deleted a list (list(a)nog.ke) - list_id = list.nog.ke. I can see from Django Admin UI that the archives are still intact. I created a new list (list(a)lists.nog.ke) - list_id = list.lists.nog.ke Is there a way to move the archives from the old list to the new 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 ] I'm getting errors when a custom "Welcome message" template is in place [list:user:notice:welcome]. Case: Subscribing a new user via the admin "Mass subscribe". Although the new user is successfully subscribed, a welcome message is not sent and the following error message displays on the webpage. HTTP Error 400: HTTPConnectionPool(host='localhost', port=8000): Read timed out. (read timeout=5) And the site-owner receives an email with ... Internal Server Error: /mailman3/lists/ DoesNotExist at /mailman3/lists/ Site matching query does not exist. Request Method: GET Request URL: http://<REDACTED-PUBLIC-IPv4-ADDRESS>/mailman3/lists/ Django Version: 4.2.11 Python Executable: /opt/mailman/venv/bin/python3 Python Version: 3.11.2 ... etc ... Regarding the second line in the email - my thinking is that it should be looking in "/opt/mailman/mm/var/lists" and not "/mailman3/lists/". If that's right, where would I look to change that directive? If not, any other clues would be greatly appreciated. The error doesn't occur if the is no custom "Welcome message" template - ie. the user is sent the default welcome message. $ mailman info GNU Mailman 3.3.9 (Tom Sawyer) Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] config file: /etc/mailman3/mailman.cfg REST root url: http://localhost:8001/3.1/ >> So, I'm thinking (in broad brush strokes) that if I'm stuck with this >> "http glitch" I could write a script to: >> 1.  extract the text of the custom message from the database, >> 2.  write that message text to a file >> 3.  update the templates.uri entries to replace the >> http://localhost ... with file:///path/to/file >> 4.  cron the script to run every few minutes. >> It screams of utter clunk I know... > but it would work. > Note that this may not be as big an issue as it seems. It doesn't > affect all templates, for example list:member:digest:footer, > list:member:digest:header, list:member:digest:masthead, > list:member:regular:footer, list:member:regular:header and > list:member:generic:footer are only used by the `out` runner when > sending messages, so these aren't affected. Right. Affected are all the "list:user:notice:***" (eg. goodbye, hold, reject,...) > I'm still trying to determine what the issue is. To this end can you > tell me what Python version your Mailman uses and what is the output > from `pip freeze` with your venv active? $ mailman info GNU Mailman 3.3.9 (Tom Sawyer) Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] $ pip freeze aiosmtpd==1.4.4.post2 alembic==1.13.1 arrow==1.3.0 asgiref==3.7.2 atpublic==4.0 attrs==23.2.0 authheaders==0.16.2 authres==1.2.0 blessed==1.20.0 certifi==2023.11.17 cffi==1.16.0 charset-normalizer==3.3.2 click==8.1.7 cmarkgfm==2024.1.14 cryptography==42.0.1 defusedxml==0.7.1 Django==4.2.11 django-allauth==0.60.1 django-appconf==1.0.6 django-compressor==4.4 django-extensions==3.2.3 django-gravatar2==1.4.4 django-haystack==3.2.1 django-mailman3==1.3.12 django-picklefield==3.1 django-q==1.3.9 djangorestframework==3.14.0 dkimpy==1.1.5 dnspython==2.5.0 docutils==0.20.1 falcon==3.1.3 filelock==3.13.1 flufl.bounce==4.0 flufl.i18n==5.0.2 flufl.lock==8.0.2 greenlet==3.0.3 gunicorn==21.2.0 HyperKitty==1.3.9 idna==3.6 lazr.config==3.0 lazr.delegates==2.1.0 mailman==3.3.9 mailman-hyperkitty==1.2.1 mailman-web==0.0.9 mailmanclient==3.3.5 Mako==1.3.0 MarkupSafe==2.1.4 mistune==3.0.2 networkx==3.2.1 nh3==0.2.15 oauthlib==3.2.2 packaging==23.2 passlib==1.7.4 postorius==1.3.10 psutil==5.9.8 psycopg2-binary==2.9.9 publicsuffix2==2.20191221 pycparser==2.21 Pygments==2.17.2 PyJWT==2.8.0 python-dateutil==2.8.2 python3-openid==3.2.0 pytz==2023.3.post1 rcssmin==1.1.1 readme-renderer==42.0 redis==3.5.3 requests==2.31.0 requests-oauthlib==1.3.1 rjsmin==1.2.1 robot-detection==0.4 six==1.16.0 SQLAlchemy==2.0.25 sqlparse==0.4.4 types-python-dateutil==2.8.19.20240106 typing_extensions==4.9.0 urllib3==2.1.0 wcwidth==0.2.13 Whoosh==2.7.4 xapian @ file:///opt/mailman/xapian-1.4.24-cp311-cp311-linux_aarch64.whl xapian-haystack==3.1.0 zope.component==6.0 zope.configuration==5.0 zope.event==5.0 zope.hookable==6.0 zope.i18nmessageid==6.1.0 zope.interface==6.1 zope.schema==7.0.1 What's the latest on Mailman with Python 3.12? Looking at Ubuntu 24.04 upgrade plans and realised it comes with Python 3.12. Ubuntu are shipping Mailman packages from Debian so not sure if they have made any changes to make Python 3.12 work. I don't use those packages myself. Andrew. I'm trying to migrate an aged mailman3 installation from ubuntu 20.04 to ubuntu 22.04. Fresh install of mailman3-web gives me: Creating config file /etc/dbconfig-common/mailman3-web.conf with new version creating database mailman3web.db: success. verifying database mailman3web.db exists: success. Creating config file /etc/mailman3/mailman-web.py with new version /usr/lib/python3/dist-packages/django_q/conf.py:174: UserWarning: Retry and timeout are misconfigured. Set retry larger than t imeout,failure to do so will cause the tasks to be retriggered before completion.See https://django-q2.readthedocs.io/en/maste r/configure.html#retry for details. warn( Traceback (most recent call last): File "/usr/bin/django-admin", line 33, in <module> sys.exit(load_entry_point('Django==4.2.11', 'console_scripts', 'django-admin')()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 442, in execute_from_command_line utility.execute() "/usr/lib/python3/dist-packages/django/core/management/__init__.py", line 416, in execute django.setup() File "/usr/lib/python3/dist-packages/django/__init__.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/usr/lib/python3/dist-packages/django/apps/registry.py", line 124, in populate app_config.ready() File "/usr/lib/python3/dist-packages/allauth/account/apps.py", line 15, in ready raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: allauth.account.middleware.AccountMiddleware must be added to settings.MIDDLEWARE dpkg: error processing package mailman3-web (--configure): installed mailman3-web package post-installation script subprocess returned error exit status 1 Errors were encountered while processing: mailman3-web needrestart is being skipped since dpkg has failed E: Sub-process /usr/bin/dpkg returned an error code (1) I've already seen this thread: https://lists.mailman3.org/archives/list/[email protected]/message… ...but that does not get me anywhere. Could someone please push me in the right direction? cheers! t. We are about to upgrade to Mailman core 3.3.9 and Postorius 1.3.10. We notice that for setup with large number of members, the performance is much slower when listing members on web (Postorius). Further troubleshooting show that there are quite a number of API calls which do not appear in Mailman core 3.3.5 and Postorius 1.3.6 when we list members. [17/Apr/2024:14:12:22 +0800] "GET /3.1/members/33a6266d0a04472c8d5d6c78869a964c/preferences HTTP/1.1" 200 156 "-" "GNU Mailman REST client v3.3.5" [17/Apr/2024:14:12:22 +0800] "GET /3.1/members/7a18b7cb90a34ac98881a3f01b5488d1/preferences HTTP/1.1" 200 156 "-" "GNU Mailman REST client v3.3.5" [17/Apr/2024:14:12:22 +0800] "GET /3.1/members/61c6c3e2aaf443babd3bd191519b0424/preferences HTTP/1.1" 200 156 "-" "GNU Mailman REST client v3.3.5" [17/Apr/2024:14:12:22 +0800] "GET /3.1/members/8dd681165b8c436fac6793cae1ed2c27/preferences HTTP/1.1" 200 156 "-" "GNU Mailman REST client v3.3.5" Further tests showing that each database query using "_member_id" in table member can take as much as 0.3 to 0.5 seconds for some large installations. The default 25 members per page mean that it will take at least 7.5 to 12.5 seconds. Changing to 200 members per page will take even longer time. We wonder whether "_member_id" should be indexed just like most other id in the database mailman_core in order to solve the issue. Or are there any other workarounds? +----------------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | _member_id | char(32) | YES | | NULL | | | role | int(11) | YES | MUL | NULL | | | list_id | varchar(255) | YES | MUL | NULL | | | moderation_action | int(11) | YES | | NULL | | | address_id | int(11) | YES | MUL | NULL | | | preferences_id | int(11) | YES | MUL | NULL | | | user_id | int(11) | YES | MUL | NULL | | | bounce_score | int(11) | YES | | NULL | | | last_bounce_received | datetime | YES | | NULL | | | last_warning_sent | datetime | YES | | NULL | | | total_warnings_sent | int(11) | YES | | NULL | | +----------------------+--------------+------+-----+---------+----------------+ I'm investigating the possibility of transferring a fairly small mailing list I own from Google Groups to MM3 via a hosting service. I'd appreciate any pointers regarding what I should be looking out for with companies that offer this service It also seems very hard to find out which hosting companies are worth considering (In particular, reliability and support are important) Any help much is much appreciated Thanks We need to find out when a specific user joined a list. Is there a way to get this information? Thanks! I have tried stopping and restarting it. The error logs update for the startup, but not when anything connects to localhost:8000. The last entry in uwsgi.log was two hours ago and nothing has been added since. I tried both lynx http://localhost:8000 and telnet to http://localhost 8000 and GET request instantly closes the port and logs nothing. As far as I can tell both mailman and postgres are working fine. This is what logs on startup. ==> uwsgi-error.log <== *** Starting uWSGI 2.0.22 (64bit) on [Sun Apr 14 10:45:51 2024] *** compiled with version: 13.2.1 20230912 [revision b96e66fd4ef3e36983969fb8cdd1956f551a074b] on 05 October 2023 13:37:28 os: Linux-6.5.4-1-default #1 SMP PREEMPT_DYNAMIC Wed Sep 20 05:07:04 UTC 2023 (fdd7e9e) nodename: mail.rubinsoftware.com machine: x86_64 clock source: unix detected number of CPU cores: 4 current working directory: / detected binary path: /opt/mailman/venv/bin/uwsgi !!! no internal routing support, rebuild with pcre support !!! your processes number limit is 15246 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 TCP address 0.0.0.0:8000 fd 8 Python version: 3.11.5 (main, Aug 31 2023, 07:57:41) [GCC] PEP 405 virtualenv detected: /opt/mailman/venv/ Set PythonHome to /opt/mailman/venv/ Python main interpreter initialized at 0x7f2c3d709d58 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 250128 bytes (244 KB) for 4 cores *** Operational MODE: preforking+threaded *** added /etc/mailman3/ to pythonpath. WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x7f2c3d709d58 pid: 16064 (default app) *** uWSGI is running in multiple interpreter mode *** spawned uWSGI master process (pid: 16064) spawned uWSGI worker 1 (pid: 16065, cores: 2) spawned uWSGI worker 2 (pid: 16067, cores: 2) [uwsgi-daemons] spawning "/opt/mailman/venv/bin/mailman-web qcluster" (uid: 72 gid: 67) 14:45:52 [Q] INFO Q Cluster white-green-ten-mobile starting. 14:45:52 [Q] INFO Process-1:1 ready for work at 16072 14:45:52 [Q] INFO Process-1:2 ready for work at 16073 14:45:52 [Q] INFO Process-1:3 monitoring at 16074 14:45:52 [Q] INFO Process-1 guarding cluster white-green-ten-mobile 14:45:52 [Q] INFO Process-1:4 pushing tasks at 16075 14:45:52 [Q] INFO Q Cluster white-green-ten-mobile running. What should I do to diagnose further? I had a working mailman3, tore it down, switched to PostgreSQL (from MySQL), and now everything is working, except: mailman-web update_index mailman-web update_index_one_list They fail with: ModuleNotFoundError: No module named 'xapian_backend' I rebuilt and re-installed xapian: (venv) mailman@mail:~$ echo $XAPIAN_VERSION 1.4.25 (venv) mailman@mail:~$ pip list | grep -i xapian xapian 1.4.25 Any ideas? Thanks! So to confirm my assumptions/findings: Digest size threshold---- means when the total size of held messages hits this setting, a digest is sent Digest Volume Frequency. ---- specifies when the digest volume number gets incremented for digest messages, IT DOES NOT send out digests based on the setting, daily, weekly ... So what does the GUI setting "Send Digest Periodically yes no" do? how periodically does it send digests, if this is set to yes? If I want to send a digest out for a list every day, or every week, how do I set that, especially in the docker environment? Is this something that can be configured in the GUI and configured by each of my list admins? I found that ”'mailman digests --periodic' via cron” should be set in googling, but does that mean I have to do a cron job for any list that wants a scheduled digest sent? My use case is, that I have a list admin who set a size threshold, but regardless of that, they also want their list digest sent out daily, they thought it was the "Digest Volume Frequency" setting but that is not correct. However in their testing they are not getting daily digest, they are getting digests only when the threshold is reached, BUT they have "Send Digest Periodically" set to "yes" and "Enable Digests" is set to "yes" hello there, i migrated to a new host last night and i've been getting this error from a cronjob mail every minute. anyone have any ideas what would cause this? ERROR 2019-04-17 14:26:33,056 27205 hyperkitty.lib.utils Failed to update the fulltext index: ord() expected a character, but string of length 0 found Traceback (most recent call last): File "/usr/lib/python2.7/dist-packages/hyperkitty/lib/utils.py", line 186, in run_with_lock fn(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/hyperkitty/search_indexes.py", line 87, in update_index update_cmd.update_backend("hyperkitty", "default") File "/usr/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 276, in update_backend last_max_pk=max_pk) File "/usr/lib/python2.7/dist-packages/haystack/management/commands/update_index.py", line 97, in do_update backend.update(index, current_qs, commit=commit) File "/usr/lib/python2.7/dist-packages/haystack/backends/whoosh_backend.py", line 178, in update self.setup() File "/usr/lib/python2.7/dist-packages/haystack/backends/whoosh_backend.py", line 126, in setup self.index = self.storage.open_index(schema=self.schema) File "/usr/lib/python2.7/dist-packages/whoosh/filedb/filestore.py", line 176, in open_index return indexclass(self, schema=schema, indexname=indexname) File "/usr/lib/python2.7/dist-packages/whoosh/index.py", line 421, in __init__ TOC.read(self.storage, self.indexname, schema=self._schema) File "/usr/lib/python2.7/dist-packages/whoosh/index.py", line 632, in read check_size("int", _INT_SIZE) File "/usr/lib/python2.7/dist-packages/whoosh/index.py", line 626, in check_size sz = stream.read_varint() File "/usr/lib/python2.7/dist-packages/whoosh/filedb/structfile.py", line 191, in read_varint return read_varint(self.read) File "/usr/lib/python2.7/dist-packages/whoosh/util/varints.py", line 102, in read_varint b = ord(readfn(1)) thanks, (venv)...$ mailman info GNU Mailman 3.3.9 (Tom Sawyer) Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0] Postorius Version 1.3.10 After creating a couple of lists, the lists are shown in the table on the "Mailing lists" webpage as they should, but clicking on any of the listnames returns an error page: Something went wrong HTTP Error 500: {"title": "500 Internal Server Error"} And the Mailman log is a mystery to me, and no error is reported in the Nginx log ... # tail -f /opt/mailman/web/logs/mailmanweb.log ERROR 2024-01-24 05:41:46,327 51799 postorius Un-handled exception: HTTP Error 500: {"title": "500 Internal Server Error"} Traceback (most recent call last): "/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) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 103, in view return self.dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/postorius/views/generic.py", line 76, in dispatch return super(MailingListView, self).dispatch(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/django/views/generic/base.py", line 142, in dispatch return handler(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/postorius/views/list.py", line 359, in get and 'hyperkitty' in archivers # noqa: W504 ^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen _collections_abc>", line 780, in __contains__ "/opt/mailman/venv/lib/python3.11/site-packages/mailmanclient/restbase/base.py", line 146, in __getitem__ return self._get(key) ^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/mailmanclient/restbase/base.py", line 88, in _get return self.rest_data[key] ^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/mailmanclient/restbase/base.py", line 74, in rest_data response, content = self._connection.call(self._url) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman/venv/lib/python3.11/site-packages/mailmanclient/restbase/connection.py", line 160, in call raise HTTPError(params.get('url'), response.status_code, urllib.error.HTTPError: HTTP Error 500: {"title": "500 Internal Server Error"} ERROR 2024-01-24 05:41:46,333 51799 django.request Internal Server Error: /postorius/lists/testing.example.com/ ERROR 2024-01-24 05:41:46,333 51799 django.request Internal Server Error: /postorius/lists/testing.example.com/ Could anyone steer me in the right direction for fixing this? Thanks, Dear list, after I migrated a list from Mailman21 to Mailman3 I missed the Mailman21 setting "regular_include_lists" (or something similar) in Mailman3. How are sibling lists treated in Mailman3? Thank you in advance for your answers. Markus Markus Grandpré Universität Konstanz Kommunikations-, Informations-, Medienzentrum (KIM) Abteilung IT-Dienste Forschung, Lehre und Infrastruktur, Tel: ++49 7531 88 4342 A heads-up for anyone else on RHEL 8, because the error is mystifying. django-mailman 1.3.12 bumps the preferred django version from 4.1 to 4.2. Django 4.2 requires MariaDB 10.4 or later. RHEL 8 has full lifecycle support for MariaDB 10.3. For some reason I haven't yet been able to identify, this causes pyMySQL integrations to fail with the mysterious error: django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.3 or newer is required; you have 1.4.6. (Yes, Database.version_info contains "(1, 4, 2, 'final', 0)" while Database.version contains "1.4.6" and I am totally stumped where that 1.4.2 is coming from as it appears... nowhere.) Bypassing that error check gives the more informative: django.db.utils.NotSupportedError: MariaDB 10.4 or later is required (found 10.3.39). Doing a pip install with django\<4.2 works. This is not ideal since 4.1 is past LTS, so I would recommend that Mailman systems be migrated to RHEL 9. --Jered One of the great things about our new installation compared with our old is the ability to manage users via https://our.wee.domain/postorius/users I might have been able to manage them using the command line on the old installation, but there is no 'mailman delmembers' on that box. Since I now have this Mighty Power, I want to use it to clean up. There are many users who should no longer be on the system, so I want to run something along the lines of: mailman delmembers --member some(a)email.address --fromall \ --no-goodbye-msg --no-admin-notify or, if I'm feeling brave, something like this. mailman delmembers --file somefile --fromall \ --no-goodbye-msg --no-admin-notify My question is: If one of these users is the sole owner of a list, what will happen? Will the user be deleted and that list now owner-less? Will mailman refuse to delete that user until I add a new owner? Thanks in advance for your feedback. Cheers, David Hello all, I'm having some issues with a migration I'm performing right now from our old mailman2 server to a mailman3 one. The mailing lists imports work fine, but the archives seems to work sometimes: This means that some lists archives appear but others are missing when browsing the archives in the web UI. This happens despite the command line telling me that the import went fine. Here are the steps I run for the archives: # Copy the archives into the my new server # Cleaning old archives, where $LIST is my mailing list name $ /opt/mailman3/venv/lib/python3.11/site-packages/hyperkitty/contrib/check_hk_import /opt/mailman3/archives/private/"$LIST".mbox/"$LIST".mbox $ /opt/mailman3/venv/lib/python3.11/site-packages/hyperkitty/contrib/cleanarch3 /opt/mailman3/archives/private/"$LIST".mbox/"$LIST ".mbox # Importing the archives $ mailman-web hyperkitty_import -l "$LIST(a)my.domain.com" /opt/mailman3/archives/private/"$LIST".mbox/"$LIST".mbox # Indexing the new archive $ mailman-web update_index_one_list "$LIST(a)my.domain.com" Here is also an example log of an archive I'm migrating that does not appear in the UI, for reference (list and domain were renamed for privacy): $ mailman-web hyperkitty_import -l my_list(a)domain.com --since=1900-01-01 /opt/mailman3/archives/private/my_list.mbox/my_list.mbox Importing from mbox file /opt/mailman3/archives/private/my_list.mbox/my_list.mbox to my_list(a)domain.com Computing thread structure Synchronizing properties with Mailman Adding admin as owner of MailingList: my_list.lists.domain.com 2070 emails left to refresh, checked 1000 2070 emails left to refresh, checked 2000 Warming up cache The full-text search index is not updated for this list. It will not be updated by the 'minutely' incremental update job. To update the index for this list, run the Django admin command with arguments 'update_index_one_list my_list(a)domain.com'. $ mailman-web update_index_one_list my_list(a)domain.com Indexing 22 emails Any help would be greatly appreciated, I'm very lost here... Cheers, Today was the 2nd time mailman stopped sending out mail, it receives mail but sends nothing out. To resolve the issue I restarted the mailman services and then all the incoming/queued mail was sent out... last time this happened was 21 days ago.... Before that, it has been rock solid for years. We are running in a docker environment with no recent changes. On the host in /var/log/maillog, I see the mail coming in and going to mailman in docker. for docker, the mailman logs are in /opt/mailman/core/var/logs in /opt/mailman/core/var/logs/smtp.log ---------- I see the messages coming in /opt/mailman/core/var/logs/debug.log ------------ is empty /opt/mailman/core/var/logs/mailman.log -------------- I do not see anything that looks like it had an issue So where can I look to try to determine a cause? If it happens again, what and where can I cook to troubleshoot before restarting the service? Thanks I have more fully documented where I am at with this attempt to build a working installation of mm3 at this link: https://gitlab.com/mailman/django-mailman3/-/issues/73 My questions include: the template for /etc/mailman3/mailman.cfg, defines vardir, but no DATA_DIR. See test failure #1 (closed) <http:///mailman/django-mailman3/-/issues/1>, above. Where does that want to be? Any issue with putting the mm3.db next to the mm3_web.db at /opt/mailman/mm/var/data? there are two possible virtualenv's in my build: (a) /opt/mailman/venv/ and (b) /opt/mailman/.pyenv/. I say more about these below. Which do I want to use in this instance? I'm guessing the latter where the mailman3 libraries are published, but have doubts. The link above urges a dependency on python ^3.11, but bookworm provides only python 3.8, so I used pyenv to satisfy the requirement. It wanted to deploy to its own path, though perhaps there is some switch which would consolidate everything under /opt/mailman/venv/. I do not work with python enough to know. attempts to run bin/mailman-web startapp mm3web fail to add any new processes to the process list. bin/mailman-web start fails with errors. What change of state to the server should I expect from running this command? How do I test for success? If startapp is the correct invocation, what argument does it want on a working installation? having run the command in the previous point, I see nothing in the browser except for the apache starter page at the root path '/'. None of the paths defined in the apache2 configuration seem to offer any joy. I assume that uwsgi wants to proxy the requests to a running mailman-web service somehow, but that no such service is found. I see one hopeful line in the log at: /opt/mailman/mm/var/logs/mailman.log "GET /3.1/lists?count=10&page=1 HTTP/1.1" 200 90 "-" "GNU Mailman REST client v3.3.5" - I assume that once I get apache2 wired to a running application through the uwsgi proxy, that I can proceed to create an admin user, use it to explore the web gui, and begin to consider how to migrate my legacy mm2.1 lists into the new installation. Any further help crossing the finish line would be appreciated. Thanks, -- Hugh I regularly get requests from users to disable footers since they use email clients that simply show an attached text file. Yes, I know that's broken. I never got this working with my old broken installation. Since we're now running a shiny new version of mailman3, I thought I'd give it a go again. From what I've read, I thought the following would do the trick: # sudo -u mailman -s /usr/bin/bash $ source /local/mailman/venv/bin/activate $ cd ~/var/templates/ $ mkdir -p lists/test-list.our.domain/en/ $ cp /dev/null "lists/test-list.our.wee.domain/en/list:member:regular:footer" However, sending mail to test-list(a)our.wee.domain<mailto:[email protected]> still includes the footer. What am I missing? Do I need to restart something? Did I misunderstand what I've read? With kind regards, David I'm sure I'm just doing something stupid, but I can't work out what. I have a list, as admin under "Settings" -> "List Identity" -> "Members List Visibility" I have it set to "Only Mailinglist Members". But a random subscriber, who's signed up and authenticated, when she visits the list page she sees her subscription, but no option to list the other subscribers. Is she looking in the wrong place? Do I need to open up more settings? Am I just being an idiot? Thanks for any light anyone can shed. Tom Yates - https://www.teaparty.net Dear list members, when following the instructions to migrate list archives from Mailman21 to Mailman3 (see [1]), I face the following problem: # python3 manage.py hyperkitty_import -l mailman21-migration-test-04 /var/mailman21/testlist.mbox python3: can't open file '/var/mailman21/manage.py': [Errno 2] No such file or directory and have no clue, where to find the right <manage.py> file. The command dpkg returns: # dpkg -l | grep hyperkitty ii python3-django-hyperkitty 1.3.7-1 all Web user interface to access GNU Mailman3 archives In </etc/mailman3/mailman-web.py> I find: INSTALLED_APPS = ( 'hyperkitty', 'postorius', 'django_mailman3', Can you please help me? Thank you in advance? Best, Markus [1] < https://docs.mailman3.org/en/latest/migration.html > Markus Grandpré Universität Konstanz Kommunikations-, Informations-, Medienzentrum (KIM) Abteilung IT-Dienste Forschung, Lehre und Infrastruktur, Tel: ++49 7531 88 4342 I'm reading the docs on "Message tagging" ( https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/handlers/d… ) as saying shell access is needed to: (a) enable topics, and (b) write the keywords. In Mailman 2 there is an Admin web UI for "Topics". Is there such a web UI that can be enabled in Mailman 3 so that the list owners can create topics (tags) in their lists? Thanks. These options aren't there for the list owners. The docs (link below) say that in the newer HyperKitty version 1.3.9, list owners can delete messages/threads Is there a patch I can implement on HyperKitty version 1.3.8 (so list owners can delete messages), or is it possible to update HyperKitty to version 1.3.9 without bringing everything crashing down? https://docs.mailman3.org/projects/hyperkitty/en/latest/news.html 1.3.9 (2024-02-27) List owners can now delete messages and threads and reattach threads. (Fixes #261) Thanks, SELECT T.table_name, CCSA.character_set_name FROM information_schema.`TABLES` T,information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA WHERE CCSA.collation_name = T.table_collation AND T.table_schema = "mailman3"; It will display something like this: +--------------------+--------------------+ | table_name | character_set_name | +--------------------+--------------------+ | pendedkeyvalue | latin1 | | alembic_version | utf8mb4 | | acceptablealias | utf8mb4 | | address | utf8mb4 | | autoresponserecord | utf8mb4 | | ban | utf8mb4 | | bounceevent | utf8mb4 | | domain | utf8mb4 | | file_cache | utf8mb4 | | template | utf8mb4 | | mailinglist | utf8mb4 | | user | utf8mb4 | | contentfilter | utf8mb4 | | domain_owner | utf8mb4 | | uid | utf8mb4 | | member | utf8mb4 | | _request | utf8mb4 | | headermatch | utf8mb4 | | preferences | utf8mb4 | | workflowstate | utf8mb4 | | listarchiver | utf8mb4 | | message | utf8mb4 | | onelastdigest | utf8mb4 | | pended | utf8mb4 | +--------------------+--------------------+ And the command to convert the table is this: ALTER TABLE pendedkeyvalue CONVERT TO CHARACTER SET utf8mb4; And it is better to be done with mailman3 down or you will get DB access issues and not complete the change. Problem is... all the tables changed except pendedkeyvalue. MariaDB [mailman3]> ALTER TABLE pendedkeyvalue CONVERT TO CHARACTER SET utf8mb4; ERROR 1074 (42000): Column length too big for column 'value' (max = 16383); use BLOB or TEXT instead mysql/mariadb allows only a certain amount of characters per entry in the table, moving to utf8mb4 with 4 bytes is taking more than what is permitted. So the question is whether it is possible to change the types in this table. MariaDB [mailman3]> desc pendedkeyvalue; +-----------+----------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+----------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | key | varchar(255) | YES | MUL | NULL | | | value | varchar(20000) | YES | MUL | NULL | | | pended_id | int(11) | YES | MUL | NULL | | +-----------+----------------+------+-----+---------+----------------+ 4 rows in set (0.001 sec) key and value are varchar. Can any of them be changed to text instead? Perhaps even both? Best Regards, Helio Loureiro https://helio.loureiro.eng.br https://github.com/helioloureiro https://mastodon.social/@helioloureiro I just found several lists have the issue like this regarding charset: (venv) mailman@new-mailman3 ~ (v3.1.1)> mailman members listas-charset-issue(a)mailman.domain.com anders(a)domain.com beth(a)domain.com charlie(a)domain.com david(a)domain.com ellen(a)domain.com Traceback (most recent call last): File "/local/mailman/venv/bin/mailman", line 33, in <module> sys.exit(load_entry_point('mailman==3.3.9', 'console_scripts', 'mailman')()) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__ return self.main(*args, **kwargs) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1078, in main rv = self.invoke(ctx) "/local/mailman/venv/lib/python3.10/site-packages/mailman/bin/mailman.py", line 69, in invoke return super().invoke(ctx) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1688, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke return ctx.invoke(self.callback, **ctx.params) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke return __callback(*args, **kwargs) "/local/mailman/venv/lib/python3.10/site-packages/click/decorators.py", line 33, in new_func return f(get_current_context(), *args, **kwargs) "/local/mailman/venv/lib/python3.10/site-packages/mailman/commands/cli_members.py", line 222, in members display_members(ctx, mlist, role, regular, "/local/mailman/venv/lib/python3.10/site-packages/mailman/commands/cli_members.py", line 109, in display_members print(f'{address.display_name} <{address.original_email}>', UnicodeEncodeError: 'latin-1' codec can't encode character '\u0142' in position 9: ordinal not in range(256) Since this service is running since time of python2, I guess the old lists handled accented characters was to save as latin-1. But how can I fix this Note: apparently the list remains working just fine. It is just the command line failing. And perhaps some other side effect. Best Regards, Helio Loureiro https://helio.loureiro.eng.br https://github.com/helioloureiro https://mastodon.social/@helioloureiro Traceback (most recent call last): "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 356, in pusher task = SignedPackage.loads(task[1]) "/local/mailman/venv/lib/python3.10/site-packages/django_q/signing.py", line 25, in loads return signing.loads( "/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)) "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py", line 70, in unsign result = super(TimestampSigner, self).unsign(value) "/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 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()) "/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py", line 90, in main execute_from_command_line(sys.argv) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line utility.execute() "/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) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py", line 402, in run_from_argv self.execute(*args, **cmd_options) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py", line 448, in execute output = self.handle(*args, **options) "/local/mailman/venv/lib/python3.10/site-packages/django_q/management/commands/qcluster.py", line 22, in handle q.start() "/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) "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 168, in __init__ self.start() "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 172, in start self.spawn_cluster() "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 248, in spawn_cluster self.pusher = self.spawn_pusher() "/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) "/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) "/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 "F6V0Dr_SvBsx5-cY8vcvLXrX8tA" 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/site-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=salt).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 "F6V0Dr_SvBsx5-cY8vcvLXrX8tA" does not match\n',) The api_key on mailman-hypperkitty.cfg, SECRET_KEY and MAILMAN_ARCHIVE_KEY on setting.py are the same. Any clue what could be the issue? And this is on the latest mailman. > pip freeze aiosmtpd==1.4.4.post2 alembic==1.13.1 arrow==1.3.0 asgiref==3.7.2 atpublic==4.0 attrs==23.2.0 authheaders==0.16.2 authres==1.2.0 blessed==1.20.0 certifi==2024.2.2 cffi==1.16.0 charset-normalizer==3.3.2 click==8.1.7 cmarkgfm==2024.1.14 cryptography==42.0.3 defusedxml==0.7.1 Django==4.1.13 django-allauth==0.61.1 django-appconf==1.0.6 django-compressor==4.4 django-extensions==3.2.3 django-gravatar2==1.4.4 django-haystack==3.2.1 django-mailman3==1.3.11 django-picklefield==3.1 django-q==1.3.9 djangorestframework==3.14.0 dkimpy==1.1.5 dnspython==2.5.0 docutils==0.20.1 falcon==3.1.3 flufl.bounce==4.0 flufl.i18n==5.0.2 flufl.lock==8.0.2 greenlet==3.0.3 gunicorn==21.2.0 HyperKitty==1.3.8 idna==3.6 lazr.config==3.0 lazr.delegates==2.1.0 mailman==3.3.9 mailman-hyperkitty==1.2.1 mailman-web==0.0.8 mailmanclient==3.3.5 Mako==1.3.2 MarkupSafe==2.1.5 mistune==2.0.5 mysql==0.0.3 mysqlclient==2.2.4 networkx==3.2.1 nh3==0.2.15 oauthlib==3.2.2 packaging==23.2 passlib==1.7.4 postorius==1.3.10 psutil==5.9.8 publicsuffix2==2.20191221 pycparser==2.21 Pygments==2.17.2 PyJWT==2.8.0 PyMySQL==1.1.0 python-dateutil==2.8.2 python3-openid==3.2.0 pytz==2024.1 rcssmin==1.1.1 readme-renderer==42.0 redis==3.5.3 requests==2.31.0 requests-oauthlib==1.3.1 rjsmin==1.2.1 robot-detection==0.4 six==1.16.0 SQLAlchemy==2.0.27 sqlparse==0.4.4 types-python-dateutil==2.8.19.20240106 typing_extensions==4.9.0 urllib3==2.2.0 uWSGI==2.0.24 wcwidth==0.2.13 Whoosh==2.7.4 xapian @ file:///local/mailman/xapian-1.4.23-cp310-cp310-linux_x86_64.whl zope.component==6.0 zope.configuration==5.0.1 zope.event==5.0 zope.hookable==6.0 zope.i18nmessageid==6.1.0 zope.interface==6.2 zope.schema==7.0.1 Best Regards, Helio Loureiro https://helio.loureiro.eng.br https://github.com/helioloureiro https://mastodon.social/@helioloureiro Hello everybody, I'm trying to migrate my mailing lists on Debian 11 server from Mailman2 to Mailman3, and I'm having difficulties ! Mailman3 is already functional, but I could not configurate Postfix for this. Is there anyone speaking french that could help me ? Thanks in advance. Greetings, We're trying to move from an ancient and bad Ubuntu-package based installation of mailman3 to a venv-based do-it-the-right-way installation. # mailman --version GNU Mailman 3.3.9 (Tom Sawyer) Things seem much better than past migration attempts. We are, though, seeing tons of errors in uwsgi-error.log that look like this: Traceback (most recent call last): File "/local/mailman/venv/lib/python3.10/site-packages/django/core/handlers/wsgi.py", line 131, in __call__ response = self.get_response(request) File "/local/mailman/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 140, in get_response response = self._middleware_chain(request) File "/local/mailman/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 58, in inner response = response_for_exception(request, exc) File "/local/mailman/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 144, in response_for_exception log_response( File "/local/mailman/venv/lib/python3.10/site-packages/django/utils/log.py", line 241, in log_response getattr(logger, level)( File "/usr/lib/python3.10/logging/__init__.py", line 1506, in error self._log(ERROR, msg, args, **kwargs) File "/usr/lib/python3.10/logging/__init__.py", line 1624, in _log self.handle(record) File "/usr/lib/python3.10/logging/__init__.py", line 1634, in handle self.callHandlers(record) File "/usr/lib/python3.10/logging/__init__.py", line 1696, in callHandlers hdlr.handle(record) File "/usr/lib/python3.10/logging/__init__.py", line 968, in handle self.emit(record) File "/local/mailman/venv/lib/python3.10/site-packages/django/utils/log.py", line 128, in emit self.send_mail(subject, message, fail_silently=True, html_message=html_message) File "/local/mailman/venv/lib/python3.10/site-packages/django/utils/log.py", line 131, in send_mail mail.mail_admins( File "/local/mailman/venv/lib/python3.10/site-packages/django/core/mail/__init__.py", line 124, in mail_admins raise ValueError("The ADMINS setting must be a list of 2-tuples.") ValueError: The ADMINS setting must be a list of 2-tuples. Our ADMINS setting in /etc/mailman3/settings.py has ADMINS = ( ('Mailman Suite Admin', 'someone(a)our.domain', 'someoneelse(a)our.domain'), Can someone point me in a direction to correct this? Thanks in advance. David I saw a few posts regarding the "Uncaught runner exception: module 'time' has no attribute 'clock'" problem but no solution to that. It seems this issue sneaked in at some point. I was getting aware of it when suddenly notifications to non-member posts did not work anymore. Everything else seems still to work. So, what is the prefered solution here? Is it possible to "repair" focal? There is python2.7, python3.6 and python3.8 installed currently. Or do I need to switch to a supported distribution like debian something? Wait for ubuntu 24.04? Any hints are really appreciated. cheers! t. Is there a way to delete the mailman3 cache? It's because it gives us this error and we think it's because of the cache. Internal Server Error: /mailman3/accounts/login/ TemplateDoesNotExist at /accounts/login/ django_saml2_auth/error.html Request Method: GET Request URL: http://llistes.csuc.cat/mailman3/accounts/login/?next=/mailman3/postorius/l… Django Version: 2.2.12 Python Executable: /usr/bin/uwsgi-core Python Version: 3.8.10 Python Path: ['.', '', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages'] Server time: dv., 15 Març 2024 10:33:00 +0100 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') Template loader postmortem Django tried loading these templates, in this order: Using engine django: This engine did not provide a list of tried templates. Traceback: File "/usr/local/lib/python3.8/dist-packages/django_saml2_auth/utils.py" in wrapper 179. result = function(request) File "/usr/local/lib/python3.8/dist-packages/django_saml2_auth/views.py" in signin 271. saml_client = get_saml_client(get_assertion_url(request), acs) File "/usr/local/lib/python3.8/dist-packages/django_saml2_auth/saml.py" in get_saml_client 169. metadata = get_metadata(user_id) File "/usr/local/lib/python3.8/dist-packages/django_saml2_auth/saml.py" in get_metadata 131. raise SAMLAuthError("Invalid metadata URL.", extra={ During handling of the above exception (Invalid metadata URL.), another exception occurred: File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner 34. response = get_response(request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response 115. response = self.process_exception_by_middleware(e, request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response 113. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/local/lib/python3.8/dist-packages/django_saml2_auth/utils.py" in wrapper 181. result = handle_exception(exc, request) File "/usr/local/lib/python3.8/dist-packages/django_saml2_auth/utils.py" in handle_exception 162. return render(request, File "/usr/lib/python3/dist-packages/django/shortcuts.py" in render 36. content = loader.render_to_string(template_name, context, request, using=using) File "/usr/lib/python3/dist-packages/django/template/loader.py" in render_to_string 61. template = get_template(template_name, using=using) File "/usr/lib/python3/dist-packages/django/template/loader.py" in get_template 19. raise TemplateDoesNotExist(template_name, chain=chain) Exception Type: TemplateDoesNotExist at /accounts/login/ Exception Value: django_saml2_auth/error.html Request information: USER: AnonymousUser Hallo togeher, I´m using the docker version from maxking and mailman core-version 3.3.9. I was wondering why there were messages in the list with "non-configured" footers. I found the files mailman-core:/opt/mailman# find / -name "*list:member:*" /usr/lib/python3.11/site-packages/mailman/templates/de/list:member:generic:footer.txt /usr/lib/python3.11/site-packages/mailman/templates/de/list:member:digest:masthead.txt /usr/lib/python3.11/site-packages/mailman/templates/ca/list:member:generic:footer.txt /usr/lib/python3.11/site-packages/mailman/templates/ca/list:member:digest:masthead.txt /usr/lib/python3.11/site-packages/mailman/templates/nl/list:member:generic:footer.txt but I found no option to disable them. How can I disable these global list-configuration? Best regards, chrclaus incoming messages are showing up in hyperkitty but not going out as emails to list members. i've tried enabling the following debug logging: format: %(asctime)s (%(process)d) %(message)s datefmt: %b %d %H:%M:%S %Y propagate: no level: info path: mailman.log [logging.smtp] level: DEBUG [logging.smtp-failure] level: DEBUG [logging.runner] level: DEBUG [logging.debug] level: debug [logging.smtp-failure] level: debug with these options, if i run `tail -f *` in the `log` directory of mailman, i get the following in essentially a busy loop: ==> smtp.log <== Mar 13 19:08:46 2024 (18) Using agent: <mailman.mta.bulk.BulkDelivery object at 0x7fef1c9ad050> ==> debug.log <== Mar 13 19:08:46 2024 (17) [NNTPRunner] starting oneloop Mar 13 19:08:46 2024 (17) [NNTPRunner] ending oneloop: 0 Mar 13 19:08:46 2024 (18) [OutgoingRunner] finishing filebase: 1710356926.1738262+0a50dc0e393ba4de10bcdadb5376d4330f670c77 Mar 13 19:08:46 2024 (18) [OutgoingRunner] doing periodic Mar 13 19:08:46 2024 (18) [OutgoingRunner] committing transaction Mar 13 19:08:46 2024 (18) [OutgoingRunner] checking short circuit Mar 13 19:08:46 2024 (18) [OutgoingRunner] processing filebase: 1710356926.2733445+d044aeb93be86fbf662b6e0feffc89d0f2e4eb66 Mar 13 19:08:46 2024 (18) [OutgoingRunner] processing onefile Mar 13 19:08:46 2024 (18) [outgoing] <function deliver at 0x7fef1cda27a0>: <CADJyiOV1RAth=3CkNoHJ1qTVzedzX8BG0k6iwe019jXau30pLw(a)mail.gmail.com> ==> smtp.log <== Mar 13 19:08:46 2024 (18) Using agent: <mailman.mta.bulk.BulkDelivery object at 0x7fef1cb0f390> which doesn't give me a lot to go on. anyone know what could be causing this or any way to get additional debug information? Hi Folks, Just recently I've started seeing backtraces from Django when trying to view old threads in hyperkitty. They say that more than one LastView is being returned, and at a later date cannot delete a LastView. I'm using the Debian-packaged hyperkitty and postorius, but this code hasn't changed from upstream. The backtraces come when a logged in used revisits a thread. So I see: Internal Server Error: /hyperkitty/list/devel(a)sel4.systems/thread/XP2GFYGXOXBC3QBKKZQLZ6STSHQHK6K2/ MultipleObjectsReturned at /hyperkitty/list/devel(a)sel4.systems/thread/XP2GFYGXOXBC3QBKKZQLZ6STSHQHK6K2/ get() returned more than one LastView -- it returned 2! Then later on I see: LastView.objects.delete(pk=del_id) ^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'Manager' object has no attribute 'delete' Here are the backtraces: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3/dist-packages/hyperkitty/lib/view_helpers.py", line 137, in inner return func(request, *args, **kwargs) File "/usr/lib/python3/dist-packages/hyperkitty/views/thread.py", line 162, in thread_index last_view_obj, created = LastView.objects.get_or_create( File "/usr/lib/python3/dist-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 581, in get_or_create return self.get(**kwargs), False File "/usr/lib/python3/dist-packages/django/db/models/query.py", line 439, in get raise self.model.MultipleObjectsReturned( Internal Server Error: /hyperkitty/list/devel(a)sel4.systems/2022/1/ AttributeError at /hyperkitty/list/devel(a)sel4.systems/2022/1/ 'Manager' object has no attribute 'delete' Traceback (most recent call last): File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/usr/lib/python3/dist-packages/hyperkitty/lib/view_helpers.py", line 137, in inner return func(request, *args, **kwargs) File "/usr/lib/python3/dist-packages/hyperkitty/views/mlist.py", line 127, in archives return _thread_list(request, mlist, threads, extra_context=extra_context) File "/usr/lib/python3/dist-packages/hyperkitty/views/mlist.py", line 173, in _thread_list LastView.objects.delete(pk=del_id) Since yesterday I get the following error-message when I go to the webinterface: ValueError at /admin/login/ localtime() cannot be applied to a naive datetime Request Method: GET Request URL: https://mailman.pgtrynwalden.nl/mailman3/admin/login/?next=/mailman3/admin/ Django Version: 2.2.28 Exception Type: ValueError Exception Value: localtime() cannot be applied to a naive datetime Exception Location: /usr/lib/python3/dist-packages/django/utils/timezone.py in localtime, line 207 Python Executable: /usr/bin/uwsgi-core Python Version: 3.9.2 Python Path: ['.', '/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '/usr/local/lib/python3.9/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.9/dist-packages'] Server time: vr, 1 Mrt 2024 11:52:50 +0100 Mailman info: mailman info GNU Mailman 3.3.3 (Tom Sawyer) Python 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110] config file: /etc/mailman3/mailman.cfg db url: mysql+pymysql://mailman3:xxxxxxx If this issue was posted before, i'm sorry, i haven't found it: Any ideas how to solve this issue would be appreciated Environment: Request Method: GET Request URL: https://mailman.pgtrynwalden.nl/mailman3/admin/login/?next=/mailman3/admin/ Django Version: 2.2.28 Python Version: 3.9.2 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: File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner 35. response = get_response(request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response 145. response = self.process_exception_by_middleware(e, request) File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response 143. response = response.render() File "/usr/lib/python3/dist-packages/django/template/response.py" in render 106. self.content = self.rendered_content File "/usr/lib/python3/dist-packages/django/template/response.py" in rendered_content 83. content = template.render(context, self._request) File "/usr/lib/python3/dist-packages/django/template/backends/django.py" in render 61. return self.template.render(context) File "/usr/lib/python3/dist-packages/django/template/base.py" in render 169. with context.bind_template(self): File "/usr/lib/python3.9/contextlib.py" in __enter__ 117. return next(self.gen) File "/usr/lib/python3/dist-packages/django/template/context.py" in bind_template 246. updates.update(processor(self.request)) File "/usr/lib/python3/dist-packages/postorius/context_processors.py" in postorius 38. mailman_day=(timezone.localtime(timezone.now()).day == MAILMAN_DAY), File "/usr/lib/python3/dist-packages/django/utils/timezone.py" in localtime 207. raise ValueError("localtime() cannot be applied to a naive datetime") Exception Type: ValueError at /admin/login/ Exception Value: localtime() cannot be applied to a naive datetime both: i) discarding the current message of a sender (not member of a closed list) ; and in the same action ii) adding this person to the whitelist, i.e. accept further mails from this sender. How can this be achieved? On 3/8/24 6:36 AM, Daniel Azubuine wrote: > Sir, I get this error > /home/daniel/Documents/repos/mailman/mailman/.tox/qa/bin/python: can't > open file '/home/daniel/Documents/repos/mailman/mailman/setup.py': > [Errno 2] No such file or directory > ERROR: invocation failed (exit code 2)/ > _______________________________________________ summary > ________________________________________________ > ERROR:   qa: InvocationError for command > /home/daniel/Documents/repos/mailman/mailman/.tox/qa/bin/python > /home/daniel/Documents/repos/mailman/mailman/setup.py --name (exited > with code 2) > when i run tox -e qa. What is your tox version (tox --version)? You shouldn't need this, but adding skipdist = True in the [tox] section of tox.ini may help. > I also get this when i run tox -e py310-diffcov > ------------- > src/mailman/interfaces/listmanager.py (75.0%): Missing lines 37 > ------------- > Total:   4 lines > Missing: 1 line > Coverage: 75% > ------------- > ERROR: InvocationError for command > /home/daniel/Documents/repos/mailman/mailman/.tox/py310-diffcov/bin/diff-cover coverage.xml --fail-under=100 --compare-branch origin/master (exited with code 1) This is expected output in this case. Line 37 in your src/mailman/interfaces/listmanager.py is not covered by any tests. Modifying the test_cannot_create_a_list_twice test in src/mailman/model/tests/test_listmanager.py to use assertRaisesRegex rather than assertRaises may help. See < https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRai… >. Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers, San Francisco Bay Area, California better use your sense - B. Dylan Hello, everyone. I just completed the initial installation by following the instructions: https://docs.list.org/en/latest/install/virtualenv.html#virtualenv-install I went with the apache/uswgi configuration. The site is up and running, but if I click Postorius, it gets redirected to https://mysite.com/postorius/lists and I get not found error message. The same goes for Lists and Archives. What did I do wrong? I've found some discussions online, but they seem to be related to a different installation, thus my confusion. Thank you! Hi Mailman Admins, Whenever we mass subscribe or unsubscribe more than 500+ users, we would get a "500-internal-server-error" or a timeout. Is there something we can tweak or increase to way to increase this threshold? I'm migrating to a new Mailman3 instance, finally escaping a fairly old (3.1.1) and problematic distribution repo install on a Linux VM and moving to a venv install in a native SmartOS Zone. I've gotten everything running well and integrated with our (fairly complex) mail server. I'd like to begin migration of the lists on the old mm3 instance. Is there a way to export a list from one Mailman 3 instance and import it into another, on a different machine? Ideally some way to capture its settings, members, members' settings, etc? Thanks, -Dave Dave McGuire, AK4HZ New Kensington, PA So we tried to the migration following the steps: - stop mailman in the old machine (v3.1.1 from ubuntu packages) - dump DB mailman3 and mailman3web - backup /var/lib/mailman3 content On the new machine: - checkout from git the version 3.1.1 to match production and install the services - stop mailman3 and mailman3-web on the new machine - load DBs into new machine - copy content from /var/lib/mailman3 into /local/mailman/var (which means: archives/ cache/ data/ ext/ lists/ locks/ messages/ public_suffix_list.dat queue/ templates/ web/) - start mailman3 and mailman-3web - run mailman3-web migrate And I stopped here. Because it crashed. (venv) mailman@new-mailman3-server ~ (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... 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): "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py", line 87, in _execute return self.cursor.execute(sql) "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py", line 75, in execute return self.cursor.execute(query, args) "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 179, in execute res = self._query(mogrified_query) "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 330, in _query db.query(q) "/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") 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()) "/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py", line 90, in main execute_from_command_line(sys.argv) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line utility.execute() "/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) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py", line 402, in run_from_argv self.execute(*args, **cmd_options) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py", line 448, in execute output = self.handle(*args, **options) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py", line 96, in wrapped res = handle_func(*args, **kwargs) "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/migrate.py", line 349, in handle post_migrate_state = executor.migrate( "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py", line 135, in migrate state = self._migrate_all_forwards( "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py", line 167, in _migrate_all_forwards state = self.apply_migration( "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py", line 252, in apply_migration state = migration.apply(state, schema_editor) "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/migration.py", line 130, in apply operation.database_forwards( "/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py", line 108, in database_forwards schema_editor.add_field( "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/schema.py", line 104, in add_field super().add_field(model, field) "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 636, in add_field return self.create_model(field.remote_field.through) "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 447, in create_model self.execute(sql, params or None) "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py", line 199, in execute cursor.execute(sql, params) "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py", line 67, in execute return self._execute_with_wrappers( "/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) "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py", line 84, in _execute with self.db.wrap_database_errors: "/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 "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py", line 87, in _execute return self.cursor.execute(sql) "/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py", line 75, in execute return self.cursor.execute(query, args) "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 179, in execute res = self._query(mogrified_query) "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line 330, in _query db.query(q) "/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py", line 261, in query _mysql.connection.query(self, query) 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. Any clue what to do next? Best Regards, Helio Loureiro https://helio.loureiro.eng.br https://github.com/helioloureiro https://mastodon.social/@helioloureiro It's that time of year again! PSF is in GSoC 2024, I'm 99% certain PSF will accept Mailman as a suborg (don't ask about the 1%, it's embarrassing ;-). Student applications open on March 18. So ... If you have ideas for improving Mailman 3, whether misfeatures that need fixing or cool new features, please consult our ideas page https://wiki.list.org/DEV/Google%20Summer%20of%20Code%202024 to get an idea of level of detail and style of description needed (and to see if maybe it's already there. You can send them to me if they're already formed in your mind, or send them here for input from users on requirements, or to mailman-developers(a)python.org for input on implementation feasibility and appropriateness for GSoC. If you know anybody who would be interested in participating as a contributor, please encourage them to look at us. Rules are somewhat relaxed from years ago. They still don't accept below college age, but they no longer restrict to students. They're also offering multiple period lengths from 8 to 22 weeks (stipends vary according to period and by price level in country of residence, see https://developers.google.com/open-source/gsoc/help/student-stipends ). They're not as generous as a few years ago, at least for the "rich" countries (US, UK, Japan). You don't need to be an experienced coder or project manager to be a secondary mentor, just willing to communicate with the code contributor. If you're interested in being a primary or secondary mentor, the burden is likely to be "as much as you want". We rarely get more than one good application, and we have enough "default" primary mentors to cover the likely maximum number of slots we could be allocated. It would be very helpful to us and to the PSF organization administrators if you express interest and get signed up by the end of next week, but as far as I know we can add or substitute mentors at any time. Potential mentors should 1. Have a Google account (needed for step 2, and required by GSoC) 2. Sign up with Python-GSoC at https://forms.gle/coJYxhor6FAZcZfU8 3. If you have been a GSoC mentor or org admin in the past, go to https://summerofcode.withgoogle.com and accept the contributor agreement and program rules for 2024. (Definitely if you did last year, probably for 2022 the system still remembers you, and unlikely it has more memory than that.) Steve Are there any settings that may help with making it easier seeing spam as spam? E.g. some mail programs, including Outlook, allow the user to set a from mail address that most mail clients will show instead of the true sender address, but the senders mail address is still present in the sender header field. While some people and companies carelessly abuse that functionality, hiding their true mail address, those bad practices also are abused my spammers and others. Does mailman have any settings that would remove any such obfuscations, e.g. in this case detect the manipulated from address and replace it with the sender address? While I do run my own spam filter, it's virtually getting harder every day to make sure you detect all spam while not having too many false positives. If it was possible to reverse at least the most obvious manipulations, that would probably already help. Also, it would make it much easier for the users to see at first glance who actually wrote an email. It's always less trustworthy if the senders address is shown as user3168(a)suspiciousdomain.gg instead of it being manipulated to say support(a)yourprovider.com. We have Mailman working well in our environment, but there's one thing I can't seem to make happen no matter what I try. The situation is as follows: Postfix runs on on a different server than Mailman. Its main.cf says local_recipient_maps = $alias_maps transport_maps = regexp:/var/mailman-data/postfix_lmtp relay_domains = regexp:/var/mailman-data/postfix_domains The file postfix_lmtp is initially generated by Mailman (running on a different machine). A background process creates a version of the file wherein the lmtp IP address is changed to the network IP of the Mailman server, and that version is sync'd over to the Postfix server. On the latter, a typical block for a list then reads as follows (where A.B.C.D is the IP address of the Mailman server): /^some-list(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-bounces(\+.*)?(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-confirm(\+.*)?(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-join(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-leave(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-owner(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-request(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-subscribe(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 /^some-list-unsubscribe(a)lists\.scss\.tcd\.ie$/ lmtp:[A.B.C.D]:8024 The only problem with this is that if someone sends a message to a non-existent mailing list, Postfix nevertheless accepts the mail, and it loiters in the queue for several days before eventually being bounced back to the sender. I want to get Postfix to reject mail to non-existent mailing lists immediately. I've come up short with each variation of main.cf settings I've tried, and would greatly appreciate any advice. Many thanks Stephen Kenny Hi there, I am running mailman3 on Debian 12 - latest package (GNU Mailman 3.3.8 (Tom Sawyer)). Message handling in general is working fine, but as soon as a message is released, archiving with Hyperkitty is not working, due to a 405 error: Feb 11 16:18:48 2024 (3479662) HyperKitty failure on http://lists.domain.tld/mailman3/hyperkitty/api/mailman/archive : (405) Feb 11 16:18:48 2024 (3479662) Could not archive the message with id <170766472771.3479669.4791049109141956450(a)otherdomain.tld> Feb 11 16:18:48 2024 (3479662) archiving failed, re-queuing (mailing-list jahrgang.domain.tld, message <170766472771.3479669.4791049109141956450(a)otherdomain.tld>) Feb 11 16:18:48 2024 (3479662) Exception in the HyperKitty archiver: Feb 11 16:18:48 2024 (3479662) Traceback (most recent call last): File "/usr/lib/python3/dist-packages/mailman_hyperkitty/__init__.py", line 158, in _archive_message url = self._send_message(mlist, msg) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3/dist-packages/mailman_hyperkitty/__init__.py", line 228, in _send_message raise ValueError(result.text) ValueError When tracing this back, even the frontend Nginx server receives a get in his logs, hence I assume that hyperkitty is really creating a GET instead of a POST request? 217.72.204.162 - - [11/Feb/2024:16:18:48 +0100] "GET /mailman3/hyperkitty/api/mailman/archive HTTP/1.1" 405 0 "-" "python-requests/2.28.1" Any idea how to trace this down any further? Any help is really appreciated! Thanks, Matthias I have a situation where I need to add / remove 10-20 non-members to a particular list every week and set the moderation bit to 'accept immediately (bypass other rules). I do the above via postorius because I couldn't find a way to do this via mailman shell. Can anyone help me please to achieve the above? I know how to remove all non-members via /opt/mailman/mm/bin/mailman shell -l list.example.com for nonmember in m.nonmembers.members: ... nonmember.unsubscribe() commit() I am just having difficulties adding the non-members and setting the moderation bit to 'Accept' Currently I am using Mailman 3.2.2 (La Villa Strangiato) and Postorius Version 1.2.4 so cant use 'postorius => settings -> message acceptance -> id_accept_these_nonmembers' Regards, Zaheer Hi. We did a fresh install of the Debian Mailman 3 full package. I'd like all components to be translated into pt_BR. I downloaded the latest updated translations from weblate, which says that 100% of the project (all components) are translated. I checked and recompiled mailman.po with msgfmt without errors. I followed all instructions I saw, included the ones from the topic How to change the language in mailman3 in this list. Everything almost OK, except from the fact that none of mailman's core email messages are being translated, even though mailman.po shows the right messages. Also, strange things happen to these .po files. The web interface is almost perfect, but some messages (just some) are not correct - although the corresponding django.po appears to be OK. It´s the case below: the pair msgid/msgstr seems to be OK, but this particular sentence is not being translated. #: templates/postorius/lists/summary.html:88 #, python-format msgid "" " To subscribe you can send an email with 'subscribe' in the " "subject to\n" " <a href=\"mailto:%(address)s?subject=Subscribe\">" "%(address)s</a>\n" " or use the form below:\n" " " msgstr "" " Para se inscrever você pode enviar um e-mail com o assunto " "'subscribe' para\n" " <a href=\"mailto:%(address)s?subject=Subscribe\">" "%(address)s</a>\n" " ou use o formulário abaixo:\n" What am I doing wrong? Or what can I do to make things suitable? Additional info: GNU Mailman 3.3.3 (Tom Sawyer) Python 3.9.2 (default, Feb 28 2021, 17:03:44) [GCC 10.2.1 20210110] Postorius v. 1.3.4 HyperKitty v. 1.3.4 Thanx for any help I'm seeing emails being dropped when mm3 talks to the local smtp server, with log errors like: 2021-06-23 15:42:24 1lvvea-007r8u-VN H=localhost (<FQDN>) [::1] F=<announce-bounces@<FQDN>> rejected after DATA: maximum allowed line length is 998 octets, got 1036 The email itself did not have such long lines AFAICT. I can disable line length checking on the mailserver, but that sounds like a recipe for the next one along to drop the email. Peter C I host two MLs on the same server/same MM3 instance. Under the Django Admin interface, I created two sites. I expected that each ML will belong to its own site and should not be visible on another site. On https://mm3-lists.kictanet.or.ke/mm/lists/ , you can see the two lists. How do I stop the "Users" list from showing up on this site ( https://mm3-lists.kictanet.or.ke/mm/lists/ ) since it belongs to its own site - https://exim4u.org/mm/lists/ ? 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 ] hyperkitty: 1.3.8 We have several lists on our server, I will write down a list of example list names that are good enough for the purpose of my question. xx(a)domain.tld <mailto:[email protected]> yy-xx(a)domain.tld <mailto:[email protected]> zz-xx(a)domain.tld <mailto:[email protected]> When I now visit the archives for xx(a)domain.tld <mailto:[email protected]> and enter a search phrase in “search this list”, the results include the other 2 lists. It looks like “search this list” searches for keyword in any listname that matches the one from "this list". Is there a way to really only search “this list” when I go to the archives for xx(a)domain.tld <mailto:[email protected]>? I have tried to change the url for the results to have a ‘^’ in front of the listname, but that gives an error :-) Thanks in advance! Marco van Tol I have a decades old list that was abandoned on my server. I upgraded it to mailman3 but it never came back to life. It is causing me some grief. I want to keep the archives up but totally disable any mail capabilities. I have turned off mail for the domain but I still get 'crap' that tries to relay. I've manually tried to remove stuff from the transport tables in Postfix but I still get mail. I'm not sure where the problem lies. If I can't stop this I'll have to remove the list entirely which includes the archives. I really wish to leave the archives up. Any idea on how I can remove the mail capabilities and leave the rest? Thank You. Hi Everyone, we have mailman 3.3.8 venv test installation which in general works fine however our mysql error log is filled up with messages below because they are so frequent. 2023-02-24 0:31:30 199567 [Warning] Aborted connection 199567 to db: 'mailman' user: 'mailman' host: 'localhost' (Got an error reading communication packets) 2023-02-24 0:36:30 201063 [Warning] Aborted connection 201063 to db: 'mailman' user: 'mailman' host: 'localhost' (Got an error reading communication packets) 2023-02-24 0:41:31 202559 [Warning] Aborted connection 202559 to db: 'mailman' user: 'mailman' host: 'localhost' (Got an error reading communication packets) 2023-02-24 0:46:31 204056 [Warning] Aborted connection 204056 to db: 'mailman' user: 'mailman' host: 'localhost' (Got an error reading communication packets) As suggested here https://lists.mailman3.org/archives/list/[email protected]/thread/… I tried to correlate with error logs and /opt/mailman/web/logs/mailmanweb.log shows some hyperkitty.lib.utils Failed to update the fulltext index: (2002, "Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (111)" /opt/mailman/web/logs/uwsgi-error.log Message: OperationalError(2013, "Lost connection to MySQL server at 'handshake: reading initial communication packet', sy stem error: 104") but they have not such frequency so unsure if they are related. Thanks for the suggestions This did also upgrade Mailman3 version 3.3.3 -> 3.3.8 as a used the packages which came with Debian OS. Initially after the upgrade I had some troubles with the MM3 services to start, but I fixed this. Now almost everything is running. Only the Archives are not working. The browser shows a server error, when I look at the mailman-web.log I see ERROR 2024-01-31 15:14:14,403 2699563 django.request Internal Server Error: /mailman3/hyperkitty/ Traceback (most recent call last):   File "/usr/lib/python3/dist-packages/django/db/backends/utils.py", line 84, in _execute     return self.cursor.execute(sql, params) "/usr/lib/python3/dist-packages/django/db/backends/sqlite3/base.py", line 423, in execute     return Database.Cursor.execute(self, query, params) sqlite3.OperationalError: no such column: hyperkitty_mailinglist.archive_rendering_mode When I check the schema I find such a column in table "mailinglist" I assume there is only one solution, to uninstall and delete everything and start from scratch. Or is there a way the check all tables with a script and do an table update for missing columns ? Or a partial installation of hyperkitty, as I don't care about the archives. I am using sqlite3 as DB backend. Kind regards End of last year, I've re-installed mailman3 using the virtualenv installation method on ubuntu 20.04. Since then, the transport map (/opt/mailman/mm/var/data/postfix_lmtp) has not been updated even though, new mailing lists were created. The old mailing lists, that existed before the re-installation work perfectly fine but those created after are not accessible. Because the entries for those new lists are missing in the transport map, postfix replies with a "mail for ... loops back to myself" error. I'm quite sure, that I did all the steps in the documentation (except that I use a slightly different apache2 vhost configuration). I double checked on the cronjobs. crontab -u mailman -e @daily /opt/mailman/venv/bin/mailman digests --periodic @daily /opt/mailman/venv/bin/mailman notify * * * * *          /opt/mailman/venv/bin/mailman-web runjobs minutely 0,15,30,45 * * * * /opt/mailman/venv/bin/mailman-web runjobs quarter_hourly @hourly            /opt/mailman/venv/bin/mailman-web runjobs hourly @daily             /opt/mailman/venv/bin/mailman-web runjobs daily @weekly            /opt/mailman/venv/bin/mailman-web runjobs weekly @monthly           /opt/mailman/venv/bin/mailman-web runjobs monthly @yearly            /opt/mailman/venv/bin/mailman-web runjobs yearly Any idea, what I could have missed??? Kind regards, I recently found the "pipx" wrapper very useful and wanted to ask you if this could be facilitate the fresh installation of the mailman3-suite. Has anyone in the list already experiences installing mailman and mailmanweg through "pipx"? Here are my general tipps for using pipx # https://pipx.pypa.io/stable/installation/#on-linux sudo apt install pipx python3-venv To install a package systemwide for all users, I recommend the tip from https://github.com/pypa/pipx/issues/754#issuecomment-951162846 . sudo PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install <package> I know this has been discussed in the past: https://lists.mailman3.org/archives/list/[email protected]/thread/… However, Google has recently announced that they will be enforcing one-click unsubscribe for bulk senders: https://techcrunch.com/2023/10/03/gmail-to-enforce-harsher-rules-in-2024-to… Thoughts? Running an install on Debian12 VM. Getting a new error message that I haven't seen previously: (venv) mailman@debian12:~$ mailman-web compress Compressing... Invalid template socialaccount/login_cancelled.html: Invalid block tag on line 7: 'element', expected 'endblock'. Did you forget to register or load this tag? Invalid template account/verified_email_required.html: Invalid block tag on line 7: 'element', expected 'endblock'. Did you forget to register or load this tag? Error parsing template socialaccount/signup.html: socialaccount/base.html Compressed 2 block(s) from 78 template(s) for 1 context(s). 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 ] I think I have (finally) set up a working instance of mailman 3 on a host separate from the companion postfix mail server actually sending out the mails. One server (postfix) is directly in the internet and the other one is in an internal network not directly reachable from the internet (but connected using a reverse proxy). The services on the hosts are available to one another (i. e. the postfix server is reachable using 127.0.0.1:25 from mailman and mailman is reachable using 127.0.0.1:8024 from postfix using a permanent ssh tunnel betwenn the two hosts). I think that this solution could work quite reliably... (at least I hope But that's not the full deal. Postfix needs access to some hashed configuration files containing the transport maps and the domains of the mailman installation, and mailman needs the contents of the postfix configuration file. As a quick and dirty solution, I've established a process which periodically copies the /var/lib/mailman3 directory from the mailman box to the postfix box using rsync. But I would like to have a more professional solution, like a directly shared directory between both. I did not yet find any suggestions on how to achieve this. Are there any best practices recommendations? I already tried sharing the directories using sshfs, but that did not work. I connected the remote directory postfix.example.com:/var/lib/mailman3 to my local directory /var/lib/mailman3 using sshfs [email protected]:/var/lib/mailman3 /var/lib/mailman3 This seemed to work pretty fine, as all files and directories seemed to be available, but when starting mailman 3, the following error message was shown: FileExistsError: A race condition might have happened. /var/lib/mailman3 actually exists and is not a directory. Any idea why this message is shown? So, is it a bad idea to use sshfs? Do I have to install an NFS server? But I am not sure if sharing directories using NFS across the Internet is a good idea... Any suggestions? Best regards On Tue, Jan 23, 2024 at 4:22 AM Mark Labeste <marqueejen13(a)gmail.com> wrote: > About 500 list. Not sure how to check size of the archives. > On Thu, Jan 18, 2024 at 4:44 PM Odhiambo Washington <odhiambo(a)gmail.com> > wrote: >> On Thu, Jan 18, 2024 at 8:49 AM Mark Labeste <marqueejen13(a)gmail.com> >> wrote: >>> Any suggestion on how to migrate mailing list and archirve with >>> diffirent server and domain. For the mailing list from >>> sample.domain1.example.com to sample.domain2.example.com >>> Old Mailing list >>> Mailman Core Version GNU Mailman 3.3.5 (Tom Sawyer) >>> Mailman Core API Version 3.1 >>> Mailman Core Python Version 3.6.8 (default, Sep 26 2019, 11:57:09) >>> [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] >>> Domain Domain1.example.com >>> New Mailing list >>> Mailman Core Version GNU Mailman 3.3.9 (Tom Sawyer) >>> Mailman Core API Version 3.1 >>> Mailman Core Python Version 3.9.18 (main, Sep 22 2023, 17:58:34) >>> [GCC 8.5.0 20210514 (Red Hat 8.5.0-20)] >>> Domain domain2.example.com >> How many lists? How big are the archives? >> Looking at >> https://lists.mailman3.org/archives/list/[email protected]/thread/… , >> it seems like it's not a trivial exercise. >> However, I am wondering about the consequences of: >> 1. dumping the DBs and doing 's/DOMAIN1/DOMAIN2/g' in the dumps, then >> re-importing >> 2. editing settings.py and webserver config to reflect the DOMAIN2 >> 3. reconfiguring your MTA to handle list mails using the DOMAIN2 >> I am imagining a virtualenv type of installation. The archives are in the database so nothing to worry about, Now that I think about this again, after dumping and importing the database as shown above, you need to rerun the 'mailman-web migrate` once again to import any DB schema changes between the versions. Actually, just run all the options from https://docs.mailman3.org/en/latest/install/virtualenv.html#run-database-mi… 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 ] I noticed that our smtp.log and bounce.log files haven't been rotated in years. I see the reason for smtp.log not being rotated is due to < https://gitlab.com/mailman/mailman/-/issues/931 >. Does this same issue affect bounce.log or is it safe to rotate similar to mailman.log? Hello, Is there a way to extract all the lists and show the administrators who manage those lists? Thanks! So next issue post upgrade: I sent three emails to one of the lists today. All of them went to the list, as I got copies of each one, and the headers clearly show them coming from the list. However, when I go look at the archives for the list, they don't show up at all. And it's been over 8 hours since I sent them. --Quanah Hi together, I´m using Mailman3.3.9 and postfix in docker containers seperatly. Everything worked fine since this afternoon. The error occurs, after postfix transports an incoming mail to mailman. After processing the mail, sending to all recepients failed >> Delivery to mail(a)domain.tld failed with code 444, [Errno 111] Connection refused I checked the configuration of postfix and added a wide IP-range to mynetworks: postfix-main.cf mynetworks = mailman-core tgc_mailman_core t 127.0.0.0/8 [::1]/128 [fe80::]/64 172.18.0.0/16 172.21.0.0/16 [2001:8d8:1800:283]/64 172.0.0.0/24 relay_domains = $mydestination #smtpd_sender_restrictions = reject_unknown_sender_domain,reject_unknown_reverse_client_hostname smtpd_sender_restrictions = reject_unknown_sender_domain smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination smtpd_recipient_restrictions = permit_sasl_authenticated check_recipient_access hash:/etc/postfix/filtered_domains permit_mynetworks reject_unauth_destination smtpd_data_restrictions = reject_unauth_pipelining Does anyone have a clue for me as to why delivery to Postfix is ​​failing? My last change a couple of days ago was adding an public ipv6-address to the host. But docker still works without IPv6. I thought about client-identification issues between maiolman-core and postfix but did noch find anything to fix ... Best regards, Christopher Hey there, I'm still trying to figure out, how to move a bunch of lists from one mm3-instance to another. If somebody has a working solution, I would be really glad to hear from it. I came across this thread, but I don't think it tackles my question: https://lists.mailman3.org/archives/list/[email protected]/thread/… (or maybe I missed the right parts) We have equal setups and versions: - maxxking docker install 0.4.5 - Core 3.3.8 - API 3.1 - Postorius 1.3.8 ## Config So I found the possibility to get the config of a list via REST-API: curl -u restadmin:restpass localhost:8001/3.1/lists/$short.$domain/config | jq > short.domain This is a nice collection of the configuration of a certain list. Does anybody know how I would get this data back to the newly created list in the second working mm3-instance? Shouldn't it be possible via POST command? I thought of something like: curl -u restadmin:restpass -d @short.domain -H "Content-Type: application/json" localhost:8001/3.1/lists/&short.&domain/config But it returns {"title": "405 Method Not Allowed"} and I don't know where to look in the docs, since it shows almost always a way through mailman shell. Here I found something about POST: https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/… -> but how would it work exactly? ## Members, moderators, owners To export all members I normally run within mm-core-container as user mailman the following command: mailman members &short.&domain > &short.txt To fill them back in, it can be done in Postorius (or is there a way through API?). What I would love to know is how to get out Owners of the corresponding lists and reimport them in the new one (which will be the same at the end :-D but different instance). ## registered users This part is somehow tricky, since I have no clue how to do it. Some of the mailinglist-admins don't want to bother their list-owners again with registering newly on the other system. Is there a way to export all users (I think I found them in the DB in the table auth_users, somehow in combination with account_emailaddress) and get them over to the new instance (actually I just need part of them, but that's another question that I might solve lateron on my own). Maybe the answer is already here: https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/… -> but can somebody help to get this working (import/export)? Thank you in advance, I hope it's not too much or too nooby :-) Jens. Now everyone's having their addresses disabled due to "bounce" errors. This is odd, because I'm disabled, even though I received the 2 emails I sent to the list today (and that's the only list traffic today). I used the mailman shell command from < https://lists.mailman3.org/archives/list/[email protected]/thread/… > to see who has been disabled. I had to make one fix to it, it should be m.list_name not mlist.list_name. Confirmed that dozens of valid users have had their sub disabled. In the logs I see: Jan 18 19:25:17 2024 (952) Member quanah(a)fast-mail.org on list openldap-technical.openldap.org , bounce score = 1. Jan 18 19:37:11 2024 (952) Member quanah(a)fast-mail.org on list openldap-technical.openldap.org , bounce score = 2. Jan 18 19:37:11 2024 (952) Disabling delivery for quanah(a)fast-mail.org on list openldap-technical.openldap.org by bounce Jan 18 19:37:11 2024 (952) Member quanah(a)fast-mail.org on list openldap-technical.openldap.org , bounce score 2 >= threshold 2, disabling delivery. Jan 18 10:05:42 2024 (938) Peer: ('127.0.0.1', 36100) Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) handling connection Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) Data: b'LHLO hypatia.openldap.org ' Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) Data: b'MAIL FROM:<openldap-commit-bounces(a)openldap.org>' Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) sender: openldap-commit-bounces(a)openldap.org Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) Data: b'RCPT TO:<openldap-commit-owner(a)openldap.org>' Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) recip: openldap-commit-owner(a)openldap.org Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) Data: b'DATA' Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) Data: b'QUIT' Jan 18 10:05:42 2024 (938) ('127.0.0.1', 36100) connection lost Jan 18 10:05:42 2024 (938) Connection lost during _handle_client() Jan 18 10:05:45 2024 (940) <170557233590.937.7274928299237969540(a)hypatia.openldap.org> post to openldap-commit(a)openldap.org from openldap-commit-owner(a)openldap.org, 20265 bytes Jan 18 10:42:20 2024 (803) <170557453971.798.17359529178123532376(a)hypatia.openldap.org> low level smtp error: [Errno 111] Connection refused Jan 18 10:42:20 2024 (803) <170557453971.798.17359529178123532376(a)hypatia.openldap.org> delivery to quanah(a)openldap.org failed with code 444, [Errno 111] Connection refused But... postfix is working fine, and I've had hundreds of emails generated *by* mailman about it disabling people due to bounces. Thoughts on how to proceed appreciated. Regards, Quanah I'm trying to set up mailman3 on two hosts, one of which runs core + exim, the other runs postorius (&possibly hyperkitty). I have I think got core set up correctly, and postorius is sort of usable, but anything in the web ui that talks to core ends up with a white screen. I think what is happening is a postorius URL ends up with the core (or perhaps no) hostname, and as there's nothing there to answer it fails. I've checked the settings and I don't think I have misconfigured postorius. Is it possible that the bad url is being passed from core to postorius in some way and reused without changing the host? In the config at present, both hosts are visible to the browser, and each host can communicate with the other. Any ideas on how to pin down the problem better? Any suggestion on how to migrate mailing list and archirve with diffirent server and domain. For the mailing list from sample.domain1.example.com to sample.domain2.example.com Old Mailing list Mailman Core Version GNU Mailman 3.3.5 (Tom Sawyer) Mailman Core API Version 3.1 Mailman Core Python Version 3.6.8 (default, Sep 26 2019, 11:57:09) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] Domain Domain1.example.com New Mailing list Mailman Core Version GNU Mailman 3.3.9 (Tom Sawyer) Mailman Core API Version 3.1 Mailman Core Python Version 3.9.18 (main, Sep 22 2023, 17:58:34) [GCC 8.5.0 20210514 (Red Hat 8.5.0-20)] Domain domain2.example.com In a few days my current domain will be disabled (it is out of my control) and I would like to know how to migrate the mailing lists to the new domain name. As a solution I added a new domain in mailman 3 and created a script that replicates the lists in this new domain. To forward the emails received by the old lists, the script removes the members and adds the email of the new list. Is there a fashionable way to do that? Also, one problem that I don't have a solution is the archive of the old lists. How to bring them to the new ones? Thanks for your help. My mailing list server is running on a CenOS-7x with postgreSQL and the following mailman packages: Package Version ------------------- ---------- 1 aiosmtpd 1.2.4 2 alembic 1.5.3 3 arrow 0.17.0 4 asgiref 3.3.1 5 atpublic 2.1.2 6 authheaders 0.13.0 7 authres 1.2.0 8 bleach 3.3.0 9 blessed 1.17.12 10 certifi 2020.12.5 11 cffi 1.14.4 12 chardet 4.0.0 13 click 7.1.2 14 cmarkgfm 0.5.2 15 cryptography 3.3.1 16 decorator 4.4.2 17 defusedxml 0.6.0 18 Django 3.0.12 19 django-allauth 0.44.0 20 django-appconf 1.0.4 21 django-compressor 2.4 22 django-extensions 3.1.0 23 django-gravatar2 1.4.4 24 django-haystack 3.0 25 django-mailman3 1.3.5 26 django-picklefield 3.0.1 27 django-q 1.3.4 28 djangorestframework 3.12.2 29 dkimpy 1.0.5 30 dnspython 2.1.0 31 docutils 0.16 32 falcon 2.0.0 33 flufl.bounce 3.0.1 34 flufl.i18n 2.0.2 35 flufl.lock 3.2 36 gunicorn 20.0.4 37 HyperKitty 1.3.3 38 idna 2.10 39 importlib-resources 5.1.0 40 lazr.config 2.2.3 41 lazr.delegates 2.0.4 42 mailman 3.3.2 43 mailman-hyperkitty 1.1.0 44 mailman-web 0.0.3 45 mailmanclient 3.3.2 46 Mako 1.1.4 47 MarkupSafe 1.1.1 48 networkx 2.5 49 nose 1.3.7 50 oauthlib 3.1.0 51 packaging 20.9 52 passlib 1.7.4 53 pip 21.0.1 54 postorius 1.3.3 55 psycopg2-binary 2.8.6 56 publicsuffix2 2.20191221 57 pycparser 2.20 58 Pygments 2.7.4 59 PyJWT 2.0.1 60 pyparsing 2.4.7 61 python-dateutil 2.8.1 62 python-editor 1.0.4 63 python3-openid 3.2.0 64 pytz 2021.1 65 rcssmin 1.0.6 66 readme-renderer 28.0 67 requests 2.25.1 68 requests-oauthlib 1.3.0 69 rjsmin 1.1.0 70 robot-detection 0.4 71 setuptools 39.2.0 72 six 1.15.0 73 SQLAlchemy 1.3.23 74 sqlparse 0.4.1 75 typing-extensions 3.7.4.3 76 urllib3 1.26.3 77 uWSGI 2.0.19.1 78 wcwidth 0.2.5 79 webencodings 0.5.1 80 wheel 0.36.2 81 Whoosh 2.7.4 82 zipp 3.4.0 83 zope.component 4.6.2 84 zope.configuration 4.4.0 85 zope.deferredimport 4.3.1 86 zope.deprecation 4.4.0 87 zope.event 4.5.0 88 zope.hookable 5.0.1 89 zope.i18nmessageid 5.0.1 90 zope.interface 5.2.0 91 zope.proxy 4.3.5 92 zope.schema 6.0.1 -- Carlos Souza Recently a mail was not being distributed via our MM3 instance; I searched the logs and found: Dec 22 04:54:27 2023 (24) ACCEPT: <1d431542-b386-467b-8bf2-305f19ee7eb4(a)somenet.org> Dec 22 04:54:28 2023 (28) Uncaught runner exception: list index out of range Dec 22 04:54:28 2023 (28) Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/mailman/core/runner.py", line 179, in _one_iteration self._process_one_file(msg, msgdata) File "/usr/lib/python3.10/site-packages/mailman/core/runner.py", line 272, in _process_one_file keepqueued = self._dispose(mlist, msg, msgdata) File "/usr/lib/python3.10/site-packages/mailman/runners/pipeline.py", line 37, in _dispose process(mlist, msg, msgdata, pipeline) File "/usr/lib/python3.10/site-packages/mailman/core/pipelines.py", line 53, in process handler.process(mlist, msg, msgdata) File "/usr/lib/python3.10/site-packages/mailman/handlers/validate_authenticity.py", line 125, in process authenticate(msg, msgdata) File "/usr/lib/python3.10/site-packages/mailman/utilities/retry.py", line 44, in f_retry return f(*args, **kwargs) File "/usr/lib/python3.10/site-packages/mailman/handlers/validate_authenticity.py", line 93, in authenticate auth_result = authenticate_message( File "/usr/lib/python3.10/site-packages/authheaders/__init__.py", line 395, in authenticate_message dmarc_result = check_dmarc(msg, spf_result, dkim_result, dnsfunc=dnsfunc, psddmarc=psddmarc) File "/usr/lib/python3.10/site-packages/authheaders/__init__.py", line 343, in check_dmarc result, result_comment, from_domain, policy = dmarc_per_from(from_domain, spf_result, dkim_result, dnsfunc, psddmarc) File "/usr/lib/python3.10/site-packages/authheaders/__init__.py", line 90, in dmarc_per_from record, orgdomain = receiver_record(from_domain) File "/usr/lib/python3.10/site-packages/authheaders/dmarc_lookup.py", line 117, in receiver_record retval = lookup_receiver_record(hostSansDmarc, dnsfunc) File "/usr/lib/python3.10/site-packages/authheaders/dmarc_lookup.py", line 92, in lookup_receiver_record tags = answer_to_dict(str(result)) File "/usr/lib/python3.10/site-packages/authheaders/dmarc_lookup.py", line 42, in answer_to_dict retval = {t[0].strip().lower(): t[1].strip().lower() for t in rawTags} File "/usr/lib/python3.10/site-packages/authheaders/dmarc_lookup.py", line 42, in <dictcomp> retval = {t[0].strip().lower(): t[1].strip().lower() for t in rawTags} IndexError: list index out of range Dec 22 04:54:28 2023 (28) SHUNTING: 1703220868.1418982+b27f5db154375fcd2c418d467172e4aad0d3d57a So the message has been shunted, due to this error. Something with DMARC and tags. So I checked the DMARC record for the sending domain somenet.org . It is "v=DMARC1;p=none;pct=100;rua=mailto:[email protected];mailto:[email protected];ri=3600;fo=1;" which is syntactically incorrect. The extra ";mailto:[email protected]" is wrong, I guess the tag "ruf=" is missing here! It should probably read "v=DMARC1;p=none;pct=100;rua=mailto:[email protected];ruf=mailto:[email protected];ri=3600;fo=1;" So, should mm3 somehow "catch" this error somehow? According to the DMARC specs, an syntactically incorrect DMARC record should be ignored / handled as if none were present. Ralf Hildebrandt Charité - Universitätsmedizin Berlin Geschäftsbereich IT | Abteilung Netz | Netzwerk-Administration Invalidenstraße 120/121 | D-10115 Berlin Tel. +49 30 450 570 155 ralf.hildebrandt(a)charite.de https://www.charite.de MM3 installed today using the virtualenv method. On my testbench, I am having this strange issue where the Postorius is not displaying correctly perhaps because of some CSS issue - or just my own hangovers! I have used the standard method as documented. The error I get: https://pastebin.ubuntu.com/p/dhvsHFG4jH/ 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 ] I have a problem with my Mailman 3-setup. The symptom is that postfix rejects non-existing addresses for my list domains with <adr(a)example.com>: mail for example.com loops back to myself What I guess happens happens is that postfix for some reason accepts the mail as it is for a relay domain and finds that it is not deliverable locally as the address does not exist locally and then tries to relay it on to the appropriate MX server, which is itself and then fails and generates a bounce message. This is a bit annoying as I have set up postfix to only accept valid addresses. I have set the transport_maps, local_recipient_maps and relay_domains to the files generated by MM3. I run an older version of MM3 (3.0) but prefer to fix this without upgrading as upgrading is a relatively big undertaking. This is mostly a backscatter problem for spam I guess. Any ideas of very simple and easy to forget things that I've probably missed? Cheers // David Reply-To set to Mailman Developers. Please check that your replies go there. Or you can comment on MRs directly if you have a GitLab login. I have three merge requests pending: [1] https://gitlab.com/mailman/mailman/-/merge_requests/1159 [2] https://gitlab.com/mailman/mailman/-/merge_requests/1160 [3] https://gitlab.com/mailman/mailman/-/merge_requests/1161 [1] fixes the logging initialization bug that prevented the `smtp` log from rotating properly, and maybe some others. I don't think it needs user review because it's a pure bugfix, but if you're curious and take a look, and you think it needs better documentation let me know. [2] adds a configuration variable `lmtp_max_size`. This is user-visible, so review of the documentation in docs/mta.rst and config/mailman.cfg for clarity and readability would be appreciated. [3] adds postfix-pgsql support for use of the PostgreSQL database to route Mailman traffic. It's really most useful in an edge case (migration of 10,000+ list Mailman 2 instances), but it's theoretically attractive on the principle of "single source of truth", and possibly for implementing a "microservices" style cloud instance (it eliminates the need for Mailman and Postfix to share a file system). Besides opinions on the value of the general idea I have two specific questions: - Postfix docs recommend not looking up domains in the database to reduce load on the database server. But on a dedicated Mailman system, you're going to be looking up pretty much everything twice anyway (once to check for local recipient and once to fetch the transport), and my experience so far is that this isn't a big load on Postgres, and it's not a drag on list traffic distribution. Should I implement domain lookup in Postgres? Should it be optional if the lists are being looked up in Postgres? - The current patch completely disables generation of the postfix_lmtp alias file, even for the `mailman aliases` command. Should I implement an option to force generation of the files for documentation (and maybe a backup in a very rare and contorted situation where Mailman can see Postgres but Postfix can't)? Thanks, Steve I currently have a docker mailman stack that utilizes Django LDAP backend for authentication. I have my users attributes mapped as you see below in my settings.py file. Whenever a user logs into postorius with their 'uid', mailman-core uses their 'uid' as their email address instead of the 'email' attribute. Is there anyway to change this functionality? I would like my users to be able to login with their enterprise uid but be mapped to their email but I feel like there is a disconnect between Django and MM3 core. Any assistance is much appreciated. AUTH_LDAP_USER_ATTR_MAP = { "uid" : "userPrincipalName", "first_name": "givenName", "last_name": "sn", "email" : "mail", I've got the problem Multiple rows were found when one or none was required. I found the issue and a script here: https://gitlab.com/mailman/mailman/-/issues/657 I did su - mailman3 and ran: python scriptname.py and got: Traceback (most recent call last): File "/opt/mailman3/fix-doubled-entries.py", line 21, in <module> listmgr = get_list_manager() ^^^^^^^^^^^^^^^^^^ File "/opt/mailman3/fix-doubled-entries.py", line 6, in get_list_manager return getUtility(IListManager) ^^^^^^^^^^^^^^^^^^^^^^^^ "/opt/mailman3/venv/lib64/python3.11/site-packages/zope/component/_api.py ", line 180, in getUtility raise ComponentLookupError(interface, name) zope.interface.interfaces.ComponentLookupError: (<InterfaceClass mailman.interfa ces.listmanager.IListManager>, '') (venv) 1[mailman3@dalen ~]$ Do I miss something? How can I fix the problem? Thanks, Lars I am now importing the archives of my old mailman2 installation. Unfortunately, with some of the larger and older lists, import fails halfway through, with an exception, the last message of which is IndexError: list index out of range Below is an example. This means that the last few years are missing from the archive in several lists. Are there any suggestions what I could do to still get them importet? Thanks! Johannes   File "/usr/lib/python3.8/email/_header_value_parser.py", line 2069, in get_msg_id     token, value = get_dot_atom_text(value)   File "/usr/lib/python3.8/email/_header_value_parser.py", line 1334, in get_dot_atom_text     raise errors.HeaderParseError("expected atom at a start of " email.errors.HeaderParseError: expected atom at a start of dot-atom-text but found '@localhost>' 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()) "/opt/mailman/venv/lib/python3.8/site-packages/mailman_web/manage.py", line 37, in main     execute_from_command_line(sys.argv) "/opt/mailman/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line     utility.execute() "/opt/mailman/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 440, in execute     self.fetch_command(subcommand).run_from_argv(self.argv) "/opt/mailman/venv/lib/python3.8/site-packages/django/core/management/base.py", line 402, in run_from_argv     self.execute(*args, **cmd_options) "/opt/mailman/venv/lib/python3.8/site-packages/django/core/management/base.py", line 448, in execute     output = self.handle(*args, **options) "/opt/mailman/venv/lib/python3.8/site-packages/hyperkitty/management/commands/hyperkitty_import.py", line 387, in handle     importer.from_mbox(mbfile, report_name) "/opt/mailman/venv/lib/python3.8/site-packages/hyperkitty/management/commands/hyperkitty_import.py", line 212, in from_mbox     progress_marker.tick(unquote(message.get("message-id", 'n/a')))   File "/usr/lib/python3.8/email/message.py", line 471, in get     return self.policy.header_fetch_parse(k, v)   File "/usr/lib/python3.8/email/policy.py", line 163, in header_fetch_parse     return self.header_factory(name, value)   File "/usr/lib/python3.8/email/headerregistry.py", line 607, in __call__     return self[name](name, value)   File "/usr/lib/python3.8/email/headerregistry.py", line 202, in __new__     cls.parse(value, kwds)   File "/usr/lib/python3.8/email/headerregistry.py", line 535, in parse     kwds['parse_tree'] = parse_tree = cls.value_parser(value)   File "/usr/lib/python3.8/email/_header_value_parser.py", line 2126, in parse_message_id     token, value = get_msg_id(value)   File "/usr/lib/python3.8/email/_header_value_parser.py", line 2073, in get_msg_id     token, value = get_obs_local_part(value)   File "/usr/lib/python3.8/email/_header_value_parser.py", line 1516, in get_obs_local_part     if (obs_local_part[0].token_type == 'dot' or IndexError: list index out of range As a moderator I receive an email each day for "Held Unsubscriptions" for a subscriber that was unsubscribed by the Owner sometime ago (using "Mass operations"). +++++++++++++++++++++++++++++++ The listname(a)domain.com list has 1 moderation requests waiting. Held Unsubscriptions: User: bart(a)example.com Please attend to this at your earliest convenience. +++++++++++++++++++++++++++++++ There is nothing showing under "Subscription requests > Pending approval". Could anyone tell me how I can stop these email notifications? I have access to the mailman shell and the databases. Thanks, From mailman web it was able to deliver the email to outlook and gmail but when replying or confirming subcription it can't reach the mailman. This error is bounce back from outlook. Server at destination.email.com (192.10.10.10) returned '400 4.4.7 Message delayed' 1/4/2024 12:16:13 PM - Server at destination.email.com (192.10.10.10) returned '451 4.4.397 Error communicating with target host. -> 421 4.2.1 Unable to connect -> SocketTimedout: Socket error code 10060 Thanks, We use a custom plugin to do numeric thread stamping, which has been working well in the code system. However, it was discovered by Microsoft that Microsoft Outlook and OWA prioritize the Thread-Topic header over the Subject header, which results in the oddness we've experienced in MS365 clients in testing. During our tasks though a custom handler goes through during the pipeline and modifies the Subject field accordingly, adding a thread tag to it. While this is 'fragile' it does work; the only problem is that Thread-Topic doesn't get altered. Programmatically, how would we alter the Thread-Topic during the handler's processing to prepend the corresponding prefix/tag so that when the message actually goes out the door it is properly sending with the modified Thread-Topic? Thomas Does Mailman 3 have an REST API that allows list-owners/moderators to perform list-management functions without having access to the whole server/other lists etc? ie, an API that uses the same credentials as Postorious but allows mass-subscription/un-subscription/membership-export etc and changes to list settings, membership settings (mod etc) via REST or python? The documentation seems to only indicate a single one-admin-user REST API that should not even be accessible from outside? So we host a mailing list for domain X, the MX record points to us, we are domain y. If we have Dmarc set to "no dmarc mitigations" I can send a message from my email in domain Y and it goes to the list in domain x and is processed and sent out. If I set the dmarc to "replace with list address". the same message gets shunted. I included the logs below Not sure why it is trying to contact publicsuffix.org? ************* /mailman/core/var/logs/mailman.log Jan 02 20:41:50 2024 (29) No cached copy of the public suffix list found Jan 02 20:41:55 2024 (29) Uncaught runner exception: HTTPSConnectionPool(host=' publicsuffix.org ', port=443): Max retries exceeded with url: /list/public_suffix_list.dat (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x7f8b38d318a0>, 'Connection to publicsuffix.org timed out. (connect timeout=5)')) Jan 02 20:41:55 2024 (29) Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/urllib3/connection.py", line 174, in _new_conn conn = connection.create_connection( File "/usr/lib/python3.10/site-packages/urllib3/util/connection.py", line 95, in create_connection raise err File "/usr/lib/python3.10/site-packages/urllib3/util/connection.py", line 85, in create_connection sock.connect(sa) TimeoutError: timed out During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 703, in urlopen httplib_response = self._make_request( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 386, in _make_request self._validate_conn(conn) File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 1042, in _validate_conn conn.connect() File "/usr/lib/python3.10/site-packages/urllib3/connection.py", line 358, in connect self.sock = conn = self._new_conn() File "/usr/lib/python3.10/site-packages/urllib3/connection.py", line 179, in _new_conn raise ConnectTimeoutError( urllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPSConnection object at 0x7f8b38d318a0>, 'Connection to publicsuffix.org timed out. (connect timeout=5)') During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 489, in send resp = conn.urlopen( File "/usr/lib/python3.10/site-packages/urllib3/connectionpool.py", line 787, in urlopen retries = retries.increment( File "/usr/lib/python3.10/site-packages/urllib3/util/retry.py", line 592, in increment raise MaxRetryError(_pool, url, error or ResponseError(cause)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=' publicsuffix.org ', port=443): Max retries exceeded with url: /list/public_suffix_list.dat (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x7f8b38d318a0>, 'Connection to publicsuffix.org timed out. (connect timeout=5)')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/lib/python3.10/site-packages/mailman/core/runner.py", line 179, in _one_iteration self._process_one_file(msg, msgdata) File "/usr/lib/python3.10/site-packages/mailman/core/runner.py", line 272, in _process_one_file keepqueued = self._dispose(mlist, msg, msgdata) File "/usr/lib/python3.10/site-packages/mailman/runners/incoming.py", line 80, in _dispose process(mlist, msg, msgdata, start_chain) File "/usr/lib/python3.10/site-packages/mailman/core/chains.py", line 57, in process if link.rule.check(mlist, msg, msgdata): File "/usr/lib/python3.10/site-packages/mailman/rules/dmarc.py", line 316, in check if maybe_mitigate(mlist, address): File "/usr/lib/python3.10/site-packages/mailman/rules/dmarc.py", line 292, in maybe_mitigate org_dom = get_organizational_domain(from_domain) File "/usr/lib/python3.10/site-packages/mailman/rules/dmarc.py", line 142, in get_organizational_domain parse_suffix_list() File "/usr/lib/python3.10/site-packages/mailman/rules/dmarc.py", line 109, in parse_suffix_list filename = ensure_current_suffix_list() File "/usr/lib/python3.10/site-packages/mailman/rules/dmarc.py", line 77, in ensure_current_suffix_list content = get(config.dmarc.org_domain_data_url) File "/usr/lib/python3.10/site-packages/mailman/utilities/protocols.py", line 39, in get response = requests.get(url, timeout=REQUEST_TIMEOUT, **kws) File "/usr/lib/python3.10/site-packages/requests/api.py", line 73, in get return request("get", url, params=params, **kwargs) File "/usr/lib/python3.10/site-packages/requests/api.py", line 59, in request return session.request(method=method, url=url, **kwargs) File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 587, in request resp = self.send(prep, **send_kwargs) File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/usr/lib/python3.10/site-packages/requests/adapters.py", line 553, in send raise ConnectTimeout(e, request=request) requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host=' publicsuffix.org ', port=443): Max retries exceeded with url: /list/public_suffix_list.dat (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x7f8b38d318a0>, 'Connection to publicsuffix.org timed out. (connect timeout=5)')) Jan 02 20:41:55 2024 (29) SHUNTING: 1704228115.0417743+619bfacfe7e6d030991468aa2707d065418c56e5 I don't know how many people will need this, but I just realized that you can edit Django's SITE 1 and (probably, 100% untested but I'm going on the clock so want to get this done quick :-) use that. When you add your first domain, there's a link in that page (not a button, a link!) to edit the domain list. Then you can click on the link to " example.org " in the list, and edit both display name (which I assumed) and the domain name. Maybe I'm just slow, but I've been adding SITE 2 = "Whatever site <whatever.tld>" the whole time. :-) But then you have to edit the SITE = 1 statement in settings.py (which I often forget and hilarity ensues). Of course adding a web site and editing settings.py (which you have to do anyway for other variables) works too, but this seems cleaner to Steve When I try to edit any list at "postorius/lists/LISTNAME.SUBDOMAIN.DOMAIN.TLD/", I get this error. The lists are displayed correctly at "postorius/lists/". Selecting any of those lists leads to that error. First step of creating a new list is possible but I get the same error right after the creation of the new list. These lines in the mailman.log seem suspicious: Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste.lists.DOMAIN.TLD/member/USERNAME%40DOMAIN.TLD HTTP/1.1" *404* 26 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/users/fa17aa7aa1e946b6a72706b48ddbc14b/preferred_address HTTP/1.1" *404* 26 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "POST /3.1/users/fa17aa7aa1e946b6a72706b48ddbc14b/preferred_address HTTP/1.1" *404* 26 Mailman Core Version     GNU Mailman 3.2.2 (La Villa Strangiato) Mailman Core API Version     3.1 Mailman Core Python Version     3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] Postorius Version 1.3.5 Here are the full logs of this event: mailman3/web/mailman-web.log ERROR 2023-12-29 11:59:30,571 2416033 postorius Un-handled exception: HTTP Error 404: {"title": "404 Not Found"} Traceback (most recent call last):   File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 181, in _get_response     response = wrapped_callback(request, *callback_args, **callback_kwargs)   File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 70, in view     return self.dispatch(request, *args, **kwargs)   File "/usr/lib/python3/dist-packages/postorius/views/generic.py", line 74, in dispatch     return super(MailingListView, self).dispatch(request, *args, **kwargs)   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/postorius/views/list.py", line 301, in get     primary_email = set_preferred(request.user, mm_user)   File "/usr/lib/python3/dist-packages/postorius/utils.py", line 77, in set_preferred     mm_user.preferred_address = primary_email.email "/usr/lib/python3/dist-packages/mailmanclient/restobjects/user.py", line 57, in __setattr__     super(User, self).__setattr__(name, value)   File "/usr/lib/python3/dist-packages/mailmanclient/restbase/base.py", line 131, in __setattr__     return super(RESTObject, self).__setattr__(name, value) "/usr/lib/python3/dist-packages/mailmanclient/restobjects/user.py", line 145, in preferred_address     response, content = self._connection.call(url, {'email': email}) "/usr/lib/python3/dist-packages/mailmanclient/restbase/connection.py", line 160, in call     raise HTTPError(params.get('url'), response.status_code, urllib.error.HTTPError: HTTP Error 404: {"title": "404 Not Found"} WARNING 2023-12-29 11:59:30,580 2416033 django.request Not Found: /postorius/lists/testliste.lists.DOMAIN.TLD/ WARNING 2023-12-29 11:59:30,580 2416033 django.request Not Found: /postorius/lists/testliste.lists.DOMAIN.TLD/ [pid: 2416033|app: 0|req: 9/9] 2003:ca:bf1d:b000:efc2:8dfa:6fd:715f () {72 vars in 1618 bytes} [Fri Dec 29 11:59:30 2023] GET /postorius/lists/testliste.lists.DOMAIN.TLD/ => generated 6285 bytes in 466 msecs (HTTP/1.1 404) 7 headers in 227 bytes (1 switches on core 0) mailman3/mailman.log Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste.lists.DOMAIN.TLD HTTP/1.1" 200 384 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste.lists.DOMAIN.TLD/roster/owner HTTP/1.1" 200 640 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste.lists.DOMAIN.TLD/roster/moderator HTTP/1.1" 200 90 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste(a)lists.DOMAIN.TLD/config HTTP/1.1" 200 2132 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste.lists.DOMAIN.TLD/archivers HTTP/1.1" 200 61 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste(a)lists.DOMAIN.TLD/requests?request_type=subscription HTTP/1.1" 200 90 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/lists/testliste.lists.DOMAIN.TLD/member/USERNAME%40DOMAIN.TLD HTTP/1.1" 404 26 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/users/fa17aa7aa1e946b6a72706b48ddbc14b HTTP/1.1" 200 286 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/users/fa17aa7aa1e946b6a72706b48ddbc14b/preferred_address HTTP/1.1" 404 26 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "GET /3.1/addresses/USERNAME(a)DOMAIN.TLD HTTP/1.1" 200 369 Dec 29 11:59:30 2023 (6255) 127.0.0.1 - - "POST /3.1/users/fa17aa7aa1e946b6a72706b48ddbc14b/preferred_address HTTP/1.1" 404 26 Kind regards Hi Mailman Group, I noticed that the from address for list moderation notifications are coming from a certain user address. May you please help me figure out where to change this? In this example, I would like to change the From address "listadmin(a)domain.com" ================================================================ -----Original Message----- From: Admin <listadmin(a)domain.com> Sent: Thursday, December 28, 2023 12:00 AM To: dummy-list <dummy-list(a)domainx.com> Subject: The dummy-list(a)domainx.com list has 2 moderation requests waiting. The dummy-list(a)domainx.com list has 2 moderation requests waiting. Held Messages: Sender: user1(a)domain.com Subject: You missed a call | Transcription Available . Reason: The message is not from a list member Sender: user2(a)domain.com Subject: Update/Access Required Notice on Friday, September 29, 2023 Reason: The message is not from a list member Please attend to this at your earliest convenience. ================================================================= I made for a repeated time (after system update and/or system reboot) the experience,that my mailman3 installation fails to start because of permission error to write the log file. For some unknown reason, an empty file /var/og/mailman/mailman.log was apparently owned by list:list. I deleted that file and mailman3 core could now be started. The start problem i solved. I asked myself and you, how can this happen for many times? Has anyone an idea what the reason could be? There is still a user list from a previous mailman3 installation, where I assigned the (former user for mailman2), but I suppose the problem is a different problem than a simple user definition. The other log files are always correctly assigned to mailman:mailman <pre> -rw-rw---- 1 mailman mailman 7487 Dec 22 18:21 bounce.log 0 -rw-rw---- 1 mailman mailman 0 Oct 8 22:46 debug.log 4 -rw-rw---- 1 mailman mailman 1909 Dec 24 09:10 mailman.log 57448 -rw-rw---- 1 mailman mailman 58820418 Dec 24 09:00 mailman.log.1 108 -rw-rw---- 1 mailman mailman 108407 Oct 24 12:18 mailman.log.2.gz 0 -rw-rw---- 1 mailman mailman 0 Oct 8 22:46 plugins.log 232 -rw-rw---- 1 mailman mailman 229585 Dec 24 09:10 smtp.log 4 drwxr-xr-x 2 mailman mailman 4096 Oct 20 00:00 <font color="#729FCF"><b>web</b></font> is there a wordpress plugin/widget allowing visitors to subscribe to a mailman3 hosted mailing list? Else, what is the most convenient way? Sure, I could just link to the maiman site, but since joining a list is as easy as sending mail to LISTNAME-join, there should be a simple way to impement this. What is the best practice? Cheers, Johannes Wheras my older lists handled these format apparently correctly, I now cannot add any more "Givenname Familyname" <mailaddress> ; or Givenname Familyname <mailaddress> In any of these cases, only the part <mailaddress> is added. Is this strange behaviour know? What can be done to have the correct function back to working again? Django-allauth seems to just be a basket of woes, but I figured I'd toss this one out there to see if anyone has seen similar: I have Google and Facebook social logins configured. They work fine for me. They work fine for most people. Huzzah! For some people, even when they use different browsers/OSes/etc, attempting a social login generates an error. On the callback, they get "Server error" "An error occurred while processing your request." These errors are generated to me as the admin, and in the elided environment section SITE_ID is indeed 0, but I'm at a loss to imagine why this happens only sometimes! Any pointers for investigation? --Jered Internal Server Error: /accounts/google/login/callback/ ImproperlyConfigured at /accounts/google/login/callback/ 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. [...] Traceback (most recent call last): File "/opt/app-root/src/.local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 56, in inner response = get_response(request) File "/opt/app-root/src/.local/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/opt/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/providers/oauth2/views.py", line 84, in view return self.dispatch(request, *args, **kwargs) File "/opt/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/providers/oauth2/views.py", line 162, in dispatch return complete_social_login(request, login) File "/opt/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/helpers.py", line 197, in complete_social_login sociallogin.lookup() File "/opt/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/models.py", line 282, in lookup provider_id = self.account.get_provider().id File "/opt/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/models.py", line 141, in get_provider provider = self._provider = adapter.get_provider( File "/opt/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/adapter.py", line 204, in get_provider app = self.get_app(request, provider=provider) File "/opt/app-root/src/.local/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/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/adapter.py", line 231, in list_apps db_apps = SocialApp.objects.on_site(request) File "/opt/app-root/src/.local/lib/python3.9/site-packages/allauth/socialaccount/models.py", line 27, in on_site site = get_current_site(request) File "/opt/app-root/src/.local/lib/python3.9/site-packages/django/contrib/sites/shortcuts.py", line 16, in get_current_site return Site.objects.get_current(request) File "/opt/app-root/src/.local/lib/python3.9/site-packages/django/contrib/sites/models.py", line 63, in get_current raise ImproperlyConfigured( Exception Type: ImproperlyConfigured at /accounts/google/login/callback/ Exception Value: 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. Raised during: allauth.socialaccount.providers.oauth2.views.view [... internal state elided ...] Now my finished installation is generating a lot of errors and filling up /var/log/syslog 1GB in a few hours. The errors are like this one: Dec 21 08:42:17 new-server mailman-web[981806]: --- Logging error --- Dec 21 08:42:17 new-server mailman-web[981806]: Traceback (most recent call last): Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 356, in pusher Dec 21 08:42:17 new-server mailman-web[981806]: task = SignedPackage.loads(task[1]) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/signing.py", line 25, in loads Dec 21 08:42:17 new-server mailman-web[981806]: return signing.loads( Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py", line 35, in loads Dec 21 08:42:17 new-server mailman-web[981806]: base64d = force_bytes(TimestampSigner(key, salt=salt).unsign(s, max_age=max_age)) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py", line 70, in unsign Dec 21 08:42:17 new-server mailman-web[981806]: result = super(TimestampSigner, self).unsign(value) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/core_signing.py", line 55, in unsign Dec 21 08:42:17 new-server mailman-web[981806]: raise BadSignature('Signature "%s" does not match' % sig) Dec 21 08:42:17 new-server mailman-web[981806]: django.core.signing.BadSignature: Signature "ofwl5GkP2_1nDnfM8-vAjAwl_Ss" does not match Dec 21 08:42:17 new-server mailman-web[981806]: During handling of the above exception, another exception occurred: Dec 21 08:42:17 new-server mailman-web[981806]: Traceback (most recent call last): Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/logging/__init__.py", line 1100, in emit Dec 21 08:42:17 new-server mailman-web[981806]: msg = self.format(record) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/logging/__init__.py", line 943, in format Dec 21 08:42:17 new-server mailman-web[981806]: return fmt.format(record) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/logging/__init__.py", line 678, in format Dec 21 08:42:17 new-server mailman-web[981806]: record.message = record.getMessage() Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/logging/__init__.py", line 368, in getMessage Dec 21 08:42:17 new-server mailman-web[981806]: msg = msg % self.args Dec 21 08:42:17 new-server mailman-web[981806]: TypeError: not all arguments converted during string formatting Dec 21 08:42:17 new-server mailman-web[981806]: Call stack: Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/bin/mailman-web", line 8, in <module> Dec 21 08:42:17 new-server mailman-web[981806]: sys.exit(main()) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py", line 90, in main Dec 21 08:42:17 new-server mailman-web[981806]: execute_from_command_line(sys.argv) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line Dec 21 08:42:17 new-server mailman-web[981806]: utility.execute() Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py", line 440, in execute Dec 21 08:42:17 new-server mailman-web[981806]: self.fetch_command(subcommand).run_from_argv(self.argv) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py", line 407, in run_from_argv Dec 21 08:42:17 new-server mailman-web[981806]: self.execute(*args, **cmd_options) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py", line 453, in execute Dec 21 08:42:17 new-server mailman-web[981806]: output = self.handle(*args, **options) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/management/commands/qcluster.py", line 22, in handle Dec 21 08:42:17 new-server mailman-web[981806]: q.start() Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 78, in start Dec 21 08:42:17 new-server mailman-web[981806]: self.sentinel.start() Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/process.py", line 121, in start Dec 21 08:42:17 new-server mailman-web[981806]: self._popen = self._Popen(self) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/context.py", line 224, in _Popen Dec 21 08:42:17 new-server mailman-web[981806]: return _default_context.get_context().Process._Popen(process_obj) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/context.py", line 281, in _Popen Dec 21 08:42:17 new-server mailman-web[981806]: return Popen(process_obj) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 19, in __init__ Dec 21 08:42:17 new-server mailman-web[981806]: self._launch(process_obj) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 71, in _launch Dec 21 08:42:17 new-server mailman-web[981806]: code = process_obj._bootstrap(parent_sentinel=child_r) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap Dec 21 08:42:17 new-server mailman-web[981806]: self.run() Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run Dec 21 08:42:17 new-server mailman-web[981806]: self._target(*self._args, **self._kwargs) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 168, in __init__ Dec 21 08:42:17 new-server mailman-web[981806]: self.start() Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 172, in start Dec 21 08:42:17 new-server mailman-web[981806]: self.spawn_cluster() Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 248, in spawn_cluster Dec 21 08:42:17 new-server mailman-web[981806]: self.pusher = self.spawn_pusher() Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 201, in spawn_pusher Dec 21 08:42:17 new-server mailman-web[981806]: return self.spawn_process(pusher, self.task_queue, self.event_out, self.broker) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 197, in spawn_process Dec 21 08:42:17 new-server mailman-web[981806]: p.start() Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/process.py", line 121, in start Dec 21 08:42:17 new-server mailman-web[981806]: self._popen = self._Popen(self) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/context.py", line 224, in _Popen Dec 21 08:42:17 new-server mailman-web[981806]: return _default_context.get_context().Process._Popen(process_obj) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/context.py", line 281, in _Popen Dec 21 08:42:17 new-server mailman-web[981806]: return Popen(process_obj) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 19, in __init__ Dec 21 08:42:17 new-server mailman-web[981806]: self._launch(process_obj) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/popen_fork.py", line 71, in _launch Dec 21 08:42:17 new-server mailman-web[981806]: code = process_obj._bootstrap(parent_sentinel=child_r) Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/process.py", line 314, in _bootstrap Dec 21 08:42:17 new-server mailman-web[981806]: self.run() Dec 21 08:42:17 new-server mailman-web[981806]: File "/usr/lib/python3.10/multiprocessing/process.py", line 108, in run Dec 21 08:42:17 new-server mailman-web[981806]: self._target(*self._args, **self._kwargs) Dec 21 08:42:17 new-server mailman-web[981806]: File "/local/mailman/venv/lib/python3.10/site-packages/django_q/cluster.py", line 358, in pusher Dec 21 08:42:17 new-server mailman-web[981806]: logger.error(e, traceback.format_exc()) Dec 21 08:42:17 new-server mailman-web[981806]: Message: BadSignature('Signature "ofwl5GkP2_1nDnfM8-vAjAwl_Ss" does not match') Dec 21 08:42:17 new-server mailman-web[981806]: 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/site-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=salt).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 "ofwl5GkP2_1nDnfM8-vAjAwl_Ss" does not match\n',) So any clue how to fix this? Best Regards, Helio Loureiro https://helio.loureiro.eng.br https://github.com/helioloureiro https://mastodon.social/@helioloureiro I'm noticing that a lot of 'spammers' are registering themself via postorius. They do not send emails, neither they are in any list, so they are not technically spammers, but they are a lot [maybe around 500 subscribed in the last month]. While waiting for a captcha system[0] for the main distribution, I'm looking for a rapid/easy way to delete this accounts; since they are not 'verified', I was wondering if I can locate this information in the mailman3 database or if there is some easier way to delete all unverified accounts. Do some of you any help or indications? I'm using GNU Mailman 3.3.9 (Tom Sawyer). Thanks, noemi for pangea.org https://lists.mailman3.org/archives/list/[email protected]/thread/… Is it possible to upgrade from Debian 11 to Debian 12 with Mailman3 installed on Debian 11? I specify that I want to stay in the Debian repositories, not a "hand" installation of MM3. I tested on a specific server. It was long and tedious but it seemed to me that it was working. In fact everything seems to work except the archive management :-( Here is the procedure followed: Stopping MM services Backup of the database (PostgreSQL) and the base MM directory Switch server from Debian 11 to Debian 12 and restart migrate the database from PG 113 to PG 15 (pg_upgradecluster 13 does this very well) Modify the file /etc/mailman3/mailman.cfg with a URL reference "postgresql://" instead of "postgres://" (see https://lists.mailman3.org/archives/list/ mailman-users(a)mailman3.org/thread/CU6YU44V4WLRJI3WJH2VBWO2HCUF4YEA/) update MM3 databases with "mailman-web migrate" restart MM3 and MM3-web With that MM3 works but not the archiving management! Note that there are no real error messages in the logs… In fact when we go to a list archive, we have pretty waiting wheels... infinite :-( The only reference in mailman3-web.log: [pid: 1429|app: 0|req: 12/12] NNN.NNN.NNN.NNN () {68 vars in 1445 bytes} [Mon Dec 18 16:35:56 2023] GET /hyperkitty/list/admin@ teledetection.fr/ => generated 37443 bytes in 37 msecs (HTTP/1.1 200) 7 headers in 221 bytes (1 switches on core 1) If you have any solution... Thank you in advance, have a good day and happy Christmas Pierre Malard Responsable architectures système CDS DINAMIS/THEIA Montpellier IRD - UMR Espace-Dev - UAR CPST - IR Data-Terra Maison de la Télédétection 500 rue Jean-François Breton 34093 Montpellier Cx 5 France « Il n'y a pas de Paradis, mais il faut tâcher de mériter qu'il y en ait un ! » Jules Renard (1864-1910) - Journal, 10 septembre 1903 |\ _,,,---,,_ /,`.-'`' -. ;-;;,_ |,4- ) )-,_. ,\ ( `'-' '---''(_/--' `-'\_) πr perl -e '$_=q#: 3|\ 5_,3-3,2_: 3/,`.'"'"'`'"'"' 5-. ;-;;,_: |,A- ) )-,_. ,\ ( `'"'"'-'"'"': '"'"'-3'"'"'2(_/--'"'"' `-'"'"'\_): 24πr::#;y#:#\n#;s#(\D)(\d+)#$1x$2#ge;print' - --> Ce message n’engage que son auteur <-- ___________________________________________ Mailman's content filtering has removed the following MIME parts from this message. Replaced multipart/alternative part with first alternative. I'm trying to migrate several lists from an ubuntu 18.04, where it was installed via packages (mailman 3.1.1), to ubuntu 22.04. Since ubuntu 22.04 is broken in terms of packages for mailman3, I'm trying to install manually following the site instructions. I just dumped the mysql DB we have nowadays, mailman3 and mailman3-web, and loaded in the new server. I also copied the configurations and fixed the paths since now mailman3 lives on /local/mailman and it uses venv. I also copied /var/lib/mailman3 into /local/mailman/var/lib/mailman3. mailman seems to accept pretty much of the work done. (venv) mailman@new-server ~ (v3.3.9)> mailman info GNU Mailman 3.3.9 (Tom Sawyer) Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] config file: /etc/mailman3/mailman.cfg db url: mysql+pymysql://mailman3:********@localhost/mailman3?charset=utf8mb4&use_unicode=1 devmode: DISABLED REST root url: http://localhost:8001/3.1/ REST credentials: restadmin:*********** Even configuration is working fine. (venv) mailman@new-server ~ (v3.3.9)> mailman conf [ARC] authserv_id: [ARC] dkim: yes [ARC] dmarc: yes [ARC] domain: [ARC] enabled: no [ARC] privkey: [ARC] selector: [ - a lot of stuff - ] [shell] banner: Welcome to the GNU Mailman shell [shell] history_file: [shell] prompt: >>> [shell] use_ipython: no [styles] default: legacy-default [webservice] admin_pass: ************************* [webservice] admin_user: restadmin [webservice] api_version: 3.1 [webservice] configuration: python:mailman.config.gunicorn [webservice] hostname: localhost [webservice] port: 8001 [webservice] show_tracebacks: yes [webservice] use_https: no [webservice] workers: 2 But it is failing to start displaying the domain name from the previous machine. (venv) mailman@new-server ~ (v3.3.9)> mailman start Starting Mailman's master runner Generating MTA alias maps Traceback (most recent call last): "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1969, in _exec_single_context self.dialect.do_execute( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 922, in do_execute cursor.execute(statement, parameters) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 558, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 822, in _read_query_result result.read() "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1200, in read first_packet = self.connection._read_packet() "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 772, in _read_packet packet.raise_for_error() "/local/mailman/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error err.raise_mysql_exception(self._data) File "/local/mailman/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception raise errorclass(errno, errval) pymysql.err.OperationalError: (1054, "Unknown column 'domain.alias_domain' in 'field list'") The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/local/mailman/venv/bin/mailman", line 33, in <module> sys.exit(load_entry_point('mailman==3.3.9', 'console_scripts', 'mailman')()) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1157, in __call__ return self.main(*args, **kwargs) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1078, in main rv = self.invoke(ctx) "/local/mailman/venv/lib/python3.10/site-packages/mailman/bin/mailman.py", line 69, in invoke return super().invoke(ctx) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1688, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 1434, in invoke return ctx.invoke(self.callback, **ctx.params) File "/local/mailman/venv/lib/python3.10/site-packages/click/core.py", line 783, in invoke return __callback(*args, **kwargs) "/local/mailman/venv/lib/python3.10/site-packages/click/decorators.py", line 33, in new_func return f(get_current_context(), *args, **kwargs) "/local/mailman/venv/lib/python3.10/site-packages/mailman/commands/cli_control.py", line 109, in start call_name(config.mta.incoming).regenerate() "/local/mailman/venv/lib/python3.10/site-packages/mailman/mta/postfix.py", line 109, in regenerate self._generate_lmtp_file(fp) "/local/mailman/venv/lib/python3.10/site-packages/mailman/mta/postfix.py", line 149, in _generate_lmtp_file mlist = _FakeList(list_name, mail_host) "/local/mailman/venv/lib/python3.10/site-packages/mailman/mta/postfix.py", line 75, in __init__ self.mail_host = _get_alias_domain(mail_host) "/local/mailman/venv/lib/python3.10/site-packages/mailman/mta/postfix.py", line 63, in _get_alias_domain d = domain_manager.get(domain) "/local/mailman/venv/lib/python3.10/site-packages/mailman/database/transaction.py", line 106, in wrapper return function(args[0], config.db.store, *args[1:], **kws) "/local/mailman/venv/lib/python3.10/site-packages/mailman/model/domain.py", line 162, in get if domains.count() < 1: "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 3132, in count self._legacy_from_self(col).enable_eagerloads(False).scalar() "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2825, in scalar ret = self.one() "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2798, in one return self._iter().one() # type: ignore "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2847, in _iter result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2308, in execute return self._execute_internal( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2190, in _execute_internal result: Result[Any] = compile_state_cls.orm_execute_statement( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 293, in orm_execute_statement result = conn.execute( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1416, in execute return meth( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 516, in _execute_on_connection return connection._execute_clauseelement( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1639, in _execute_clauseelement ret = self._execute_context( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1848, in _execute_context return self._exec_single_context( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1988, in _exec_single_context self._handle_dbapi_exception( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2343, in _handle_dbapi_exception raise sqlalchemy_exception.with_traceback(exc_info[2]) from e "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1969, in _exec_single_context self.dialect.do_execute( "/local/mailman/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 922, in do_execute cursor.execute(statement, parameters) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 153, in execute result = self._query(query) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/cursors.py", line 322, in _query conn.query(q) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 558, in query self._affected_rows = self._read_query_result(unbuffered=unbuffered) "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 822, in _read_query_result result.read() "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 1200, in read first_packet = self.connection._read_packet() "/local/mailman/venv/lib/python3.10/site-packages/pymysql/connections.py", line 772, in _read_packet packet.raise_for_error() "/local/mailman/venv/lib/python3.10/site-packages/pymysql/protocol.py", line 221, in raise_for_error err.raise_mysql_exception(self._data) File "/local/mailman/venv/lib/python3.10/site-packages/pymysql/err.py", line 143, in raise_mysql_exception raise errorclass(errno, errval) sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1054, "Unknown column 'domain.alias_domain' in 'field list'") [SQL: SELECT count(*) AS count_1 FROM (SELECT domain.id AS domain_id, domain.mail_host AS domain_mail_host, domain.description AS domain_description, domain.alias_domain AS domain_alias_domain FROM domain WHERE domain.mail_host = %(mail_host_1)s) AS anon_1] [parameters: {'mail_host_1': ' old-server.mydomain.com '}] (Background on this error at: https://sqlalche.me/e/20/e3q8 ) But I can see some processes are starting. (venv) mailman@new-server ~ (v3.3.9)> ps auxwww | grep "[p]ython" | grep mailman mailman 1411605 0.0 0.0 32180 22212 ? Ss 10:44 0:00 /local/mailman/venv/bin/python /local/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf mailman_web.wsgi:application mailman 1411607 0.0 0.0 44244 32412 ? S 10:44 0:00 /local/mailman/venv/bin/python /local/mailman/venv/bin/gunicorn -c /etc/mailman3/gunicorn.conf mailman_web.wsgi:application mailman 1411671 1.0 0.2 98584 83004 ? Ss 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/master -C /etc/mailman3/mailman.cfg mailman 1411681 1.0 0.2 98392 82504 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=archive:0:1 mailman 1411682 97.7 10.1 3396160 3346868 ? R 10:45 1:58 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=bounces:0:1 mailman 1411683 1.0 0.2 98588 82816 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=command:0:1 mailman 1411684 1.0 0.2 98580 82904 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=in:0:1 mailman 1411685 1.0 0.2 172312 82772 ? Sl 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=lmtp:0:1 mailman 1411686 1.1 0.2 98588 82652 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=nntp:0:1 mailman 1411687 1.1 0.2 98608 83016 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=out:0:1 mailman 1411688 1.0 0.2 98584 82936 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=pipeline:0:1 mailman 1411689 1.1 0.2 107040 90972 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1 mailman 1411690 1.0 0.2 98592 82784 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=retry:0:1 mailman 1411691 41.3 0.5 187380 171012 ? S 10:45 0:50 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=task:0:1 mailman 1411692 1.0 0.2 98472 83028 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=virgin:0:1 mailman 1411693 1.0 0.2 98448 82608 ? S 10:45 0:01 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=digest:0:1 mailman 1411705 0.0 0.2 107040 75968 ? S 10:45 0:00 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1 mailman 1411709 0.0 0.2 107040 75968 ? S 10:45 0:00 /local/mailman/venv/bin/python /local/mailman/venv/bin/runner -C /etc/mailman3/mailman.cfg --runner=rest:0:1 mailman 1413629 0.0 0.0 17644 8812 ? Rs 10:47 0:00 /local/mailman/venv/bin/python /local/mailman/venv/bin/mailman start Best Regards, Helio Loureiro http://helio.loureiro.eng.br https://github.com/helioloureiro Hi all, Someone sent a spam message to the list owner (me) of one of my lists. Then I got booted from the list. The scenario in more detail: The list server forwards the message to me, as I’m the list owner. This message is sent from <list>- <mailto:[email protected]>bounces+hansen=rc.org(a)list.rc.org <mailto:[email protected]> to hansen(a)rc.org <mailto:[email protected]>. My service provider’s spam filter rejects the spam (correctly) in a message and informs the list server. The list server sends a message to <list>- <mailto:[email protected]>bounces+hansen=rc.org(a)list.rc.org <mailto:[email protected]> (the fake sender) saying that the message to hansen(a)rc.org <mailto:[email protected]> (the recipient) could not be delivered because it was spam. The list server also blames hansen(a)rc.org <mailto:[email protected]> (me) for the bounce and increments my bounce score, which, to me, is unfair. So I wonder: Is the Mailman host at list.rc.org < http://list.rc.org/ > at fault for not catching the spam before it reaches the list server? (One could argue that) Is my rc.org < http://rc.org/ > service provider at fault for sending the bounce message to the server instead of the to the original sender? Is Mailman at fault for thinking that the bounce message was caused by a list message FROM me, instead of a bounced message TO the list owner? Yours, Allan Installed MM3 on Debian 11, followed the steps from the MM3 website. I'm running into issues with Postfix headers. I can only get postfix to send emails to/from the list if I set the sender_canonical_maps in the main.cf file. I don't want to have to use that as I'd like the recipient to receive the following in their email header: <Subscriber> via <List Name> <FROM:LIST@DOMAIN>. But if I do the sender_canonical_maps, then the <FROM:LIST@DOMAIN> and all email headers are overwritten by the maps email address. When I check the /var/log/mail.log without the sender_canonical_maps setting enabled, then the initial email sender is either rejected because 'Recipient address rejected: User unknown in virtual alias table' or '550-From header sender domain not verified ( example.com ), 550-On your sending > Verified senders page 550 verify the sender domain or email to be allowed to send' I have smtp_sasl_passwd_maps disabled, since I'm trying a different SMTP relay Here is my main.cf setup # See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on # fresh installs. compatibility_level = 2 # Mailman related settings #owner_request_special = no transport_maps = hash:/var/lib/mailman3/data/postfix_lmtp local_recipient_maps = hash:/var/lib/mailman3/data/postfix_lmtp relay_domains = hash:/var/lib/mailman3/data/postfix_domains #relay_domains = ${{$compatibility_level} < {2} ? {$mydestination} : {}} hash:/var/lib/mailman3/data/postfix_domains # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_security_level=may #smtp_tls_CApath=/etc/postfix/o365_smtp_cert.pem smtp_tls_security_level=may smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination myhostname = localhost alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain relayhost = [mail.smtp2go.com]:587 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all inet_protocols = ipv4 sender_canonical_maps = regexp:/etc/postfix/sender_canonical smtp_use_tls = yes smtp_always_send_ehlo = yes unknown_local_recipient_reject_code = 550 always_add_missing_headers = yes #smtp_sasl_auth_enable = yes #smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd smtp_sasl_security_options = noanonymous header_size_limit = 409600 default_destination_recipient_limit = 30 default_destination_concurrency_limit = 15 header_checks = regexp:/etc/postfix/header_checks mynetworks = 127.0.0.0/8 [::fff:127.0.0.0]/104 [::1]/128 In my environment, I am trying to enable notifications on a thread just like this one. When someone responds, I want the list to get a notification and or the person that is getting responded to. Any thoughts? Thank you! I am running MM3 and have a list that has users from different organizations and email domains. So let's say I am orga.com and hosting mailman Bill is borg.com Cindy is mew.com When Bill sends a message to my MM3 list it gets sent out, However, cindy's email system rejects it cause it sees the message is sent from Bill(a)borg.com but it came from my MM3 server which is under orga.com , so it rejects it. I have been told more organizations are checking this and starting to reject these types of messages and also we could get blacklisted because it looks like we are spoofing. The only solutions I can think of are: -Have the receiving organizations whitelist my server, but that is probably not feasible. -set the list to anonymous..... But then you don't know who sent the email. Anyway around this? or is there a way to have the sender's email included in the list message but keep the list anonymous? or am I missing something else? and if I send amessage from my organaxztion to MM# it will go out to the peopl n the list, and if and some of those people are at other organizations. When the recive the email, sometoimes their mail system reject it with a DMAR message. I have been told thisis beacue the other organazatione dmeail system sees I snet the message When using a social login button, there is a completely unstyled page as an interstitial before login. I copied the upstream allauth/templates/socialaccount/login.html and changed the first line from: {% extends "socialaccount/base_entrance.html" %} {% extends "django_mailman3/profile/base.html" %} This seems to work properly and look correct. Is there a reason not to PR this? --Jered I've tested mailman3 and now installed it on productive server. The customer complains that the translation to German is incomplete on the productive server while it was complete on the test server. I can't find a way to confirm this because I only see the English frontend of mailman3-web and I don't know how to switch language in the frontend (I have my OS set to English). Kind regards during one of our upgrades to 3.3.x we set verp_probes: yes according to upgrade notes[1]. However it looks like this disabled bounce handling completely. Howto verify (MM 3.3.9): verp_probes: yes verp_delivery_interval: 1 restart mailman3 create test-list add an undeliverable recipient to the list that is known to bounce. send 6 mails to list. see, that all the bounce-messages are received by mailman according to postfix log[2] check bounce.log - no entry. get bounce_score from API[3] - shows bounce_score 0. Can anyone confirm? Any help is greatly appreciated. Thank you. Stefan [1] https://docs.mailman3.org/en/latest/upgrade-3.2.html [2] from=<>, size=8565, nrcpt=1 (queue active) ... to=<v-test-bounces+undeliverable-recipient=realdomain.tld(a)lists.lists.tld>, relay=127.0.0.1[127.0.0.1]:8024 status=sent [3] curl -s -q --user a:b http://localhost:8001/3.1/members/find?subscriber=undeliverable-recipient@r… We use a multi-hop SMTP system to go from the inside of our network out to the Internet at the domain test.lists.example.com . The setup is this way for ingress: {EXTERNAL} -> MS365 (relay/antispam) -> MS On-Prem (via 365 Connector) -> Mailman for delivery to listserv Egress is this: Mailman -> Postfix SMTP Relay (smtpproxy) -> INTERNET When a message is sent an invalid list (we'll call it invalid(a)test.lists.example.com) we end up with a nasty side effect in the system.  The "no such recipient" response gets sent to the smtpproxy machine and then *it gets redelivered back to Mailman* as a redelivery as if it isn't accepting a permanent-failure condition code. This results in a nasty mail loop that results with a "too many hops" error that doesn't state "invalid recipient" and I have no idea why this is the case. Can anyone provide any insight into how to prevent this type of routing loop caused by the egress of messages? Thomas # Include alternate Postorius and HyperKitty URLs. path('postorius/', include('postorius.urls')), path('hyperkitty/', include('hyperkitty.urls')), It appears that these paths override the originals (/mailman3 & /archive). I’m using apache and have had to add ProxyPass lines for these new alternate URLs, as /mailman3 and /archive don’t appear to be presented anymore by mailman-web. All the links at the top (Postorious, lists, domains, bans, system info, users, and archives) – all have /postorius or /hyperkitty as the start of their URLs. If I make a copy of that urls.py in /etc/mailman3 and point to it with ROOT_URLCONF – and comment out those alternate lines, the links go back to the way they were (/mailman3 and /archives). Or, as I mentioned, I can add the ProxyPass lines for /postorius and /hyperkitty to apache. One way or another, it doesn’t seem to be behaving as an alternate. Or have I overlooked something? Thank you Tom Lieuallen Mailman3 on my system is installed in virtualenv. Each month I get the following error message. This error does not seem to have a serious impact on the functioning of mailman, still, what does it mean and how do I get rid of it? Thanks for any hints! Johannes -------- Weitergeleitete Nachricht -------- Betreff: Cron <mailman@*** /opt/mailman/venv/bin/mailman-web runjobs monthly Datum: Fri, 1 Dec 2023 05:56:40 +0100 (CET) Von: Cron Daemon <root(a)mail.rooot.de> An: mailman@*** ERROR OCCURED IN JOB: update_and_clean_index (APP: hyperkitty) Traceback (most recent call last): "/opt/mailman/venv/lib/python3.10/site-packages/django_extensions/management/commands/runjobs.py", line 40, in runjobs job().execute() "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/jobs/update_and_clean_index.py", line 37, in execute run_with_lock(update_index, remove=True) "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/lib/utils.py", line 177, in run_with_lock with lock: "/opt/mailman/venv/lib/python3.10/site-packages/flufl/lock/_lockfile.py", line 470, in __exit__ self.unlock() "/opt/mailman/venv/lib/python3.10/site-packages/flufl/lock/_lockfile.py", line 420, in unlock raise NotLockedError('Already unlocked') flufl.lock._lockfile.NotLockedError: Already unlocked I know this may not be the right place to ask. But, just in case someone has any experience using the b4 tool ( https://github.com/mricon/b4 ) with the Mailman3 archives? Any idea, how to configure this tool to receive patch series from a mailman archive list? This tool is mainly used for the following purposes: - Retrieve patch series from a public mailing list (e.g. lore.kernel.org ) - Compare patch series - Apply patch series to the git repository - Retrieve code-review trailers Kind regards, Prasanth Nair have anybody successful setup nextcloud auth provider for postorius? I have done configured the OAuth 2.0-Client in nextcloud/index.php/settings/admin/security. I have add the nexcloud as social application in mailman3/admin/socialaccount/socialapp/. If i try to login via nexcloud, postorius redirect me to the nextcloud, where i successful login, and redirected to postorius But i'm not logged in postorius. what I'm missing? Have anybody a howto? Thanks Hi Folks, Does anyone have a recipe for adding captcha or similar to stop bot accounts signing up with Postorius? We're seeing a heap of fake signups resulting in confirmation emails going to people who haven't signed up, with user names like 'CAOXpYhPFPBFr' -- I'd like to make it just a little harder for bots to sign up. Too many confirmation emails going to non-existent email addresses reduces our mail reputation, and increases the likelihood that legit email is flagged as spam. Peter C Hi Admin, Any idea on this error? It happen when you wrote a tread it send the mail but not save on the archive. Nov 28 20:34:51 2023 (8407) Connection to HyperKitty failed: ('Connection aborted.', OSError(0, 'Error')) Nov 28 20:34:51 2023 (8407) Connection to HyperKitty failed: ('Connection aborted.', OSError(0, 'Error')) Nov 28 20:34:51 2023 (8406) Connection to HyperKitty failed: ('Connection aborted.', OSError(0, 'Error')) Nov 28 20:34:51 2023 (8400) Connection to HyperKitty failed: ('Connection aborted.', OSError(0, 'Error')) Nov 28 20:34:51 2023 (8400) Could not archive the message with id <168853565119.17959.11384406081068301715(a)email1.example.com> Nov 28 20:34:51 2023 (8400) archiving failed, re-queuing (mailing-list testmaillist.example.com , message <168853565119.17959.11384406081068301715(a)email1.example.com>) Nov 28 20:34:51 2023 (8400) Exception in the HyperKitty archiver: ('Connection aborted.', OSError(0, 'Error')) Nov 28 20:34:51 2023 (8400) Traceback (most recent call last): File "/opt/mailman/venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 710, in urlopen chunked=chunked, File "/opt/mailman/venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 386, in _make_request self._validate_conn(conn) File "/opt/mailman/venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 1042, in _validate_conn conn.connect() File "/opt/mailman/venv/lib64/python3.6/site-packages/urllib3/connection.py", line 429, in connect tls_in_tls=tls_in_tls, File "/opt/mailman/venv/lib64/python3.6/site-packages/urllib3/util/ssl_.py", line 450, in ssl_wrap_socket sock, context, tls_in_tls, server_hostname=server_hostname File "/opt/mailman/venv/lib64/python3.6/site-packages/urllib3/util/ssl_.py", line 493, in _ssl_wrap_socket_impl return ssl_context.wrap_socket(sock, server_hostname=server_hostname) File "/usr/lib64/python3.6/ssl.py", line 365, in wrap_socket _context=self, _session=session) File "/usr/lib64/python3.6/ssl.py", line 776, in __init__ self.do_handshake() File "/usr/lib64/python3.6/ssl.py", line 1036, in do_handshake self._sslobj.do_handshake() File "/usr/lib64/python3.6/ssl.py", line 648, in do_handshake self._sslobj.do_handshake() OSError: [Errno 0] Error > Just two more answers please -:) > Can I use the sample apache.conf in example_project in my webserver virtual host...?? See this thread for the apache configuration: https://lists.mailman3.org/archives/list/[email protected]/thread/… You'd need to adjust the paths and SSL configuration. > And what should be the configuration details to be given in uwsgi server...?? http://docs.mailman3.org/en/latest/prodsetup.html#setting-up-a-wsgi-server > Regards > Sandeep > On Sat, Aug 31, 2019 at 10:25 PM Abhilash Raj <maxking(a)asynchronous.in> wrote: >> On Sat, Aug 31, 2019, at 8:49 AM, sandeep kumar wrote: >>> Hi Abhilash >>> Thanks for your reply. -:) >>> We are using apache httpd as webserver to redirect. >>> the proxy pass in webserver is >>> ProxyPass / http://localhost:8000 >>> ReverseProxyPass / http://localhost:8000 >> Can you put `base_url: http://localhost:8000/hyperkitty` in your mailman-hyperkitty.cfg and see that it works? :) >> This should not try any funny SSL redirection. >>> I don't have idea of deploying this in production, so I just went on searching and I found wsgi (say uwsgi) is required to send the requests from webserver to mailman. Correct me if I am wrong. >>> I have few queries listed below. Please reply to them. >>> Should I use the wsgi.py present in the directory of mailman-suite ...?? >> Yes, that is the one which is supposed to be used. >>> What should be the ProxyPass ..?? Where should the first hit go from webserver ---> uwsgi ---> ?? >> uwsgi is web server running Mailman's web componenet. It doesn't need to hit anything. You can restart it directly when you want to restart Mailman's web component, you don't need to do anything to your web server (httpd) for this. >>> Can we run "python manage.py runserver" every time to start mailman suite..?? Can we make mailman-suite start/stop just by restarting the HTTPD..?? >> No, use a wsgi server, like uwsgi or gunicorn to run mailman-suote. `python manage.runserver` is a command used during development shouldn't be used at all in prod. >>> What should be the entry in Hyperkitty.cfg file after all the above steps..?? I mean at the end >>> Please reply to the above queries. Thanks for your help >>> Regards >>> Sandeep >>> On Sat, Aug 31, 2019 at 8:45 PM Abhilash Raj <maxking(a)asynchronous.in> wrote: >>>> On Sat, Aug 31, 2019, at 1:36 AM, sandeep kumar wrote: >>>> > Hi Team >>>> > Iam seeing following errors while mailman is trying to archive in >>>> > mailman.log >>>> > This is my base URL in mailman-hyperkitty.cfg >>>> > base_url: http://localhost/hyperkitty >>>> Are you sure this is the URL? this is http and Mailman shouldn't try to connect to this using HTTPS. >>>> Is your web server configured to redirect all HTTP traffic to HTTPS? If that is the case, then it is going to fail. >>>> Which wsgi server are you using? uwsgi? >>>> Can you also show your ProxyPass configuration? >>>> > *During handling of the above exception, another exception >>>> > occurred:Traceback (most recent call last): File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/adapters.py", >>>> > line 449, in send timeout=timeout File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/urllib3-1.24.1-py3.6.egg/urllib3/connectionpool.py", >>>> > line 638, in urlopen _stacktrace=sys.exc_info()[2]) File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/urllib3-1.24.1-py3.6.egg/urllib3/util/retry.py", >>>> > line 398, in increment raise MaxRetryError(_pool, url, error or >>>> > ResponseError(cause))urllib3.exceptions.MaxRetryError: >>>> > HTTPSConnectionPool(host=' domain.com < http://domain.com >', port=443): >>>> > retries exceeded with url: >>>> > /hyperkitty/api/mailman/archive?key=SecretArchiverAPIKey (Caused by >>>> > SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate >>>> > verify >>>> > failed (_ssl.c:841)'),))During handling of the above exception, another >>>> > exception occurred:Traceback (most recent call last): File >>>> > "/var/lib/mailman/mailman-hyperkitty/mailman_hyperkitty/__init__.py", >>>> > 154, in _archive_message url = self._send_message(mlist, msg) File >>>> > "/var/lib/mailman/mailman-hyperkitty/mailman_hyperkitty/__init__.py", >>>> > 201, in _send_message files={"message": ("message.txt", >>>> > message_text)}) >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/api.py", >>>> > line 116, in post return request('post', url, data=data, json=json, >>>> > **kwargs) File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/api.py", >>>> > line 60, in request return session.request(method=method, url=url, >>>> > **kwargs) File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/sessions.py", >>>> > line 533, in request resp = self.send(prep, **send_kwargs) File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/sessions.py", >>>> > line 668, in send history = [resp for resp in gen] if allow_redirects >>>> > else [] File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/sessions.py", >>>> > line 668, in <listcomp> history = [resp for resp in gen] if >>>> > allow_redirects else [] File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/sessions.py", >>>> > line 247, in resolve_redirects **adapter_kwargs File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/sessions.py", >>>> > line 646, in send r = adapter.send(request, **kwargs) File >>>> > "/var/lib/mailman/venv3/lib64/python3.6/site-packages/requests-2.21.0-py3.6.egg/requests/adapters.py", >>>> > line 514, in send raise SSLError(e, >>>> > request=request)requests.exceptions.SSLError: >>>> > HTTPSConnectionPool(host=domain.com < http://domain.com >', port=443): Max >>>> > retries exceeded with url: >>>> > /hyperkitty/api/mailman/archive?key=SecretArchiverAPIKey (Caused by >>>> > SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate >>>> > verify >>>> > failed (_ssl.c:841)'),))* >>>> > Rgrds >>>> > Sandeep >>>> > On Sat, Aug 31, 2019 at 10:20 AM sandeep kumar <sandeep7790(a)gmail.com> >>>> > wrote: >>>> > > Team any help >>>> > > Sent from my iPhone >>>> > > > On 30-Aug-2019, at 11:18 PM, sandeep kumar <sandeep7790(a)gmail.com> >>>> > > wrote: >>>> > > > Hi Team >>>> > > > Iam using httpd to work with ssl on mailman 3 using proxy pass. >>>> > > > After this configuration Iam not able to connect to hyperkitty. It is >>>> > > throwing ssl certificate error in mailman.log file. >>>> > > > What should be the configuration of hyperkitty while using https in >>>> > > mailman..? >>>> > > > Please help me with this Iam struck here from past 4 days >>>> > > > Rgrds >>>> > > > Sandeep >>>> > > > Sent from my iPhone >>>> > Regards >>>> > Sandeep Kumar >>>> > +91-9642669192 >>>> > _______________________________________________ >>>> > Mailman-Developers mailing list -- mailman-developers(a)python.org >>>> > To unsubscribe send an email to mailman-developers-leave(a)python.org >>>> > https://mail.python.org/mailman3/lists/mailman-developers.python.org/ >>>> > Mailman FAQ: https://wiki.list.org/x/AgA3 >>>> > Security Policy: https://wiki.list.org/x/QIA9 >>>> thanks, >>>> Abhilash Raj (maxking) >>> Regards >>> Sandeep Kumar >>> +91-9642669192 >> thanks, >> Abhilash Raj (maxking) (I sent this a week ago, but apparently it got lost, trying to resend.) We’ve been using MM2 for eons and are working on a migration to MM3. So, bear with me as I’m still coming up to speed. I’m running MM 3.3.8 and Postorious 1.3.8. Our mailing lists include members within our organization as well as a number outside. We don’t want to expose our MM3 server directly to the open internet, so wish to hide the web portion behind our netscaler and our regular pool of web servers. Those web servers will proxy MM3 web pages on over to our MM3 machine to handle. This seems to work. Email will meander in via MX and mail relay servers. I found and followed directions in this email regarding changing URL paths: https://lists.mailman3.org/archives/list/[email protected]/thread/… So, say our MM3 server is: mm3.fqdn I am trying to publish and use urls like www.fqdn/mailman3-admin < http://www.fqdn/mailman3-admin >, www.fqdn/mailman3/lists < http://www.fqdn/mailman3/lists >. Again, that works for me. However, MM3 still has its concept of what URLs should be. I hoped I could fix that by way of templates, but I’m not sure there’s a template for everything. I added some templates, but have not replaced all. I was wondering and hoping that some central change could fix any default templates en-mass. Most recently, I changed the mailman admin email yesterday and the confirmation email directed me to mm3.fqdn/…/confirm-email/…. I looked at the stock templates and nothing there had that wording. I just looked at postorious docs and nothing jumps out at me there. 1. Have I gone down a bad rabbit hole? 2. Is there a way to change the advertised web server address? 3. Should I just continue rolling out my own templates and hope and assume that will take care of this issue? Thank you Tom Lieuallen Oregon State University following command: mailman-web hyperkitty_import -l annonsering(a)hodr.no --since 2013-09-01 <mbox file> No errors reported. I then did mailman-web update_index_one_list annonsering(a)hodr.no No, when I go to https://hodr.no/archives/list/[email protected]/ , I cannot choose mails earlier than January 2023. What's the problem, do you think? OK -- my turn to ask a question... I created a new domain and lists in my (functioning) Mailman 3 install. Messages to these new lists are successfully delivered via LMTP to Mailman and then disappear. They are in the shunt queue, with a source queue of "in". There are no exceptions logged in my mailman.log. An example from a qfile: {   '_parsemsg': False, 'envsender': 'noreply(a)[domain].com', 'lang': 'en', 'listid': '[ listname].[domain].com ', 'original_size': 2654, 'received_time': datetime.datetime(2023, 11, 25, 14, 0, 6, 968185), 'rule_hits': [], 'rule_misses': [], 'to_list': True, 'version': 3, 'whichq': 'in'} Unshunting the message has no effect, and no logs are generated. Any suggestions? Thanks, --Jered Recently my mailman3 instance stopped distributing mail. But mailman's own mail (notification, digest etc) and archiving are working OK. I couldn't figure what is going wrong From mail.log Dec 31 10:03:20 lists postfix/smtpd[10900]: Anonymous TLS connection established from mail.xxxx.xx[5.79.72.163]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits) Dec 31 10:03:20 lists postfix/smtpd[10900]: Anonymous TLS connection established from mail.xxxx.xx[5.79.72.163]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits) Dec 31 10:03:20 lists policyd-spf[10907]: prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=5.79.72.163; helo=mail.xxxx.xx; envelope-from=abhijith(a)xxxx.xx; receiver=<UNKNOWN> Dec 31 10:03:20 lists policyd-spf[10907]: prepend Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=5.79.72.163; helo=mail.xxxx.xx; envelope-from=abhijith(a)xxxx.xx; receiver=<UNKNOWN> Dec 31 10:03:21 lists postfix/smtpd[10900]: 04C2412038F: client=mail.xxxx.xx[5.79.72.163] Dec 31 10:03:21 lists postfix/smtpd[10900]: 04C2412038F: client=mail.xxxx.xx[5.79.72.163] Dec 31 10:03:21 lists postfix/cleanup[10912]: 04C2412038F: message-id=<f875c144-a23c-baa2-7de2-1b102d3e7494(a)xxxx.xx> Dec 31 10:03:21 lists postfix/cleanup[10912]: 04C2412038F: message-id=<f875c144-a23c-baa2-7de2-1b102d3e7494(a)xxxx.xx> Dec 31 10:03:21 lists opendkim[450]: 04C2412038F: s=_teknikKey d=xxxx.xx Dec 31 10:03:21 lists opendkim[450]: 04C2412038F: s=_teknikKey d=xxxx.xx Dec 31 10:03:21 lists postfix/smtpd[10900]: disconnect from mail.xxxx.xx[5.79.72.163] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7 Dec 31 10:03:21 lists postfix/smtpd[10900]: disconnect from mail.xxxx.xx[5.79.72.163] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7 Dec 31 10:03:21 lists postfix/qmgr[13211]: 04C2412038F: from=<abhijith(a)xxxx.xx>, size=1699, nrcpt=1 (queue active) Dec 31 10:03:21 lists postfix/qmgr[13211]: 04C2412038F: from=<abhijith(a)xxxx.xx>, size=1699, nrcpt=1 (queue active) Dec 31 10:03:21 lists postfix/lmtp[10915]: 04C2412038F: to=<test3(a)lists.yyyy.yy>, relay=127.0.0.1[127.0.0.1]:8024, delay=0.87, delays=0.62/0.02/0.04/0.2, dsn=2.0.0, status=sent (250 Ok) Dec 31 10:03:21 lists postfix/lmtp[10915]: 04C2412038F: to=<test3(a)lists.yyyy.yy>, relay=127.0.0.1[127.0.0.1]:8024, delay=0.87, delays=0.62/0.02/0.04/0.2, dsn=2.0.0, status=sent (250 Ok) Dec 31 10:03:21 lists postfix/qmgr[13211]: 04C2412038F: removed Dec 31 10:03:21 lists postfix/qmgr[13211]: 04C2412038F: removed I am not sure why 'postfix/qmgr[13211]: 04C2412038F: removed' is happening. from /var/log/mailman3/smtp.log: Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) handling connection Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) Data: b'LHLO lists.xxxx.xx' Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) Data: b'MAIL FROM:<abhijith(a)xxxx.xx>' Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) sender: abhijith(a)xxxx.xx Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) Data: b'RCPT TO:<test3(a)xxxx.xx>' Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) recip: test3(a)xxxx.xx Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) Data: b'DATA' Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) Data: b'QUIT' Dec 31 10:03:21 2018 (6323) ('127.0.0.1', 48720) connection lost Dec 31 10:03:21 2018 (6323) Connection lost during _handle_client() Here again I am doubtful about 'Connection lost during _handle_client()'. Please help. Abhijith PA Despite earlier comments that django-allauth 0.58.1 has been released to fix this issue (and presumably 0.58.2 would have the fix as well), there appears to still be an issue. As Odhiambo indicated with django-allauth==0.57.0, mailman-web compress completes without errors. With django-allauth 0.58.1 and 0.58.2, I still get (venv) $ mailman-web compress Compressing... Error parsing template socialaccount/signup.html: socialaccount/base.html Compressed 2 block(s) from 78 template(s) for 1 context(s). The Invalid template errors for socialaccount/login_cancelled.html and account/verified_email_required.html are gone, but we still have a parsing error. This is an installation on RHEL9 with python 3.11 based on the virtualenv installation method at https://docs.mailman3.org/en/latest/install/virtualenv.html#virtualenv-inst… Michael Sanderson I have both my mailman lists and django config in postgres databases. If I want to move my lists to another server that is running mailman 3, aside from copying the databases to the other server, what other things (perhaps all files under /var/lib/mailman3?, etc) would I need to bring over to the other server? Howdy! Does anyone have or know of a guide to migrate from Listserv 17, including list archives, to Mailman 3? I've found documentation on moving to Mailman 2, but those don't seem to apply to the newer version. Thanks, RobertC I'm dealing with (presumably bogus) spam reports for messages from foo-bounces(a)list.domain As far as I can tell these messages are triggered by the alleged-victim/apparent-attacker sending messages to foo-subscribe followed immediately by foo-unsubscribe. I have the size and time from postfix and/or mailman's smtp.log, but I don't have the message content. Are these messages stored somewhere by Mailman? Can I have them stored for a month or so in order to deal with these bureaucratic incidents? David In https://docs.mailman3.org/en/latest/migration.html I'm adviced to run the check_hk_archive script found in hyperkitty/contrib. When trying `git clone https://gitlab.com/mailman/hyperkity`I get: Username for ' https://gitlab.com ': Is it possible to get the script without an account on gitlab? Thanks, Lars Bjørndal <lars(a)lamasti.net> Ostadalsveien 64, 0753 Oslo. Mobil: 958 37 537 I s there a mean to configure the list for that emails be sent to recipients in a spread out manner to avoid being considered spam ? cause AOL, YAHOO seems to consider emails sent to recipients as spam or an "Excessively high volume of emails". there's just 40 (aol, yahoo) emails suscribed to the list. I am currently working with Mailman 3 and looking to enhance the personalization of the emails sent through our mailing list. Specifically, I wish to include the recipient's username in the email content, similar to a personalized greeting (e.g., "Dear [username]"). My questions are: 1. Does Mailman 3 support the inclusion of personalized data (like usernames)? 2. If yes, how can I do that? Is there any placeholder for that? Any guidance or suggestions on how to achieve this would be greatly appreciated. Thank you for your time and assistance. When people are communicating on Mailman3 lists, some set up automatic responders for out-of-office, etc. and get let through the system to list recipients. Unfortunately, this is bad behavior and appears to not be caught by default. I'd like to set up some kind of rule globally rather than per-list that would check if a message is an automatic reply (based on a set of criteria we've come up with programmatically on our previous custom implementation of lists) and then default-discard those messages. Is there a way with custom rules to implement this?  We're looking for certain strings on the subject line or other headers to determine "Discard" cases in our custom list implementations, but we are hoping we can implement this with customized rules in Mailman3 to achieve this goal.  How would we structure that type of rule, and do we check the message object or the msgdata instead? Thomas I just did a container rebuild and Mailman failed to load, with the below errors on the console. Pinning SQLAlchemy 2.0.22 resolved this; I haven't tried to further debug. (2.0.23 was release on November 3.) --Jered Traceback (most recent call last): File "/opt/app-root/src/.local/bin/mailman", line 8, in <module> sys.exit(main()) File "/opt/app-root/src/.local/lib/python3.9/site-packages/click/core.py", line 1157, in __call__ return self.main(*args, **kwargs) File "/opt/app-root/src/.local/lib/python3.9/site-packages/click/core.py", line 1078, in main rv = self.invoke(ctx) File "/opt/app-root/src/.local/lib/python3.9/site-packages/mailman/bin/mailman.py", line 69, in invoke return super().invoke(ctx) File "/opt/app-root/src/.local/lib/python3.9/site-packages/click/core.py", line 1688, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) File "/opt/app-root/src/.local/lib/python3.9/site-packages/click/core.py", line 1434, in invoke return ctx.invoke(self.callback, **ctx.params) File "/opt/app-root/src/.local/lib/python3.9/site-packages/click/core.py", line 783, in invoke return __callback(*args, **kwargs) File "/opt/app-root/src/.local/lib/python3.9/site-packages/click/decorators.py", line 33, in new_func return f(get_current_context(), *args, **kwargs) File "/opt/app-root/src/.local/lib/python3.9/site-packages/mailman/commands/cli_control.py", line 109, in start call_name(config.mta.incoming).regenerate() File "/opt/app-root/src/.local/lib/python3.9/site-packages/mailman/mta/postfix.py", line 109, in regenerate self._generate_lmtp_file(fp) File "/opt/app-root/src/.local/lib/python3.9/site-packages/mailman/mta/postfix.py", line 148, in _generate_lmtp_file for list_name, mail_host in list_manager.name_components: File "/opt/app-root/src/.local/lib/python3.9/site-packages/mailman/model/listmanager.py", line 140, in name_components for mail_host, list_name in result_set.with_entities( File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/orm/query.py", line 2833, in __iter__ result = self._iter() File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/orm/query.py", line 2847, in _iter result: Union[ScalarResult[_T], Result[_T]] = self.session.execute( File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 2308, in execute return self._execute_internal( File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 2180, in _execute_internal conn = self._connection_for_bind(bind) File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 2047, in _connection_for_bind return trans._connection_for_bind(engine, execution_options) File "<string>", line 2, in _connection_for_bind File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/orm/state_changes.py", line 139, in _go ret_value = fn(self, *arg, **kw) File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/orm/session.py", line 1143, in _connection_for_bind conn = bind.connect() File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3268, in connect return self._connection_cls(self) File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 145, in __init__ self._dbapi_connection = engine.raw_connection() File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 3292, in raw_connection return self.pool.connect() File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 452, in connect return _ConnectionFairy._checkout(self) File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 1378, in _checkout del fairy File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__ raise exc_value.with_traceback(exc_tb) File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/pool/base.py", line 1306, in _checkout result = pool._dialect._do_ping_w_event( File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 709, in _do_ping_w_event return self.do_ping(dbapi_connection) File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 104, in do_ping if self._send_false_to_ping: File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 1146, in __get__ obj.__dict__[self.__name__] = result = self.fget(obj) File "/opt/app-root/src/.local/lib/python3.9/site-packages/sqlalchemy/dialects/mysql/pymysql.py", line 93, in _send_false_to_ping insp = langhelpers.get_callable_argspec(Connection.ping) AttributeError: 'function' object has no attribute 'ping' nov. 14 23:22:18 dalen.lamasti.net postgresql-check-db-dir[1410]: An old version of the database format was found. nov. 14 23:22:18 dalen.lamasti.net postgresql-check-db-dir[1410]: Use 'postgresq l-setup --upgrade' to upgrade to version '15' nov. 14 23:22:18 dalen.lamasti.net postgresql-check-db-dir[1410]: See /usr/share /doc/postgresql/README.rpm-dist for more information. When I run `postgresql-setup --upgrade` I get: runuser: warning: cannot change directory to /opt/postgresql: no such file or directory * Upgrading database. /usr/bin/postgresql-setup: line 307: cd: /opt/postgresql: no such file or directory ERROR: pg_upgrade tool failed ERROR: Upgrade failed. * See /var/lib/pgsql/upgrade_postgresql.log for details. Why does the upgrade tool look for files in /opt/postgresql and not in /var/lib/pgsql? How to fix it? Thanks, Lars is there some way to find an ID to follow an email through mailman? In the exim logfile there is only something like C="250 Ok" (whereas in mails sent to another exim there is something like C="250 OK id=…"). (What I sometimes need to do is to follow an mail whether it is sent through mailman and to where.) Or should I raise an issue as whishlist request? Regards, I have had mailman3 working great on Debian 11, however, I just upgraded to Debian 12 and, following the upgrade, mailman3 is not working and I am getting the following error message: ModuleNotFoundError: No module named 'mailman_web' Does anybody have any recommendations? Thanks! Gordon I'm new to this list and newly a Mailman list administrator. I know I can customize message templates and have done so for my list's Welcome message. My problem is knowing what I'm replacing when I create a "new" template. How/where can I see he default content? Steve Brown I have to understand something more about disabled users. I renabled some users, but they continue to non teceive the newsletter. Is there a more detailed log that I can analize to discover dis problem? Thank you Roberto Burceni Servizio informatico sezionale Tel. 0302209417 (lunedì e giovedì mattina dalle 9:00 alle 13:00, martedì emercoledì pomeriggio dalle 14:00 alle 18:00 E-mail: servizioinformatico(a)uicibrescia.it Sito web: https://www.uicibrescia.it The current template input page shows this text: You can use these variables in the templates. $hyperkitty_url: Permalink to archived message in Hyperkitty $listname: Name of the Mailing List e.g. ant(a)example.com $list_id: The List-ID header e.g. ant.example.com $display_name: Display name of the mailing list e.g. Ant $short_listname: Local part of the listname e.g. ant $domain: The domain part of the listname e.g. example.com $info: The mailing list's longer descriptive text $request_email: The email address for -request address $owner_email: The email address for -owner address $site_email: The email address to reach the owners of the site $language: The two letter language code for list's preferred language e.g. fr, en, de I suggest to add the variable for leaving a mailing list here. But what is the variable name? Hello, We are currently working on a migration plan for Mailman -> Mailman 3. We have around over 3000 mailing lists with a total of 50K members and 500 worth of archived data. Our plan is to have core+web (instance 1) and Hyperkitty (instance 2). With the archives on the FS local to the Hyperkitty. And all 3 tables (core, web, Hyperkitty) pointing to the same database on a remote SQL (mysql-enterprise) instance. Using class mailman.database.mysql.MySQLDatabase (and whatever necessary on the Django/Hyperkitty instance). Is this feasible, if so what would be the recommended compute/storage requirements. If not what other alternatives have we got ? A remote or local PostgreSQL instance is also possible if recommended. Thank you very much in advance and all the best ! Regards, Serban Hello In Mailman, I have all the lists marked with the "Immediate notification to the administrator" option. Should list moderators receive immediate notification of new requests as well as daily reminders about the pending ones? List moderators (and list administrators) receive daily reminders of pending requests for approval, such as subscriptions to a moderated list or submissions that are held for some reason. Enabling this option results in immediate notifications being sent upon the arrival of new requests. When there's a message being held because it needs approval, it automatically sends an email to the list owners. However, it also states that it sends a daily reminder if the email remains unapproved, but it's not doing that. I'll show you how I have /etc/postfix/transport configured. I receive the first "owner" email, but not the daily one. list-owner(a)llistes.csuc.cat relay:[ip]:25 list(a)llistes.csuc.cat .. list-admin(a)llistes.csuc.cat ... list-bounces(a)llistes.csuc.cat ... list-confirm(a)llistes.csuc.cat ... list-join(a)llistes.csuc.cat ... list-leave(a)llistes.csuc.cat ... list-request(a)llistes.csuc.cat ... list-subscribe(a)llistes.csuc.cat ... I'm seeing some *really* odd behavior with Mailman 3 and Microsoft Outlook clients (even Outlook Web Access). When messages come in with a subject prefix, of any way shape or form, Microsoft Outlook seems to *completely strip* the prefixes from any "reply" sent, which could be problematic. While the "In-Reply-To" header is still intact and such, Microsoft just seems to 'strip' prefixes from subject lines and that causes a problem in some cases. Has anyone observed this behavior before? If so, have you found any workarounds? Thomas After fixing all issues with mailman I want to reduce the chance for email being marked as spam, especially from Gmail. I have added SPF and DKIM records and I am now using dkimvalidator to debug the emails being sent. Here is what I'm getting from spam evaluation: *0.3 FROM_LOCAL_HEX From: localpart has long hexadecimal sequence* My guess is that the From address is very large, for example: mylist-confirm+3eafa5bd24e52738c900e2e3fd05e366b7ea7580(a)myproject.eu Is there any way to mitigate this problem? Thank you, *Kyriakos Terzopoulos* Web developer / e-learning expert *Tel:*+30 211 213 9858 *Mobile:* +30 694 526 4512 * E-mail: *kyriakos.terzopoulos(a)gmail.com * Skype:* kyriakos.terzopoulos Find me on Facebook < http://www.facebook.com/cirrus3d > Follow me on Twitter < http://twitter.com/#%21/cirrus3d > This is the first time I am seeing this with MM3 so maybe it's something new in the latest releases? Using the virtualenv method to install MM3 in a fresh Debian 12 VM, I have run into an error while starting the mailman3 service. I cannot figure out what this error means. 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. No log entry in any of the log files in /opt/mailman/mm/var/logs/. 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 ] I do not find this nor in web interface neither in command line utility. Thank you best regards Roberto Burceni Servizio informatico sezionale Tel. 0302209417 (lunedì e giovedì mattina dalle 9:00 alle 13:00, martedì emercoledì pomeriggio dalle 14:00 alle 18:00 E-mail: servizioinformatico(a)uicibrescia.it Sito web: https://www.uicibrescia.it I want to add a custom handler that implements customized thread IDs in the system.  I already have the DB logic worked out, but the documentation for plugins is NOT clear on how to define a handler in a plugin, nor does the example plugin in the documentation on Gitlab have any custom handlers. I'm looking to add a custom handler so that the private pipeline for threaded-subject-list can use thread-subject (the custom handler) instead of subject-prefix (builtin). I'm unclear how to add this properly in a plugin that would be read properly by Mailman, though. Any tips on the filestructure needed for the Python code/plugin package in order to properly be set up and work? Thomas I'm on the latest mailman installation in a HestiaCP server. The past few days I have been investigating some spam issues and by using dkimvalidator.com I found the following: 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager* 3.2 HELO_DYNAMIC_IPADDR Relay HELO'd using suspicious hostname (IP addr 1)* Note the last line on the above debug information which raises the spam score of the email. Some research showed me that I needed a rDNS entry in my server. I'm on a Hetzner cloud VM so I used the Hetzner console to change the rDNS entry from: static.XXX.XXX.XXX.XXX.clients.your-server.de to my initial server hostname for example: *hestia.myserver.com < http://hestia.myserver.com >* However, after some propagation, I found today that even though I can send email to any normal address created in the server's control panel, mailing list emails do not get sent. I see the following in the logs: Mailman SMTP log: Oct 24 14:17:47 2023 (3759611) <169814622178.3759638.4589434779084932533@localhost> *response exception: (550, b'Helo name contains an IP address (HELO was [127.0.0.1]) and not is valid'*, 'testlist-bounces+myusername=myproject.eu(a)myproject.eu') Oct 24 14:17:47 2023 (3759611) <169814622178.3759638.4589434779084932533@localhost> smtp to testlist(a)myproject.eu for 1 recips, completed in 45.07745146751404 seconds Oct 24 14:17:47 2023 (3759611) <169814622178.3759638.4589434779084932533@localhost> post to testlist(a)myproject.eu from testlist-confirm+07d3315fa11a75588857fc93d1832ba74fb09fdd(a)myproject.eu, 1633 bytes, 1 failures Oct 24 14:17:47 2023 (3759611) <169814622178.3759638.4589434779084932533@localhost> delivery to myusername(a)myproject.eu failed with code 550, b*'Helo name contains an IP address (HELO was [127.0.0.1]) and not is valid'* Exim4 log: 2023-10-24 14:17:47 H=([127.0.0.1]) [XXX.XXX.XXX.XXX] rejected MAIL <testlist-bounces+myusername=myproject.eu(a)myproject.eu>: *Helo name contains an IP address (HELO was [127.0.0.1]) and not is valid* The weird thing is that when I do a mailman-web sendtestemail this email is sent successfully. Also please note that before the rDNS change I did not have an issue with mail sending. Last but not least, after some search I set in Exim4 the following: PRIMARY_HOST_NAME = *hestia.myserver.com < http://hestia.myserver.com >* Any help would be greatly appreciated. *Kyriakos Terzopoulos *Web developer / e-learning expert *Tel:*+30 211 213 9858 *Mobile:* +30 694 526 4512 * E-mail: *kyriakos.terzopoulos(a)gmail.com * Skype:* kyriakos.terzopoulos Find me on Facebook < http://www.facebook.com/cirrus3d > Follow me on Twitter < http://twitter.com/#%21/cirrus3d > The list is not yet used (i.e. "inactive"), but clearly flagged as " Show list on index page = no" I regard this as a bug.