Re: SMTPAuthenticationError at /accounts/login/
by Mohsen Masoudfar
Hi Stephen,
Thank you for the hint. I was focused too much on the documentation and was looking for the answer in the wrong place. Problem fixed.
My problem started with "SMTP authentication not supported" and after fixing that, which was a Postfix parameter, I got this issue and was also looking in Postfix or Django configuration for the answer.
This problem is solved and I wished there was a chance to update the documentation, so that these sort of information could be added in the documentation for other people who try to use mailman3.
Thanks
Mohsen
-----Original Message-----
From: Stephen J. Turnbull <turnbull.stephen.fw(a)u.tsukuba.ac.jp>
Sent: Thursday, April 9, 2020 4:06 AM
To: Mohsen Masoudfar <mmasoudf(a)aaas.org>
Cc: mailman-users(a)mailman3.org
Subject: [MM3-users] SMTPAuthenticationError at /accounts/login/
[EXTERNAL EMAIL]
mmasoudf(a)aaas.org writes:
> I have setup the stack according to:
> Mailman Suite Documentation. Release 3.3 PDF file.
> I configured
> EMAIL_HOST_USER and
> EMAIL_HOST_PASSWORD
> in Django settings.py. I could not find the place that I might > configure it for Postfix
I think it helps to start thinking about it from the other end. That is, Postfix is the mail server for all users on a multiuser system.
Therefore in "normal" configurations it will use the authentication mechanisms provided by the host operating system.[1] You need to have a user for Mailman in any case, typically called "mailman" or "list".[2]
Once you've configured a user for Mailman on the Postfix side, you use that user and authentication data for Mailman core, Postorius, and HyperKitty to send mail via Postfix.
> I am running the site on AWS and to be able to use AWS mail-servers > I have to define following parameter for AWS:
> smtp_sasl_password_maps which points to a hash for AWS 'ACCESS KEY > ID' and 'SECRET ACCESS KEY'
I don't think that has anything to do with the Mailman-to-Postfix side of things; that's for Postfix to send to AWS's mail exchanger (aka MX).
Steve
Footnotes:
[1] It may also be possible to create Postfix-only "virtual" users who have no existence as far as the OS is concerned, but I don't know anything about that.
[2] I haven't thought carefully about whether using Mailman's user in Django would be a security risk, but as long as it only has access to Mailman I don't see how it can do more harm than Mailman itself can, and I don't see why it would be more subject to exploitation than Mailman itself is. Anybody with security chops who wants to weigh in, please do.
6 years, 6 months
Re: how to administrate mailman3 in CLI ?
by testeur
Sorry. I didn't see in the good place.
when i see parameters here :
https://URL/mailman3/postorius/accounts/per-subscription-preferences/
the options or the specific language chosen (not for the ui) for the
list is finally changing when i use the code used before...
i should use shell with mailman user. ok i note it.
I ve seen this link about python script to manage mailman3 by shell :
https://fog.ccsf.edu/~msapiro/scripts/ (thx you)
Regards,
On 23/09/2023 17:33, Mark Sapiro wrote:
> On 9/23/23 07:40, testeur via Mailman-users wrote:
>>
>> |# mailman shell -l testlist(a)domain.tld |
>
> It looks like you are running `mailman shell` as `root`. You should
> always run mailman commands including starting mailman as the Mailman
> user, never as root. Running thing as root can create things that
> later can't be read by the mailman user.
>
>> ||>>> from mailman.interfaces.action import Action >>> for mbr in
>> m.members.members: mbr.moderation_action = Action.defer |||commit()|
>>
>> |||>>> from mailman.interfaces.action import Action |||||||>>>
>> english = getUtility(ILanguageManager).get('en')| >>> for mbr in
>> m.members.members: || mbr.preferences.acknowledge_posts = False
>> mbr.preferences.delivery_mode = DeliveryMode.regular
>> mbr.preferences.delivery_status = DeliveryStatus.enabled
>> mbr.preferences.hide_address = False
>> mbr.preferences.preferred_language = english
>> mbr.preferences.receive_list_copy = False
>> mbr.preferences.receive_own_postings = True|commit()||
>
>
> I'm not sure what the above actually says. The interaction should look
> like
> ```
> >>> from mailman.interfaces.action import Action
> >>> english = getUtility(ILanguageManager).get('en')
> >>> for mbr in m.members.members:
> ... mbr.preferences.acknowledge_posts = False
> ... mbr.preferences.delivery_mode = DeliveryMode.regular
> ... mbr.preferences.delivery_status = DeliveryStatus.enabled
> ... mbr.preferences.hide_address = False
> ... mbr.preferences.preferred_language = english
> ... mbr.preferences.receive_list_copy = False
> ... mbr.preferences.receive_own_postings = True
> ...
> >>> commit()
> ```
> Actually, importing Action is not necessary as it is among the things
> defined by default in `mailman shell` in interactive mode.
>
>> Before the shell command, the web interface was with an other
>> language (i tested with italian one) and other options preferences,
>> but after the shell command, after a web interface refresh, it
>> doesn't change.
>
>
> The above shell interaction sets the preferred_language for all list
> members to english. This has nothing to do with the language for the
> web UI. This is set by Django. See
> <https://docs.djangoproject.com/en/4.2/topics/i18n/translation/#how-django-d…>.
>
>
3 years
Re: Change Member's Address
by Dennis Putnam
On 1/14/2026 1:41 AM, Stephen J. Turnbull wrote:
> Dennis Putnam via Mailman-users writes:
>
> > I can't seem to confirm the superuser's email address.
>
> Find the address in both the account_emailaddresses table and the
> addresses table. I'm interested to see the full record for both (you
> can obscure the email and display_name for this purpose). This is in
> the interest of figuring out why you are inflooping in the
> confirmation process.
From database mailmanweb:
mysql> show tables;
+-----------------------------------+
| Tables_in_mailmanweb |
+-----------------------------------+
| account_emailaddress |
| account_emailconfirmation |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_mailman3_maildomain |
| django_mailman3_profile |
| django_migrations |
| django_q_ormq |
| django_q_schedule |
| django_q_task |
| django_session |
| django_site |
| hyperkitty_attachment |
| hyperkitty_email |
| hyperkitty_favorite |
| hyperkitty_lastview |
| hyperkitty_mailinglist |
| hyperkitty_mailinglist_moderators |
| hyperkitty_mailinglist_owners |
| hyperkitty_profile |
| hyperkitty_sender |
| hyperkitty_tag |
| hyperkitty_tagging |
| hyperkitty_thread |
| hyperkitty_threadcategory |
| hyperkitty_vote |
| postorius_emailtemplate |
| socialaccount_socialaccount |
| socialaccount_socialapp |
| socialaccount_socialapp_sites |
| socialaccount_socialtoken |
+-----------------------------------+
37 rows in set (0.00 sec)
The table account_emailaddress has 3 entries:
mysql> select * from account_emailaddress;
+----+-----------------------+----------+---------+---------+
| id | email | verified | primary | user_id |
+----+-----------------------+----------+---------+---------+
| 1 | uuuu(a)ddddddddd.net | 1 | 1 | 2 |
| 2 | uuuu(a)ddddddddd.net | 0 | 0 | 3 |
| 3 | xxxxxxxx(a)gmail.com | 1 | 1 | 4 |
+----+-----------------------+----------+---------+---------+
3 rows in set (0.00 sec)
Yes, id 1 and 2 are the same email address.
From database mailman:
mysql> show tables;
+--------------------+
| Tables_in_mailman |
+--------------------+
| _request |
| acceptablealias |
| address |
| alembic_version |
| autoresponserecord |
| ban |
| bounceevent |
| contentfilter |
| domain |
| domain_owner |
| file_cache |
| headermatch |
| listarchiver |
| mailinglist |
| member |
| message |
| onelastdigest |
| pended |
| pendedkeyvalue |
| preferences |
| template |
| uid |
| user |
| workflowstate |
+--------------------+
24 rows in set (0.00 sec)
I'm not sure what you want to see in this address table. There is a lot
of unexpected email addresses that I have no idea where they came from.
In any case the user_id in this table does not correspond to the user_id
in the table from the previous mailmanweb table. Here are the columns:
+----+---------------------------------------------------+-----------+------------------------+---------------------+---------------------+---------+----------------+
| id | email | _original |
display_name | verified_on | registered_on | user_id
| preferences_id |
+----+---------------------------------------------------+-----------+------------------------+---------------------+---------------------+---------+----------------+
>
> Confirmation you can do with a single SQL update. Find the address in
> the account_emailaddresses table and update the verified attribute to
> t. I think that's enough to allow you to log in. If not you should
> do the same for that address in the addresses table. However, in the
> addresses table you need to fill the verified field with a timestamp.
> Not sure how that works in SQL, try copying the value of the
> registered field.
>
> I don't know why you're inflooping though. It's possible that you're
> verified in one table but not the other, confusing Postorius.
>
9 months, 1 week
Re: Re-send subscription response and file permission error in queue
by Mark Sapiro
On 9/8/20 10:56 PM, accounts-mailman(a)holbrook.no wrote:
> A user sent subscription request to the `..-join@` address of a list. Email domain wasn't set up properly, so response got rejected. Now, if the user tries to send another request, no reponse comes back. In the log I find a python stack trace saying subscription already pending.
>
> ```
> Sep 08 10:32:44 2020 (19918) Traceback (most recent call last):
> File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 171, in _one_iteration
> self._process_one_file(msg, msgdata)
> File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 264, in _process_one_file
> keepqueued = self._dispose(mlist, msg, msgdata)
> File "/usr/lib/python3/dist-packages/mailman/runners/command.py", line 196, in _dispose
> mlist, msg, msgdata, parts, results)
> File "/usr/lib/python3/dist-packages/mailman/commands/eml_membership.py", line 104, in process
> ISubscriptionManager(mlist).register(subscriber)
> File "/usr/lib/python3/dist-packages/mailman/app/subscriptions.py", line 520, in register
> list(workflow)
> File "/usr/lib/python3/dist-packages/mailman/app/workflow.py", line 69, in __next__
> return step()
> File "/usr/lib/python3/dist-packages/mailman/app/subscriptions.py", line 227, in _step_sanity_checks
> raise SubscriptionPendingError(self.mlist, self.address.email)
> mailman.interfaces.subscriptions.SubscriptionPendingError
> ```
I'll look at this when I get some time. I'm still catching up after
being off line for 12 days.
> Furthermore I am getting a permission denied error in the attempt of shunting the message, which I don't quite understand because the folder has user `list` group `list` and `700` mode:
>
> ```
> Sep 08 10:25:29 2020 (19918) SHUNTING: 1599553529.9889646+88be5afa0bf3111a83e68cc97ce2000723ad93fd
> Sep 08 10:29:49 2020 (19918) Uncaught runner exception: [Errno 13] Permission denied: '/var/lib/mailman3/queue/command/1599553789.306307+6fee74af69263553b5ffd0e73cc095ab651bd855.pck'
> Sep 08 10:29:49 2020 (19918) Traceback (most recent call last):
> File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 156, in _one_iteration
> msg, msgdata = self.switchboard.dequeue(filebase)
> File "/usr/lib/python3/dist-packages/mailman/core/switchboard.py", line 150, in dequeue
> with open(filename, 'rb') as fp:
> PermissionError: [Errno 13] Permission denied: '/var/lib/mailman3/queue/command/1599553789.306307+6fee74af69263553b5ffd0e73cc095ab651bd855.pck'
> ```
>
> How can I remove the pending subscription, or re-send the response email?
In Postorius, pull down Subscription Requests and select Pending
Confirmation and delete the request.
> And what could be the cause of the permission error?
Mailman can't read the
/var/lib/mailman3/queue/command/1599553789.306307+6fee74af69263553b5ffd0e73cc095ab651bd855.pck
file. This is strange since it wrote it, but check the modes and
user/group of all the directories in the path and the file itself.
Could it be a SELinux or apparmor issue?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
6 years, 1 month
Re: multiple sites on a mailman3 server question
by David Newman
> On Dec 29, 2021, at 08:49, William Oliver <billo(a)billoblog.com> wrote:
>
> On Tue, 2021-12-28 at 18:23 -0800, David Newman wrote:
>>>
>>> [snip]
>>> I'm using nginx
>> I'd asked about this a few weeks ago for a MM3 host running Ngnix
>> with a
>> few virtual domains, one of which runs Roundcubemail as its default.
>>
>> Mark Sapiro suggested the following, and it seems to be working OK.
>> You'll need these lines in the Nginx config file for each virtual
>> host
>> you define.
>>
>> # begin mailman3 stuff
>>
>> location /static/ {
>> alias /opt/mailman/web/static/;
>> }
>>
> [snip]
>
>
>
> No joy. This just makes it kind of work as the mailman interface when
> it gets rewritten.
>
> My problem is that the url is getting referred to
> domainname/mailman3/lists even when I don't want it to.
That sounds like an nginx configuration problem, not a Mailman3 issue.
One assumption in the MM3 web setup docs is that MM3/Django/Postorius/Hyperkitty are the only web services running. If they’re not, and there are other services running, you’ll need to tell Nginx where they are.
The setup I provided is an excerpt and covers only how to point to MM3 in such a scenario. It does not cover how to point to something else as root at, say, www.domain.tld.
This is off-topic for a Mailman3 list, but maybe check your default files in the sites-available directory, and also anything they point to, paying particular attention to where / points and which root directory you’re using. Same thing with any other config files in that directory.
dn
> Adding these
> changes just (partially) loads the mailman3 interface when it gets
> rewritten.
>
> What I'm trying to figure out is where uwsgi yanks control from nginx
> and does the rewriting. Pulling that proxypass stuff out will stop
> mailman3 from coming up, and adding it allows mailman3 to show its
> interface, but the address gets referred regardless.
>
> Somehow I need to tell uwsgi to ignore www.domain.com *or* somehow tell
> nginx not to push it to port 8000. But I don't see where nginx is
> getting told to go to 8000 in the www.domain.com section.
>
> billo
>
>
>
>
>
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
4 years, 9 months
ValueError: ...:EVP_DigestInit_ex:disabled for fips
by Ralf Wiegand
(venv-3.6) [root@maildev mailman-suite_project]# python manage.py migrate
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, openid, postorius, sessions,
sites, socialaccount
Running migrations:
Applying contenttypes.0001_initial...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/management/__init__.py",
line 381, in execute_from_command_line
utility.execute()
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/management/__init__.py",
line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/management/base.py",
line 323, in run_from_argv
self.execute(*args, **cmd_options)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/management/base.py",
line 364, in execute
output = self.handle(*args, **options)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/management/base.py",
line 83, in wrapped
res = handle_func(*args, **kwargs)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/core/management/commands/migrate.py",
line 234, in handle
fake_initial=fake_initial,
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/migrations/executor.py",
line 117, in migrate
state = self._migrate_all_forwards(state, plan, full_plan,
fake=fake, fake_initial=fake_initial)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/migrations/executor.py",
line 147, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake,
fake_initial=fake_initial)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/migrations/executor.py",
line 245, in apply_migration
state = migration.apply(state, schema_editor)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/migrations/migration.py",
line 124, in apply
operation.database_forwards(self.app_label, schema_editor,
old_state, project_state)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/migrations/operations/models.py",
line 530, in database_forwards
getattr(new_model._meta, self.option_name, set()),
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/backends/base/schema.py",
line 367, in alter_unique_together
self.execute(self._create_unique_sql(model, columns))
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/backends/base/schema.py",
line 126, in execute
sql = str(sql)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/backends/ddl_references.py",
line 194, in __str__
return self.template % self.parts
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/backends/ddl_references.py",
line 103, in __str__
return self.create_index_name(self.table, self.columns, self.suffix)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/backends/base/schema.py",
line 1049, in create_unique_name
return self.quote_name(self._create_index_name(*args, **kwargs))
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/backends/base/schema.py",
line 884, in _create_index_name
hash_suffix_part = '%s%s' % (names_digest(table_name,
*column_names, length=8), suffix)
File
"/opt/mailman/venv-3.6/lib64/python3.6/site-packages/Django-2.2.12-py3.6.egg/django/db/backends/utils.py",
line 221, in names_digest
h = hashlib.md5()
*ValueError: error:060800A3:digital envelope
routines:EVP_DigestInit_ex:disabled for fips*
Hello group, I am running into this error. any idea what is going
wrong here?
Help is greatly appreciated.
Ralf
6 years, 5 months
Re: Mailman REST API not available. Please start Mailman Core.
by Shashikanth Komandoor
Thank you Mark for your response.
I understood that gunicorn is a front end that is used like web server like
nginx.
But I don't think I am using it instead I am using the httpd to redirect
requests to postorius.
And I am starting the mailman-suite with the command "python manage.py
runserver 0.0.0.0:8000 --insecure &". Hope this does not use gunicorn
(which of course I don't know what it is until now).
Please correct me if any point I am mentioning is wrong.
So, in this case, do you think configuring gunicorn as below would work:
*calling gunicorn.cfg in mailman.cfg as below *
*[webservice]*
*configuration: /var/lib/mailman/mailman/src/mailman/config/gunicorn.cfg*
*and content of gunicorn.cfg as below*
*(venv3) [root@lsmgr mailman]# cat
/var/lib/mailman/mailman/src/mailman/config/gunicorn.cfg[gunicorn]# All the
options that can be put here are available at#
http://docs.gunicorn.org/en/stable/settings.html#settings
<http://docs.gunicorn.org/en/stable/settings.html#settings># No of seconds
to wait before killing the worker processes.*
*workers = 4graceful_timeout = 90*
Also what is the difference between timeout and graceful_timeout ?
Please help me if I can increase the management better. Any guide is also
helpful for me.
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campai…>
Virus-free.
www.avast.com
<https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campai…>
<#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2>
On Thu, Jul 23, 2020 at 4:10 AM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 7/22/20 9:21 AM, Shashikanth Komandoor wrote:
> > Hi Mark,
> >
> > Never mind please I am sending to you only instead of group as I am
> > sending you the production content along with the mail.
>
>
> See my other reply.
>
>
> > I have configured the workers count as 4 and timeout as 900 in
> > mailman.cfg under [webservice]. This is FYI.
>
> You can't configure Mailman's REST gunicorn workers directly in the
> [webservice] section of mailman.cfg. The only thing you can configure
> there is:
>
> configuration: /path/to/gunicorn.cfg
>
> That file, which is separate from your web server gunicorn.cfg, is where
> you put things like
>
> [gunicorn]
> timeout = 900
>
> It also will not work to put a gunicorn section in mailman.cfg. It must
> be in a separate file pointed to by webservice.configuration.
>
> Increasing the number of workers won't help this issue.
>
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
>
--
Thanks & Regards,
Shashi Kanth.K
9052671936
6 years, 2 months
Re: clearing out to start from scratch
by Washington Odhiambo
On Wed, Mar 18, 2026 at 8:37 AM Thomas Krichel <krichel(a)openlib.org> wrote:
> Washington Odhiambo writes
>
> > Mixing-and-match of virtualenv and OS package install will lead to lots
> of
> > pain chasing ghosts - as you can already see.
>
> That is why I am now trying to first clean out the complete installation
> of mailman3 on my machine, where I also have an installation of mailman2
> running for added complication. I have tried to carefully examine what
> needs to go, and now have come up with
>
> root@server # systemctl daemon-reload
> root@server # systemctl stop mailman3
> root@server # systemctl stop mailman3-web.service
> root@server # apt purge postgresql
> root@server # apt purge mailman3
> root@server # apt purge mailman3-web
> root@server # apt purge python3-django-mailman3
> root@server # find /etc/ -name '*mailman3*' -type f -delete
> root@server # rm -r /etc/mailman3
> root@server # rm -r /usr/local/mailman/
> root@server # rm -r /opt/mailman/
> root@server # rm -r /var/lib/postgresql/
> root@server # rm -r /usr/lib/mailman3
> root@server # rm -r /usr/share/mailman3
> root@server # rm -r /var/log/mailman3
> root@server # rm -r /var/lib/mailman3
> root@server # rm -r /usr/share/doc/mailman3
> root@server # rm -r /usr/share/mailman3-web/
> root@server # rm -r
> /usr/lib/python3/dist-packages/hyperkitty/templates/django_mailman3
> root@server # rm -r
> /usr/lib/python3/dist-packages/postorius/templates/django_mailman3
> root@server # rm -r /usr/lib/python3/dist-packages/django_mailman3
> root@server # rm -r
> /usr/lib/python3/dist-packages/django_mailman3/templates/django_mailman3
> root@server # rm -r /usr/share/doc/python3-django-mailman3
> root@server # rm -r /usr/share/python3-django-mailman3
> root@server # rm -r
> /usr/share/python3-django-mailman3/static/django-mailman3
> root@server # rm /var/tmp/mailman3*
> root@server # find /root/.cache/ -name 'mailman*' -delete
> root@server # rm -r /usr/local/mailman/
> root@server # rm -r /opt/mailman
>
>
> This may be useful to somebody in a similar situation.
Doesn't 'apt purge -y mailman3 mailman3-web python3-django-mailman3 && apt
autoremove -y && \apt autoclean' achieve the same for a package-based
installation?
I'd keep /etc/mailman3 and /opt/mailman and just do chown -R mailman: those
two directories. I find it easy to edit files in /etc/mailman3/ as user
mailman.
Anyway, best of luck.
You are now on the right track.
--
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]
7 months
Re: Welcome Message
by brian@emwd.com
So I create a template with just one line of text and I save it. When I go subscribe to the list, Postorius throws this error message:
"A server error occurred. Please contact the administrator."
The core mailman.log records a whole bunch of exemptions:
Apr 16 14:36:05 2019 (28) 172.19.199.3 - - "GET /3.1/lists/announce.testlist.emwd.com/roster/owner HTTP/1.1" 200 612
Apr 16 14:36:05 2019 (28) 172.19.199.3 - - "GET /3.1/lists/announce.testlist.emwd.com/roster/moderator HTTP/1.1" 200 90
Apr 16 14:36:10 2019 (28) deque:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.6/http/client.py", line 1331, in getresponse
response.begin()
File "/usr/lib/python3.6/http/client.py", line 297, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.6/http/client.py", line 258, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.6/socket.py", line 586, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3.6/site-packages/urllib3/util/retry.py", line 367, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/lib/python3.6/site-packages/urllib3/packages/six.py", line 686, in reraise
raise value
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 386, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 306, in _raise_timeout
raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/mailman/app/workflow.py", line 69, in __next__
return step()
File "/usr/lib/python3.6/site-packages/mailman/app/subscriptions.py", line 326, in _step_do_subscription
self.member = self.mlist.subscribe(self.subscriber)
File "/usr/lib/python3.6/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.6/site-packages/mailman/model/mailinglist.py", line 494, in subscribe
notify(SubscriptionEvent(self, member))
File "/usr/lib/python3.6/site-packages/zope/event/__init__.py", line 32, in notify
subscriber(event)
File "/usr/lib/python3.6/site-packages/mailman/app/membership.py", line 169, in handle_SubscriptionEvent
send_welcome_message(mlist, member, member.preferred_language)
File "/usr/lib/python3.6/site-packages/mailman/app/notifications.py", line 52, in send_welcome_message
'list:user:notice:welcome', mlist, language=language.code))
File "/usr/lib/python3.6/site-packages/mailman/model/template.py", line 188, in get
name, lookup_context, **substitutions)
File "/usr/lib/python3.6/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.6/site-packages/mailman/model/template.py", line 109, in get
contents = protocols.get(actual_uri, **auth)
File "/usr/lib/python3.6/site-packages/mailman/utilities/protocols.py", line 38, in get
response = requests.get(url, timeout=REQUEST_TIMEOUT, **kws)
File "/usr/lib/python3.6/site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 529, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
Apr 16 14:36:10 2019 (28) REST request handler error:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.6/http/client.py", line 1331, in getresponse
response.begin()
File "/usr/lib/python3.6/http/client.py", line 297, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.6/http/client.py", line 258, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.6/socket.py", line 586, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/lib/python3.6/site-packages/urllib3/util/retry.py", line 367, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/lib/python3.6/site-packages/urllib3/packages/six.py", line 686, in reraise
raise value
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 386, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 306, in _raise_timeout
raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value)
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.6/wsgiref/handlers.py", line 137, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python3.6/site-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/lib/python3.6/site-packages/mailman/rest/wsgiapp.py", line 218, in __call__
return super().__call__(environ, start_response)
File "/usr/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__
responder(req, resp, **params)
File "/usr/lib/python3.6/site-packages/mailman/rest/members.py", line 266, in on_post
pre_approved=pre_approved)
File "/usr/lib/python3.6/site-packages/mailman/app/subscriptions.py", line 520, in register
list(workflow)
File "/usr/lib/python3.6/site-packages/mailman/app/workflow.py", line 69, in __next__
return step()
File "/usr/lib/python3.6/site-packages/mailman/app/subscriptions.py", line 326, in _step_do_subscription
self.member = self.mlist.subscribe(self.subscriber)
File "/usr/lib/python3.6/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.6/site-packages/mailman/model/mailinglist.py", line 494, in subscribe
notify(SubscriptionEvent(self, member))
File "/usr/lib/python3.6/site-packages/zope/event/__init__.py", line 32, in notify
subscriber(event)
File "/usr/lib/python3.6/site-packages/mailman/app/membership.py", line 169, in handle_SubscriptionEvent
send_welcome_message(mlist, member, member.preferred_language)
File "/usr/lib/python3.6/site-packages/mailman/app/notifications.py", line 52, in send_welcome_message
'list:user:notice:welcome', mlist, language=language.code))
File "/usr/lib/python3.6/site-packages/mailman/model/template.py", line 188, in get
name, lookup_context, **substitutions)
File "/usr/lib/python3.6/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.6/site-packages/mailman/model/template.py", line 109, in get
contents = protocols.get(actual_uri, **auth)
File "/usr/lib/python3.6/site-packages/mailman/utilities/protocols.py", line 38, in get
response = requests.get(url, timeout=REQUEST_TIMEOUT, **kws)
File "/usr/lib/python3.6/site-packages/requests/api.py", line 75, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 529, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
Removing the template allows normal subscriptions and the generic welcome message is sent out.
Brian
7 years, 6 months
Re: urls.py location on venv install
by Washington Odhiambo
On Sun, Aug 9, 2026 at 7:09 PM Torsten <torsten(a)bbadmin.de> wrote:
> Am 2026-08-09 17:48, schrieb Mark Sapiro:
> > On 8/9/26 00:30, Torsten wrote:
> >>
> >> the traceback is this:
> >>
> >> Traceback (most recent call last):
> >> File
> >>
> "/opt/mailman/web/venv/lib/python3.13/site-packages/django/core/handlers/wsgi.py",
>
> >> line 124, in __call__
> >> response = self.get_response(request)
> >> File
> >>
> "/opt/mailman/web/venv/lib/python3.13/site-packages/django/core/handlers/base.py",
>
> >> line 139, in get_response
> >> set_urlconf(settings.ROOT_URLCONF)
> >> ^^^^^^^^^^^^^^^^^^^^^
> >> File
> >>
> "/opt/mailman/web/venv/lib/python3.13/site-packages/django/conf/__init__.py",
>
> >> line 104, in __getattr__
> >> val = getattr(_wrapped, name) >
> >> Where should mailman_web.urls be located, also in /etc/mailman3 or
> >> rather in the venv of mailman_web in /opt/mailman...?
> >
> > How did you install Mailman? If you followed
> > <https://docs.mailman3.org/en/latest/install/virtualenv.html>, you
> > should have /etc/mailmasn3/settings.py which is similar to
> > <
> https://docs.mailman3.org/en/latest/install/virtualenv.html#initial-configu…>.
>
> > In particular, it should have near the beginning
> > ```
> > from mailman_web.settings.base import *
> > from mailman_web.settings.mailman import *
> > ```
> > The import from mailman_web.settings.base defines
> > ```
> > ROOT_URLCONF = 'mailman_web.urls'
> > ```
> > which points to mailman_web/urls.py in the venv's site-packages
> > directory.
>
>
> In fact, my settings.py does contain these import lines:
>
> import os
> from mailman_web.settings.base import *
> from mailman_web.settings.mailman import *
>
> BASE_DIR = ('/var/lib/mailman3/web')
>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>
> SECRET_KEY = '<MYSECRETKEY>'
> DEBUG = False
>
> #: Default list of admins who receive the emails from error logging.
> ADMINS = ( ('Mailman Suite Admin', 'torsten(a)bbadmin.de'),)
>
> ALLOWED_HOSTS = ['localhost', '127.0.0.1',]
> INSTALLED_APPS = [
> 'django_mailman3',
> 'postorius',
> 'hyperkitty',
> # Uncomment the next line to enable the admin:
> 'django.contrib.admin',
>
> And I have the mailman_web/urls.py in the venv where mailman was
> installed.
>
Copy the settings.py from
https://docs.mailman3.org/en/latest/install/virtualenv.html and customize
it with your values at the right places.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
2 months, 1 week