Search results for query "He"
- 312 messages

[MM3-users] [Django] ERROR (EXTERNAL IP): Internal Server Error: /accounts/login/
by Mark Dadgar
I have a user attempting to access the list archives and he’s generating this login error. I have verified that he does have a django account. I’ve never seen this one before and I didn’t find anything relevant in the lit archives.
Any ideas what’s going on here?
- Mark
-----
mark(a)pdc-racing.net | 408-348-2878
-----------------------------------------------
From: noreply(a)pdc-racing.net
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /accounts/login/
Date: May 18, 2021 at 2:38:20 PM PDT
To: mark(a)pdc-racing.net
Internal Server Error: /accounts/login/
MultipleObjectsReturned at /accounts/login/
get() returned more than one EmailAddress -- it returned 2!
Request Method: POST
Request URL: https://mail.pdc-racing.net/accounts/login/
Django Version: 3.0.12
Python Executable: /opt/mailman/mm/venv/bin/python
Python Version: 3.8.5
Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/opt/mailman/mm/venv/lib/python3.8/site-packages']
Server time: Tue, 18 May 2021 14:38:20 -0700
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/utils/decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/views/decorators/debug.py", line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/views.py", line 146, in dispatch
return super(LoginView, self).dispatch(request, *args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/views.py", line 74, in dispatch
response = super(RedirectAuthenticatedUserMixin, self).dispatch(
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/views.py", line 102, in post
response = self.form_valid(form)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/views.py", line 159, in form_valid
return form.login(self.request, redirect_url=success_url)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/forms.py", line 195, in login
ret = perform_login(
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/utils.py", line 174, in perform_login
if not _has_verified_for_login(user, email):
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/utils.py", line 134, in _has_verified_for_login
emailaddress = EmailAddress.objects.get_for_user(user, email)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/allauth/account/managers.py", line 54, in get_for_user
ret = self.get(user=user, email__iexact=email)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/db/models/query.py", line 419, in get
raise self.model.MultipleObjectsReturned(
Exception Type: MultipleObjectsReturned at /accounts/login/
Exception Value: get() returned more than one EmailAddress -- it returned 2!
Request information:
USER: AnonymousUser
3 years, 11 months

[MM3-users] Re: Found error in docker-container
by Abhilash Raj
Hi Alex,
On Mon, Jul 17, 2017, at 06:32 AM, Alexander Klotz wrote:
> Hi,
>
> unfortunately I have to get back to this topic, since there's still a
> problem. We already removed the comments as you suggested, but we still
> have to make manual corrections when creating a new list, because the
> alias information is safed incorrectly in the tables of the postfix
> host. There is a port indication with a "]" in the comments, but it is
> incomplete. The proper address has to be inserted here.
Unfortunately, I am not able to replicate this problem in my setup.
[mta]
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
lmtp_host: 172.19.199.2
lmtp_port: 8024
configuration: /etc/postfix-mailman.cfg
I have just this configuration for LMTP and it seems to generate correct
required LMTP transport files for me.
I also tried running postfix and made it read this file and things seem
to be working.
Can you try running a fresh new image and see if the problem still
persists?
$ docker rm -f mailman-core
$ docker-compose create mailman-core
$ docker-compose up -d mailman-core
Unless the old configuration with comments is cached somewhere, I can't
imagine why Core is generating wrong maps.
Also, can you check if the mailman is using correct configuration?
$ docker exec -it mailman-core mailman conf
This should print all the configuration, maybe you can grep to see
everything related to mta is there as you'd expect?
Hope it helps!
> Regards,
> Alex
>
>
>
> > On Wed, Jul 5, 2017, at 03:21 AM, Alexander Klotz wrote:
> >> Hi,
> >>
> >> one of our developers wanted to point out an error he found in mailman
> >> 3.1, docker container maxking/mailman-core-0.1
> >>
> >> The entries in /opt/mailman/core/var/data/postfix_lmtp are not set
> >> correctly, example:
> >>
> >> /^testlist(a)mailman\.example\.com$/ lmtp:[172.19.199.2# IP
> >> Address of mailman-core container]:8024
> >>
> >> this actually should look like this:
> >>
> >> /^testlist(a)mailman\.example\.com$/ lmtp:[172.19.199.2]:8024
> >
> >
> > Can you send a copy of your Mailman configuration that you added at
> > `/opt/mailman/core/mailman-extra.cfg`?
> >
> > I think this is mostly because the configuration parser doesn't
> > understand the in-line comments. So, if you are using the configuration
> > exactly as it is mentioned in the documentation, it could be the cause
> > of this problem.
> >
> > Solution to that would be to just remove all the in-line comments.
> >
> > [mta]
> > incoming: mailman.mta.postfix.LMTP
> > outgoing: mailman.mta.deliver.deliver
> > lmtp_host: 172.19.199.2 # IP Address of mailman-core
> > container
> > lmtp_port: 8024
> > smtp_host: 172.19.199.1 # IP Address of host where
> > postfix is.
> > smtp_port: 25
> > configuration: /etc/postfix-mailman.cfg
> >
> >
> >
> > Like the two comments seen in the configuration above.
> >
> > I will update the documentation too so that others don't get caught in
> > something like this.
> >
> > Thanks!
> >
>
>
> --
> Mit freundlichen Grüßen,
> Alexander Klotz
>
> (redaktion kulturserver)
>
> mailto:alexk@kulturserver.de
>
> Stiftung kulturserver.de gGmbH
>
> Lothringerstraße 23
> D-52062 Aachen
> http://ggmbh.kulturserver.de
>
> Geschäftsführer: Wolfgang Knauff
>
> Amtsgericht Aachen* *Handelsregister-Nr.:B 10515
> Umsatzsteuer-Identifikations-Nr.:DE DE 230868040
--
thanks,
Abhilash Raj
7 years, 9 months

[MM3-users] Re: Hyperkitty no longer archiving
by Hirayama, Pat
Thank you, Mark!
> -----Original Message-----
> From: Mark Sapiro <mark(a)msapiro.net>
> Sent: Tuesday, November 22, 2022 3:37 PM
> To: mailman-users(a)mailman3.org
> Subject: [MM3-users] Re: Hyperkitty no longer archiving
>
<snip>
>
> Does that directory also contain __init__.py (probably empty)? It should.
>
That was it! No __init__.py in /opt/mailman/mailman-suite/mailman-suite_project. Creating an empty file there and restarting the containers caused hyperkitty to start archiving all of the queued messages.
Thank you for your time, and Happy Thanksgiving!
-p
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org
2 years, 5 months

[MM3-users] Re: Deactivate list without deleting it?
by Barry Warsaw
On Jan 14, 2018, at 09:45, Colin Watson <cjwatson(a)ubuntu.com> wrote:
>
> I'm experimenting with a port of Launchpad's mailing list infrastructure
> to Mailman 3. If Barry's reading, he may remember that this is no
> trivial task, so I'm very definitely not promising that it will be done
> any time soon. :-)
For those of you not up on your history, this is interesting for several reasons. I was originally hired by Canonical 11 years ago to integrate Mailman with Launchpad. At the time Launchpad was not free software, so a lot of the design of the integration had to work within those constraints (LP was released under the AGPL in 2009 IIRC). At the time it was painful, especially because it had to keep two completely databases in sync in both directions — not an easy task! Add to that the fact that Mailman 2.1 doesn’t really have a database, just a bunch of pickle files. :)
I’m proud that the mailing list feature of Launchpad eventually became pretty darn solid, with much credit to Colin, Curtis Hovey, and many of my other wonderful former colleagues on the Launchpad team and at Canonical.
This experience also heavily influenced my thinking about the design for Mailman 3, and led directly to the REST-based API. Launchpad has a REST API, spearheaded by Leonard Richardson, who literally wrote the O’Reilly books on web services. And while there were some compromised on “pure” REST in Launchpad, the discussions we had at that time committed my thinking to as pure an approach as I was capable of doing.
> However, for the most part it looks relatively
> tractable with the aid of the plugin improvements in Mailman 3.2.0; I
> have the rough outline of a plugin that implements much the same feature
> set as our current pile of monkey-patches against Mailman 2.1 in a much
> nicer way.
Very cool!
You’ve provided some clarification in a follow up, and I’ll respond there. Apologies for being a little disjointed.
One of the things that may really help you, but which doesn’t exist in a fully baked way in Core is the ability to set web hooks for various events. Core does have an event notification system (via zope.events) and that’s used to inform other parts of the Core about things like subscriptions/unsubscriptions, etc. Where web hooks would be useful is if some event in Core needs to inform Launchpad of that event. However, it’s possible that this falls under the plugins you’ve thought about - and while not general purpose, I’m positive you could do the same kind of MM3->LP notifications that you might find necessary, in custom plugins.
> Ideally, I'd like mailing lists to have a "deactivated" state in
> addition to full deletion. In this state, the list would appear
> nonexistent for most purposes: incoming email would be rejected,
I forget whether LP uses Exim or Postfix. At least for the latter, it would be fairly easy (if involving a database migration) to include an “active” or “enabled” flag which would be consulted when regenerating the Postfix transport files. I would add this to the MailingList model and make it available through the REST API. Then the LP team admin can toggle this on and off as desired.
I also wouldn’t use the IArchiver interface for disabling HyperKitty access to the archives, but I’ll respond in more detail in the next follow up.
> Postorius would deny its existence, etc.
You’ve clarified that Postorius isn’t needed for Launchpad, since it provides what effectively takes it places in the simplified administration u/i.
Cheers,
-Barry
7 years, 3 months

[MM3-users] Re: How To Install Mailman 3 on Debian 10 (Complete Guide)
by Lars Schimmer
On 02/03/2021 19:20, Mark Dadgar wrote:
>> As someone who is stuck using the ancient version of mailman3 in debian, I have to disagree. 99.9999% of the time I hit an issue, it turns out it was fixed years ago, but because I use the debian maintained version, I don't have those fixes. It's horrible.
So, why does someone not care about the debian package to fix that bugs?
It is possible, and is done by other packages every day.
> +100
>
> I originally installed mailman3 via the ubuntu packages and I eventually replaced that setup (read: paid Brian to re-install mailman3 “correctly") for 2 key reasons:
>
> 1) The ubuntu (and presumably debian) packages are 1+ years out of date - Quanah is correct in that most of the bugs you hit have been fixed already but haven’t made it through the package maintainer process yet.
Just being 1+ years old does not tell you a software is bad or not
useable. Thats a nonce.
Bugs shoudl be iron out with package fixes, if someone cares about.
New versions are out, needs to be tested.
> 2) The package installs are non-standard with respect to the way the mailman3 community tends to install them, which makes getting support here on this list much, much harder. You can see evidence of that periodically when someone asks a question and Mark’s response starts with “I’m not entirely sure how the <distro> package sets things up, but …”, which is no slight on Mark because he has his hands full with mm3 already and tracking every distro install layout is just not going to happen. It also means that the official mm3 docs don’t match what came out of your package. It’s just not good all the way around.
Sure, every software has its own scheme, but sthats what standards are
for. I still cannot switch easy between fedora, debian and other distros
due to different standards on file path. It is a nightmare.
Thats why I like to stay with 1 standard for all softeare packages on
one system. I do not want to run 20 software distributions with 20 ways
of doing it the right waay (tm).
You are right, the dev of a software should mostly care about fixing
bugs, implementing new features and getting along with the software.
Implementing different ways of installing is just a side topic.
But someone should care about howto get the (useful) software to the
masses for using it. And that position should care about howto implement
the software good into the running distributions worldwide.
And for distributions with a very good way of using packages, it is a
nightmare to work beside the package manager just because the package is
rather not well maintained.
>> Distribution packages tend to be useful for really basic things like libraries. For constantly evolving projects where you need to be current, they're more of a detriment.
>
> So much this.
You do not need a bleeding edge software on production servers. You just
need bug free, whihc is easy done with packages on distributions, if
maintainers do it well enough.
For a testing server bleeing edge maybe fine, but not in production.
> - Mark
> -----
> mark(a)pdc-racing.net | 408-348-2878
>
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
MfG,
Lars Schimmer
--
-------------------------------------------------------------
TU Graz, Institut für ComputerGraphik & WissensVisualisierung
Tel: +43 316 873-5405 E-Mail: l.schimmer(a)cgv.tugraz.at
Fax: +43 316 873-5402 PGP-Key-ID: 0x4A9B1723
4 years, 1 month

[MM3-users] Re: List rename
by Joel Lord
Well, I've got a developer who has managed to figure out how to rename a
list with a set of 3 SQL updates, then updating a few settings via the
API. We've beaten the heck out of this at this point with a test list,
I'm going to be actually renaming the lists in question tomorrow.
Here's some kinda code-ish stuff that you can adapt, it's shell first,
python, then more shell:
update mailinglist set list_name = '${newname}', list_id = '${newname
}.${domain}' where list_id = '${oldname}.${domain}';
update member set list_id = '${newname}.${domain}' where
list_id = '${oldname}.${domain}';
update address set email = '${newname}-owner@${domain}' w
here email = '${oldname}-owner@${domain}';
settings = dict(
acceptable_aliases=['%s@domain' % oldname],
display_name="%s" % newname,
reply_to_address="%s@domain" % newname,
reply_goes_to_list="explicit_header",
require_explicit_destination=True,
subject_prefix="[%s]" % newname)
mv ${listsbase}/${oldname}.${domain} ${listsbase}/${newname}.${domain}
mv ${templates}/${oldname}.${domain} ${templates}/${newname}.${domain}
# rebuild aliases and virtual maps now
I'd been kind of hoping for at least a way to extract the entire list
config and subscriber list, then stuff those back in to a different list
after a bit of massaging to change the name. Beefing up the command
line ecosystem would be extremely useful, particularly for those of us
who have been using MM2 forever.
Also, just figuring out where things like call_http and dump_json were
took my top developer over an hour and he had to resort to a bunch of
'grep -r's to do it. I'd tried and failed at that point, but I was
figuring dump_json was some generic python module that we needed to
install, rather than being part of MM3. So just adding the appropriate
set of imports to the mailman shell documentation pages would really
help and shouldn't be all that much of a time investment for anyone who
actually knows the answers.
Thanks for keeping this project going. I'm horrified that I might some
day have to move the lists that I manage out to something like Google
Groups with Google's prediliction for deciding they know better than the
RFCs.
On 10/5/2019 12:05 PM, Abhilash Raj wrote:
> On Wed, Sep 25, 2019, at 9:04 AM, Joel Lord wrote:
>> I'm in an odd situation where I need to rename a bunch of lists. They
>> were all created on mailman2 originally and migrated to mailman3 (very
>> successfully, TYVM) but the names were all originally
>> discuss-<foo>@domain and it's very confusing to be sure you're always
>> sending to the correct <foo>. We want to completely rename the lists to
>> <foo>-discuss@domain.
>>
>> These lists do not keep archives, so if I have to resort to extracting
>> the subscriber lists and the configs and building new lists, I'm
>> completely fine with that. Problem is, I'm really used to MM2 and
>> config_list and could do this without thinking using those tools... that
>> I don't have.
>>
>> Running MM3 3.2.2 trying to make this happen. Any assistance I could
>> get will be greatly appreciated.
>
> There isn't any way yet that allows renaming a list, not sure how hard would that be to achieve that.
>
> In theory, it should be easy since most places should be using list-id (which wouldn't change if you were to rename a list, as the RFC2919 says), but there might be a few places which are still using the posting-address as the identifier and might need change.
>
> I wouldn't mind a command or an API to modify the list's posting address.
>
>>
>> THANKS!
>>
--
Joel Lord
5 years, 6 months

[MM3-users] Re: Installation Questions [Installation}
by Arte Chambers
I'm also running into permission errors with Postgres - user does not have
permissions on public schema. I didn't see anything in the docs about how
to grant proper access to these tables.
Thank you,
Paul 'Arte Chambers' Robey
502-408-6922
On Mon, Nov 4, 2024 at 4:51 AM Odhiambo Washington via Mailman-users <
mailman-users(a)mailman3.org> wrote:
> On Mon, Nov 4, 2024 at 12:36 PM Gerald Vogt <vogt(a)spamcop.net> wrote:
>
> > On 04.11.24 09:13, Odhiambo Washington via Mailman-users wrote:
> > > On Mon, Nov 4, 2024 at 10:34 AM Gerald Vogt <vogt(a)spamcop.net> wrote:
> > >> On your server it looks like this:
> > >>
> > >> # ls -la /etc/mailman3
> > >> total 28
> > >> drwxr-xr-x. 2 root mailman 95 Oct 25 08:12 .
> > >> drwxr-xr-x. 99 root root 8192 Oct 29 07:42 ..
> > >> -rw-r--r--. 1 root mailman 266 Oct 25 07:37 gunicorn.conf
> > >> -rw-r-----. 1 root mailman 92 Nov 21 2023 mailman-hyperkitty.cfg
> > >> -rw-r-----. 1 root mailman 797 Sep 9 11:20 mailman.cfg
> > >> -rw-r-----. 1 root mailman 3015 Oct 25 08:12 settings.py
> > >>
> > >> and it works just fine.
> > >>
> > >
> > > True, but making the mailman user own the files makes life easier when
> > you
> > > operate from the virtualenv -
> > > you do not have to exit the virtualenv to edit the files in
> > /etc/mailman3,
> > > and then re-enter the virtualenv.
> >
> > The virtualenv doesn't change the current uid. That doesn't make a
> > difference.
> >
> > > You do not have to give the mailman user sudoer rights. That's the
> whole
> > > point about the below:
> > >
> > > ```
> > > sudo mkdir /etc/mailman3
> > > sudo chown mailman:mailman /etc/mailman3
> > > sudo chmod 755 /etc/mailman3
> > > ```
> >
> > Well, that essentially was my question: why does the mailman user
> > require sudo rights?
>
>
> Mark did not say that the mailman user required sudo access. Please re-read
> what he said.
>
>
> > Why does it need to be able to write or change
> > those files/directories? Except for the convenience which isn't a reason
> > to weaken security.
> >
>
> Make me understand how the security is weakened. The Mailman user account
> has no password so cannot login from outside.
> Even if it was able to login, it will still end up only accessing $home and
> /etc/mailman3, no?
>
>
> > In respect to security, i.e. separation of the service user from write
> > access to it's core configuration files, it should not be done unless
> > absolutely necessary.
>
>
> Sorry, I didn't understand that.
>
>
> --
> 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]
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to paul.m.robey(a)gmail.com
>
5 months, 1 week

[MM3-users] multiple sites on a mailman3 server question
by William Oliver
So, I have successfully installed mailman3 and it's working great.
However, the way it works now, if someone goes to the domain website,
he or she will get the mailman page. I'd prefer that it work something
like:
My
www.example.com goes to a home page
lists.example.com goes to the mailman3 page
mail.example.com goes to a roundcube page
I'm using nginx, and this is the first time I've set up an nginx server
(I have traditionally done apache), and I'm still figuring out the
syntax.
My sites-available file is below, for the domain emergenus.com.
The behavior I'm getting is that if I go to mail.emergenus.com, it
still redirects to mail.emergenus.com/mailman3/lists, but gives a 404
page not found.
If I go to lists.emergenus.com, it redirects to
lists.emergenus.com/mailman3/lists and gives the nice postorius page,
and works fine.
So, I'm trying to figure out how to stop that redirect.
When I look at my nginx access.log file for mail.emergenus.com, I see:
174.212.104.153 - - [28/Dec/2021:21:03:21 -0500] "GET /mailman3/lists/
HTTP/1.1" 404 188 "-" "Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93
Safari/537.36"
Aha! says I. My ip address is 203.159.80.234, not 174.212.104.153.
Thus, uwsgi (I think) is sneaking in there and taking over regardless
of what I'm trying to do.
Is there a way to tell mailman to only take over for
lists.emergenus.com and not for www.emergenus.com or
mail.emergenus.com?
Here's my uwsgi.ini (without then env= PYTHONPATH change discussed in
another thread:
# /etc/mailman3/uwsgi.ini
#
[uwsgi]
# Port on which uwsgi will be listening.
http-socket = 0.0.0.0:8000
# If running uwsgi from the virtual environment ...
virtualenv = /opt/mailman/venv/
module=mailman_web.wsgi:application
# Add to python import path.
pythonpath = /etc/mailman3/
# The default settings module.
env = DJANGO_SETTINGS_MODULE=settings
# Setup default number of processes and threads per process.
master = true
processes = 2
threads = 2
# Setup the django_q related worker processes.
attach-daemon = /opt/mailman/venv/bin/mailman-web qcluster
# Setup the request log.
req-logger = file:/opt/mailman/web/logs/uwsgi.log
# Log qcluster commands separately.
logger = qcluster file:/opt/mailman/web/logs/uwsgi-qcluster.log
log-route = qcluster uwsgi-daemons
# Last log and it logs the rest of the stuff.
logger = file:/opt/mailman/web/logs/uwsgi-error.log
Here's my /etc/nginx/sites-enabled/emergenus.com looks like:
server {
root /var/www/html2;
index index.html index.htm index.nginx-debian.html;
server_name emergenus.com, mail.emergenus.com,
www.emergenus.com;
location /{
try_files $uri $uri/ =404;
}
##### added 12/19
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
##########
ssl_certificate /etc/letsencrypt/live/emergenus.com/fullchain.pem;
# managed by Certbot
ssl_certificate_key
/etc/letsencrypt/live/emergenus.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by
Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name lists.emergenus.com;
location /{
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
# proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}
listen 443 ssl ;
listen [::]:443 ssl ;
location /static/ {
alias /opt/mailman/web/static/;
}
##########
ssl_certificate /etc/letsencrypt/live/emergenus.com/fullchain.pem;
# managed by Certbot
ssl_certificate_key
/etc/letsencrypt/live/emergenus.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by
Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = mail.emergenus.com) {
# return 301 https://$host$request_uri;
return 301 https://mail.emergenus.com;
} # managed by Certbot
if ($host = www.emergenus.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = lists.emergenus.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name www.emergenus.com lists.emergenus.com
mail.emergenus.com emergenus.com;
return 404; # managed by Certbot
}
Thanks
billo
3 years, 3 months

[MM3-users] Re: How To Install Mailman 3 on Debian 10 (Complete Guide)
by Brian Carpenter
On 2/26/21 10:00 PM, Stephen J. Turnbull wrote:
> Thank you for going to the trouble of making your guide easily
> available to and usable by the community.
You're welcome Steve.
> Yes, and we try to document them all, written by different people at
> different times. I don't think that's an unreasonable approach given
> the wide variety of situations of our site admins, but I'm sure a lot
> of "greenfield" installations will appreciate your thorough, "from
> parts manifest to assembled working system", approach.
I agree. I just know there are probably a lot of folks who just want a
working and current Mailman 3 server and are not picky over the actual
server environment. Mailman 3 is really dependent upon being connected
to a number of services: web server, database server and MTA for
instance. Then you add in all of the required Python modules, and you
have a really complicated system that has a lot of moving parts.
I intend to explore other OS for installing MM3 and to document that
process as well. I will not document the process of using package
managers (apt/yum) etc to install Mailman 3 itself because I think it is
very problematic having older versions of Mailman 3 set up. Mark Sapiro
put it very well when he said:
> Mailman 3 is still relatively young and there are many important
> features and fixes in the current releases that aren't in the
> Debian/Ubuntu packages.
I hoping a guide such as mine will move folks away from using a Debian
repo for Mailman installations.
> Yes, it has been a problem. At this point I'm pretty sure :^þ that
> mailman.readthedocs.io is the official guide, but that hasn't been
> well-known in the past and there are a lot of mirrors and unofficial
> guides like yours (but not as thorough). And there's a lot of stuff
> on the Wiki that requires effort to integrate because it was
> originally written in reply to a particular user's questions.
See that is something I am very interested in fixing and cleaning up but
I need help in knowing how to work with something like Readthedocs.io.
> Sphinx is pretty much the gold standard for Python documentation. It
> looks nice. The markup is reStructuredText, which is a powerful,
> Markup-like language with a few features that Markup didn't have last
> I looked, and it's extensible by Python programmers. It's also used
> in marking up Python docstrings. So you can see why we'd choose it.
> But if you're *not* an experienced Python programmer, none of those
> are advantages.
Exactly!
> > > I am just trying to understand how can we lower the barrier for
> > > community members to help contribute to existing docs instead of
> > > them having to create new ones. Specifically around installation,
> > > since that tends to get stale often when depedent packages change
> > > or a new dependency is added that breaks the installation.
>
> @Abhilash: For non-Python programmers, it's not *that* hard, but there
> is a hurdle at the beginning.
So lift me up and throw me over that hurdle.
> I think the best thing to do is to advertise that we're always looking
> for doc contributions, and that if somebody's not familiar with reST,
> they shouldn't let that stop them. Of course we'll help them with
> markup, and if necessary we'll do it.
"Raises hand here"
--
Brian Carpenter
Harmonylists.com
Emwd.com
4 years, 1 month

[MM3-users] Re: Mailman 3 hosting query
by Stephen Turnbull
>>>>> Bill Robertson
> Yes, I've looked at that list but the majority of the links don't mention MM3 hosting (so I don't know how old it is)
In principle, the oldest entries should be at the top (first come, first serve). We make no effort to check on whether these sites are live. (If you get a 404, we'd appreciate knowing about it!) I would be quite surprised if the newer ones don't offer Mailman 3. Here's what I know about the entries. The fact that I say I don:t know them means only that they don't frequently appear on our mailing lists -- I'm a developer, not a competitor in the field. They may be *very* competent and competitively priced vendors. Country of primary operation in parentheses (eg, (DE) is Germany).
* minuskel screen partner GmbH<http://www.minuskel.de> (DE) Don't know them. They've been around for decades, guessing from their Plone offering.
* '''POWER-NETZ.de'''<http://POWER-NETZ.de> (Symgenius GmbH & Co. KG) (DE) Don't know them.
* EMWD<https://mailman3host.com/> (US) The previous proprietor was very helpful to random questioners on the list, and limited his self-promotion to "EMWD offers hosting". He provided an fdisk to boot a working Mailman 3 guide based on his installation experient. RIP Brian. The new operators keep a low profile, but Brian left them a bullet-proof system, and his heirs were careful in selecting them.
* UK Web Hosting<http://www.eukhost.com> (UK) Don't know them.
* '''Virtual Dedicated Hosting'''<http://www.micfo.com> (??) Don't know them.
* Web Hosting UK<http://www.webhosting.uk.com/> (UK) Don't know them.
* JPBerlin<http://www.jpberlin.de> (DE) Don't know them.
* MEMSET Dedicated Server Hosting<http://www.memset.com/> (UK) Don't know them.
* MailmanLists<http://www.mailmanlists.net> (US, UK, EU, AU) Don't know them.
* Binhost Technologies<http://www.binhost.com>: (??) Don't know them.
* '''VPS Hosting at VPSLink'''<http://vpslink.com> (??) Don't know them.
* '''Shared, VPS or Dedicated Server Hosting with cPanel/WHM and Mailman Support in North America or Europe'''<https://www.ezoshosting.com/hosting-solutions/> (US, DE) Don't know them.
* Assam Company of America<http://www.assamcompany.com> (US) Don't know them.
* A2 Hosting<http://www.a2hosting.com> (??) Don't know them.
* Ingate<http://www.ingate.de/managed-server.html> (EU). Don't know them.
* '''Web Hosting UK'''<http://www.nethosted.co.uk> (UK) Don't know them, different URL from similar blurb above.
* Aplonis Solutions<http://www.aplonis.com> (??) Don't know them.
* Carringbush.Net<http://www.carringbush.net/> (AU) Don't know them.
* Mailmanhost.com<http://www.mailmanhost.com> (US) Same as EMWD above.
* UAENIP<http://www.uaenip.com> (EU) Don't know them.
* Dataflame (UK) Don't know them.
* RoseHosting<https://www.rosehosting.com/> (US) Don't know them.
* Mailman3.com<https://mailman3.com> (??) Aggressive product marketing, proprietor is a frequent Mailman contributor. Mailman3.com is a proprietary site, not affiliated with the GNU Mailman 3 Project.
* MaadiX - Mailman 3 one click install<https://maadix.net/>: (??) Don't know them.
* KnownHost - VPS Hosting Provider<https://www.knownhost.com/> (??) Don't know them.
* dotList<https://www.mailmanhost.com/mailman-3-hosting/> (US) Same as EMWD above.
* Panix, in New York City, USA, offers Mailman 2 hosting<http://www.panix.com/email/mlist.html> (US) Well-known ISP of long standing.
* Mailman 4<https://mailman4.com/> (??) Same as Mailman3.com above. GNU Mailman 4 does not exist, and this site should be considered a marketing ploy -- the actual software is GNU Mailman 3 AFAIK, possibly with a few proprietary extensions. Mailman4.com is a proprietary site, not affiliated with the GNU Mailman 3 Project.
1 year, 11 months

[MM3-users] postorius ssl-certificates for virtual hosts
by Wolfgang Bock
Hello,
On my server are several virtual hosts running with different lists per
host. The appropriate webaddress is in general:
https://lists.[domain]/mailman3/postorius/lists/[listname].lists.[domain].
My domains:
[domain-1] starts with a b*
[domain-2] starts with a s*
[domain-3] starts with a t*
If I use the webadress
https://lists.[domain-1]/mailman3/postorius/lists/[listname].lists.[domain-…
and I do a click on the https-symbol in the address line of my browser I
get the secury-information " every thing is ok" and the
certificate-information is about the wildcard-certificate I just created
for the right domain.
Different result is for the webadress
https://lists.[domain-2]/mailman3/postorius/lists/[listname].lists.[domain-….
In this case I get an information like "you are using a wrong
certificate" clicking on the https-symbol references tot he certificate
of [domain-1]
I set in my apache2 configuration a symbolic link to apache.conf in the
/etc/mailman3/directory and made this active.
What did I wrong??
If I set use_https to yes in mailman.cfg I get on the website for all lists:
postorius: Something went wrong
Mailman REST API not available. Please start Mailman core.
In the logs I found …
mailman.log
Nov 14 23:04:25 2019 (28584) command runner started.
Nov 14 23:20:41 2019 (28590) 127.0.0.1 - - "GET
/3.0/lists?advertised=true&count=0&page=1 HTTP/1.1" 200 90
Nov 14 23:20:41 2019 (28590) 127.0.0.1 - - "GET
/3.0/lists?advertised=true&count=10&page=1 HTTP/1.1" 200 606
Nov 14 23:20:41 2019 (28590) 127.0.0.1 - - "GET /3.1/domains HTTP/1.1"
200 1438
Nov 14 23:20:41 2019 (28590) 127.0.0.1 - - code 400, message Bad
HTTP/0.9 request type
('\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03\x00³m\x98¶\x02¨\\Å^\x11£ì{\x94«§*\x
9cÅýÎk\x9f¡ã\x89s/õë')
Nov 14 23:20:41 2019 (28590) 127.0.0.1 - -
"........ü...³m.¶.¨\Å^.£ì{.«§*.ÅýÎk.¡ã.s/õë
.Ô$M...b¥øDR.Ï...G¹PpÖ.'W°û-Óìü¶.>......À,À0..̨̩̪À+À/..À$À(.kÀ#À'.gÀ" 400
mailman-web.log
ERROR 2019-11-14 22:20:41,471 1405 postorius.middleware Mailman REST API
not available
Traceback (most recent call last):
File
"/usr/lib/python3/dist-packages/mailmanclient/restbase/connection.py",
line 95, in call
response, content = Http().request(url, method, data_str, headers)
File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line
1513, in request
(response, content) = self._request(conn, authority, uri,
request_uri, method, body, headers, redirections, cachekey)
File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line
1263, in _request
(response, content) = self._conn_request(conn, request_uri, method,
body, headers)
File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line
1186, in _conn_request
conn.connect()
File "/usr/lib/python3/dist-packages/httplib2/__init__.py", line
1012, in connect
self.sock = self._context.wrap_socket(sock, server_hostname=self.host)
File "/usr/lib/python3.7/ssl.py", line 412, in wrap_socket
session=session
File "/usr/lib/python3.7/ssl.py", line 853, in _create
self.do_handshake()
File "/usr/lib/python3.7/ssl.py", line 1117, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1056)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py",
line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/postorius/views/list.py", line
706, in list_index
choosable_domains = _get_choosable_domains(request)
File "/usr/lib/python3/dist-packages/postorius/views/list.py", line
560, in _get_choosable_domains
return [(d.mail_host, d.mail_host) for d in domains]
File "/usr/lib/python3/dist-packages/postorius/views/list.py", line
560, in <listcomp>
return [(d.mail_host, d.mail_host) for d in domains]
File "/usr/lib/python3/dist-packages/mailmanclient/restbase/base.py",
line 121, in __getattr__
return self._get(name)
File "/usr/lib/python3/dist-packages/mailmanclient/restbase/base.py",
line 87, in _get
return self.rest_data.get(key)
File "/usr/lib/python3/dist-packages/mailmanclient/restbase/base.py",
line 76, in rest_data
response, content = self._connection.call(self._url)
File
"/usr/lib/python3/dist-packages/mailmanclient/restbase/connection.py",
line 109, in call
raise MailmanConnectionError('Could not connect to Mailman API')
mailmanclient.restbase.connection.MailmanConnectionError: Could not
connect to Mailman API
[pid: 1405|app: 0|req: 963/963] 2a02:8108:483f:b9c0:94f1:d2bb:9642:b6d0
() {62 vars in 1310 bytes}
22:20:41 2019] GET /mailman3/postorius/lists/ => generated 3901 bytes in
89 msecs (HTTP/1.1 503) 5 headers in 180 bytes (1 switches on core 0)
5 years, 5 months

[MM3-users] Re: mm3 installation question
by Odhiambo Washington
On Wed, Mar 6, 2024 at 8:53 PM Mark Sapiro <mark(a)msapiro.net> wrote:
> On 3/6/24 1:33 AM, Odhiambo Washington wrote:
> > On Wed, Mar 6, 2024 at 12:13 PM Stephen J. Turnbull <
> > turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
> >
> >> Odhiambo Washington writes:
> >>
> >> > The odd thing is that the HOWTO that he followed never involves the
> >> > manipulation of any urls.py at all - it's not even mentioned at any
> >> > point. So obviously the issue is caused by something else and I
> >> > suspect something within Apache needs to be re-evaluated in the
> >> > guide.
>
>
> The HOWTO installs mailman-web which contains a urls.py.
>
> >>
> >> Note that Apache doesn't know about the "/postorius" and "/hyperkitty"
> >> URI paths. It is quite unclear to me how this works at all with
> >> either the
> >>
> >> path('mailman3/', include('postorius.urls')),
> >> path('archives/', include('hyperkitty.urls')),
> >> path('postorius/', include('postorius.urls')),
> >> path('hyperkitty/', include('hyperkitty.urls')),
> >>
> >> version of urls.py or the reverse order version
> >>
> >> path('postorius/', include('postorius.urls')),
> >> path('hyperkitty/', include('hyperkitty.urls')),
> >> path('mailman3/', include('postorius.urls')),
> >> path('archives/', include('hyperkitty.urls')),
>
>
> This is an issue with Django. I'm not sure of the exact mechanism, but
> consider the first of the above two sets. If you go to the mailman3/ URL
> that gets redirected to the postorius/ URL. I.e. two paths that
> ultimately reference the same thing wind up considering the second path
> as the canonical path and redirecting the first path to the second.
>
> I was not initially aware of this when I added the postorius/ and
> hyperkitty/ paths to mailman_web/urls.py. I did this with the intent of
> making either set of paths work, and I added those paths after the
> mailman3/ and archives/ paths, and this version got released as
> mailman-web 0.0.8. That caused the recommended Apache config to fail
> because now the mailman3/ and archives/ paths were redirected to the
> postorius/ and hyperkitty/ URLs which are not in the recommended Apache
> config.
>
> I have since reordered the paths in mailman_web/urls.py, but that
> version isn't yet released. Thus the issue. See
>
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
> for some background.
>
>
> > My thinking then is that the documentation at
> >
> https://docs.list.org/en/latest/install/virtualenv.html#apache-configuration
> > needs to be fixed by adding the missing bits,
>
>
> What needs to be done is a mailmab-web 0.0.9 release in PyPI. This will
> fix the issue.
>
Hi Mark,
Thank you for making it much clearer.
Is it possible that an Apache directive like below will fix everything
(albeit discreetly with sysadmins driving blindly)?
ProxyPass "/" "http://127.0.0.1:8000/"
As was suggested by Mr. Turnbull (and previously by you on another thread)?
It will be simpler, but leaves almost everyone (except the Devs) blind to
the fact there exists a urls.py somewhere that determines the mappings?
Maybe a note about it in the documentation will help?
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
1 year, 1 month

[MM3-users] Re: Mailman, etc. upgrade woes and persistent bugs
by Stephen J. Turnbull
Brian Carpenter writes:
> I think treating all disabled options the same is short-sighted. They
> are all not the same.
>
> -- Some list members will disable their subscription for good reasons
> and will be really upset if a List Owner renables it through ignorance.
> So it is important to know a disable member is done by the member
> itself.
This is true in principle, but (1) I don't think that the user cares;
if they're looking at it, they know whether they want enabled or
disabled, how it got that way doesn't matter to them, and (2) I can't
see why an admin would disable delivery except on request from a user,
so I can't see why an admin would reenable except on request from a
user. The only case I can see would be a mass reenabling, but that's
not going to happen in the future (I hope).
> -- Some mailing lists will have multiple list owners managing them. So
> it is important for one List Owner to know when a subscription has been
> disabled by the actions of another List Owner.
I don't see why, see above.
> -- A List Owner may not know that some of his List Members are bouncing
> messages for various reasons, so reviewing their Membership roster, they
> see that they have some list members disabled due to bounces and can
> then address those particular problematic members.
This query is an important use case. But it's the only one, I think,
unless you really have List Owners arbitrarily disabling members'
subscriptions. And if you're thinking about reenabling from that
page, I think you need a lot more information. For example, if the
admin disabled, you need to know if that was a user request or
something else (what?). If bounce disabled, you want to know what the
bounce was ("no such mailbox"? probably not a good candidate for
reenabling), and when (5 minutes ago? ditto). I guess you could just
reenable and see what happens, but that could be risky (eg, sending
mail to non-existent users is frowned upon by some providers).
> @Abhilash, I highly recommend that you contact me off list about getting
> access to Affinity so you can see what I am talking about. I would love
> to show you what I have done for Member Management. I offered the same
> to Steve but he never was interested in taking a look.
It's not that I lack interest, it's that life got in the way.
Unfortunately, until I get enough time (man-weeks, I've never worked
on Postorius and very little in Django) to work on Postorius, or
somebody else starts to do it, a look at Affinity is low priority.
Also, it's pretty clear that a quick look isn't going to be very
helpful. The Mailman developers know what Mailman 2 looks like. I
think the benefits to a hands-on admin are pretty obvious vs the
current Postorius, as are Web 2.0 improvments like sorting on the
options. The more subtle improvements you've made are going to
require a guided tour and/or some study to identify and understand.
Aside: I have to assume that Postorius is aimed at the kind of
subscriber that most of us are, and that list administration was
something of an afterthought, and assumed to be mostly hands-off.
That's the only rationale I can come up with for the design where
list admins need to go to the individual pages to see user options --
it was easier to reuse the user option page and just give the admin
permission to access and change it, than to provide a (sortable) list
with user details.
Steve
4 years, 2 months

[MM3-users] Re: hello, Discussion on how to subscribe to themailing list
by 朱超
Thanks for you apply.
At 2023-01-18 02:50:09, "Stephen J. Turnbull" <stephenjturnbull(a)gmail.com> wrote:
>朱超 writes:
>
> > 1. It is not the MTA that refuses to send emails because the
> > recipient's mailbox is too long, but the MUA that refuses to
> > send the email because the recipient's mailbox is too long.
>
>That's still non-conforming to RFC 821, published in 1982. Seriously,
>those mail clients are garbage and I have no sympathy for their users.
>We're certainly willing to make some changes to Mailman to make things
>a little easier for mailing list owners who have to deal with such
>users, but there's no excuse for using those MUAs in 2023.
>
> > https://www.example.com/mailman3/lists/$list_id/confirm/?token=$token,
> > but he reported 404.
>
>If you mean that literally, of course it did. example.com, and its
>siblings in the org, net, and edu domains, as well as all subdomains,
>are domains reserved for examples in documentation. They all resolve
>to the same IP (owned by IANA), which simply provides a web page
>explaining what those domains are for. There's no Mailman there. :-)
>
>For that to get a response from Postorius, at minimum you need to
>substitute your Mailman web host for "www.example.com", and the list's
>ID (usually the same as the posting address with "." substituted for
>the "@") for $list_id. You may also need to change the URL path,
>depending on the top-level urls.py you use for Postorius.
Yes, I know why 404 is reported,The url should be postorius not be mailman3, https://www.example.com/postorius/lists/$list_id/confirm/?token=$token, and it report success. I am curious why there is no similar processing logic for unsubscribing in postorius。Can we optimize for this?
> > 2. It is recommended to modify postorius, in order to keep the
> > logic function of the underlying mailman-core unchanged,
>
>More important than the detailed functions of mailman-core are the
>original requirements and design. Core should handle email (both in
>and out), and Postorius should handle web requests. It's asking for
>trouble to have core send mail to confirm subscription requests by
>mail, and Postorius to send mail to confirm subscription requests by
>web. Among other things it violates "Don't Repeat Yourself": if we
>(or you) change the confirmation template in core, we (or you) need to
>also change the confirmation template in Postorius. But it's very
>easy to forget, and an annoyance for reviewers to check.
>
>It's possible that the other core devs will overrule me on this, but
>you shouldn't hold your breath waiting for that. I've been very good
>at channeling the consensus of the devs for around 20 years now. :-)
>
If you use mailman-web (include postorius and django-mailman3 and django-allauth and so on) to set the template information, the template obtained by mailman-core is obtained by requesting mailman-web, so mailman-web saves the template information and can be used by postorius Used to process subscription information, which will not violate the principle of repeating yourself, For other scenarios, it may be a bit troublesome, but at present, I can use the template confirmation information to help me solve my difficulties.
What we do is to make the mailman community better and better。
Thanks
>Steve
>_______________________________________________
>Mailman-users mailing list -- mailman-users(a)mailman3.org
>To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
>This message sent to tom_toworld(a)163.com
2 years, 3 months

[MM3-users] Re: Docker mailman3 delete social logins, did something change?
by Abhilash Raj
On 9/15/21 7:37 AM, bob B wrote:
> I want to remove the social logins from mailman3 in docker.
Which version tag are you using?
>
> I found this info
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
>
> but the link to the default shows
> ***************
> INSTALLED_APPS = []
> DEFAULT_APPS = [
> 'hyperkitty',
> 'postorius',
> 'django_mailman3',
> # Uncomment the next line to enable the admin:
> 'django.contrib.admin',
> # Uncomment the next line to enable admin documentation:
> # 'django.contrib.admindocs',
> 'django.contrib.auth',
> 'django.contrib.contenttypes',
> 'django.contrib.sessions',
> 'django.contrib.sites',
> 'django.contrib.messages',
> 'django.contrib.staticfiles',
> 'rest_framework',
> 'django_gravatar',
> 'compressor',
> 'haystack',
> 'django_extensions',
> 'django_q',
> 'allauth',
> 'allauth.account',
> 'allauth.socialaccount',
> ]
> *****************
The link to default is a dynamic one, so it changes as the changes are
made in the repo, unfortunately, this is basically the new stuff that
isn't out yet.
>
>
> However when I go to the bug https://github.com/maxking/docker-mailman/issues/283
>
> it shows
>
> *********
> INSTALLED_APPS = (
> 'hyperkitty',
> 'postorius',
> 'django_mailman3',
> # Uncomment the next line to enable the admin:
> 'django.contrib.admin',
> # Uncomment the next line to enable admin documentation:
> # 'django.contrib.admindocs',
> 'django.contrib.auth',
> 'django.contrib.contenttypes',
> 'django.contrib.sessions',
> 'django.contrib.sites',
> 'django.contrib.messages',
> 'django.contrib.staticfiles',
> 'rest_framework',
> 'django_gravatar',
> 'paintstore',
> 'compressor',
> 'haystack',
> 'django_extensions',
> 'django_q',
> 'allauth',
> 'allauth.account',
> 'allauth.socialaccount',
> 'django_mailman3.lib.auth.fedora',
> 'allauth.socialaccount.providers.openid',
> 'allauth.socialaccount.providers.github',
> 'allauth.socialaccount.providers.gitlab',
> 'allauth.socialaccount.providers.google',
> )
>
> ********
>
>
> The two examples are different so what should it be?
If you want to remove social auth applications, you basically want to
override INSTALLED_APPS configuraiton in your settings_local.py. In the
list above, you want to remove everything after
'django_mailman3.lib.auth.fedora' and set that as INSTALLED_APPS in your
settings_local.py.
>
> I tried to add it in both ways and when I do I get bad gateway and he mailman website is broke. I have not setup any domains yet, just setup the admin password,.
Bad gateway usually will emit some sort of logging error in the mailman
logs at /opt/mailman/web/logs/, what kind of exception are you seeing there?
The configuration above, while enables social auth, shouldn't *break*
the website. There must be errors/exceptions in logs to point in the
direction of what the error might be.
>
>
> For example this breaks my website
>
> cat /opt/mailman/web/settings_local.py
>
> ALLOWED_HOSTS = ['127.0.0.1','localhost','REDACTED','REDACTED','REDACTED','REDACTED','REDACTED']
> #ALLOWED_HOSTS = ['*']
> DEBUG = True
> #DEBUG = False
> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
> EMAIL_HOST = 'REDACTED'
> EMAIL_PORT = 25
> INSTALLED_APPS = (
> 'hyperkitty',
> 'postorius',
> 'django_mailman3',
> # Uncomment the next line to enable the admin:
> 'django.contrib.admin',
> # Uncomment the next line to enable admin documentation:
> # 'django.contrib.admindocs',
> 'django.contrib.auth',
> 'django.contrib.contenttypes',
> 'django.contrib.sessions',
> 'django.contrib.sites',
> 'django.contrib.messages',
> 'django.contrib.staticfiles',
> 'rest_framework',
> 'django_gravatar',
> 'paintstore',
> 'compressor',
> 'haystack',
> 'django_extensions',
> 'django_q',
> 'allauth',
> 'allauth.account',
> 'allauth.socialaccount',
> 'django_mailman3.lib.auth.fedora',
> 'allauth.socialaccount.providers.openid',
> 'allauth.socialaccount.providers.github',
> 'allauth.socialaccount.providers.gitlab',
> 'allauth.socialaccount.providers.google',
> )
> *************************************************************************
> And I have even removed anything?
>
> What should my /opt/mailman/web/settings_local.py look like?
--
thanks,
Abhilash Raj (maxking)
3 years, 7 months

[MM3-users] Re: how to integrate subscription into static jekyll website
by Stephen J. Turnbull
Stephen J. Turnbull writes:
> Hagen Bauer writes:
> > So the public does not see the credentials. And if my nginx host
> > config is hacked I have a problem anyway.
>
> I can't speak for Abhilash, but what would worry me is not that nginx
> is already hacked,
Urk. nginx may be *already* hacked. Via Twitter:
http://twitter.com/x0rz/status/1052899891624710145
Note: I originally saw this via Brian Krebs, but his tweet seems to
have been deleted (the corresponding /briankrebs/status/... URL 404s),
and comments on his tweet indicate that some attempts to replicate
failed. So this may be a particular version, an already-fixed bug, or
a red team fail. x0rz is a pretty reliable red-teamer, but I don't
know anything about orange_8361 (the 0-day reporter). S/he may have
only reported publicly after giving nginx plenty of time to fix and
for the fix to propagate, or it may just be a screwup on her/his part.
Steve
6 years, 6 months

[MM3-users] Re: Best guide for installing from pypi
by Duane Raymond
Thanks Jacob and Abhilash,
I've had enough of trying to do it myself so I've asked Brian (I'd
previously asked him but he only does it on vanilla machines and I wanted
to use an existing setup). I'll learn from his work once it is running and
see what I can do without a migration deadline looming over me ;-)
Cheers,
Duane
On Wed, 24 Feb 2021 at 04:02, Abhilash Raj <maxking(a)asynchronous.in> wrote:
> Hi,
>
>
> On Tue, Feb 23, 2021, at 10:00 AM, duane(a)fairsay.com wrote:
> > Hi.
> >
> > I've got a partial mailman3 install done and, based on the
> > documentation, am not sure how to complete it! (this is my first time)
> >
> > I've installed mailman3 (3.3.3) on a Debian 10 server using python3.7,
> > mysql, postfix, apache, etc. and have run the install using pip3
> > install mailman. The "mailman info" command works, version shows
> > "3.3.3 (Tom Sawyer)" the databases creates, tables, all exist, etc. So
> > it seems the necessary services are running. I'm running froxlor on the
> > server to configure the non-mailman services (apache, ssl, postfix,
> > etc). I had also tried apt install mailman-full but it was an older
> > version, so using the pypi route ensured I was on the latest version.
>
> I don't know anything about Froxlor, so I won't be able to help with
> any issues caused due to that unfortunately.
>
> >
> > Looking at https://docs.mailman3.org/en/latest/install/virtualenv.html,
> > what I can't figure out is:
> > 1) There is no /opt/mailman/ user - the user installed seems to be
> > "list"
>
> The user recommended to create is "mailman" with "/opt/mailman"
> as the home directory for the user. Debian systems use the "list"
> user to run Mailman. You can simply substitute the user from
> mailman to list, the name itself doesn't make a lot of different, just
> make sure you do change the name in systemd config files and
> sudo commands that you use.
>
> > 2) Is a virtual environment needed for a production environment?
>
> It is recommended by Linux distros that you don't install from pip
> directly into the system's site-packages. This can *potentially*
> have side effects and break other systems that rely on Python
> packages installed on your system, some which you might not
> even be aware of that relies on Python (like, Yum package manager
> does in RHEL systems).
>
> Hence, if you aren't use the system packages to install Mailman,
> it is recommended that you use an isolated Python virtualenv.
>
> > 3) if django is setup properly or the webservice is working
> > 4) I've tried to connect to some web interface
> > (posterious/hyperkitty/some mailman3 web frontend) via lynx to
> > localhost:8001 on the local machine - but it has a 404 error
>
> 8001 is Mailman Core's API endpoint. To test Web Frontend,
> you want to reach out to: https://<mydomain>/ after configuring
> your Nginx to reverse-proxy the uwsgi.
>
> Uwsgi runs a custom protocol, also called uwsgi, which Nginx
> understands and is able to reverse proxy. You can't use Lynx
> to test that. However, if you do want to test your service
> locally, you can add this line the uwsgi.init[1] after the
> "uwsgi-socket" line:
>
> http-socket = 0.0.0.0:8080
>
> This will make uwsgi also accept HTTP connections on Port
> 8080 that you can use to test.
>
>
> [1]:
> https://docs.mailman3.org/en/latest/install/virtualenv.html#setting-up-a-ws…
>
>
4 years, 2 months

[MM3-users] Re: Different Mail Domain Cause Key Error
by Mark Sapiro
On 4/21/20 1:10 PM, Brian Carpenter wrote:
>
> Ok. The first thing however is did I miss a step?
Not really. The problem is FILTER_VHOST = True doesn't work for web
hosts that aren't email hosts.
> Here is the complete error that is sent to me via email as superuser:
>
>
> Internal Server Error:/mailman3/lists/
>
> KeyError at/mailman3/lists/
> 'file'
>
> Traceback:
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/exception.py"
> in inner
> 34. response = get_response(request)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py"
> in _get_response
> 115. response =
> self.process_exception_by_middleware(e, request)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py"
> in _get_response
> 113. response = wrapped_callback(request,
> *callback_args, **callback_kwargs)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/postorius/views/list.py"
> in list_index
> 755. paginator_class=MailmanPaginator)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/lib/paginator.py"
> in paginate
> 71. objects = paginator.page(page_num)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/lib/paginator.py"
> in page
> 46. number = self.validate_number(number)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/paginator.py"
> in validate_number
> 48. if number > self.num_pages:
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/utils/functional.py"
> in __get__
> 80. res = instance.__dict__[self.name] = self.func(instance)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/paginator.py"
> in num_pages
> 97. if self.count == 0 and not self.allow_empty_first_page:
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/utils/functional.py"
> in __get__
> 80. res = instance.__dict__[self.name] = self.func(instance)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/lib/paginator.py"
> in count
> 56. return self.function(count=0, page=1).total_size
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/postorius/views/list.py"
> in _get_list_page
> 751. advertised=advertised, mail_host=mail_host,
> count=count, page=page)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/client.py"
> in get_list_page
> 181. return Page(self._connection, url, MailingList, count, page)
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/page.py"
> in __init__
> 37. self._create_page()
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/page.py"
> in _create_page
> 62. response, content = self._connection.call(self._build_url())
>
> File
> "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/connection.py"
> in call
> 112. error_msg, response, None)
>
> *During handling of the above exception (HTTP Error 404: {"title": "404
> Not Found"}), another exception occurred:*
The above 404 is the underlying problem.
In the traceback above we see that
/opt/mailman/mm/venv/lib/python3.7/site-packages/postorius/views/list.py
at line 751 calls client to get the view for lists for this host.
The full code is
def _get_list_page(count, page):
client = get_mailman_client()
advertised = not request.user.is_superuser
mail_host = request.get_host().split(":")[0] if (
getattr(settings, 'FILTER_VHOST', False)) else None
return client.get_list_page(
advertised=advertised, mail_host=mail_host, count=count,
page=page)
The issue is the FILTER_VHOST = True setting is broken. This is
<https://gitlab.com/mailman/postorius/-/issues/394>
The broken code tries to get the lists for the domain in the requesting
URL which here is the web_host but the web_host has no lists.
This is a complicated issue. See the whole comment thread in the issue
where I am trying to mentor someone to a fix, but he apparently has
given up.
The issue is we don't have a method for retrieving lists by web host. It
is simple enough to get all the email hosts associated with a web host,
but what do we do if that's more than one email host.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years

[MM3-users] Re: Hyperkitty no longer archiving
by Hirayama, Pat
> -----Original Message-----
> From: Mark Sapiro <mark(a)msapiro.net>
> Sent: Tuesday, November 22, 2022 1:28 PM
> To: mailman-users(a)mailman3.org
> Subject: [MM3-users] Re: Hyperkitty no longer archiving
>
<snip>
>
> However, those are from cron jobs and say nothing about the wsgi process
> that runs the web UI and the hyperkitty api.
>
OK, I see uwsgi running in process table.
PID USER TIME COMMAND
1 mail 0:13 uwsgi --ini uwsgi.ini
7 mail 1h11 uwsgi --ini uwsgi.ini
There is only one uwsgi.ini file, and it is in the same directory as settings.py, settings_local.py and wsgi.py
I'll see if I can find some logs for uwsgi that might provide some more insight.
Thanks!
-p
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org
2 years, 5 months

[MM3-users] Enable delivery
by Hirayama, Pat
Greetings,
I'm finding something a bit odd with our listserv. Some of the members of some of the lists are reporting that they aren't receiving messages sent to the list. When I review the member options for the person in question, I see that Delivery Status shows nothing selected (i.e. neither radio button is selected for Enabled or Disabled).
If I select Enabled and Save, then delivery starts working for that user.
There are other members of the list that have neither Enabled or Disabled selected, but they are working. Which also seems to mean that when I run:
mailman members --nomail any listname@listserv
Nothing is returned.
If anyone has any ideas about why this might be the case, or how I might proactively identify other members who aren't receiving mail, that would be appreciated. Alternately, any thoughts on how I might force all members to Delivery Status Enabled, that would also be great.
Thanks!
-p
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering - Infrastructure
Fred Hutch Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org<mailto:phirayam@fredhutch.org>
4 months, 2 weeks

[MM3-users] Re: moving lists to another server
by Stephen J. Turnbull
Odhiambo Washington writes:
> Hello Stephen et al,
>
> Since this topic is relevant to something I am faced with at the moment, I
> believe it's okay if I piggyback on the thread.
I think continuing the thread is appropriate, but I personally would
change the Subject to reflect the specifics.
> I have a server that is already actively distributing Mailman list traffic,
> and managing users and archives.
> I have offered to take over another community ML (also using MM3) from
> another server and host the list on my server.
> I am scratching my head bald trying to figure out how to bring in this
> other MM3 site and list into my existing server, especially with regard to
> the DB backend.
>
> The list - let's call it users(a)domainX.name was using MySQL backend and
> had a separate DB for Mailman core and Mailman web.
> I believe combining these into one isn't a problem. But getting to merge
> this DB into my current one is what I am not sure about.
>
> Any pointers on how to bring in this new site into my current setup??
I don't have pointers, in the sense of concrete advice I would not be
horrified if you followed it to the letter. Here's how I would attack
the problem.
1. Decide the List-Id and List-Post questions. I disagree with Mark
about List-Id (or maybe he mistyped List-Post?) -- the List-Id
should NOT be changed. I don't know how many users are taking
advantage of List-Id (my filters do!), but they will thank you for
keeping it the same.
The List-Post question is contingent. Will you be serving their
domain, or will you change the List-Post address? Note that with
some additional configuration to Mailman and your MTA they could
set up a forwarding configuration for their lists to your server,
Or if they don't have other email needs, set up an MX. Or they
can transfer their domain name's A and MX records to your host.
Alternatively you can change the List-Post address.to your
domain. In that case you will have to edit the List-Post address
in your database.
2. There are similar issues for mailman-web (especially host names).
I have not thought about them at all, so I'll leave that for the
interested reader. ;-)
3. (If the DB engines are different) Dump both databases in text
format (ie, scripts of SQL commands). Check to see how they
differ.
4. Adapt the foreign database to its new environment with search and
replace. (Be verbose about the search terms, include lots of
context to minimize the chance of inadvertantly replacing
something in the wrong context that you missed in step 3.) This
is where you would change the List-Post address, as well. You
will also want to change the 'mailmanweb' database to just 'mailman'.
5. (Optional if your name is "Daredevil") Create a new Mailman suite
install using your current configs, preferably in a new VM or set
of containers. Configure the MTA to save all outgoing mail to a
file, or maybe firewall off outgoing network traffic to port 25
and leave all the posts in the MTA queues. Create a new
'mailman-test' database. Copy all the dumps to the VM, and edit
the names of the databases in the SQL to 'mailman-test'. Restore
the dump of your system into the database, and test. Then do the
same, restoring the mailman and mailmanweb databases from the
foreign system into this new database.
6. Adjust to address any issues discovered in 5. If none, go to 7,
Otherwise go back to 5.
7. Apply any changes made in 6 to your configs, and read the foreign
dumps into your system, and you should be ready to go for the
distribution part. Not sure about host and webserver
configuration for mailman-web, though.
Steve
1 year, 5 months

[MM3-users] List is down - RemovedInDjango30Warning
by Mark Dadgar
So I did the latest mailman upgrades within my venv (per the instructions got from Brian Carpenter when he installed it for me) to the latest version. I had a strange CPU pegging issue that turned out to be mailman struggling with a malformed message but in the process of debugging that I downgraded to the previous mailman release.
The resulted in a broken web interface.
Today, while debugging, I did a pip install --upgrade of all the components as listed in a previous thread. Now none of the mailman3 processes will start.
Doing a bin/mailman-post-update results in the error message below, which are consistent with the issues I saw earlier when trying to access the web interface.
Anyone got a solution to this?
I suspect it’s something simple, but django is just not my area of expertise.
Thanks!
- Mark
-----
mark(a)pdc-racing.net | 408-348-2878
———
(venv) mailman@mail:/opt/mailman/mm/bin$ ./mailman-post-update
+ '[' False == False ']'
+ mkdir -p /opt/mailman/mm/static
+ /opt/mailman/mm/bin/django-admin collectstatic --clear --noinput --verbosity 0
+ /opt/mailman/mm/bin/django-admin compress
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/utils.py", line 66, in __getitem__
return self._engines[alias]
KeyError: 'django'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 121, in get_package_libraries
module = import_module(entry[1])
File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 783, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/contrib/admin/templatetags/admin_static.py", line 5, in <module>
from django.utils.deprecation import RemovedInDjango30Warning
ImportError: cannot import name 'RemovedInDjango30Warning' from 'django.utils.deprecation' (/opt/mailman/mm/venv/lib/python3.8/site-packages/django/utils/deprecation.py)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/mm/venv/bin/django-admin", line 8, in <module>
sys.exit(execute_from_command_line())
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/management/base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/core/management/base.py", line 369, in execute
output = self.handle(*args, **options)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/compressor/management/commands/compress.py", line 277, in handle
self.handle_inner(**options)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/compressor/management/commands/compress.py", line 300, in handle_inner
offline_manifest, block_count, results = self.compress(engine, extensions, verbosity, follow_links, log)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/compressor/management/commands/compress.py", line 100, in compress
if not self.get_loaders():
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/compressor/management/commands/compress.py", line 50, in get_loaders
for e in engines.all():
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/utils.py", line 90, in all
return [self[alias] for alias in self]
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/utils.py", line 90, in <listcomp>
return [self[alias] for alias in self]
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/utils.py", line 81, in __getitem__
engine = engine_cls(params)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 25, in __init__
options['libraries'] = self.get_templatetag_libraries(libraries)
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 43, in get_templatetag_libraries
libraries = get_installed_libraries()
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 108, in get_installed_libraries
for name in get_package_libraries(pkg):
File "/opt/mailman/mm/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 123, in get_package_libraries
raise InvalidTemplateLibrary(
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'django.contrib.admin.templatetags.admin_static': cannot import name 'RemovedInDjango30Warning' from 'django.utils.deprecation' (/opt/mailman/mm/venv/lib/python3.8/site-packages/django/utils/deprecation.py)
4 years, 2 months

[MM3-users] Re: Moderation Action Changed After Import
by Brian Carpenter
On 2/12/21 4:21 PM, Mark Sapiro wrote:
> Yes, You did the right thing. I was mislead by "He said the previous
> moderation was the list's default which was hold for moderation." which
> is Mailman 3 terminology.
>
> The list does need to be created first, but it should be a new list with
> no members, owners, etc., not an operational Mailman 3 list.
>
> So, it seems that most of the members of the MM 2.1 list were moderated
> and the list's member_moderation_action was Reject. Is this not the case?
Sorry for the wrong terminology
I can't confirm what was set on the old MM2 list as it is no longer
accessible. I am just going on the word of the List Owner. My opinion is
that the moderation for those list members were set to Reject on the
previous MM2 list. I am mainly interested to see if you know of this
happening to anyone else and/or perhaps there is an existing bug that
could impact the moderation settings of imported MM2 lists.
--
Brian Carpenter
Harmonylists.com
Emwd.com
4 years, 2 months

[MM3-users] Re: Converting non-members to members
by Alan So
Many thanks for your reply. Sorry for replying late as I was on vacation.
Here is the snippet of code I use. I originally want to test whether a non-member is already a member before subscribing. However, if he/she is not, the python script exit due to HTTP error. If I comment out the code, then there is error when it try to add the non-member as member. Concerning the moderation_action and delivery_status, thanks for showing me the allowed values. I have corrected that part.
One more question, can we remove the non-members? I am actually referring to the Example Usage doc (http://docs.mailman3.org/projects/mailmanclient/en/latest/src/mailmanclient…)
Snippet of code:
print ("\nNon-members:")
for nonmember in my_list.nonmembers:
print ("%s: role=%s moderation_action=%s" % (nonmember, nonmember.role, nonmember.moderation_action))
print ("Converting nonmember to member.....")
importedmember = my_list.get_member(nonmember.email)
if (importedmember):
print ("Already imported " + nonmember.email)
else:
imported = my_list.subscribe(nonmember.email, 'Import from nonmember', pre_verified=True, pre_confirmed=True, pre_approved=True)
importedmember = my_list.get_member(nonmember.email)
importedmember.save()
print ("Importing " + nonmember.email)
importedmember.moderation_action = 'accept'
importedmember.save()
prefs = importedmember.preferences
prefs['delivery_status'] = 'by_user'
prefs.save()
6 years, 3 months

[MM3-users] is it possible to rebuild mailman-web database please?
by Stephen J. Turnbull
Giovanni Biscuolo writes:
> After the upgrade I got this very same issue:
> https://gitlab.com/mailman/hyperkitty/-/issues/328
Looking at the discussion in that issue, I wonder if there is a bug in
sqlite3. The reference to 'hyperkitty_email__old' which apparently
doesn't exist in the database or in Mailman migration code suggests
that this is internal to sqlite3 when you do a schema change. You
could try posting to sqlite3 channels. In general, this is NOT a
Mailman problem, it's a database problem. We'll do what we can to
help you, but we know a lot of Mailman and Python, and a little bit of
SQL. If the database gets corrupted, database internals is not our
area of expertise.
FWIW, Postgres is currently the recommended RDBMS. MySQL/MariaDB are
also usable, but it's somewhat fragile in its default configuration (I
think one Mailman issue depending on implementation dependent behavior
is now fixed and there's a workaround for MySQL's default refusal to
handle emoji, but OS distributions are not necessarily up to date, and
MySQL's history has been one thing after another for us). sqlite3 is
supported primarily so Mailman unit tests don't depend on a separate
full-scale RDBMS being installed. As far as I know it works fine
within its limits, but I believe there are some limits that Mailman
installations occasionally run into, and the full-scale databases
perform better.
I'm not saying "don't use sqlite3"; you have to consider whether you
are likely to run into hard limits or performance issues, and that
will probably never happen if you are running a couple of low-traffic
lists. However, given that that your database is currently seriously
damaged and may be irreparable (see below), it might be a good time to
consider switching RDBMS and starting from scratch. You probably do
have Postgres or MySQL (or the MariaDB variant) installed already, as
many applications pull one or the other in.
> Actually the django_site table is in the database so I can't understand
> why of this message.
One cause of this kind of situation is that there are several copies
of the database lying around, and the database you found the table in
is not the database HyperKitty is using. Even if there's only one
copy visible on disk: if you have a process that attached to an old
database file still running, that file could be deleted (ie, removed
from the directory and marked for deletion) but the data will still be
preserved and used by that process until the process is terminated. I
think this is unlikely: database managers usually are quite protective
of the files they use both as data and as they are managed by the OS,
and I would think sqlite3 would notice if its database file were
removed by another process. But the general principle stands: make
sure all processes have been stopped, move any database files that
aren't current somewhere Mailman can't find them (eg, removable media
and remove it!), and restart the Mailman system.
> Please is there a way to recreate the mailman-web database from
> scratch or to fix this kind of problems?
That depends. If you have a user base that has interacted with the
web interface, creating users, authenticating email addresses,
changing their profiles, then no, you can't recreate it from scratch.
You lose all their authentication and profile data, although you might
be able to get a mostly complete list of users and addresses from the
subscription database in Mailman core.
Otherwise, I would first dump the corrupted database to an SQL script
to recreate the database, then reinstall HyperKitty, then find an SQL
expert to help me figure out which parts of the SQL script are
relevant, which are going to cause errors (eg, trying to create tables
that already exist because of the installation process), and what I
need to do by hand because it is part of the data that got corrupted.
Mark may have other ideas, but he seems to have covered most of the
possibilities in the issue #328 already.
4 years, 2 months

[MM3-users] RDS CA changes
by Hirayama, Pat
Hello,
So, my Mailman3 installation (inherited – guy who set it up has left) is using PostgreSQL that is an AWS RDS instance. I have received an alert from AWS that the CA certificate used to create the database is expiring, and they want me to update the certificate before it expires:
"Update Your Amazon RDS and Amazon Aurora SSL/TLS Certificates by August 22, 2024 "
https://aws.amazon.com/blogs/aws/rotate-your-ssl-tls-certificates-now-amazo…
Our DBA team is requesting that we update applications by installing the new CA within the application's certificate store.
As near as I can tell from reading the Mailman 3 docs, and looking at my mailman.cfg and settings_local.py ... I don't know that Mailman 3 is using certificate verification for the PostgreSQL connection. At least, I can't see anything in those configuration files that suggest this. Does anyone know if this is the case – or which configuration file I should look at to verify? Will my Mailman 3 be ok if the DBAs go ahead and update the certificates on their end?
Thank you!
-p
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering - Infrastructure
Fred Hutch Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org<mailto:phirayam@fredhutch.org>
8 months, 2 weeks

[MM3-users] Re: Moderation Action Changed After Import
by Mark Sapiro
On 2/12/21 1:02 PM, Brian Carpenter wrote:
> On 2/12/21 3:14 PM, Mark Sapiro wrote:
>> It seems you imported to an existing list with import21. This is
>> probably not a good idea.
>>
>> Those members who were moderated members of the MM 2.1 list will have
>> their moderation action set to Hold, Reject or Discard based on the 2.1
>> list setting.
>
> I don't understand. Does not the import21 script require the Mailman 3
> list to be created first? The Mailman 3 list was new with no members
> when I ran the import script.
Yes, You did the right thing. I was mislead by "He said the previous
moderation was the list's default which was hold for moderation." which
is Mailman 3 terminology.
The list does need to be created first, but it should be a new list with
no members, owners, etc., not an operational Mailman 3 list.
So, it seems that most of the members of the MM 2.1 list were moderated
and the list's member_moderation_action was Reject. Is this not the case?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
4 years, 2 months

[MM3-users] Re: MASS mailing list import - 900 ezmlm lists to Mailman
by Stephen Turnbull
Hi, Grant,
Aside from Mark's suggestions, a few comments. First, I wouldn't depend on any software to help you with GDPR; it's still an labor-intensive regulation, and conforming to it doesn't even guarantee you won't violate the regulations of member countries. For some lists Mailman's anonymous list configuration may help you preserve privacy, it's pretty good at removing PII from the (usually invisible, but trivial to expose) message header.
Second, apparently you have the necessary authorization to install software on the new host. If so you should consider going straight to Mailman 3. Who knows when cPanel will make the jump, but I can say they have been watching Mailman 3 development for a few years now, and with both Mailman 2 and Python 2 EOL they're probably thinking seriously about it within the life of your lists.
One advantage to Mailman 3 over Mailman 2 is that there are several UIs and APIs for configuring lists, giving you more options for batch configuration. Installation is pretty straightforward, configuration is somewhat complicated but anybody subscribed to this list can help (and frequently does before the devs get to it). Both versions of Mailman support announcement lists and plain old discussion lists well. I forget about Mailman 2, but Mailman 3 has a "style" you can select at list creation time to set it up for announcements.
Third, if the ezmlm list configuration database is well-documented, I don't see why it would be difficult to write a batch script to mass-convert ezmlm lists to Mailman 3 lists. We already have one to do that for Mailman 2 to Mailman 3 that would serve as a template. I don't know what the level of tech for conversion *to* Mailman *2* is, there might be something already available (I haven't managed anything but Mailman lists since 1997... 😮). Unfortunately, if anybody would know if *we* would have such a thing, Mark would, so since he didn't mention one I guess you have to look elsewhere.
Fourth, Mailman 2 doesn't use an external database (configurations are in a Python-specific format and the archives are just a static website), but Mailman 3 plays well with the usual suspects = MySQL and PostgreSQL, and also supports SQLite3. ISTR either seeing list members talking about using Oracle or some documentation of it; presumably you can use anything that the SQLAlchemy Python package supports.
The only potential disadvantage I can see to Mailman 3 over Mailman 2 is that if you ever need to redact stuff from the archives, for Mailman 2 you can use an ordinary editor but for Mailman 3's bundled archiver HyperKitty it's a database operation, so you'll need to either learn those skills or befriend/pay for someone who has them.
Be happy to help with more specific questions.
________________________________
From: grant(a)horizonsunlimited.com <grant(a)horizonsunlimited.com>
Sent: Wednesday, April 19, 2023 9:41 AM
To: mailman-users(a)mailman3.org <mailman-users(a)mailman3.org>
Subject: [MM3-users] MASS mailing list import - 900 ezmlm lists to Mailman
Hi,
I hope someone can help.
I have 900-ish, mostly small lists, basically all locations round the globe where people have volunteered to help particular people passing though. Those lists have 2 to 200 people. There are about 50 lists of up to 1000 people each we use for announcements. So two different setups, and a whole lot of manual work.
I am moving from an old, now unreliable, host to a new one. Hopefully reliable, certainly cheaper, and better for privacy GDPR etc regs.
Mailman is already installed, appears to be version 82?? on cPanel 108.0.15. Ezmlm, no surprise, is not. Installing and configuring it is not something trivial, also have to install gmail etc. Yuck.
So, Mailman... going through to create one, I can see that 900 will be my life's work.
I'm not a programmer, but reasonably technical, write html, css skills poor but adequate, command line isn't tooo scary, MySQL I don't go near. DOS batch files no problem! :)
ANY IDEAS / suggestions appreciated!
Thanks, Grant
_______________________________________________
Mailman-users mailing list -- mailman-users(a)mailman3.org
To unsubscribe send an email to mailman-users-leave(a)mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
This message sent to turnbull.stephen.fw(a)u.tsukuba.ac.jp
2 years

[MM3-users] Re: Using REST with CLI using curl .... help needed
by Stephen J. Turnbull
kontakt(a)michaelbakonyi.de writes:
> I have the same usecase as Krešimir and tried the example of
> Mark. So in mailman.cfg I set hostname to
> "https://lists.mydomain.org" and then fire this command
I don't recall this, and unfortunately Mark is on vacation and
completely offline until mid-September, except for maybe a couple days
next week.
> curl -urestadmin:mypw --referer https://lists.mydomain.org --request POST -H 'Content-Type: application/json' --data-binary '{"list_id": "thelist.lists.mydomain.org", "subscriber": "user(a)example.net", "display_name": "Joe User", "pre_verified": true, "pre_confirmed": true, "pre_approved": true}' https://lists.mydomain.org/mailman3/postorius/lists/thelist.lists.mydomain.…
>
> But then I get a CSRF-warning. Do I now have to get the token and
> put it in my POST or is there an easier way to do this?
As far as *I* know there's no way to avoid the CSRF warning. If that
means you can't get the response data you need, you will have to do
the CSRF two-step.
With luck maybe Mark will see this in a few days but I think he's
going to be busy preparing the 2d half of his trip.
Regards,
Steve
2 years, 8 months

[MM3-users] Re: E-mail every minute: "Cron <www-data@sharky5> ..."
by Odhiambo Washington
On Sun, Jul 7, 2024 at 8:43 PM Robert Heller <heller(a)deepsoft.com> wrote:
> At Sun, 7 Jul 2024 19:48:02 +0300 Odhiambo Washington <odhiambo(a)gmail.com>
> wrote:
>
> >
> > On Sun, Jul 7, 2024 at 7:16 PM Robert Heller <heller(a)deepsoft.com>
> wrote:
> >
> > > At Sun, 7 Jul 2024 18:52:05 +0300 Odhiambo Washington <
> odhiambo(a)gmail.com>
> > > wrote:
> > >
> > > >
> > > > On Sun, Jul 7, 2024 at 4:12 PM Robert
> Heller <heller(a)deepsoft.com>
> > > wrote:
> > > >
> > > > > What am I missing? I *think* I have mailman3 *mostly* setup, but
> there
> > > > > are
> > > > > still some configuration things that are missing, but I am not sure
> > > how to
> > > > > fix
> > > > > them (the docs are NOT clear).
> > > > >
> > > >
> > > > Which docs are you relying on?
> > >
> > > https://docs.mailman3.org/en/latest/config-web.html
> > >
> > > I presume these are the official docs for mailman3 -- maybe they
> aren't?
> > >
> > > >
> > > > How about this -
> > > https://docs.mailman3.org/en/latest/install/virtualenv.html
> > > > ??
> > >
> > > I'm not using a virtual environment. I'm using all native Debian 12
> > > packages,
> > > installed via apt. The virtual environment docs are actually even worse
> > > (even
> > > more confusing).
> >
> >
> > Worse? :-)
>
> Even more confusing. Both sets of docs make various assumptions and don't
> really explain things properly. Like everywhere where "settings.py" is
> mentioned, it really means "/etc/mailman3/mailman-web.py"
>
No! It means /etc/mailman3/settings.py - literally!
> In any case, the virtual environment docs are hard to relate to a "native"
> install and are generally hard to follow, since they seem to jump all over
> the
> place.
When one day you'll be able to internalize what a Python virtual
environment is, you'll realize that it's VERY convenient.
You will actually embrace it from that point onwards.
(Spaghetti docs?) And it is hard to replace the various (and not
> always consistent) virtual environment paths and settings files to the
> "native"
> paths.
Actually, if you're this inclined to run everything natively, MM3 is
perhaps not for you. Why? Because you'll not easily find help here.
We focus on the virtual environment only as the standard.. Why? Because no
one is willing to deal with ALL the OS-centric packaging
out there. Python virtual environment is universal across all the OSes, I
can say.
> The "official" docs are just not useful to me, since I am not using a
> virtual
> environment. If a virtual environment is recomended, what is the point of
> the
> Debian 12 packages?
We cannot answer that here. I guess they are meant for people like you who
strive under pain :-)
With the Python virtual environment, I can install and manage MM3 in almost
any *nix OS.
> Are they just not meant to be used? Really? Do you mean that I should use
> a separate package management system for Mailman3? That
> really sucks.
>
Yes, they are meant to be used. Noone denies that. However, they are not
packaged by the Mailman Developers.
Did you read one response from Mark Sapiro where he said, and I quote:
```
If you prefer to use the Debian packages, that's fine, but if using the
Debian packages, your primary resource for support, documentation, bug
reports, etc. should be Debian. See https://wiki.list.org/x/12812344
```
So yes, go ahead and use the Debian packages. No one is stopping you.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
9 months, 2 weeks

[MM3-users] Re: Emergency Moderation
by Mark Sapiro
On 5/24/20 10:59 AM, Allan Hansen wrote:
> In the MM3 settings there is an option to ‘Hold for moderation’ when members or non-members post to the list.
> I use that for the same cases where in MM2 I switched a list to ‘Emergency Moderation.’
If you imported your MM 2.1 lists with `mailman import21`, `emergency`
was set appropriately for the imported list and should be working to
hold posts regardless of other settings.
> My own current top-of-the-list issues:
>
> A bug: Moderators can’t see/edit the list of members even when allowed to by list setting.
The visibility issue is <https://gitlab.com/mailman/postorius/-/issues/369>.
Editing membership beyond what could be done via the admindb interface
(i.e. clearing a moderated poster's mod flag) was never allowed for a
moderator in MM 2.1.
In MM 3, a moderator can set a member's moderation when handling a held
post. Do you think a non-owner moderator should be able to make other
changes to a member?
> A feature request: Member changing email address on all lists he/she belongs to, without involving moderators.
This is <https://gitlab.com/mailman/postorius/-/issues/399> and we're
working on it.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
4 years, 11 months

[MM3-users] Re: Member Issue Discovered
by Stephen J. Turnbull
Brian Carpenter writes:
> If you mean if they don't have a Django user account, they can't
> unsubscribe?
The Django user account is more or less a proxy for the underlying
Mailman User object, which is what we're concerned with here because
that's where the data you want deleted is stored.
> I think that is true if they are wanting to unsubscribe via
> the web interface. But sending an email to
> listname-unsubscribe@listdomain allows them to unsubscribe without such
> user authentication. Isn't that correct?
They don't need a Django password or social auth, but they'll still
have to do the OTK dance. I don't see a reason to distinguish the
methods of authentication. They all reduce to the OTK dance to prove
ownership of a mailbox, then optional *delegation* to a password in
Django or social auth via Gmail etc.
I understand that your users don't understand this or care to. Thing
is, some of *our* users care about the features that this architecture
enables.
> My intent in our changes is to give the list owner and member
> exactly what they expect: when they explicitly remove a
> subscription and/or user profile, that they expect their data to be
> totally removed.
That's fine, and you're welcome to implement that in Affinity. In
fact, as I understand it, you have already done so. *I'm* not saying
*nobody* should implement that.
I'm saying that *Mailman* shouldn't, because a lot of subscribers to
Mailman lists won't like it. The whole point of Mailman 3 is to cater
to users who want powerful control over their subscriptions. For
Mailman (Postorius), prompting the user "If you delete this
subscription, you will have no subscriptions linked to this account.
Would you like to delete the account as well?" (as I have proposed
three times now) is the right way to go. This can be implemented via
email with a second OTK.
> I can easily picture a scenario where an older list has a number of
> list members move to on to other things in life
And I can picture a scenario where they take a summer break and
reactivate a decade later. I would be *pissed off* if my data got
deleted in that scenario. (Yes, I've done that in the five year
variant, if not the full decade.)
> and even abandon their email accounts totally.
Which is a totally different scenario. I deny your "imperative" in
the former case; inactivity from the point of view of a list owner is
(usually) not abandonment. I question it in the latter, because
"abandon" is an inference drawn from lack of activity or bounces,
either of which could be inadvertant (respectively the "summer break"
scenario, and separation from an employer).
> In those cases it is imperative that those list addresses are
> removed either via bounce processing or list owner intervention and
> that no legacy data on such members remain.
But how do you propose to identify "legacy data"? In Mailman 3,
members are *people*, not addresses. Do you really want it to be the
case that if Albert signs up with albert(a)example.com, and later gets
fired by example.com, then all his subscriptions get bounce-cancelled,
and his User profile gets irreversibly trashed? Or some large email
provider hosting lots of posters decides to suddenly implement some
spam protection that causes a ton of bounces (as DMARC p=reject did in
2014) and hundreds of users have their accounts trashed?
You just can't know without asking Albert what he wants done in his
case and you can be quite sure you're doing the wrong thing in the
DMARC-like case. In either case, resubscribing is a click per list if
his data is retained (and Albert needs an OTK confirmation of another
address). It's an annoying session of duplicating his configuration
(including passwords and social auth links) if not, and probably some
months of discovering that a configuration that built up over years
wasn't accurately reproduced for some lists.
List owners, of course, can do what they want with their lists. If
they want to add automation for their subscribers that simplify the
lives of people who have simple needs, that's not something Mailman
can, should, or will try to stop. That's *why* I support efforts like
Affinity, Empathy, and Harmony.
Steve
4 years, 5 months

[MM3-users] Re: Easiest way to install a new mailman3 deployment?
by Stephen J. Turnbull
ieso(a)johnwillson.com writes:
> Here's an interesting suggestion I received that I'm going to kick
> around a bit.. has anyone tried using Ansible to assist the
> installation process?
>
> https://github.com/rivimey/ansible-mailman3
rivimey is very competent. That would undoubtedly be a good place to
start. However, her setup may be more complicated than most folks
need (IIRC, she has a multi-homed setup with Mailman core, Postorius,
and HyperKitty on three separate IPs on a separate subnet in the DMZ,
while Mailman was really designed for three Mailman applications
running on the same host, along with the database server and MTA).
> I hadn't heard of Ansible before, but it looks perfect for this
> kind of situation.
By the way: Ansible is not the only such application, but a Friend of
Mailman used to work there (I think he's since been transferred
elsewhere after they got acquired by RedHat), so if people want to
work on this kind of thing, we may have more resources vs. Ansible
than say Chef or Puppet.
I'm not sure we want to maintain an Ansible configuration, but I
imagine we could stick it in contrib as "an example that works for
somebody YMMV unsupported NO WARRANTY". :-)
Steve
4 years, 3 months

[MM3-users] Re: Single-Sign-out for List member
by Stephen J. Turnbull
Abhilash Raj writes:
> If this is one-click, can't this URL be hit by anyone trying to
> remove the user from any MailingList without any auth or anything?
Mark's suggested implementation, yes. (This is NOT a knock on Mark;
he's just providing what the customer asked for.) In particular, this
is apparently a marketing newsletter. If somebody gets mad at the
company, they can just unsubscribe every address they know of. (And
for a small cost on the darkweb, millions of addresses that were never
subscribed.) Sadly, GDPR is a collection of a variety of very bad
ideas in one place. Almost a textbook on shooting off your own foot.
That said, I have some ideas for how to make this safe for corporate
Germany, specifically, keep a database of user-specific OTKs. (These
could be time-limited -- with the server returning a "use a more
recent message's URL message -- or permanent.) For the usera/userb
reasons Mark gives, and the preview-url reason you give, this is
*still* not going to be safe for discussion lists. But if the From:
is <noreply(a)DeutscheKompany.co.de>, so you have to shoulder surf and
have a photographic memory to get the user's unsubscribe URL, it
should be reasonably secure for announce lists and newsletters.
Perhaps we should implement it?
Steve
4 years, 8 months

[MM3-users] Re: Easiest way to install a new mailman3 deployment?
by Allan Hansen
All,
I asked Brian to help with the installation of Mailman after I and 2 experts each made attempts and got bogged down in incomprehensible installation instructions and gave up. Brian did it in short order and has been extremely helpful since.
No, he is not paying me for this. No, I have not invested in EMWD.
Yes, I just want to recommend a service that is more than worth it.
Happy New Year to all. Especially to the tireless people who have supported Mailman installations for decades, including my own installations.
Without you, not many installations would be humming.
Yours,
Allan Hansen
hansen(a)rc.org
> On Dec 31, 2020, at 17:28 , Brian Carpenter <brian_carpenter(a)emwd.com> wrote:
>
>
>
> On 12/31/20 8:13 PM, ieso(a)johnwillson.com wrote:
>> So I've been trying for the last two weeks to get a new mailman3 server running on a virtualized server (any server), and I'm turning to this list after having failed many times and running out of holiday time.
>>
>> I started trying a non-docker installation on Ubuntu 18.04 (https://docs.google.com/document/d/1xIcSsoNFp2nHi7r4eQys00s9a0k2sHhu1V5Plan…) , which got me the closest. Except I had a problem with inbound email only being triggered when it came from certain accounts. But that clearly wasn't good enough for production, so after many attempts to figure out where it was failing, I decided to turn to docker as a solution that should be cleaner.
>>
>> A few attempts at doing a docker installation on digitalocean.com failed, which I realized might be due to it not routing private IP addresses, so I moved to AWS after checking that their VPC policy would fit mailman's docker requirements. I found a great but slightly outdated guide on how to do this (https://xiaoxing.us/2018/01/01/deploy-mailman-3-on-aws-using-docker/) By this point I knew enough to correct a number of places where the environment had changed since the procedure was written, but postorius still failed at the curl test.
>>
>> The challenge for me has been the difficulty to know how to troubleshoot the different different systems and network infrastructure that are used to keep mailman3 humming. I've tried about 7 different installation walkthroughs (there are no recent ones on Youtube by the way, in case anyone wants to seize that opportunity!), and the good guides provide ways to check each stage to try to help you a bit on that front.
>>
>> Nonetheless, I feel stuck and thought I'd ask the simple question... for a completely basic, barebones new installation, what's the easiest way to get a mailman3 installation up-and running? (e.g. Which server provider? Which operating system and version? Docker or otherwise?)
>>
>> Any pointers highly appreciated. Google Groups is clearly on its way out, as it no longer allows for people to easily join groups by sending an email or clicking a link, so that should be a big opportunity for mailman3 to step up and help give those mailing list migrants a new home... which is what we're looking for. We're just not quite as smart as you guys. ;-)
>> _______________________________________________
>> 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/
>
> If you are looking for commercial assistance, please visit our Mailman 3 hosting site at https://mailmanhost.com (Harmony Lists). Feel free to contact me off list if you have any questions.
>
> For us, we chose Debian 10, Postfix, Nginx, and PostgreSQL as the server environment for Mailman 3. We used PIP via a Python virtual environment to install Mailman 3 from source. The Debian packages I believe have older versions of Mailman 3/Postorius/Hyperkitty which is why we went with source. I have a walk-through that is a work in project at:
>
> https://wiki.list.org/DOC/Howto_Install_Mailman3_On_Debian10
>
> I am available to hire to install Mailman 3 for you if you want to run your own server.
>
> With Harmony Lists, we went a step further with Mailman 3 and created our own custom interfaces: Affinity (admin) and Empathy (forum/archive). However they are only available to our own Mailman 3 clients.
>
> Have a Happy New Year.
>
> --
> Brian Carpenter
> Harmonylists.com
> Emwd.com
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
4 years, 3 months

[MM3-users] Apple Mail encoding again
by David Newman
Starting a new thread because I don't know how to reply to this one from
November 2021:
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
A subscriber's post to a list bounced with a 501 bad encoding error. The
subscriber uses Apple Mail on MacOS and PGP-signed his message.
The earlier post above suggests the problem could be a bug in either
Apple Mail encoding or python's smtp module.
To rule out the smtp module, I sent a PGP-signed message using a
different MUA (Thunderbird, in my case). Mailman3 accepted this post
without complaint, and I reported back to list users that this appears
to be an Apple Mail encoding issue.
Normally, that'd be the end of it. But this is a list for a bunch of
Internet graybeards, including one of the authors of the SMTP protocols
and the subscriber is a former IETF chair. He's grumbling that if this
really were an Apple Mail issue, wouldn't it be far more widespread?
I don't think it would be, because (a) Mailman2 is still far more
pervasive than Mailman3 and (b) the combination of PGP signing and Apple
Mail on MacOS and Mailman3 is still pretty unusual.
Has anyone else hit this encoding issue, other than the post above? And
did Mailman2 silently accept this because it was less strict about
checking for bad encoding?
Thanks.
dn
3 years

[MM3-users] Re: Uncaught runner exception
by Wolfgang Bock
Thanks Mark!
I changed the outgoing.py per cut&paste because I didnt know, whow th patch a python file ... But succeeded:
/var/log/mailman3/mailman.log
Apr 08 19:08:10 2020 (9234) Master started
Apr 08 19:08:12 2020 (9241) bounces runner started.
Apr 08 19:08:12 2020 (9263) virgin runner started.
Apr 08 19:08:12 2020 (9259) out runner started.
Apr 08 19:08:12 2020 (9255) lmtp runner started.
Apr 08 19:08:12 2020 (9259) Cannot connect to SMTP server localhost on port 25
[Errno 13] Permission denied: '/var/lib/mailman3/cache/7d/c6/7dc6d1a99a5ecf2b2241d6d0958a2bc704e32238150e5cc273f6779b124bd04f'
Apr 08 19:08:12 2020 (9237) archive runner started.
....
Checked the ownership ....
ls -la:
/var/lib/mailman3/cache
drwxrwx--- 3 root root 4096 Nov 9 22:27 61
drwxrwx--- 3 root root 4096 Feb 3 17:37 6c
drwxrwx--- 3 root root 4096 Nov 12 11:59 71
drwxrwx--- 3 root root 4096 Nov 6 12:01 72
drwxrwx--- 3 root root 4096 Feb 5 21:52 7d
drwxrwx--- 3 root root 4096 Feb 5 23:05 8b
drwxrwx--- 3 root root 4096 Nov 12 23:41 94
drwxrwx--- 3 root root 4096 Nov 7 08:31 ae
drwxrwx--- 3 root root 4096 Nov 12 23:40 fa
/var/log/mailman3/mailman.log
....
Apr 08 19:08:19 2020 (9259) Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 173, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 266, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/runners/outgoing.py", line 93, in _dispose
self._func(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/mta/deliver.py", line 86, in deliver
refused = agent.deliver(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/mta/bulk.py", line 100, in deliver
self.decorate(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/mta/decorating.py", line 32, in decorate
decorator.process(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/handlers/decorate.py", line 264, in process
process(mlist, msg, msgdata)
File "/usr/lib/python3/dist-packages/mailman/handlers/decorate.py", line 73, in process
for archiver in IListArchiverSet(mlist).archivers:
File "/usr/lib/python3/dist-packages/zope/interface/interface.py", line 135, in __call__
adapter = self.__adapt__(obj)
File "/usr/lib/python3/dist-packages/zope/interface/interface.py", line 151, in __adapt__
adapter = hook(self, obj)
File "/usr/lib/python3/dist-packages/zope/component/_api.py", line 156, in adapter_hook
return sitemanager.queryAdapter(object, interface, name, default)
File "/usr/lib/python3/dist-packages/zope/interface/registry.py", line 348, in queryAdapter
return self.adapters.queryAdapter(object, interface, name, default)
File "/usr/lib/python3/dist-packages/zope/interface/adapter.py", line 353, in queryAdapter
return self.adapter_hook(provided, object, name, default)
File "/usr/lib/python3/dist-packages/zope/interface/adapter.py", line 363, in adapter_hook
result = factory(object)
File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3/dist-packages/mailman/model/mailinglist.py", line 600, in __init__
for archiver in config.archivers:
File "/usr/lib/python3/dist-packages/mailman/config/config.py", line 260, in archivers
archiver = call_name(class_path)
File "/usr/lib/python3/dist-packages/mailman/utilities/modules.py", line 70, in call_name
return named_callable(*args, **kws)
File "/usr/lib/python3/dist-packages/mailman/archiving/mhonarc.py", line 46, in __init__
config.archiver.mhonarc.configuration)
File "/usr/lib/python3/dist-packages/mailman/config/config.py", line 335, in external_configuration
cfg_path = str(expand_path(resources, path))
File "/usr/lib/python3/dist-packages/mailman/utilities/modules.py", line 80, in expand_path
cfg_path = resources.enter_context(path(package, resource + '.cfg'))
File "/usr/lib/python3.7/contextlib.py", line 426, in enter_context
result = _cm_type.__enter__(cm)
File "/usr/lib/python3.7/contextlib.py", line 112, in __enter__
return next(self.gen)
File "/usr/lib/python3.7/importlib/resources.py", line 188, in path
yield Path(reader.resource_path(resource))
File "<frozen importlib._bootstrap_external>", line 932, in resource_path
File "<frozen importlib._bootstrap_external>", line 941, in is_resource
File "<frozen importlib._bootstrap_external>", line 95, in _path_isfile
File "<frozen importlib._bootstrap_external>", line 87, in _path_is_mode_type
File "<frozen importlib._bootstrap_external>", line 81, in _path_stat
File "/usr/lib/python3/dist-packages/mailman/core/runner.py", line 114, in signal_handler
raise RunnerInterrupt
mailman.interfaces.runner.RunnerInterrupt
Apr 08 19:08:19 2020 (9259) SHUNTING: 1586365699.6492867+798bd45a31fb2b8d5fd24a481a3cf95710994bf7
Apr 08 19:08:19 2020 (9259) out runner exiting.
Apr 08 19:08:19 2020 (9234) Master watcher caught SIGTERM. Exiting.
Apr 08 19:08:19 2020 (9234) Master stopped
Changed the ownership for /var/lib/mailman3/cache to list:list and from that point my lists are responding.
Same problem occurs before fort he list-directory, which I corrected some days ago.
Is the ownship misconfiguration a coincidence or did I made a mistake somewhere??
Thanks for your assistance!
Regards Wolfgang
-----Ursprüngliche Nachricht-----
Von: Mark Sapiro <mark(a)msapiro.net>
Gesendet: Mittwoch, 8. April 2020 00:23
An: MM3 Users <mailman-users(a)mailman3.org>
Betreff: [MM3-users] Re: Uncaught runner exception
On 4/7/20 2:40 PM, Wolfgang Bock via Mailman-users wrote:
> Yes,
I assume that means
telnet localhost 25
succeeds. Try the attached patch to mailman/runners/outgoing.py. It should log more about the actual exception.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years

[MM3-users] Re: Postorius: Show only own lists
by Thor Atle Rustad
2018-01-23 14:37 GMT+01:00 Simon Hanna <simon(a)hannaweb.eu>:
> On 01/23/2018 12:10 PM, Thor Atle Rustad wrote:
>
>> Imagine an installation with 500+ mailing lists and almost as many local
>> admins that are supposed to maintain their own local lists with a few
>> local
>> members. As site admin, I see all 500+ lists, but I was expecting *local*
>> admins to see only the lists they maintain. I have set all lists to
>> "advertised = False", so they are hidden from ordinary view. Is there a
>> way
>> to show only relevant lists to local admins?
>>
> Are we talking about Postorius or Hyperkitty?
> There is no way for users that do not have the django superuser permission,
> to see unadvertised lists in the Postorius list index. I just
> doublechecked the source.
> There is an issue about list filtering/search for the index page.
>
I believe I wrote Postorius in the subject line, but it may not be so
obvious. So yes, in Posterius I would like to hide the lists from email
harvesters, while relatively "untrusted" admins should have access to basic
operations on the one list he/she "owns" (and without having to browse
through 50 pages of mailing lists). Somehow I don't think 500 superusers in
our system is a good idea!
7 years, 3 months

[MM3-users] Hyperkitty
by Massimiliano Paragnani
I set up the mailman3 services and lists, and we can send mail to the
list successfully. However in the Archive section I couldn't see
anything.
My configuration: ubuntu, milman core 3.2.2, postresql, postorius 1.2.4, hyperkitty 1.3.2
This is my mailman conf result:
[antispam] header_checks:
[antispam] jump_chain: hold
[archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
[archiver.mail_archive] clobber_date: maybe
[archiver.mail_archive] clobber_skew: 1d
[archiver.mail_archive] configuration: python:mailman.config.mail_archive
[archiver.mail_archive] enable: no
[archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
[archiver.mhonarc] clobber_date: maybe
[archiver.mhonarc] clobber_skew: 1d
[archiver.mhonarc] configuration: python:mailman.config.mhonarc
[archiver.mhonarc] enable: no
[archiver.prototype] class: mailman.archiving.prototype.Prototype
[archiver.prototype] clobber_date: maybe
[archiver.prototype] clobber_skew: 1d
[archiver.prototype] configuration: changeme
[archiver.prototype] enable: no
[bounces] register_bounces_every: 15m
[database] class: mailman.database.postgresql.PostgreSQLDatabase
[database] debug: no
[database] url: postgres://mailman3:--------------@localhost/mailman3
[devmode] enabled: no
[devmode] recipient:
[devmode] testing: no
[devmode] wait: 60s
[digests] mime_digest_keep_headers:
Date From To Cc Subject Message-ID Keywords
In-Reply-To References Content-Type MIME-Version
Content-Transfer-Encoding Precedence Reply-To
Message List-Post
[digests] plain_digest_keep_headers:
Message Date From
Subject To Cc
Message-ID Keywords
Content-Type
[dmarc] cache_lifetime: 7d
[dmarc] org_domain_data_url: https://publicsuffix.org/list/public_suffix_list.dat
[dmarc] resolver_lifetime: 5s
[dmarc] resolver_timeout: 3s
[language.ar] charset: utf-8
[language.ar] description: Arabic
[language.ar] enabled: yes
[language.ast] charset: iso-8859-1
[language.ast] description: Asturian
[language.ast] enabled: yes
[language.ca] charset: utf-8
[language.ca] description: Catalan
[language.ca] enabled: yes
[language.cs] charset: iso-8859-2
[language.cs] description: Czech
[language.cs] enabled: yes
[language.da] charset: iso-8859-1
[language.da] description: Danish
[language.da] enabled: yes
[language.de] charset: utf-8
[language.de] description: German
[language.de] enabled: yes
[language.el] charset: iso-8859-7
[language.el] description: Greek
[language.el] enabled: yes
[language.es] charset: iso-8859-1
[language.es] description: Spanish
[language.es] enabled: yes
[language.et] charset: iso-8859-15
[language.et] description: Estonian
[language.et] enabled: yes
[language.eu] charset: iso-8859-15
[language.eu] description: Euskara
[language.eu] enabled: yes
[language.fi] charset: iso-8859-1
[language.fi] description: Finnish
[language.fi] enabled: yes
[language.fr] charset: iso-8859-1
[language.fr] description: French
[language.fr] enabled: yes
[language.gl] charset: utf-8
[language.gl] description: Galician
[language.gl] enabled: yes
[language.he] charset: utf-8
[language.he] description: Hebrew
[language.he] enabled: yes
[language.hr] charset: iso-8859-2
[language.hr] description: Croatian
[language.hr] enabled: yes
[language.hu] charset: iso-8859-2
[language.hu] description: Hungarian
[language.hu] enabled: yes
[language.ia] charset: iso-8859-15
[language.ia] description: Interlingua
[language.ia] enabled: yes
[language.it] charset: iso-8859-1
[language.it] description: Italian
[language.it] enabled: yes
[language.ja] charset: euc-jp
[language.ja] description: Japanese
[language.ja] enabled: yes
[language.ko] charset: euc-kr
[language.ko] description: Korean
[language.ko] enabled: yes
[language.lt] charset: iso-8859-13
[language.lt] description: Lithuanian
[language.lt] enabled: yes
[language.nl] charset: iso-8859-1
[language.nl] description: Dutch
[language.nl] enabled: yes
[language.no] charset: iso-8859-1
[language.no] description: Norwegian
[language.no] enabled: yes
[language.pl] charset: iso-8859-2
[language.pl] description: Polish
[language.pl] enabled: yes
[language.pt] charset: iso-8859-1
[language.pt] description: Protuguese
[language.pt] enabled: yes
[language.pt_BR] charset: iso-8859-1
[language.pt_BR] description: Protuguese (Brazil)
[language.pt_BR] enabled: yes
[language.ro] charset: iso-8859-2
[language.ro] description: Romanian
[language.ro] enabled: yes
[language.ru] charset: koi8-r
[language.ru] description: Russian
[language.ru] enabled: yes
[language.sk] charset: utf-8
[language.sk] description: Slovak
[language.sk] enabled: yes
[language.sl] charset: iso-8859-2
[language.sl] description: Slovenian
[language.sl] enabled: yes
[language.sr] charset: utf-8
[language.sr] description: Serbian
[language.sr] enabled: yes
[language.sv] charset: iso-8859-1
[language.sv] description: Swedish
[language.sv] enabled: yes
[language.tr] charset: iso-8859-9
[language.tr] description: Turkish
[language.tr] enabled: yes
[language.uk] charset: utf-8
[language.uk] description: Ukrainian
[language.uk] enabled: yes
[language.vi] charset: utf-8
[language.vi] description: Vietnamese
[language.vi] enabled: yes
[language.zh_CN] charset: utf-8
[language.zh_CN] description: Chinese
[language.zh_CN] enabled: yes
[language.zh_TW] charset: utf-8
[language.zh_TW] description: Chinese (Taiwan)
[language.zh_TW] enabled: yes
[logging.archiver] datefmt: %b %d %H:%M:%S %Y
[logging.archiver] format: %(asctime)s (%(process)d) %(message)s
[logging.archiver] level: info
[logging.archiver] path: mailman.log
[logging.archiver] propagate: no
[logging.bounce] datefmt: %b %d %H:%M:%S %Y
[logging.bounce] format: %(asctime)s (%(process)d) %(message)s
[logging.bounce] level: info
[logging.bounce] path: bounce.log
[logging.bounce] propagate: no
[logging.config] datefmt: %b %d %H:%M:%S %Y
[logging.config] format: %(asctime)s (%(process)d) %(message)s
[logging.config] level: info
[logging.config] path: mailman.log
[logging.config] propagate: no
[logging.database] datefmt: %b %d %H:%M:%S %Y
[logging.database] format: %(asctime)s (%(process)d) %(message)s
[logging.database] level: warn
[logging.database] path: mailman.log
[logging.database] propagate: no
[logging.debug] datefmt: %b %d %H:%M:%S %Y
[logging.debug] format: %(asctime)s (%(process)d) %(message)s
[logging.debug] level: info
[logging.debug] path: debug.log
[logging.debug] propagate: no
[logging.error] datefmt: %b %d %H:%M:%S %Y
[logging.error] format: %(asctime)s (%(process)d) %(message)s
[logging.error] level: info
[logging.error] path: mailman.log
[logging.error] propagate: no
[logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
[logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
[logging.fromusenet] level: info
[logging.fromusenet] path: mailman.log
[logging.fromusenet] propagate: no
[logging.http] datefmt: %b %d %H:%M:%S %Y
[logging.http] format: %(asctime)s (%(process)d) %(message)s
[logging.http] level: info
[logging.http] path: mailman.log
[logging.http] propagate: no
[logging.locks] datefmt: %b %d %H:%M:%S %Y
[logging.locks] format: %(asctime)s (%(process)d) %(message)s
[logging.locks] level: info
[logging.locks] path: mailman.log
[logging.locks] propagate: no
[logging.mischief] datefmt: %b %d %H:%M:%S %Y
[logging.mischief] format: %(asctime)s (%(process)d) %(message)s
[logging.mischief] level: info
[logging.mischief] path: mailman.log
[logging.mischief] propagate: no
[logging.plugins] datefmt: %b %d %H:%M:%S %Y
[logging.plugins] format: %(asctime)s (%(process)d) %(message)s
[logging.plugins] level: info
[logging.plugins] path: plugins.log
[logging.plugins] propagate: no
[logging.root] datefmt: %b %d %H:%M:%S %Y
[logging.root] format: %(asctime)s (%(process)d) %(message)s
[logging.root] level: info
[logging.root] path: mailman.log
[logging.root] propagate: no
[logging.runner] datefmt: %b %d %H:%M:%S %Y
[logging.runner] format: %(asctime)s (%(process)d) %(message)s
[logging.runner] level: info
[logging.runner] path: mailman.log
[logging.runner] propagate: no
[logging.smtp] datefmt: %b %d %H:%M:%S %Y
[logging.smtp] every: $msgid smtp to $listname for $recip recips, completed in $time seconds
[logging.smtp] failure: $msgid delivery to $recip failed with code $smtpcode, $smtpmsg
[logging.smtp] format: %(asctime)s (%(process)d) %(message)s
[logging.smtp] level: info
[logging.smtp] path: smtp.log
[logging.smtp] propagate: no
[logging.smtp] refused: $msgid post to $listname from $sender, $size bytes, $refused failures
[logging.smtp] success: $msgid post to $listname from $sender, $size bytes
[logging.subscribe] datefmt: %b %d %H:%M:%S %Y
[logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
[logging.subscribe] level: info
[logging.subscribe] path: mailman.log
[logging.subscribe] propagate: no
[logging.vette] datefmt: %b %d %H:%M:%S %Y
[logging.vette] format: %(asctime)s (%(process)d) %(message)s
[logging.vette] level: info
[logging.vette] path: mailman.log
[logging.vette] propagate: no
[mailman] cache_life: 7d
[mailman] default_language: en
[mailman] email_commands_max_lines: 10
[mailman] filtered_messages_are_preservable: no
[mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
[mailman] layout: debian
[mailman] listname_chars: [-_.0-9a-z]
[mailman] noreply_address: noreply
[mailman] pending_request_life: 3d
[mailman] post_hook:
[mailman] pre_hook:
[mailman] sender_headers: from from_ reply-to sender
[mailman] site_owner: max.paragnani(a)gmail.com
[mta] configuration: python:mailman.config.postfix
[mta] delivery_retry_period: 5d
[mta] incoming: mailman.mta.postfix.LMTP
[mta] lmtp_host: 127.0.0.1
[mta] lmtp_port: 8024
[mta] max_autoresponses_per_day: 10
[mta] max_delivery_threads: 0
[mta] max_recipients: 500
[mta] max_sessions_per_connection: 0
[mta] outgoing: mailman.mta.deliver.deliver
[mta] remove_dkim_headers: no
[mta] smtp_host: localhost
[mta] smtp_pass:
[mta] smtp_port: 25
[mta] smtp_user:
[mta] verp_confirm_format: $address+$cookie
[mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
[mta] verp_confirmations: no
[mta] verp_delimiter: +
[mta] verp_delivery_interval: 0
[mta] verp_format: ${bounces}+${local}=${domain}
[mta] verp_personalized_deliveries: no
[mta] verp_probe_format: $bounces+$token@$domain
[mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
[mta] verp_probes: no
[mta] verp_regexp: ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
[nntp] host:
[nntp] password:
[nntp] port:
[nntp] remove_headers:
nntp-posting-host nntp-posting-date x-trace
x-complaints-to xref date-received posted
posting-version relay-version received
[nntp] rewrite_duplicate_headers:
To X-Original-To
CC X-Original-CC
Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
MIME-Version X-MIME-Version
[nntp] user:
[passwords] configuration: python:mailman.config.passlib
[passwords] password_length: 8
[plugin.master] class:
[plugin.master] component_package:
[plugin.master] configuration:
[plugin.master] enabled: no
[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] hostname: localhost
[webservice] port: 8001
[webservice] show_tracebacks: yes
[webservice] use_https: no
2 years, 2 months

[MM3-users] Re: Deactivate list without deleting it?
by Colin Watson
[Sorry for having dropped this thread on the floor for a while.]
On Tue, Jan 16, 2018 at 09:32:25PM -0800, Barry Warsaw wrote:
> On Jan 14, 2018, at 09:45, Colin Watson <cjwatson(a)ubuntu.com> wrote:
> > I'm experimenting with a port of Launchpad's mailing list infrastructure
> > to Mailman 3. If Barry's reading, he may remember that this is no
> > trivial task, so I'm very definitely not promising that it will be done
> > any time soon. :-)
[...]
> I’m proud that the mailing list feature of Launchpad eventually became
> pretty darn solid, with much credit to Colin, Curtis Hovey, and many
> of my other wonderful former colleagues on the Launchpad team and at
> Canonical.
Shoulders of giants and all that. :-)
> > However, for the most part it looks relatively tractable with the
> > aid of the plugin improvements in Mailman 3.2.0; I have the rough
> > outline of a plugin that implements much the same feature set as our
> > current pile of monkey-patches against Mailman 2.1 in a much nicer
> > way.
>
> Very cool!
>
> You’ve provided some clarification in a follow up, and I’ll respond
> there. Apologies for being a little disjointed.
>
> One of the things that may really help you, but which doesn’t exist in
> a fully baked way in Core is the ability to set web hooks for various
> events. Core does have an event notification system (via zope.events)
> and that’s used to inform other parts of the Core about things like
> subscriptions/unsubscriptions, etc. Where web hooks would be useful
> is if some event in Core needs to inform Launchpad of that event.
Web hooks might be interesting to look at (if they were fully baked, of
course), but I'd have some reservations. The problem with that approach
is that it tends to be "fire and forget", and in particular if one part
of the system is down or temporarily unreachable or whatever then state
can get out of sync. I think it would be unfortunate to end up with a
system where a user could end up inconsistently subscribed in multiple
databases due to a temporary network partition, and we might never
notice.
IME web hooks work better in situations where their state is visible and
it's easy for somebody to redispatch them if they seem to have got lost.
GitHub's integration with various third-party services like Travis is a
good example.
For this reason, I usually favour "catch-up" approaches where one
service asks another for all the events that have happened since a
particular date (if it isn't just asking the other service for
information synchronously, of course). I suppose this is what people
call "eventually consistent". And in any case I think in our system
events are generally going to flow from Launchpad to Mailman rather than
the other way round. So, rather than notifications, I'd been planning
to stick with something broadly along the lines of how Launchpad's
Mailman 2 integration works: we have a runner in the Mailman plugin that
talks to a Launchpad API that publishes a sequence of pending actions,
and consumes those to keep itself up to date. It may be a bit clunky,
but it's essentially robust.
Alternatively, we could schedule jobs in Launchpad's own job queuing
system any time a relevant event (new list, subscription, etc.) happens,
and have those talk to Mailman's REST API with a backoff-and-retry
arrangement. Maybe that'd be easier.
> > Ideally, I'd like mailing lists to have a "deactivated" state in
> > addition to full deletion. In this state, the list would appear
> > nonexistent for most purposes: incoming email would be rejected,
>
> I forget whether LP uses Exim or Postfix.
I ... am actually not 100% sure. But a Mailman 3 migration would
involve a complete redeployment of the mailing list components on cloud
instances anyway, so we're not bound to what we have at the moment.
> At least for the latter, it would be fairly easy (if involving a
> database migration) to include an “active” or “enabled” flag which
> would be consulted when regenerating the Postfix transport files. I
> would add this to the MailingList model and make it available through
> the REST API. Then the LP team admin can toggle this on and off as
> desired.
Yes, something like that. Though maybe we could just change its posting
chain to 'reject' or similar with a "this list is closed" message
instead, and dispense with the need for an explicit enabled flag?
--
Colin Watson [cjwatson(a)ubuntu.com]
7 years, 1 month

[MM3-users] Re: mailman3 on new Debian 12 installation, got ssl apache working on all URLs except /mailman3
by Stephen J. Turnbull
Odhiambo Washington via Mailman-users writes:
> > connect to Unix domain socket */run/mailman3-web/uwsgi.sock*
>
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> uwsgi running outside virtualenv??
I don't think that's a problem, unless also running in a chroot, which
would be confusing no matter where uswgi is running.
"Cannot connect" might mean
- uwsgi is running chrooted, and mailman-web should be looking in
/path/to/chroot/run/mailman3-web/uwsgi.sock (mentioned first only
because I have chroot on the brain because Debian Postfix config)
- uwsgi isn't running (this is my bet, because all the mailman-web
URLs except mailman3/ were working and they all go through that
socket -- I bet they're not working now!)
- /run/mailman3-web/uwsgi.sock got deleted
- /run/mailman3-web/uwsgi.sock got wrong permissions
- the socket is actually /run/mailman3_web/uwsgi.sock or similar (with
an underscore!) and mailman-web is misconfigured
But as Mark said, the problem you have with "mailman3/" is urls.py.
Personally, I think you *should* do the things that Mark said are
unnecessary. He's right, but I strongly prefer to keep all my
changes to default configuration in one place, and that's
/etc/mailman3 for you if I recall correctly. The very fact that you
have /etc/mailman3/urls.py screams "I have changed this file" and
that's often useful.
Steve
3 weeks, 4 days

[MM3-users] Re: Hyperkitty no longer archiving
by Hirayama, Pat
Steve wrote:
>So we need to figure out
>where HyperKitty is getting its setting for MAILMAN_ARCHIVER_FROM.
>
>1. Are there multiple copies of settings_local.py lying around?
There only appears to be the one in /opt/mailman/mailman-suite/mailman-suite_project
>2. Does settings.py have "from settings_local import *" in it?
Yes. I assume that overrides the MAILMAN_ARCHIVER_FROM and other related settings defined at the top of the settings.py file? Or should I update settings.py based on what is in settings_local.py?
>3. Are there multiple copies of settings.py lying around?
Well, there are these:
./usr/local/lib/python3.8/site-packages/rest_framework/settings.py
./usr/local/lib/python3.8/site-packages/postorius/doc/settings.py
./usr/local/lib/python3.8/site-packages/django_q/tests/settings.py
./usr/local/lib/python3.8/site-packages/django_extensions/settings.py
./usr/local/lib/python3.8/site-packages/mailmanclient/restobjects/settings.py
./usr/local/lib/python3.8/site-packages/example_project/settings.py
Only the last has MAILMAN_ARCHIVER_FROM defined in it, but I was assuming from the example_project subdirectory name that this was just a sample file, and besides, "from settings_local import *" is also set in it.
>4. What else may have changed in the migration? Any software
> upgrades in mailman, hyperkitty, mailman-web (or wherever the
> settings*.py are coming from)?
So, I actually converted the instance to a template, copied and deployed to the new account. So, all the mailman, hyperkitty & nginx versions stayed the same.
Thanks for any assistance.
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org
2 years, 5 months

[MM3-users] Re: Docker Support Sucks
by Brian Carpenter
On 7/21/20 8:55 PM, Mark Sapiro wrote:
> On 7/21/20 5:40 PM, Brian Carpenter wrote:
>
> Abhilash (@maxking) is one person and he has a $DayJob. We're all doing
> the best we can.
Well, I still need support.
> This is not a Docker issue per se. It is a consequence of upgrading
> Mailman core to 3.3.1+ and processing many old, stale, previously
> unprocessed bounces. See
> <https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…>
I am not worried about the bounce issues at this point. I am just trying
to get a membership list exported for a client.
>
>> So, I want to totally move away from the use of Docker (mainly because I have found it buggy and the support is simply lacking) and install Mailman 3 for this client from source. However I need to get an export of their list members. But of course, I can't. Rest API times out and I don't know how to apply the instructions I was given to fix it and I don't have days to way for one. So please help.
>>
>> I increased the gunicorn workers to 4, hoping that would allow me to do the CSV export. No. So was given these instructions:
>>
>> ###
>> The issues seems to be due to timeout not due to high load. You want to increase the timeout for gunicorn and you can do that by specifying a gunicorn.ini config file:
>>
>> [webservice]
>> configuration: /path/to/gunicorn.cfg
>>
>> and then in the gunicorn.cfg you can add
>>
>> [gunicorn]
>> timeout = 90
>> graceful_timeout = 30
>> ###
>>
>> I applied the above changes to /opt/mailman/core/mailman-extra.cfg and created the gunicorn.cfg file. Restarted the docker container (mailman-core) and no access to Postorius due to no REST api.
>>
>> After restarting docker-mailman, I can't access Postorius due to the following error:
>>
>> ERROR 2020-07-20 20:16:27,351 15 postorius Mailman REST API not available
> Is Mailman core running? If not, whats in core's mailman.log as to why not?
It looks like but no error message in mailman.log. However I noted that
the gunicorn process did not start.
This is with the configuration line enabled in mailman-extra.cfg:
# docker-compose restart mailman-core
Restarting mailman-core ... done
[root@nicu-net docker-mailman]# tail -f
/opt/mailman/core/var/logs/mailman.log
Jul 22 01:25:17 2020 (22) in runner caught SIGTERM. Stopping.
Jul 22 01:25:17 2020 (25) out runner caught SIGTERM. Stopping.
Jul 22 01:25:17 2020 (25) out runner exiting.
Jul 22 01:25:17 2020 (21) command runner exiting.
Jul 22 01:25:17 2020 (22) in runner exiting.
Jul 22 01:25:17 2020 (24) nntp runner caught SIGTERM. Stopping.
Jul 22 01:25:17 2020 (24) nntp runner exiting.
[2020-07-22 01:25:19 +0000] [27] [INFO] Shutting down: Master
Jul 22 01:25:21 2020 (1) Master stopped
Jul 22 01:25:26 2020 (1) Master started
Jul 22 01:25:44 2020 (27) rest runner started.
Jul 22 01:25:44 2020 (26) pipeline runner started.
Jul 22 01:25:44 2020 (20) bounces runner started.
Jul 22 01:25:45 2020 (22) in runner started.
Jul 22 01:25:45 2020 (28) retry runner started.
Jul 22 01:25:46 2020 (29) virgin runner started.
Jul 22 01:25:46 2020 (25) out runner started.
Jul 22 01:25:46 2020 (23) lmtp runner started.
Jul 22 01:25:46 2020 (24) nntp runner started.
Jul 22 01:25:47 2020 (30) digest runner started.
Jul 22 01:25:47 2020 (19) archive runner started.
Jul 22 01:25:47 2020 (21) command runner started.
This is with the configuration line disabled in mailman-extra.cfg:
# docker-compose restart mailman-core
Restarting mailman-core ... done
[root@nicu-net docker-mailman]# tail -f
/opt/mailman/core/var/logs/mailman.log
Jul 22 01:27:49 2020 (1) Master stopped
Jul 22 01:27:53 2020 (1) Master started
Jul 22 01:28:10 2020 (30) digest runner started.
Jul 22 01:28:10 2020 (29) virgin runner started.
Jul 22 01:28:10 2020 (24) nntp runner started.
Jul 22 01:28:10 2020 (25) out runner started.
Jul 22 01:28:10 2020 (22) in runner started.
Jul 22 01:28:11 2020 (28) retry runner started.
Jul 22 01:28:11 2020 (27) rest runner started.
[2020-07-22 01:28:11 +0000] [27] [INFO] Starting gunicorn 19.9.0
[2020-07-22 01:28:11 +0000] [27] [INFO] Listening at:
http://172.19.199.2:8001 (27)
[2020-07-22 01:28:11 +0000] [27] [INFO] Using worker: sync
[2020-07-22 01:28:11 +0000] [32] [INFO] Booting worker with pid: 32
[2020-07-22 01:28:11 +0000] [33] [INFO] Booting worker with pid: 33
[2020-07-22 01:28:11 +0000] [34] [INFO] Booting worker with pid: 34
[2020-07-22 01:28:11 +0000] [35] [INFO] Booting worker with pid: 35
Jul 22 01:28:11 2020 (19) archive runner started.
Jul 22 01:28:11 2020 (21) command runner started.
Jul 22 01:28:12 2020 (23) lmtp runner started.
Jul 22 01:28:12 2020 (20) bounces runner started.
Jul 22 01:28:12 2020 (26) pipeline runner started.
--
Please let me know if you need further assistance.
Thank you for your business. We appreciate our clients.
Brian Carpenter
EMWD.com
--
EMWD's Knowledgebase:
https://clientarea.emwd.com/index.php/knowledgebase
EMWD's Community Forums
http://discourse.emwd.com/
4 years, 9 months

[MM3-users] Re: Member Issue Discovered
by Brian Carpenter
On 11/3/20 3:15 AM, Stephen J. Turnbull wrote:
> Allan Hansen writes:
>
> > If he/she has never created an account, then I see no problem
> > cleaning up the system when the user deletes the last subscription,
>
> Without an account (ie, a User object), the user can't authenticate
> themselves as owner of the subscription, and therefore can't delete
> any subscriptions. What scenario are you thinking of here?
> _______________________________________________
> 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/
If you mean if they don't have a Django user account, they can't
unsubscribe? I think that is true if they are wanting to unsubscribe via
the web interface. But sending an email to
listname-unsubscribe@listdomain allows them to unsubscribe without such
user authentication. Isn't that correct?
My intent in our changes is to give the list owner and member exactly
what they expect: when they explicitly remove a subscription and/or user
profile, that they expect their data to be totally removed. I can easily
picture a scenario where an older list has a number of list members move
to on to other things in life and even abandon their email accounts
totally. In those cases it is imperative that those list addresses are
removed either via bounce processing or list owner intervention and that
no legacy data on such members remain.
--
Brian Carpenter
Harmonylists.com
Emwd.com
4 years, 5 months

[MM3-users] Re: Mailman, etc. upgrade woes and persistent bugs
by Brian Carpenter
On 2/13/21 11:39 AM, Stephen J. Turnbull wrote:
> Brian Carpenter writes:
>
> > I think treating all disabled options the same is short-sighted. They
> > are all not the same.
> >
> > -- Some list members will disable their subscription for good reasons
> > and will be really upset if a List Owner renables it through ignorance.
> > So it is important to know a disable member is done by the member
> > itself.
>
> This is true in principle, but (1) I don't think that the user cares;
> if they're looking at it, they know whether they want enabled or
> disabled, how it got that way doesn't matter to them, and (2) I can't
> see why an admin would disable delivery except on request from a user,
> so I can't see why an admin would reenable except on request from a
> user. The only case I can see would be a mass reenabling, but that's
> not going to happen in the future (I hope).
>
> > -- Some mailing lists will have multiple list owners managing them. So
> > it is important for one List Owner to know when a subscription has been
> > disabled by the actions of another List Owner.
>
> I don't see why, see above.
>
> > -- A List Owner may not know that some of his List Members are bouncing
> > messages for various reasons, so reviewing their Membership roster, they
> > see that they have some list members disabled due to bounces and can
> > then address those particular problematic members.
>
> This query is an important use case. But it's the only one, I think,
> unless you really have List Owners arbitrarily disabling members'
> subscriptions. And if you're thinking about reenabling from that
> page, I think you need a lot more information. For example, if the
> admin disabled, you need to know if that was a user request or
> something else (what?). If bounce disabled, you want to know what the
> bounce was ("no such mailbox"? probably not a good candidate for
> reenabling), and when (5 minutes ago? ditto). I guess you could just
> reenable and see what happens, but that could be risky (eg, sending
> mail to non-existent users is frowned upon by some providers).
>
> > @Abhilash, I highly recommend that you contact me off list about getting
> > access to Affinity so you can see what I am talking about. I would love
> > to show you what I have done for Member Management. I offered the same
> > to Steve but he never was interested in taking a look.
>
> It's not that I lack interest, it's that life got in the way.
> Unfortunately, until I get enough time (man-weeks, I've never worked
> on Postorius and very little in Django) to work on Postorius, or
> somebody else starts to do it, a look at Affinity is low priority.
> Also, it's pretty clear that a quick look isn't going to be very
> helpful. The Mailman developers know what Mailman 2 looks like. I
> think the benefits to a hands-on admin are pretty obvious vs the
> current Postorius, as are Web 2.0 improvments like sorting on the
> options. The more subtle improvements you've made are going to
> require a guided tour and/or some study to identify and understand.
>
> Aside: I have to assume that Postorius is aimed at the kind of
> subscriber that most of us are, and that list administration was
> something of an afterthought, and assumed to be mostly hands-off.
> That's the only rationale I can come up with for the design where
> list admins need to go to the individual pages to see user options --
> it was easier to reuse the user option page and just give the admin
> permission to access and change it, than to provide a (sortable) list
> with user details.
>
> Steve
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
I was going to respond in detail but it will be an effort in futility.
My opinions are DEFINITELY not valued by you and that is your right as
it my right to leave Postorius behind, permanently. Moving to my own
interface was one of the best decisions I made and that decision
continues to be shown to be a great one when I read threads like this.
--
Brian Carpenter
Harmonylists.com
Emwd.com
4 years, 2 months

[MM3-users] Re: redirecting -bounces replies
by Nelson Strother
If you are using Postfix with mysql you could use an entry in the
virtual_aliases table by doing something like:
MariaDB [mailserver]> REPLACE INTO mailserver.virtual_aliases
(id,domain_id,source,destination) VALUES ('N', '1',
'ListNameHere-bounces(a)example.org', 'person(a)example.org');
Query OK, 1 row affected (0.010 sec)
where the value 'N' is one larger than the largest id entry already
present in said table ....
Cheers,
Nelson
On 10/31/24 19:17, Hirayama, Pat wrote:
> Greetings,
>
> Is it possible to redirect the -bounces alias of a specific list so that it also goes to a person, in addition to the normal bounces processing for that list?
>
> In Mailman2, I know that I could do that by modifying the aliases table.
>
> I've been poking around in Mailman3, but haven't managed to figure out which container I need to be looking at. And rather than keep spinning, I figured that I'd ask the hive mind, since I'm sure one of you can quickly point me to the correct location.
>
> Thanks!
>
> -p
>
>
>
> Pat Hirayama
> Pronouns: he/him/his
> Systems Engineer
> IT | Systems Engineering - Infrastructure
> Fred Hutch Cancer Center
> O 206.667.4856
>
> phirayam(a)fredhutch.org<mailto:phirayam@fredhutch.org>
>
>
> _______________________________________________
> Mailman-users mailing list --mailman-users(a)mailman3.org
> To unsubscribe send an email tomailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> Archived at:https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/mess…
>
> This message sent tojustfixit(a)marilynstrother.com
5 months, 3 weeks

[MM3-users] Re: moving lists to another server
by Odhiambo Washington
On Mon, Nov 20, 2023 at 7:56 AM Stephen J. Turnbull <
turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
> Odhiambo Washington writes:
>
> > The idea is to (if possible) not change anything at all. I will be
> > serving the list using the original domain.
>
> Fine. I just didn't want to assume anything.
>
> > I am hoping that should not be necessary.
>
> It's not. That's one of the major things that MM3 does that MM2 does
> not: handle multiple domains properly.
>
> > I actually had thought it wouldn't be complex doing this until I
> > sat down and said wait - there is a DB involved :)
>
> > 3. (If the DB engines are different) Dump both databases in text
> > > format (ie, scripts of SQL commands). Check to see how they
> > > differ.
> > >
> >
> > The DB is MySQL. My running setup uses MariaDB. I am not getting what
> you
> > mean here by how they differ.
>
> You didn't say that before. I tend to assume PostgreSQL because
> that's what I use.
>
> I don't know if MySQL and MariaDB have different features that have
> different syntax, etc. That's what you're looking for. Any commands
> that are *not SQL* used to configure the database engine itself (for
> example the utf8mb4 parameter which MySQL has but PostgreSQL does not,
> does MariaDB need it?) Also any non-standard SQL stuff (mostly around
> varchar/text types I think).
>
I use the utf8mb4 character set as default, unless something wants a
different one.
MySQL and MariaDB are almost similar. I have encountered very few
significant differences since I switched to MariaDB.
> 4. Adapt the foreign database to its new environment with search and
> > > replace.
> >
> > If going with what I have mentioned above, is this step still
> > necessary?
>
> Isn't one installation using 'mailman' and 'mailmanweb' databases,
> while the other only 'mailman'? You'll need to deal with that at
> least I suppose.
>
This is true. However, I was hoping that I could merge the two foreign DBs
into one. I am yet to test it though.
> > > 5. (Optional if your name is "Daredevil") Create a new Mailman suite
> > > install using your current configs, preferably in a new VM or set
> > > of containers.
> >
> > I was thinking about this as one way of testing the situation, much
> > as it is quite involving.
>
> Fred Brooks famously put it this way: "Build one to throw away. You
> will anyway. The only question is whether you deliver the first
> version to the customer." ;-)
>
I had to Google who he was :-)
> Suppose I just do:
> > 1. Create the new list on my server using the inherited domain and
> > configure it appropriately,
> > 2. Configure Django to handle the different domains (there is something
> > that I am yet to understand here around SITE_ID when you have multiple
> > sites!)
>
> You just add them in the Django admin page. Problems come in when you
> delete the original example.com placeholder domain. I think you
> probably need to add SITE_ID=0 to settings.py so the Django figures
> out the site from the HTTP header rather than just assuming it's the
> same Postorius site for all lists.
>
In my case, I did not delete the original example.com.
I finally get to use SITE_ID=0. I suppose that it should be accompanied by
FILTER_VHOST=True
> > 3. Extract the users from the list and subscribe them afresh (I can
> > shoot an email to let them know the ML had to be moved so they can
> > set their preferences again)
> > 4. Import the archives of the list
> > I should more or less achieve the migration, no?
>
> I think that should work.
>
I am going to try this method. It looks safer for me.
> > What about setting up on /opt/mailman2 a complete replica of the
> > list? That'd be the real "Daredevil" :)
>
> This will also work, I'm sure. But we'd be embarrassed after going to
> the trouble of making Mailman 3 handle multiple domains. Also you'd
> need separate instances of Mailman running, with their own
> /etc/mailman3-1 and /etc/mailman3-2, and more important you'd double
> the RSS and VM requirements by running two instances.
>
I also will need to have extra macros, routers, and transports for Exim.
This method is untenable as it complicates life.
--
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]
1 year, 5 months

[MM3-users] Re: Installing mailman 3
by Rafael Mora
Hello,
Here it's mailman info:
[root@localhost bin]# ./mailman info
GNU Mailman 3.2.0a1 (La Villa Strangiato)
Python 3.6.0 (default, Jul 7 2017, 11:59:56)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
config file: /etc/mailman.cfg
db url: sqlite:////var/lib/mailman/data/mailman.db
devmode: DISABLED
REST root url: http://localhost:8001/3.1/
REST credentials: restadmin:restpass
Here it's mailman conf:
[root@localhost bin]# ./mailman conf
[antispam] header_checks:
[antispam] jump_chain: hold
[archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
[archiver.mail_archive] clobber_date: maybe
[archiver.mail_archive] clobber_skew: 1d
[archiver.mail_archive] configuration: python:mailman.config.mail_archive
[archiver.mail_archive] enable: no
[archiver.master] class:
[archiver.master] clobber_date: maybe
[archiver.master] clobber_skew: 1d
[archiver.master] configuration: changeme
[archiver.master] enable: no
[archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
[archiver.mhonarc] clobber_date: maybe
[archiver.mhonarc] clobber_skew: 1d
[archiver.mhonarc] configuration: python:mailman.config.mhonarc
[archiver.mhonarc] enable: no
[archiver.prototype] class: mailman.archiving.prototype.Prototype
[archiver.prototype] clobber_date: maybe
[archiver.prototype] clobber_skew: 1d
[archiver.prototype] configuration: changeme
[archiver.prototype] enable: no
[bounces] register_bounces_every: 15m
[database] class: mailman.database.sqlite.SQLiteDatabase
[database] debug: no
[database] url: sqlite:///$DATA_DIR/mailman.db
[devmode] enabled: no
[devmode] recipient:
[devmode] testing: no
[devmode] wait: 60s
[digests] mime_digest_keep_headers:
Date From To Cc Subject Message-ID Keywords
In-Reply-To References Content-Type MIME-Version
Content-Transfer-Encoding Precedence Reply-To
Message List-Post
[digests] plain_digest_keep_headers:
Message Date From
Subject To Cc
Message-ID Keywords
Content-Type
[dmarc] cache_lifetime: 7d
[dmarc] org_domain_data_url:
https://publicsuffix.org/list/public_suffix_list.dat
[dmarc] resolver_lifetime: 5s
[dmarc] resolver_timeout: 3s
[language.ar] charset: utf-8
[language.ar] description: Arabic
[language.ar] enabled: yes
[language.ast] charset: iso-8859-1
[language.ast] description: Asturian
[language.ast] enabled: yes
[language.ca] charset: utf-8
[language.ca] description: Catalan
[language.ca] enabled: yes
[language.cs] charset: iso-8859-2
[language.cs] description: Czech
[language.cs] enabled: yes
[language.da] charset: iso-8859-1
[language.da] description: Danish
[language.da] enabled: yes
[language.de] charset: iso-8859-1
[language.de] description: German
[language.de] enabled: yes
[language.el] charset: iso-8859-7
[language.el] description: Greek
[language.el] enabled: yes
[language.es] charset: iso-8859-1
[language.es] description: Spanish
[language.es] enabled: yes
[language.et] charset: iso-8859-15
[language.et] description: Estonian
[language.et] enabled: yes
[language.eu] charset: iso-8859-15
[language.eu] description: Euskara
[language.eu] enabled: yes
[language.fi] charset: iso-8859-1
[language.fi] description: Finnish
[language.fi] enabled: yes
[language.fr] charset: iso-8859-1
[language.fr] description: French
[language.fr] enabled: yes
[language.gl] charset: utf-8
[language.gl] description: Galician
[language.gl] enabled: yes
[language.he] charset: utf-8
[language.he] description: Hebrew
[language.he] enabled: yes
[language.hr] charset: iso-8859-2
[language.hr] description: Croatian
[language.hr] enabled: yes
[language.hu] charset: iso-8859-2
[language.hu] description: Hungarian
[language.hu] enabled: yes
[language.ia] charset: iso-8859-15
[language.ia] description: Interlingua
[language.ia] enabled: yes
[language.it] charset: iso-8859-1
[language.it] description: Italian
[language.it] enabled: yes
[language.ja] charset: euc-jp
[language.ja] description: Japanese
[language.ja] enabled: yes
[language.ko] charset: euc-kr
[language.ko] description: Korean
[language.ko] enabled: yes
[language.lt] charset: iso-8859-13
[language.lt] description: Lithuanian
[language.lt] enabled: yes
[language.nl] charset: iso-8859-1
[language.nl] description: Dutch
[language.nl] enabled: yes
[language.no] charset: iso-8859-1
[language.no] description: Norwegian
[language.no] enabled: yes
[language.pl] charset: iso-8859-2
[language.pl] description: Polish
[language.pl] enabled: yes
[language.pt] charset: iso-8859-1
[language.pt] description: Protuguese
[language.pt] enabled: yes
[language.pt_BR] charset: iso-8859-1
[language.pt_BR] description: Protuguese (Brazil)
[language.pt_BR] enabled: yes
[language.ro] charset: iso-8859-2
[language.ro] description: Romanian
[language.ro] enabled: yes
[language.ru] charset: koi8-r
[language.ru] description: Russian
[language.ru] enabled: yes
[language.sk] charset: utf-8
[language.sk] description: Slovak
[language.sk] enabled: yes
[language.sl] charset: iso-8859-2
[language.sl] description: Slovenian
[language.sl] enabled: yes
[language.sr] charset: utf-8
[language.sr] description: Serbian
[language.sr] enabled: yes
[language.sv] charset: iso-8859-1
[language.sv] description: Swedish
[language.sv] enabled: yes
[language.tr] charset: iso-8859-9
[language.tr] description: Turkish
[language.tr] enabled: yes
[language.uk] charset: utf-8
[language.uk] description: Ukrainian
[language.uk] enabled: yes
[language.vi] charset: utf-8
[language.vi] description: Vietnamese
[language.vi] enabled: yes
[language.zh_CN] charset: utf-8
[language.zh_CN] description: Chinese
[language.zh_CN] enabled: yes
[language.zh_TW] charset: utf-8
[language.zh_TW] description: Chinese (Taiwan)
[language.zh_TW] enabled: yes
[logging.archiver] datefmt: %b %d %H:%M:%S %Y
[logging.archiver] format: %(asctime)s (%(process)d) %(message)s
[logging.archiver] level: info
[logging.archiver] path: mailman.log
[logging.archiver] propagate: no
[logging.bounce] datefmt: %b %d %H:%M:%S %Y
[logging.bounce] format: %(asctime)s (%(process)d) %(message)s
[logging.bounce] level: info
[logging.bounce] path: bounce.log
[logging.bounce] propagate: no
[logging.config] datefmt: %b %d %H:%M:%S %Y
[logging.config] format: %(asctime)s (%(process)d) %(message)s
[logging.config] level: info
[logging.config] path: mailman.log
[logging.config] propagate: no
[logging.database] datefmt: %b %d %H:%M:%S %Y
[logging.database] format: %(asctime)s (%(process)d) %(message)s
[logging.database] level: warn
[logging.database] path: mailman.log
[logging.database] propagate: no
[logging.debug] datefmt: %b %d %H:%M:%S %Y
[logging.debug] format: %(asctime)s (%(process)d) %(message)s
[logging.debug] level: info
[logging.debug] path: debug.log
[logging.debug] propagate: no
[logging.error] datefmt: %b %d %H:%M:%S %Y
[logging.error] format: %(asctime)s (%(process)d) %(message)s
[logging.error] level: info
[logging.error] path: mailman.log
[logging.error] propagate: no
[logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
[logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
[logging.fromusenet] level: info
[logging.fromusenet] path: mailman.log
[logging.fromusenet] propagate: no
[logging.http] datefmt: %b %d %H:%M:%S %Y
[logging.http] format: %(asctime)s (%(process)d) %(message)s
[logging.http] level: info
[logging.http] path: mailman.log
[logging.http] propagate: no
[logging.locks] datefmt: %b %d %H:%M:%S %Y
[logging.locks] format: %(asctime)s (%(process)d) %(message)s
[logging.locks] level: info
[logging.locks] path: mailman.log
[logging.locks] propagate: no
[logging.mischief] datefmt: %b %d %H:%M:%S %Y
[logging.mischief] format: %(asctime)s (%(process)d) %(message)s
[logging.mischief] level: info
[logging.mischief] path: mailman.log
[logging.mischief] propagate: no
[logging.root] datefmt: %b %d %H:%M:%S %Y
[logging.root] format: %(asctime)s (%(process)d) %(message)s
[logging.root] level: info
[logging.root] path: mailman.log
[logging.root] propagate: no
[logging.runner] datefmt: %b %d %H:%M:%S %Y
[logging.runner] format: %(asctime)s (%(process)d) %(message)s
[logging.runner] level: info
[logging.runner] path: mailman.log
[logging.runner] propagate: no
[logging.smtp] datefmt: %b %d %H:%M:%S %Y
[logging.smtp] every: $msgid smtp to $listname for $recip recips, completed
in $time seconds
[logging.smtp] failure: $msgid delivery to $recip failed with code
$smtpcode, $smtpmsg
[logging.smtp] format: %(asctime)s (%(process)d) %(message)s
[logging.smtp] level: info
[logging.smtp] path: smtp.log
[logging.smtp] propagate: no
[logging.smtp] refused: $msgid post to $listname from $sender, $size bytes,
$refused failures
[logging.smtp] success: $msgid post to $listname from $sender, $size bytes
[logging.subscribe] datefmt: %b %d %H:%M:%S %Y
[logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
[logging.subscribe] level: info
[logging.subscribe] path: mailman.log
[logging.subscribe] propagate: no
[logging.vette] datefmt: %b %d %H:%M:%S %Y
[logging.vette] format: %(asctime)s (%(process)d) %(message)s
[logging.vette] level: info
[logging.vette] path: mailman.log
[logging.vette] propagate: no
[mailman] cache_life: 7d
[mailman] default_language: en
[mailman] email_commands_max_lines: 10
[mailman] filtered_messages_are_preservable: no
[mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
[mailman] layout: fhs
[mailman] listname_chars: [-_.0-9a-z]
[mailman] noreply_address: noreply
[mailman] pending_request_life: 3d
[mailman] post_hook:
[mailman] pre_hook:
[mailman] sender_headers: from from_ reply-to sender
[mailman] site_owner: changeme(a)example.com
[mta] configuration: python:mailman.config.postfix
[mta] delivery_retry_period: 5d
[mta] incoming: mailman.mta.postfix.LMTP
[mta] lmtp_host: 127.0.0.1 # IP where Mailman should listen for
emails from MTA
[mta] lmtp_port: 8024
[mta] max_autoresponses_per_day: 10
[mta] max_delivery_threads: 0
[mta] max_recipients: 500
[mta] max_sessions_per_connection: 0
[mta] outgoing: mailman.mta.deliver.deliver
[mta] remove_dkim_headers: no
[mta] smtp_host: 127.0.0.1 # IP Where MTA is listening for emails
[mta] smtp_pass:
[mta] smtp_port: 25
[mta] smtp_user:
[mta] verp_confirm_format: $address+$cookie
[mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
[mta] verp_confirmations: no
[mta] verp_delimiter: +
[mta] verp_delivery_interval: 0
[mta] verp_format: ${bounces}+${local}=${domain}
[mta] verp_personalized_deliveries: no
[mta] verp_probe_format: $bounces+$token@$domain
[mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
[mta] verp_probes: no
[mta] verp_regexp:
^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
[nntp] host:
[nntp] password:
[nntp] port:
[nntp] remove_headers:
nntp-posting-host nntp-posting-date x-trace
x-complaints-to xref date-received posted
posting-version relay-version received
[nntp] rewrite_duplicate_headers:
To X-Original-To
CC X-Original-CC
Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
MIME-Version X-MIME-Version
[nntp] user:
[passwords] configuration: python:mailman.config.passlib
[passwords] password_length: 8
[shell] banner: Welcome to the GNU Mailman shell
[shell] history_file:
[shell] prompt: >>>
[shell] use_ipython: no
[styles] default: legacy-default
[styles] paths:
mailman.styles
[webservice] admin_pass: restpass
[webservice] admin_user: restadmin
[webservice] api_version: 3.1
[webservice] hostname: localhost
[webservice] port: 8001
[webservice] show_tracebacks: yes
[webservice] use_https: no
What do you suggest? Thank you
El mar., 11 jul. 2017 a las 14:31, Simon Hanna (<simon.hanna(a)serve-me.info>)
escribió:
> Below is how I would recommend to run Mailman for production using a
> virtualenv
>
> # useradd -r -m -d /var/lib/mailman mailman
>
> # su - mailman
>
>
> $ python3 -m venv env
> $ source env/bin/activate
> $ pip install mailman
> $ mailman info
>
> Now you should have a working configuration in /var/lib/mailman/var/
>
> to run mailman you don't need to activate the virtualenv, just use the
> executable /var/lib/mailman/env/bin/mailman
>
> cheers,
> Simon
> _______________________________________________
> Mailman-users mailing list
> mailman-users(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
Atentamente / Best Regards
Ing. Rafael Mora
7 years, 9 months

[MM3-users] Re: Implementing threading [was: hyperkitty failed to create a thread]
by Stephen J. Turnbull
tlhackque writes:
> No. It's not an address. "local part" has to do with an address. in a
> Message-ID,
It's syntactically a local-part or other stuff. RFC 5322:
4.5.4. Obsolete Identification Fields
The obsolete "In-Reply-To:" and "References:" fields differ from the
current syntax in that they allow phrase (words or quoted strings) to
appear. The obsolete forms of the left and right sides of msg-id
allow interspersed CFWS, making them syntactically identical to
local-part and domain, respectively.
> It's in "id-left", which is a supposed to be something generated by the
> host that makes the message unique within the namespace defined by
> "id-right".
Right, those are the *semantics recommended to implementers*, for the
reasons which you summarize accurately. But a validating parser
doesn't care about that.
> Treat the whole thing as an opaque string. Nothing else is safe.
s/else// and I'll agree with you. But safety is not an issue in
threading (except for DoS if the procedure might be non-terminating; I
suppose you could argue DoS if a user misses out-of-order mail from
their boss and gets fired).
> Yes, but did you fix the References header to match?
Of course I did. That was long before I was a Mailman developer and
started reading the RFCs, of course.
> My quote was verbatim. 5537 does say you must trim. The point is
> that the news rfcs may have introduced References, but they have
> different obstacles to reconstructing threading.
I don't think that's right, because mail suffers from the same line
length restriction, with no exception for References. Mail has
strictly more specification bugs. :-(
> I haven't looked at that. Given the trimming in 3.4.4 of 5337, I
> don't see how this can be produce the whole thread, unless you are
> guaranteed to have the complete thread to fill the gaps.
It can't because you aren't. But it seems unlikely that anybody is
producing msg-ids longer than 74 characters, so 998/(74+1) = 13 is a
long enough gap that you probably don't care that they're the same
thread. At least not in any forum I participate in!
> Plus, you can lose messages for strange reasons: The moderator
> deleted one for inappropriate content. A message was copied to the
> list and the poster. The response to the list is lost. But a
> reply from the poster happens later. So the response in question
> is never seen by the server, though the reference is. Life is hard
> :-) >
Sure, but Jamie's algorithm *will get that right* as long as all
messages have a semantically correct In-Reply-To or References, and at
least one descendent of the missing message mentions both it and its
parent. What remains is a UI question: missing message placeholder,
to display or not to display?
> Heuristics are fine. Guaranteeing that the resulting algorithm
> terminates is important. But real life doesn't get you to "enough
> messages" 100% of the time.
100% isn't necessary. If the thread is sufficiently broken that
Jamie's msg-id-based procedure doesn't work, his full algorithm falls
back to your idea of collecting the singletons by subject and sorting.
(He doesn't specify the ordering criteria, rather what objects (=
subthreads of the same parent) are to be compared. Your suggestion of
date seems most appropriate for the leftovers.)
> > > See my other post. The left and right halves can, besides being atoms,
> > > be non-folding quotes or literals. So you have to handle that.
> >
> > Of course, but that's just a SMOP. The harder problem is figuring out
> > what to do about non-conforming input.
> And, as I've noted: lost input.
Lost input does not prevent thread reconstruction as long as (1) all
messages have a Message-ID, (2) "enough" messages have a non-empty
References containing "enough" msg-ids, (3) those References do not
misorder the msg-ids or introduce msg-ids corresponding to messages
not in the thread. It should be obvious why I don't want to define
"enough" (except in terms like "enough means Jamie's algorithm can
reconstruct the thread" ;-), but in particular losing *one* message
will certainly not prevent reconstruction.
> When they don't, trying to guess at the semantics of an opaque ID will
> seem to work for a while. But it amounts to the halting problem. There
> are lots of variants of "generate a globally unique ID with an '@' in
> the middle". I may have created a new one today :-)
The problem I'm trying to address with the "stripping" is incorrect
copying of msg-ids by MUAs that try to parse them, as we saw here.
Apparently the bug was in Mailman itself, so it's not required (and a
bad idea, I guess).
> Yes. But if they're well-formed, the <> are there, so stripping them
> only saves a couple of bytes.
>
> If they're not, all bets are off. <two<three(a)example.net> - stripping
> the outer <>s doesn't help.
>
> <"two<three"@example.net> is a valid message-Id,
> and distinct from <"twothree"@example.net.
Sure. Is it likely?
> <twothree(a)example.net> distinct from <"twothree"@example.net>?
> (unnecessary quoting, or a distinct message-ID) If you treat it as
> opaque, you don't care. Take the whole thing, <@> included, as given
> and look for it in the other fields. The most you might do is remove
> quotes (and escapes) and use the left and right parts as your key.
Which is basically what my stripping and cleaning procedure would do.
The question is "does it help or hurt, on net?" If there was a widely
distributed MUA out there that doubled the delimiters, it would help.
Since it was Mailman doing that and it will be fixed, it's a bad idea.
> You could also fingerprint the user agent (e.g. by the order of headers,
> format of message-ID), and correct for its bugs. But I'm inclined to
> report client bugs and get them fixed. Meantime, their messages are
> unthreaded (but not lost). It's just not worth working around other
> people's bugs - there are better uses for your time.
That's not my experience. See Reply-To munging. Depends on the bug,
of course, but all too often people think it's our job to help them
deal with bad MUA design.
> Yes. A message ID should exist. These days I think all MTAs will assign
> one if the client doesn't.
> What I tried to say was that there will be times where you can't figure
> out where to put a message into the thread graph (or forest). Because it
> references message that you can't find, or it doesn't have a references
> or reply-to, or those fields are corrupt.
None of those prevent you from threading that message. The only
reasons you won't be able to thread a message at all are when no other
available message references it (eg, if several MUAs in a row supply
In-Reply-To but not References, and the middle messages are missing or
their identification fields are corrupt), and when there are
References that have conflicting opinions on where that message
belongs. Of course if a message lacks References and In-Reply-To it
will be identified as a thread root (unless some descendent manually
corrects References ;-). Even then it could be grafted into the tree
more or less correctly using your sort on subject and date procedure.
> These are heuristics - you might come up with better ones.
Yours are already implemented in Pipermail, I believe, I'm not sure
about HyperKitty. I don't think Jamie's algorithm messed with [name]
and [serial number] because they weren't common at that time, but he
stripped Re: and its nonconforming variants, as well as "Fwd:".
> At least with an orphans bucket, you don't end up with "invisible"
> messages.
Nothing I suggested produces invisible messages, just a different set
of orphans or occasionally a misthreaded message that seems to be a
duplicate if different msg-ids are munged to the same string. At
least not in Jamie's algorithm. I don't know exactly what algorithms
are used in Pipermail and HyperKitty.
Interesting discussion, but I've reached the point of diminishing
returns. I will be checking to see if any of your suggestions are
improvements over what HyperKitty currently does, for sure!
Steve
6 years, 2 months

[MM3-users] Re: E-mail every minute: "Cron <www-data@sharky5> ..."
by Robert Heller
At Mon, 8 Jul 2024 00:16:48 +0300 Odhiambo Washington <odhiambo(a)gmail.com> wrote:
>
> On Sun, Jul 7, 2024 at 8:43â¯PM Robert Heller <heller(a)deepsoft.com> wrote:
>
> > At Sun, 7 Jul 2024 19:48:02 +0300 Odhiambo Washington <odhiambo(a)gmail.com>
> > wrote:
> >
> > >
> > > On Sun, Jul 7, 2024 at 7:16âÃâ¬Ã¯PM Robert Heller <heller(a)deepsoft.com>
> > wrote:
> > >
> > > > At Sun, 7 Jul 2024 18:52:05 +0300 Odhiambo Washington <
> > odhiambo(a)gmail.com>
> > > > wrote:
> > > >
> > > > >
> > > > > On Sun, Jul 7, 2024 at 4:12ÃÆÃÆÃâÃÂ¢ÃÆÃââÃâÃÂ¬ÃÆÃâÃâïPM Robert
> > Heller <heller(a)deepsoft.com>
> > > > wrote:
> > > > >
> > > > > > What am I missing? I *think* I have mailman3 *mostly* setup, but
> > there
> > > > > > are
> > > > > > still some configuration things that are missing, but I am not sure
> > > > how to
> > > > > > fix
> > > > > > them (the docs are NOT clear).
> > > > > >
> > > > >
> > > > > Which docs are you relying on?
> > > >
> > > > https://docs.mailman3.org/en/latest/config-web.html
> > > >
> > > > I presume these are the official docs for mailman3 -- maybe they
> > aren't?
> > > >
> > > > >
> > > > > How about this -
> > > > https://docs.mailman3.org/en/latest/install/virtualenv.html
> > > > > ??
> > > >
> > > > I'm not using a virtual environment. I'm using all native Debian 12
> > > > packages,
> > > > installed via apt. The virtual environment docs are actually even worse
> > > > (even
> > > > more confusing).
> > >
> > >
> > > Worse? :-)
> >
> > Even more confusing. Both sets of docs make various assumptions and don't
> > really explain things properly. Like everywhere where "settings.py" is
> > mentioned, it really means "/etc/mailman3/mailman-web.py"
> >
>
> No! It means /etc/mailman3/settings.py - literally!
>
>
> > In any case, the virtual environment docs are hard to relate to a "native"
> > install and are generally hard to follow, since they seem to jump all over
> > the
> > place.
>
>
> When one day you'll be able to internalize what a Python virtual
> environment is, you'll realize that it's VERY convenient.
> You will actually embrace it from that point onwards.
>
> (Spaghetti docs?) And it is hard to replace the various (and not
> > always consistent) virtual environment paths and settings files to the
> > "native"
> > paths.
>
>
> Actually, if you're this inclined to run everything natively, MM3 is
> perhaps not for you. Why? Because you'll not easily find help here.
> We focus on the virtual environment only as the standard.. Why? Because no
> one is willing to deal with ALL the OS-centric packaging
> out there. Python virtual environment is universal across all the OSes, I
> can say.
>
>
> > The "official" docs are just not useful to me, since I am not using a
> > virtual
> > environment. If a virtual environment is recomended, what is the point of
> > the
> > Debian 12 packages?
>
>
> We cannot answer that here. I guess they are meant for people like you who
> strive under pain :-)
> With the Python virtual environment, I can install and manage MM3 in almost
> any *nix OS.
>
>
> > Are they just not meant to be used? Really? Do you mean that I should use
> > a separate package management system for Mailman3? That
> > really sucks.
> >
>
> Yes, they are meant to be used. Noone denies that. However, they are not
> packaged by the Mailman Developers.
> Did you read one response from Mark Sapiro where he said, and I quote:
> ```
> If you prefer to use the Debian packages, that's fine, but if using the
> Debian packages, your primary resource for support, documentation, bug
> reports, etc. should be Debian. See https://wiki.list.org/x/12812344
> ```
> So yes, go ahead and use the Debian packages. No one is stopping you.
I uninstalled them and have given up on mm3. It means the main mailling list
I have been hosting for the past while (more than a decade), will have to
migrate to something else... :-(
>
>
--
Robert Heller -- Cell: 413-658-7953 GV: 978-633-5364
Deepwoods Software -- Custom Software Services
http://www.deepsoft.com/ -- Linux Administration Services
heller(a)deepsoft.com -- Webhosting Services
9 months, 2 weeks

[MM3-users] Re: mailman3 not working for mailman21 lists
by Diana von Bidder
Hi Stephen
On Mon, 2022-08-22 at 23:51 +0900, Stephen J. Turnbull wrote:
> blup(a)fortytwo.ch writes:
>
> Try queue/, especially look for the out[going], pipeline, and shunt
> subdirectories.
I have several entries in /var/lib/mailman3/queue/shunt/ with Aug 21
timestamps, and several entries in /var/lib/mailman3/queue/shunt/ with
current timestamp (i.e. everytime I ls -l there is a new timestamp with
the current time).
> > > Is the 'outgoing' qrunner still running? (ps ax | grep outgoing)
> >
> > no
>
> Sorry, I got that wrong. Mark recommends this:
>
> ps -fwwA|grep runner=|sed s/.*runner=//
>
> and gave this as sample output: [..]
My output looks exactly the same.
> > I have more or less no Python knowledge (i.e. I can read and
> > understand Python but can't write it). Could you please give me
> > detailed command by command instructions. Thanks.
>
> I'll take a look at it tomorrow, but I can't promise results until
> the weekend if I can't write a script in 30 minutes. Normally Mark
> Sapiro would handle this kind of thing, but he's offline for a couple
> weeks so you've got me. My knowledge is mostly on the email
> protocols side of things (Internet message format, authentication
> protocols), not the internal processing. I'll do what I can, but if
> I can't do it real quick it's probably going to take me several
> hours, which I'm not going to have until the weekend.
Having something by the weekend would be perfectly fine. Thanks for
your time!
Regards
Diana
2 years, 8 months

[MM3-users] Re: Hyperkitty no longer archiving
by Hirayama, Pat
> -----Original Message-----
> From: Mark Sapiro <mark(a)msapiro.net>
> Sent: Tuesday, November 22, 2022 2:21 PM
> To: mailman-users(a)mailman3.org
> Subject: [MM3-users] Re: Hyperkitty no longer archiving
>
> On 11/22/22 13:40, Hirayama, Pat wrote:
> >
> > There is only one uwsgi.ini file, and it is in the same directory as settings.py,
> settings_local.py and wsgi.py
>
>
> What is the content of that file?
uwsgi.ini:
[uwsgi]
uwsgi-socket = :8000
chdir = /opt/mailman/mailman-suite/mailman-suite_project
wsgi-file = /opt/mailman/mailman-suite/mailman-suite_project/wsgi.py
harakiri = 60
master = true
process = 4
threads = 4
uid = mail
gid = mail
attach-daemon = ./manage.py qcluster
The referenced wsgi.py looks pretty vanilla:
"""
import os
# import sys
# import site
# For some unknown reason, sometimes mod_wsgi fails to set the python paths to
# the virtualenv, with the 'python-path' option. You can do it here too.
#
# # Remember original sys.path.
# prev_sys_path = list(sys.path)
# # Add here, for the settings module
# site.addsitedir(os.path.abspath(os.path.dirname(__file__)))
# # Add the virtualenv
# venv = os.path.join(os.path.abspath(os.path.dirname(__file__)),
# '..', 'lib', 'python2.6', 'site-packages')
# site.addsitedir(venv)
# # Reorder sys.path so new directories at the front.
# new_sys_path = []
# for item in list(sys.path):
# if item not in prev_sys_path:
# new_sys_path.append(item)
# sys.path.remove(item)
# sys.path[:0] = new_sys_path
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
application = get_wsgi_application()
>
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
Thanks!
-p
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org
2 years, 5 months

[MM3-users] Hyperkitty no longer archiving
by Hirayama, Pat
Greetings,
A couple of months ago, I needed to move the Mailman3 server I inherited from one AWS account to another AWS account. This necessitated a change in the IP address of instance hosting the docker containers that comprise my mailman3 server. I thought I had updated the IP address wherever it needed to be, but I suppose I've missed something, because hyperkitty has not been archiving any messages. (Most of my lists don't archive, so it took a while before someone noticed).
When I look at /opt/mailman/var/archives/hyperkitty/spool, I see messages dating back over the past couple of months waiting to be archived. So, they don't appear to be lost (and things are being mailed out normally).
The thing is, the IP addresses of the docker containers haven't changed with respect to docker networking.
docker networking
------------------------
docker host 172.31.0.1
mailman-core 172.31.0.3
mailman-nginx 172.31.0.5
mailman-postfix 172.31.0.4
mailman-django-uwsgi 172.31.0.2
settings_local.py:
MAILMAN_ARCHIVER_FROM = ('172.18.8.14', '172.31.0.1', '172.31.0.2', '172.31.0.3', '172.31.0.4', '172.31.0.5', '127.0.0.1', '::1')
During troubleshooting, I added 172.18.8.14 (new IP of the webserver), but that didn't seem to help. It seems like I added one of the docker addresses that was missing .... but again, that doesn't seem to have fixed the issue.
mailmansuite.log is full of:
ERROR 2022-11-22 00:25:40,365 7 hyperkitty.views.mailman Access to the archiving API endpoint was forbidden from IP 172.31.0.1, your MAILMAN_ARCHIVER_FROM setting may be misconfigured
ERROR 2022-11-22 00:25:40,399 7 hyperkitty.views.mailman Access to the archiving API endpoint was forbidden from IP 172.31.0.1, your MAILMAN_ARCHIVER_FROM setting may be misconfigured
Any suggestions as to where I might look for a solution, or what setting I need to change?
Thanks!
-p
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org<mailto:phirayam@fredhutch.org>
2 years, 5 months

[MM3-users] Re: Verification Failed Error
by Stephen J. Turnbull
Abhilash Raj writes:
> You probably have
>
> verify = sender
>
> somewhere in your exim.conf, which is causing this.
No, that seems unlikely. This is in the default exim.conf.
> You can either modify the
>
> DEFAULT_FROM_EMAIL
>
> in your settings_local.py so that it is a real address that Exim can verify,
He's already modified that, since the default in settings.py is
"postorius(a)localhost.local" (which is a bug: this should default to a
mailbox, and the domain should be added automatically if only a
mailbox is given).
It seems likely that what needs to be done is to set up a mailbox for
Postorius, which can be done in several ways. When does Postorius
receive mail? I guess it *sends* mail for the mailbox owner
confirmation dialogs on subscription or password reset, but that
confirmation is normally done by a web transaction, right? If
<postorius> rarely gets mail, the obvious thing to do would be to
alias to site owner or postmaster. (It looks like Django doesn't know
how to receive mail, so any facility for postorius to receive mail
would have to be configured in the MTA.)
If it's not that, then the problem likely has something to do with the
containerization, and the MTA getting confused about which host is
which.
> or, you can remove verify = sender from your Exim configuration.
Don't do this. If you set up a separate Exim router for "postorius"
(to do something fancy like a autoreply bot or delivery to /dev/null
;-), you can put the no_verify option in the Requires stanza for it.
Steve
--
Associate Professor Division of Policy and Planning Science
http://turnbull.sk.tsukuba.ac.jp/ Faculty of Systems and Information
Email: turnbull(a)sk.tsukuba.ac.jp University of Tsukuba
Tel: 029-853-5175 Tennodai 1-1-1, Tsukuba 305-8573 JAPAN
6 years, 4 months

[MM3-users] Re: Implementing threading [was: hyperkitty failed to create a thread]
by Stephen J. Turnbull
tlhackque writes:
> No. It's not an address. "local part" has to do with an address. in a
> Message-ID,
It's syntactically a local-part or other stuff. RFC 5322:
4.5.4. Obsolete Identification Fields
The obsolete "In-Reply-To:" and "References:" fields differ from the
current syntax in that they allow phrase (words or quoted strings) to
appear. The obsolete forms of the left and right sides of msg-id
allow interspersed CFWS, making them syntactically identical to
local-part and domain, respectively.
> It's in "id-left", which is a supposed to be something generated by the
> host that makes the message unique within the namespace defined by
> "id-right".
Right, those are the *semantics recommended to implementers*, for the
reasons which you summarize accurately. But a validating parser
doesn't care about that.
> Treat the whole thing as an opaque string. Nothing else is safe.
s/else// and I'll agree with you. But safety is not an issue in
threading (except for DoS if the procedure might be non-terminating; I
suppose you could argue DoS if a user misses an out-of-order mail from
their boss and gets fired :-).
> Yes, but did you fix the References header to match?
Of course I did. :-) That was long before I was a Mailman developer
and started reading the RFCs, also of course.
> Yes, but you brought up the news RFCs, IIRC in saying that they defined
> threading.
Actually you brought up the news RFCs. I was wondering why. I guess
it was to argue (implicitly) that there's a bug in the 2822 (and 5322)
spec, and that 5537's solution tends to muck things up?
> My quote was verbatim. 5537 does say you must trim. The point is that
> the news rfcs may have introduced References, but they have different
> obstacles to reconstructing threading.
I don't think that's right, because mail suffers from the same line
length restriction, with no exception for References. Mail just has
strictly more specification bugs. :-(
> I haven't looked at that. Given the trimming in 3.4.4 of 5337, I don't
> see how this can be produce the whole thread, unless you are guaranteed
> to have the complete thread to fill the gaps.
It can't because you aren't. But it seems unlikely that anybody is
producing msg-ids longer than 74 characters, so 998/(74+1) - 1 = 12 is
a long enough gap that you probably don't care that they're the same
thread. At least not in any forum I participate in!
It's true that an MUA that doesn't produce either References or
In-Reply-To will necessarily break threading, and that "enough"
missing messages can do so. But both are pretty uncommon in my
experience. Even AppleMail gets those right AFAICT. ;-)
> Plus, you can lose messages for strange reasons: The moderator
> deleted one for inappropriate content. A message was copied to the
> list and the poster. The response to the list is lost. But a
> reply from the poster happens later. So the response in question
> is never seen by the server, though the reference is. Life is hard
> :-) >
Sure, but Jamie's algorithm *will get that right*. What remains is a
UI question: missing message placeholder, to display or not to display?
> Heuristics are fine. Guaranteeing that the resulting algorithm
> terminates is important. But real life doesn't get you to "enough
> messages" 100% of the time.
100% isn't necessary. If the thread is sufficiently broken that
Jamie's msd-id-based procedure doesn't work, his full algorithm falls
back to your idea of collecting the singletons by subject and sorting.
(He doesn't specify the ordering criteria, rather what objects (=
subthreads of the same parent) are to be compared. Your suggestion of
date seems most appropriate for the leftovers.)
> > > See my other post. The left and right halves can, besides being atoms,
> > > be non-folding quotes or literals. So you have to handle that.
> >
> > Of course, but that's just a SMOP. The harder problem is figuring out
> > what to do about non-conforming input.
> And, as I've noted: lost input.
Lost input does not prevent thread reconstruction as long as (1) all
messages have a Message-ID, (2) "enough" messages have a non-empty
References containing "enough" msg-ids, (3) those References do not
misorder the msg-ids or introduce msg-ids corresponding to messages
not in the thread. It should be obvious why I don't want to define
"enough" (except in terms like "enough means Jamie's algorithm can
reconstruct the thread" ;-), but in particular losing *one* message
will certainly not prevent reconstruction.
> When they don't, trying to guess at the semantics of an opaque ID will
> seem to work for a while. But it amounts to the halting problem. There
> are lots of variants of "generate a globally unique ID with an '@' in
> the middle". I may have created a new one today :-)
The problem I'm trying to address with the "stripping" is incorrect
copying of msg-ids by MUAs that try to parse them, as we saw here.
Apparently the bug was in Mailman itself, so it's not required, I
guess.
> Yes. But if they're well-formed, the <> are there, so stripping them
> only saves a couple of bytes.
>
> If they're not, all bets are off. <two<three(a)example.net> - stripping
> the outer <>s doesn't help.
>
> <"two<three"@example.net> is a valid message-Id,
> and distinct from <"twothree"@example.net.
Sure. Is it likely?
> <twothree(a)example.net> distinct from <"twothree"@example.net>?
> (unnecessary quoting, or a distinct message-ID) If you treat it as
> opaque, you don't care. Take the whole thing, <@> included, as given
> and look for it in the other fields. The most you might do is remove
> quotes (and escapes) and use the left and right parts as your key.
Which is basically what my stripping and cleaning procedure would do.
The question is "does it help or hurt, on net?" If there was a widely
distributed MUA out there that doubled the delimiters, it would help.
Since it was Mailman doing that, it's a bad idea.
> You could also fingerprint the user agent (e.g. by the order of headers,
> format of message-ID), and correct for its bugs. But I'm inclined to
> report client bugs and get them fixed. Meantime, their messages are
> unthreaded (but not lost). It's just not worth working around other
> people's bugs - there are better uses for your time.
That's not my experience. See Reply-To munging. Depends on the bug,
of course, but all too often people think it's our job to help them
deal with bad MUA design.
> Yes. A message ID should exist. These days I think all MTAs will assign
> one if the client doesn't.
> What I tried to say was that there will be times where you can't figure
> out where to put a message into the thread graph (or forest). Because it
> references message that you can't find, or it doesn't have a references
> or reply-to, or those fields are corrupt.
None of those prevent you from threading that message. The only
reasons you won't be able to thread a message at all are when no other
available message references it (eg, if several MUAs in a row supply
In-Reply-To but not References, and the middle messages are missing or
their identification fields are corrupt), and when there are
References that have conflicting opinions on where that message
belongs. Of course if a message lacks References and In-Reply-To it
will be identified as a thread root (unless some descendent manually
corrects References ;-). Even then it could be grafted into the tree
more or less correctly using your sort on subject and date procedure.
> These are heuristics - you might come up with better ones.
Yours are already implemented in Pipermail, I believe, I'm not sure
about HyperKitty. I don't think Jamie's algorithm messed with [name]
and [serial number] because they weren't common at that time, but he
stripped Re: and its nonconforming variants, as well as "Fwd:".
> At least with an orphans bucket, you don't end up with "invisible"
> messages.
Nothing I suggested produces invisible messages, just a different set
of orphans or occasionally a misthreaded message that seems to be a
duplicate if different msg-ids are munged to the same string. At
least not in Jamie's algorithm. I don't know exactly what algorithms
are used in Pipermail and HyperKitty.
Interesting discussion, but I've reached the point of diminishing
returns. I will be checking to see if any of your suggestions are
improvements over what HyperKitty currently does.
6 years, 2 months

[MM3-users] Re: Using REST with CLI using curl .... help needed
by Michael Bakonyi
Dear Stephen,
allright, thx a lot for your quick answer! After fiddling around some more time, I guess I had some misunderstandings regarding the REST-API. I guess if we reach the API correctly, we will not be confronted with the CSRF-Error. We will continue to try but nevertheless: What would be a cleaner approach to reach the API from an external IP? I didn't found any examples in the web so far.
Cheers,
Michael
> Am 24.08.2022/ 34 um 14:27 schrieb Stephen J. Turnbull <stephenjturnbull(a)gmail.com>:
>
> kontakt(a)michaelbakonyi.de writes:
>
>> I have the same usecase as Krešimir and tried the example of
>> Mark. So in mailman.cfg I set hostname to
>> "https://lists.mydomain.org" and then fire this command
>
> I don't recall this, and unfortunately Mark is on vacation and
> completely offline until mid-September, except for maybe a couple days
> next week.
>
>> curl -urestadmin:mypw --referer https://lists.mydomain.org --request POST -H 'Content-Type: application/json' --data-binary '{"list_id": "thelist.lists.mydomain.org", "subscriber": "user(a)example.net", "display_name": "Joe User", "pre_verified": true, "pre_confirmed": true, "pre_approved": true}' https://lists.mydomain.org/mailman3/postorius/lists/thelist.lists.mydomain.…
>>
>> But then I get a CSRF-warning. Do I now have to get the token and
>> put it in my POST or is there an easier way to do this?
>
> As far as *I* know there's no way to avoid the CSRF warning. If that
> means you can't get the response data you need, you will have to do
> the CSRF two-step.
>
> With luck maybe Mark will see this in a few days but I think he's
> going to be busy preparing the 2d half of his trip.
>
> Regards,
> Steve
>
2 years, 8 months

[MM3-users] Re: RDS CA changes
by Hirayama, Pat
Thanks, Mark. That's what it looked like to me, but I wanted someone with more expertise / experience to weigh in.
Have a great day!
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org
________________________________
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Monday, August 12, 2024 10:49
To: mailman-users(a)mailman3.org <mailman-users(a)mailman3.org>
Subject: [MM3-users] Re: RDS CA changes
CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
On 8/12/24 10:23, Hirayama, Pat wrote:
>
> As near as I can tell from reading the Mailman 3 docs, and looking at my mailman.cfg and settings_local.py ... I don't know that Mailman 3 is using certificate verification for the PostgreSQL connection. At least, I can't see anything in those configuration files that suggest this. Does anyone know if this is the case – or which configuration file I should look at to verify? Will my Mailman 3 be ok if the DBAs go ahead and update the certificates on their end?
There are two places where the database access is defined. They are the
[database] section in mailman.cfg and the DATABASES definition in
Django's settings.
I don't see a way in either of these to specify TLS for the connection,
possibly it is set on the PostgreSQL side. In any case, I don't think
there'd be any issue if the DBAs go ahead and update the certificates on
their end.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailman-users(a)mailman3.org
To unsubscribe send an email to mailman-users-leave(a)mailman3.org
https://urldefense.com/v3/__https://lists.mailman3.org/mailman3/lists/mailm…
Archived at: https://urldefense.com/v3/__https://lists.mailman3.org/archives/list/mailma…
This message sent to phirayam(a)fredhutch.org
8 months, 2 weeks

[MM3-users] Re: Emergency Moderation
by Abhilash Raj
On Sun, May 24, 2020, at 11:34 AM, Mark Sapiro wrote:
> On 5/24/20 10:59 AM, Allan Hansen wrote:
> > In the MM3 settings there is an option to ‘Hold for moderation’ when members or non-members post to the list.
> > I use that for the same cases where in MM2 I switched a list to ‘Emergency Moderation.’
>
>
> If you imported your MM 2.1 lists with `mailman import21`, `emergency`
> was set appropriately for the imported list and should be working to
> hold posts regardless of other settings.
>
>
> > My own current top-of-the-list issues:
> >
> > A bug: Moderators can’t see/edit the list of members even when allowed to by list setting.
>
> The visibility issue is <https://gitlab.com/mailman/postorius/-/issues/369>.
>
> Editing membership beyond what could be done via the admindb interface
> (i.e. clearing a moderated poster's mod flag) was never allowed for a
> moderator in MM 2.1.
>
> In MM 3, a moderator can set a member's moderation when handling a held
> post. Do you think a non-owner moderator should be able to make other
> changes to a member?
>
>
> > A feature request: Member changing email address on all lists he/she belongs to, without involving moderators.
>
>
> This is <https://gitlab.com/mailman/postorius/-/issues/399> and we're
> working on it.
Another way to achieve this request, without needing the Preferred Address route is to simply Patch the Member resource with the new address, which wouldn't trigger the full subscription workflow and would have the extra advantage of having the same delivery_mode and preferences.
I created: https://gitlab.com/mailman/postorius/-/issues/425 to track this issue.
>
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
thanks,
Abhilash Raj (maxking)
4 years, 11 months

[MM3-users] Re: Member Issue Discovered
by Allan Hansen
I agree that deleting, without an explicit request to do so, user-entered information is a violation of the user’s data
This applies when the user has set up an account on the system.
If he/she has never created an account, then I see no problem cleaning up the system when the
user deletes the last subscription, as any remaining data presumably has been created by the server.
Keeping that information on the server without the knowledge of the user is not right.
Yours,
Allan Hansen
hansen(a)rc.org
> On Nov 2, 2020, at 19:51 , Stephen J. Turnbull <turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
>
> Brian Carpenter writes:
>
>> This is in regard to our Affinity/Empathy UIs. I believe the issue
>> [about data retention] that was raised originally in this
>> thread/post still exists with Postorius/Hyperkitty.
>
> I don't speak *for* the Mailman team on this, but my *impression* from
> these conversations is that we have a consensus on the team: deleting
> the User data (authentication and profile) is a very big deal that
> should be done only on explicit request, not as an automatic side
> effect of other changes. We understand that others have a different
> opinion, but we think that this is a difference of opinion, not a
> mistake on either side.
>
> My own suggestion is that we *should* provide the *option* to delete
> the User data, and prompt for it, when that User's last subscription
> on the server is deleted. Note that there is a race condition where
> the user deletes the second-to-last subscription and an admin then
> deletes the last one. The user won't see the option, but the admin
> will. I can see this as a bad outcome, depending on user's intent,
> whether the admin deletes the User object or leaves it in place.
> _______________________________________________
> 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, 5 months

[MM3-users] Re: New Mailman Releases
by Odhiambo Washington
On Wed, Oct 26, 2022 at 10:16 AM Abhilash Raj <maxking(a)asynchronous.in>
wrote:
> On 10/26/22 12:32, Odhiambo Washington wrote:
> >
> >
> > On Wed, Oct 26, 2022 at 8:44 AM Abhilash Raj <maxking(a)asynchronous.in
> > <mailto:maxking@asynchronous.in>> wrote:
> >
> > Hi,
> >
> > I am pleased to announce several new releases for GNU Mailman
> project.
> >
> > 1. Mailman Core 3.3.6 [1]
> > 2. Postorius 1.3.7 [2]
> > 3. Hyperkitty 1.3.6 [3]
> > 4. Mailmanclient 3.3.4 [4]
> > 5. Django-mailman3 1.3.8 [5]
[snip]
>
> > Finally, the minimum Python version required is 3.7 although, 3.9 is
> > recommended if you are doing a new install for longest support. 3.10
> is
> > supported for Django apps, but Mailman Core is missing that due to
> one
> > of the core dependencies not support 3.10 yet (aiosmtpd).
> >
> >
> >
> > Hello @Abhilash Raj <mailto:maxking@asynchronous.in>
> >
> > Thank you and the whole MM3 team for all the free work you do to make us
> > have mailing lists :)
> >
> > I have a question regarding the Python version.
> > I have a very recent installation of MM3, via the Virtual Environment
> > method, running smoothly - so far.
> > The Python version that got installed is 3.10.6
> >
> > wash@lists:~$ sudo su - mailman
> > (venv) mailman@lists:~$ which python
> > /opt/mailman/mm/venv/bin/python
> > (venv) mailman@lists:~$ /opt/mailman/mm/venv/bin/python -V
> > Python 3.10.6
> > (venv) mailman@lists:~$ mailma
> > mailmail3 mailman
> > (venv) mailman@lists:~$ mailman --version
> > GNU Mailman 3.3.5 (Tom Sawyer)
> > (venv) mailman@lists:~$
> >
> > 1. What does the incompatibility with Python-3.10 portend for my setup
> > and anyone else with Python-3.10?
>
> The bug in aiosmtpd is a bit weird and has to do with how the test cases
> in aiosmtpd and Python 3.10 changes interact with SSL. For the intents
> and purposes of Mailman, we don't use SSL for the communication between
> MTA and aiosmtpd, so there _shouldn't_ be any issuer with your setup.
>
Relief!
> Ideally, `pip` shouldn't have allowed you to install aiosmtpd in a
> Python venv with 3.10, but that depends on which version of pip you are
> using since the newer versions have better support for such management.
>
I followed the HOWTO by the late BC
<https://wiki.list.org/DOC/Howto_Install_Mailman3_On_Debian10> for my
installation. I did not have to choose any specific version of pip.
I just used what was in the system at that time, which was based on the
Python version on the system.
> > 2. Is it possible to downgrade the Python in a Venv down to 3.9 without
> > breaking the installation?
>
> You can keep the current installation running and create a 2nd
> installation by simply creating a 2nd venv with 3.9. Something like,
> `/opt/mailman/mm/venv-3.9/`. You can install things into that venv and
> when you are done and ready to switch, you can update all the paths in
> various places to use update 'venv-3.9' instead of 'venv'.
>
That procedure seems way too much work for someone not so well versed with
the PATHs used in MM3.
Since I don't remember ever having to install aiosmtpd (not even sure what
it is!) I believe I should not worry.
'pip3 list | grep smtpd' yielded nothing in my install. Is that expected?
Or aiosmtpd is part of the core?
In case you encounter any issues, you can always revert back to older
> 'venv' in the paths wherever the are needed and bring back the old
> install. Venvs are good for multiple installs so you can switch back and
> forth pretty easily.
>
Talking of moving between VENVs, you did not mention about migrating the
lists/list data between then :-)
> >
> > And finally, is there documentation/procedure to upgrade a VENV install
> > in this case?
>
> You don't want to upgrade venv is what i've heard, you should always
> create a new one if you are bumping python versions.
>
Noted. And only Python versions, right? Like 3.10 to 3.11?
> If you are just upgrading packages in the existing venv, then you can
> follow:
>
> https://docs.mailman3.org/en/latest/upgrade-3.2.html
Thank you for this.
I have a request: Is it possible for someone to update the HOWTO that was
done by Brian to include the process of
updating MM3? I can see that he created a heading that was supposed to have
the procedure.
I am assuming it should be a few simple additions - but I am not quite sure
(see below):
(1) Pre-upgrade
First, you need to stop the running Mailman services before the upgrade to
make sure that you don’t end up in a bad state.
You can stop the three systemd services:
$sudo systemctl stop mailman3
$sudo systemctl stop qcluster
$sudo systemctl stop gunicorn
(2) Then you need to switch to mailman user, activate the virtualenv:
$ sudo su mailman
$ source /opt/mailman/mm/venv/bin/activate
(3) Upgrade package
Finally, upgrade your packages:
Here, I am a little confused. The official MM3 documentation says the below:
*(venv) $ pip install -U mailman postorius django-mailman3 hyperkitty
mailman-web*
However, thee howto by BC, there was no installation for django-mailman3
and mailman-web. So I am unable to map 1:1 what needs to be done
to upgrade to these 5 components of
1. Mailman Core 3.3.6 [1]
2. Postorius 1.3.7 [2]
3. Hyperkitty 1.3.6 [3]
4. Mailmanclient 3.3.4 [4]
5. Django-mailman3 1.3.8 [5]
What should I add to the command line below so that everything is updated?
(venv) mailman@lists:~$ pip install -U mailman postorius hyperkitty
mailman-hyperkitty
Sorry to bother you so much.
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
2 years, 6 months

[MM3-users] Re: Hyperkitty
by Massimiliano Paragnani
SOLVED!
I edited /etc/mailman3/mailman3-web.py adding in MAILMAN_ARCHIVER_FROM =
the ip of the server and finally starts to work
Il Ven 27 Gen 2023, 18:52 Massimiliano Paragnani <max.paragnani(a)gmail.com>
ha scritto:
> I set up the mailman3 services and lists, and we can send mail to the
> list successfully. However in the Archive section I couldn't see
> anything.
> My configuration: ubuntu, milman core 3.2.2, postresql, postorius 1.2.4,
> hyperkitty 1.3.2
>
> This is my mailman conf result:
>
> [antispam] header_checks:
> [antispam] jump_chain: hold
> [archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
> [archiver.mail_archive] clobber_date: maybe
> [archiver.mail_archive] clobber_skew: 1d
> [archiver.mail_archive] configuration: python:mailman.config.mail_archive
> [archiver.mail_archive] enable: no
> [archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
> [archiver.mhonarc] clobber_date: maybe
> [archiver.mhonarc] clobber_skew: 1d
> [archiver.mhonarc] configuration: python:mailman.config.mhonarc
> [archiver.mhonarc] enable: no
> [archiver.prototype] class: mailman.archiving.prototype.Prototype
> [archiver.prototype] clobber_date: maybe
> [archiver.prototype] clobber_skew: 1d
> [archiver.prototype] configuration: changeme
> [archiver.prototype] enable: no
> [bounces] register_bounces_every: 15m
> [database] class: mailman.database.postgresql.PostgreSQLDatabase
> [database] debug: no
> [database] url: postgres://mailman3:--------------@localhost/mailman3
> [devmode] enabled: no
> [devmode] recipient:
> [devmode] testing: no
> [devmode] wait: 60s
> [digests] mime_digest_keep_headers:
> Date From To Cc Subject Message-ID Keywords
> In-Reply-To References Content-Type MIME-Version
> Content-Transfer-Encoding Precedence Reply-To
> Message List-Post
> [digests] plain_digest_keep_headers:
> Message Date From
> Subject To Cc
> Message-ID Keywords
> Content-Type
> [dmarc] cache_lifetime: 7d
> [dmarc] org_domain_data_url:
> https://publicsuffix.org/list/public_suffix_list.dat
> [dmarc] resolver_lifetime: 5s
> [dmarc] resolver_timeout: 3s
> [language.ar] charset: utf-8
> [language.ar] description: Arabic
> [language.ar] enabled: yes
> [language.ast] charset: iso-8859-1
> [language.ast] description: Asturian
> [language.ast] enabled: yes
> [language.ca] charset: utf-8
> [language.ca] description: Catalan
> [language.ca] enabled: yes
> [language.cs] charset: iso-8859-2
> [language.cs] description: Czech
> [language.cs] enabled: yes
> [language.da] charset: iso-8859-1
> [language.da] description: Danish
> [language.da] enabled: yes
> [language.de] charset: utf-8
> [language.de] description: German
> [language.de] enabled: yes
> [language.el] charset: iso-8859-7
> [language.el] description: Greek
> [language.el] enabled: yes
> [language.es] charset: iso-8859-1
> [language.es] description: Spanish
> [language.es] enabled: yes
> [language.et] charset: iso-8859-15
> [language.et] description: Estonian
> [language.et] enabled: yes
> [language.eu] charset: iso-8859-15
> [language.eu] description: Euskara
> [language.eu] enabled: yes
> [language.fi] charset: iso-8859-1
> [language.fi] description: Finnish
> [language.fi] enabled: yes
> [language.fr] charset: iso-8859-1
> [language.fr] description: French
> [language.fr] enabled: yes
> [language.gl] charset: utf-8
> [language.gl] description: Galician
> [language.gl] enabled: yes
> [language.he] charset: utf-8
> [language.he] description: Hebrew
> [language.he] enabled: yes
> [language.hr] charset: iso-8859-2
> [language.hr] description: Croatian
> [language.hr] enabled: yes
> [language.hu] charset: iso-8859-2
> [language.hu] description: Hungarian
> [language.hu] enabled: yes
> [language.ia] charset: iso-8859-15
> [language.ia] description: Interlingua
> [language.ia] enabled: yes
> [language.it] charset: iso-8859-1
> [language.it] description: Italian
> [language.it] enabled: yes
> [language.ja] charset: euc-jp
> [language.ja] description: Japanese
> [language.ja] enabled: yes
> [language.ko] charset: euc-kr
> [language.ko] description: Korean
> [language.ko] enabled: yes
> [language.lt] charset: iso-8859-13
> [language.lt] description: Lithuanian
> [language.lt] enabled: yes
> [language.nl] charset: iso-8859-1
> [language.nl] description: Dutch
> [language.nl] enabled: yes
> [language.no] charset: iso-8859-1
> [language.no] description: Norwegian
> [language.no] enabled: yes
> [language.pl] charset: iso-8859-2
> [language.pl] description: Polish
> [language.pl] enabled: yes
> [language.pt] charset: iso-8859-1
> [language.pt] description: Protuguese
> [language.pt] enabled: yes
> [language.pt_BR] charset: iso-8859-1
> [language.pt_BR] description: Protuguese (Brazil)
> [language.pt_BR] enabled: yes
> [language.ro] charset: iso-8859-2
> [language.ro] description: Romanian
> [language.ro] enabled: yes
> [language.ru] charset: koi8-r
> [language.ru] description: Russian
> [language.ru] enabled: yes
> [language.sk] charset: utf-8
> [language.sk] description: Slovak
> [language.sk] enabled: yes
> [language.sl] charset: iso-8859-2
> [language.sl] description: Slovenian
> [language.sl] enabled: yes
> [language.sr] charset: utf-8
> [language.sr] description: Serbian
> [language.sr] enabled: yes
> [language.sv] charset: iso-8859-1
> [language.sv] description: Swedish
> [language.sv] enabled: yes
> [language.tr] charset: iso-8859-9
> [language.tr] description: Turkish
> [language.tr] enabled: yes
> [language.uk] charset: utf-8
> [language.uk] description: Ukrainian
> [language.uk] enabled: yes
> [language.vi] charset: utf-8
> [language.vi] description: Vietnamese
> [language.vi] enabled: yes
> [language.zh_CN] charset: utf-8
> [language.zh_CN] description: Chinese
> [language.zh_CN] enabled: yes
> [language.zh_TW] charset: utf-8
> [language.zh_TW] description: Chinese (Taiwan)
> [language.zh_TW] enabled: yes
> [logging.archiver] datefmt: %b %d %H:%M:%S %Y
> [logging.archiver] format: %(asctime)s (%(process)d) %(message)s
> [logging.archiver] level: info
> [logging.archiver] path: mailman.log
> [logging.archiver] propagate: no
> [logging.bounce] datefmt: %b %d %H:%M:%S %Y
> [logging.bounce] format: %(asctime)s (%(process)d) %(message)s
> [logging.bounce] level: info
> [logging.bounce] path: bounce.log
> [logging.bounce] propagate: no
> [logging.config] datefmt: %b %d %H:%M:%S %Y
> [logging.config] format: %(asctime)s (%(process)d) %(message)s
> [logging.config] level: info
> [logging.config] path: mailman.log
> [logging.config] propagate: no
> [logging.database] datefmt: %b %d %H:%M:%S %Y
> [logging.database] format: %(asctime)s (%(process)d) %(message)s
> [logging.database] level: warn
> [logging.database] path: mailman.log
> [logging.database] propagate: no
> [logging.debug] datefmt: %b %d %H:%M:%S %Y
> [logging.debug] format: %(asctime)s (%(process)d) %(message)s
> [logging.debug] level: info
> [logging.debug] path: debug.log
> [logging.debug] propagate: no
> [logging.error] datefmt: %b %d %H:%M:%S %Y
> [logging.error] format: %(asctime)s (%(process)d) %(message)s
> [logging.error] level: info
> [logging.error] path: mailman.log
> [logging.error] propagate: no
> [logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
> [logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
> [logging.fromusenet] level: info
> [logging.fromusenet] path: mailman.log
> [logging.fromusenet] propagate: no
> [logging.http] datefmt: %b %d %H:%M:%S %Y
> [logging.http] format: %(asctime)s (%(process)d) %(message)s
> [logging.http] level: info
> [logging.http] path: mailman.log
> [logging.http] propagate: no
> [logging.locks] datefmt: %b %d %H:%M:%S %Y
> [logging.locks] format: %(asctime)s (%(process)d) %(message)s
> [logging.locks] level: info
> [logging.locks] path: mailman.log
> [logging.locks] propagate: no
> [logging.mischief] datefmt: %b %d %H:%M:%S %Y
> [logging.mischief] format: %(asctime)s (%(process)d) %(message)s
> [logging.mischief] level: info
> [logging.mischief] path: mailman.log
> [logging.mischief] propagate: no
> [logging.plugins] datefmt: %b %d %H:%M:%S %Y
> [logging.plugins] format: %(asctime)s (%(process)d) %(message)s
> [logging.plugins] level: info
> [logging.plugins] path: plugins.log
> [logging.plugins] propagate: no
> [logging.root] datefmt: %b %d %H:%M:%S %Y
> [logging.root] format: %(asctime)s (%(process)d) %(message)s
> [logging.root] level: info
> [logging.root] path: mailman.log
> [logging.root] propagate: no
> [logging.runner] datefmt: %b %d %H:%M:%S %Y
> [logging.runner] format: %(asctime)s (%(process)d) %(message)s
> [logging.runner] level: info
> [logging.runner] path: mailman.log
> [logging.runner] propagate: no
> [logging.smtp] datefmt: %b %d %H:%M:%S %Y
> [logging.smtp] every: $msgid smtp to $listname for $recip recips,
> completed in $time seconds
> [logging.smtp] failure: $msgid delivery to $recip failed with code
> $smtpcode, $smtpmsg
> [logging.smtp] format: %(asctime)s (%(process)d) %(message)s
> [logging.smtp] level: info
> [logging.smtp] path: smtp.log
> [logging.smtp] propagate: no
> [logging.smtp] refused: $msgid post to $listname from $sender, $size
> bytes, $refused failures
> [logging.smtp] success: $msgid post to $listname from $sender, $size bytes
> [logging.subscribe] datefmt: %b %d %H:%M:%S %Y
> [logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
> [logging.subscribe] level: info
> [logging.subscribe] path: mailman.log
> [logging.subscribe] propagate: no
> [logging.vette] datefmt: %b %d %H:%M:%S %Y
> [logging.vette] format: %(asctime)s (%(process)d) %(message)s
> [logging.vette] level: info
> [logging.vette] path: mailman.log
> [logging.vette] propagate: no
> [mailman] cache_life: 7d
> [mailman] default_language: en
> [mailman] email_commands_max_lines: 10
> [mailman] filtered_messages_are_preservable: no
> [mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
> [mailman] layout: debian
> [mailman] listname_chars: [-_.0-9a-z]
> [mailman] noreply_address: noreply
> [mailman] pending_request_life: 3d
> [mailman] post_hook:
> [mailman] pre_hook:
> [mailman] sender_headers: from from_ reply-to sender
> [mailman] site_owner: max.paragnani(a)gmail.com
> [mta] configuration: python:mailman.config.postfix
> [mta] delivery_retry_period: 5d
> [mta] incoming: mailman.mta.postfix.LMTP
> [mta] lmtp_host: 127.0.0.1
> [mta] lmtp_port: 8024
> [mta] max_autoresponses_per_day: 10
> [mta] max_delivery_threads: 0
> [mta] max_recipients: 500
> [mta] max_sessions_per_connection: 0
> [mta] outgoing: mailman.mta.deliver.deliver
> [mta] remove_dkim_headers: no
> [mta] smtp_host: localhost
> [mta] smtp_pass:
> [mta] smtp_port: 25
> [mta] smtp_user:
> [mta] verp_confirm_format: $address+$cookie
> [mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
> [mta] verp_confirmations: no
> [mta] verp_delimiter: +
> [mta] verp_delivery_interval: 0
> [mta] verp_format: ${bounces}+${local}=${domain}
> [mta] verp_personalized_deliveries: no
> [mta] verp_probe_format: $bounces+$token@$domain
> [mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
> [mta] verp_probes: no
> [mta] verp_regexp:
> ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
> [nntp] host:
> [nntp] password:
> [nntp] port:
> [nntp] remove_headers:
> nntp-posting-host nntp-posting-date x-trace
> x-complaints-to xref date-received posted
> posting-version relay-version received
> [nntp] rewrite_duplicate_headers:
> To X-Original-To
> CC X-Original-CC
> Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
> MIME-Version X-MIME-Version
> [nntp] user:
> [passwords] configuration: python:mailman.config.passlib
> [passwords] password_length: 8
> [plugin.master] class:
> [plugin.master] component_package:
> [plugin.master] configuration:
> [plugin.master] enabled: no
> [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] hostname: localhost
> [webservice] port: 8001
> [webservice] show_tracebacks: yes
> [webservice] use_https: no
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> This message sent to max.paragnani(a)gmail.com
>
2 years, 2 months

[MM3-users] Re: Postorius: Show only own lists
by Terri Oda
On January 23, 2018 6:26:51 AM PST, Thor Atle Rustad <thor.rustad(a)gmail.com> wrote:
>2018-01-23 14:37 GMT+01:00 Simon Hanna <simon(a)hannaweb.eu>:
>
>> On 01/23/2018 12:10 PM, Thor Atle Rustad wrote:
>>
>>> Imagine an installation with 500+ mailing lists and almost as many
>local
>>> admins that are supposed to maintain their own local lists with a
>few
>>> local
>>> members. As site admin, I see all 500+ lists, but I was expecting
>*local*
>>> admins to see only the lists they maintain. I have set all lists to
>>> "advertised = False", so they are hidden from ordinary view. Is
>there a
>>> way
>>> to show only relevant lists to local admins?
>I believe I wrote Postorius in the subject line, but it may not be so
>obvious. So yes, in Posterius I would like to hide the lists from email
>harvesters, while relatively "untrusted" admins should have access to
>basic
>operations on the one list he/she "owns" (and without having to browse
>through 50 pages of mailing lists). Somehow I don't think 500
>superusers in
>our system is a good idea!
What do you mean by local admins?
Is this
1. Giantsite.example.com hosts lists for a bunch of domains, and you want the logged in admins of mydomain.com to see their list admin pages but not otherdomain.org's lists
2. You want each logged in admin to have their own personal dashboard of list admin pages for lists they administrate, even though they're all under one big domain.
(Neither of those scenarios talks about archives, since you say you're only talking about postorious)
I think #2 is something we should be doing, and the old "todo" section of the interface kind of was made with that in mind. Probably worth mocking up some screenshots and opening a feature request to keep the idea in mind, but it should be more a matter of prioritizing how things are displayed than any huge change.
I'm not sure if we have a "local admin" concept in the system that lines up with #1, though.
7 years, 3 months

[MM3-users] Re: moving lists to another server
by Odhiambo Washington
On Sat, Nov 18, 2023 at 11:48 AM Stephen J. Turnbull <
turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
> Odhiambo Washington writes:
>
> > Hello Stephen et al,
> >
> > Since this topic is relevant to something I am faced with at the
> moment, I
> > believe it's okay if I piggyback on the thread.
>
> I think continuing the thread is appropriate, but I personally would
> change the Subject to reflect the specifics.
>
> > I have a server that is already actively distributing Mailman list
> traffic,
> > and managing users and archives.
> > I have offered to take over another community ML (also using MM3) from
> > another server and host the list on my server.
> > I am scratching my head bald trying to figure out how to bring in this
> > other MM3 site and list into my existing server, especially with regard
> to
> > the DB backend.
> >
> > The list - let's call it users(a)domainX.name was using MySQL backend
> and
> > had a separate DB for Mailman core and Mailman web.
> > I believe combining these into one isn't a problem. But getting to merge
> > this DB into my current one is what I am not sure about.
> >
> > Any pointers on how to bring in this new site into my current setup??
>
> I don't have pointers, in the sense of concrete advice I would not be
> horrified if you followed it to the letter. Here's how I would attack
> the problem.
>
> 1. Decide the List-Id and List-Post questions. I disagree with Mark
> about List-Id (or maybe he mistyped List-Post?) -- the List-Id
> should NOT be changed. I don't know how many users are taking
> advantage of List-Id (my filters do!), but they will thank you for
> keeping it the same.
>
> The List-Post question is contingent. Will you be serving their
> domain, or will you change the List-Post address?
The idea is to (if possible) not change anything at all. I will be serving
the list using the original domain.
I am hoping for a seamless migration where no one notices any change except
for the IP address where the MM3 is running.
> Note that with
> some additional configuration to Mailman and your MTA they could
> set up a forwarding configuration for their lists to your server,
> Or if they don't have other email needs, set up an MX. Or they
> can transfer their domain name's A and MX records to your host.
>
As it is, I have been given full control of the domain for this purpose so
I can point A and MX records to my server. The ML itself is currently down.
I have a dump of the /opt/mailman as well as the DBs used by Core and Web.
Alternatively you can change the List-Post address.to your
> domain. In that case you will have to edit the List-Post address
> in your database.
>
I am hoping that should not be necessary. I actually had thought it
wouldn't be complex doing this until I sat down and said wait - there is a
DB involved :)
> 2. There are similar issues for mailman-web (especially host names).
> I have not thought about them at all, so I'll leave that for the
> interested reader. ;-)
>
Hehee.. Wrapping my head around this has not been easy, to say the least.
3. (If the DB engines are different) Dump both databases in text
> format (ie, scripts of SQL commands). Check to see how they
> differ.
>
The DB is MySQL. My running setup uses MariaDB. I am not getting what you
mean here by how they differ.
4. Adapt the foreign database to its new environment with search and
> replace. (Be verbose about the search terms, include lots of
> context to minimize the chance of inadvertantly replacing
> something in the wrong context that you missed in step 3.) This
> is where you would change the List-Post address, as well. You
> will also want to change the 'mailmanweb' database to just 'mailman'.
>
If going with what I have mentioned above, is this step still necessary?
> 5. (Optional if your name is "Daredevil") Create a new Mailman suite
> install using your current configs, preferably in a new VM or set
> of containers. Configure the MTA to save all outgoing mail to a
> file, or maybe firewall off outgoing network traffic to port 25
> and leave all the posts in the MTA queues. Create a new
> 'mailman-test' database. Copy all the dumps to the VM, and edit
> the names of the databases in the SQL to 'mailman-test'. Restore
> the dump of your system into the database, and test. Then do the
> same, restoring the mailman and mailmanweb databases from the
> foreign system into this new database.
>
I was thinking about this as one way of testing the situation, much as it
is quite involving.
6. Adjust to address any issues discovered in 5. If none, go to 7,
> Otherwise go back to 5.
>
> 7. Apply any changes made in 6 to your configs, and read the foreign
> dumps into your system, and you should be ready to go for the
> distribution part. Not sure about host and webserver
> configuration for mailman-web, though.
>
Suppose I just do:
1. Create the new list on my server using the inherited domain and
configure it appropriately,
2. Configure Django to handle the different domains (there is something
that I am yet to understand here around SITE_ID when you have multiple
sites!)
3. Extract the users from the list and subscribe them afresh (I can shoot
an email to let them know the ML had to be moved so they can set their
preferences again)
4. Import the archives of the list
I should more or less achieve the migration, no?
What about setting up on /opt/mailman2 a complete replica of the list?
That'd be the real "Daredevil" :)
--
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]
1 year, 5 months

[MM3-users] Re: Separating Lists by Domain
by Mark Sapiro
On 1/3/19 2:34 PM, Abhilash Raj wrote:
>
>
> On Thu, Jan 3, 2019, at 2:27 PM, brian(a)emwd.com wrote:
>> So who manages Postorius? Is that a whole separate application from
>> Mailman 3? Is there a way we can get whoever the developer is to update
>> it where we can separate lists by domain the way Hyperkitty does? Mark
>> Sapiro refers to this in the following post:
>>
>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>
> You can file an issue at https://gitlab.com/mailman/postorius/issues
Yes, filing a GitLab issue is the best way to get things on the record.
It's no guarantee that things will be addressed immediately, but they
are there, and merge/pull requests are always welcome.
As far as your question goes, Mailman Core, Postorius and HyperKitty are
separate entities and they were mostly developed by separate
people/groups and some important players have either overtly or
implicitly retired from the project.
Not long ago I write in another context
> MM3 is much more complex than MM2.1 and there's a lot that I don't fully
> understand myself.
>
> There is a basic core engine which does all the work of
> creating/managing lists and users and receiving and sending mail. It has
> no web UI per se. It exposes a RESTful API on the host server.
>
> The web management UI is Postorius and it is based on the Django web
> framework and communicates with core via the REST API. The Archiver is
> HyperKitty and it is fairly independent. It is also based on the Django
> web framework. Account creation and web login is via django-allauth.
>
> Postorius, HyperKitty and the core were all developed separately by
> different people and no one understands all of it.
That said, Abhilash is currently the lead developer for all of Mailman 3
and he's doing a great job. I and a few others are also involved (I'd be
more involved if I didn't have Mailman 2.1 to distract me), but we are a
small group and things take time.
And as I said, merge/pull requests for GitLab issues are always welcome.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
6 years, 3 months

[MM3-users] Re: Emergency Moderation
by Allan Hansen
> On May 24, 2020, at 11:34 , Mark Sapiro <mark(a)msapiro.net> wrote:
>
> On 5/24/20 10:59 AM, Allan Hansen wrote:
>> In the MM3 settings there is an option to ‘Hold for moderation’ when members or non-members post to the list.
>> I use that for the same cases where in MM2 I switched a list to ‘Emergency Moderation.’
>
>
> If you imported your MM 2.1 lists with `mailman import21`, `emergency`
> was set appropriately for the imported list and should be working to
> hold posts regardless of other settings.
Not sure what is the difference between ‘emergency moderation’ and ‘Hold for moderation.’ It appears redundant.
>
>
>> My own current top-of-the-list issues:
>>
>> A bug: Moderators can’t see/edit the list of members even when allowed to by list setting.
>
> The visibility issue is <https://gitlab.com/mailman/postorius/-/issues/369>.
>
> Editing membership beyond what could be done via the admindb interface
> (i.e. clearing a moderated poster's mod flag) was never allowed for a
> moderator in MM 2.1.
>
> In MM 3, a moderator can set a member's moderation when handling a held
> post. Do you think a non-owner moderator should be able to make other
> changes to a member?
I can only speak for my own application of MM3:
Desiring consistency between the lists, I don’t want to turn all the moderators into owners who can change list settings.
Many of my moderators keep asking me to see the list of members and to subscribe and remove members. I end up
servicing those requests. So...
a. Moderators should be able to unsubscribe and subscribe members.
b. Moderators should be able to set the member’s moderation status.
c. Moderators should not be able to see/modify any other member settings.
>
>
>> A feature request: Member changing email address on all lists he/she belongs to, without involving moderators.
>
>
> This is <https://gitlab.com/mailman/postorius/-/issues/399> and we're
> working on it.
Awesome!!!!
Thank you,
Allan
>
> --
> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> San Francisco Bay Area, California better use your sense - B. Dylan
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
4 years, 11 months

[MM3-users] Re: Installing mailman 3
by Kyle Richardson
Looks like you are using the fhs (filesystem hierarchy standard) layout; is
that what you intend? I would suggest changing the layout to "dev" for
testing purposes. This will use your mailman.cfg/../.. as the var directory.
Is it possible you also have mailman v2 installed via rpms?
-Kyle
On Tue, Jul 11, 2017 at 3:41 PM, Rafael Mora <rafael.mora.guti(a)gmail.com>
wrote:
> Hello,
>
> Here it's mailman info:
> [root@localhost bin]# ./mailman info
> GNU Mailman 3.2.0a1 (La Villa Strangiato)
> Python 3.6.0 (default, Jul 7 2017, 11:59:56)
> [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
> config file: /etc/mailman.cfg
> db url: sqlite:////var/lib/mailman/data/mailman.db
> devmode: DISABLED
> REST root url: http://localhost:8001/3.1/
> REST credentials: restadmin:restpass
>
>
> Here it's mailman conf:
> [root@localhost bin]# ./mailman conf
> [antispam] header_checks:
> [antispam] jump_chain: hold
> [archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
> [archiver.mail_archive] clobber_date: maybe
> [archiver.mail_archive] clobber_skew: 1d
> [archiver.mail_archive] configuration: python:mailman.config.mail_archive
> [archiver.mail_archive] enable: no
> [archiver.master] class:
> [archiver.master] clobber_date: maybe
> [archiver.master] clobber_skew: 1d
> [archiver.master] configuration: changeme
> [archiver.master] enable: no
> [archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
> [archiver.mhonarc] clobber_date: maybe
> [archiver.mhonarc] clobber_skew: 1d
> [archiver.mhonarc] configuration: python:mailman.config.mhonarc
> [archiver.mhonarc] enable: no
> [archiver.prototype] class: mailman.archiving.prototype.Prototype
> [archiver.prototype] clobber_date: maybe
> [archiver.prototype] clobber_skew: 1d
> [archiver.prototype] configuration: changeme
> [archiver.prototype] enable: no
> [bounces] register_bounces_every: 15m
> [database] class: mailman.database.sqlite.SQLiteDatabase
> [database] debug: no
> [database] url: sqlite:///$DATA_DIR/mailman.db
> [devmode] enabled: no
> [devmode] recipient:
> [devmode] testing: no
> [devmode] wait: 60s
> [digests] mime_digest_keep_headers:
> Date From To Cc Subject Message-ID Keywords
> In-Reply-To References Content-Type MIME-Version
> Content-Transfer-Encoding Precedence Reply-To
> Message List-Post
> [digests] plain_digest_keep_headers:
> Message Date From
> Subject To Cc
> Message-ID Keywords
> Content-Type
> [dmarc] cache_lifetime: 7d
> [dmarc] org_domain_data_url:
> https://publicsuffix.org/list/public_suffix_list.dat
> [dmarc] resolver_lifetime: 5s
> [dmarc] resolver_timeout: 3s
> [language.ar] charset: utf-8
> [language.ar] description: Arabic
> [language.ar] enabled: yes
> [language.ast] charset: iso-8859-1
> [language.ast] description: Asturian
> [language.ast] enabled: yes
> [language.ca] charset: utf-8
> [language.ca] description: Catalan
> [language.ca] enabled: yes
> [language.cs] charset: iso-8859-2
> [language.cs] description: Czech
> [language.cs] enabled: yes
> [language.da] charset: iso-8859-1
> [language.da] description: Danish
> [language.da] enabled: yes
> [language.de] charset: iso-8859-1
> [language.de] description: German
> [language.de] enabled: yes
> [language.el] charset: iso-8859-7
> [language.el] description: Greek
> [language.el] enabled: yes
> [language.es] charset: iso-8859-1
> [language.es] description: Spanish
> [language.es] enabled: yes
> [language.et] charset: iso-8859-15
> [language.et] description: Estonian
> [language.et] enabled: yes
> [language.eu] charset: iso-8859-15
> [language.eu] description: Euskara
> [language.eu] enabled: yes
> [language.fi] charset: iso-8859-1
> [language.fi] description: Finnish
> [language.fi] enabled: yes
> [language.fr] charset: iso-8859-1
> [language.fr] description: French
> [language.fr] enabled: yes
> [language.gl] charset: utf-8
> [language.gl] description: Galician
> [language.gl] enabled: yes
> [language.he] charset: utf-8
> [language.he] description: Hebrew
> [language.he] enabled: yes
> [language.hr] charset: iso-8859-2
> [language.hr] description: Croatian
> [language.hr] enabled: yes
> [language.hu] charset: iso-8859-2
> [language.hu] description: Hungarian
> [language.hu] enabled: yes
> [language.ia] charset: iso-8859-15
> [language.ia] description: Interlingua
> [language.ia] enabled: yes
> [language.it] charset: iso-8859-1
> [language.it] description: Italian
> [language.it] enabled: yes
> [language.ja] charset: euc-jp
> [language.ja] description: Japanese
> [language.ja] enabled: yes
> [language.ko] charset: euc-kr
> [language.ko] description: Korean
> [language.ko] enabled: yes
> [language.lt] charset: iso-8859-13
> [language.lt] description: Lithuanian
> [language.lt] enabled: yes
> [language.nl] charset: iso-8859-1
> [language.nl] description: Dutch
> [language.nl] enabled: yes
> [language.no] charset: iso-8859-1
> [language.no] description: Norwegian
> [language.no] enabled: yes
> [language.pl] charset: iso-8859-2
> [language.pl] description: Polish
> [language.pl] enabled: yes
> [language.pt] charset: iso-8859-1
> [language.pt] description: Protuguese
> [language.pt] enabled: yes
> [language.pt_BR] charset: iso-8859-1
> [language.pt_BR] description: Protuguese (Brazil)
> [language.pt_BR] enabled: yes
> [language.ro] charset: iso-8859-2
> [language.ro] description: Romanian
> [language.ro] enabled: yes
> [language.ru] charset: koi8-r
> [language.ru] description: Russian
> [language.ru] enabled: yes
> [language.sk] charset: utf-8
> [language.sk] description: Slovak
> [language.sk] enabled: yes
> [language.sl] charset: iso-8859-2
> [language.sl] description: Slovenian
> [language.sl] enabled: yes
> [language.sr] charset: utf-8
> [language.sr] description: Serbian
> [language.sr] enabled: yes
> [language.sv] charset: iso-8859-1
> [language.sv] description: Swedish
> [language.sv] enabled: yes
> [language.tr] charset: iso-8859-9
> [language.tr] description: Turkish
> [language.tr] enabled: yes
> [language.uk] charset: utf-8
> [language.uk] description: Ukrainian
> [language.uk] enabled: yes
> [language.vi] charset: utf-8
> [language.vi] description: Vietnamese
> [language.vi] enabled: yes
> [language.zh_CN] charset: utf-8
> [language.zh_CN] description: Chinese
> [language.zh_CN] enabled: yes
> [language.zh_TW] charset: utf-8
> [language.zh_TW] description: Chinese (Taiwan)
> [language.zh_TW] enabled: yes
> [logging.archiver] datefmt: %b %d %H:%M:%S %Y
> [logging.archiver] format: %(asctime)s (%(process)d) %(message)s
> [logging.archiver] level: info
> [logging.archiver] path: mailman.log
> [logging.archiver] propagate: no
> [logging.bounce] datefmt: %b %d %H:%M:%S %Y
> [logging.bounce] format: %(asctime)s (%(process)d) %(message)s
> [logging.bounce] level: info
> [logging.bounce] path: bounce.log
> [logging.bounce] propagate: no
> [logging.config] datefmt: %b %d %H:%M:%S %Y
> [logging.config] format: %(asctime)s (%(process)d) %(message)s
> [logging.config] level: info
> [logging.config] path: mailman.log
> [logging.config] propagate: no
> [logging.database] datefmt: %b %d %H:%M:%S %Y
> [logging.database] format: %(asctime)s (%(process)d) %(message)s
> [logging.database] level: warn
> [logging.database] path: mailman.log
> [logging.database] propagate: no
> [logging.debug] datefmt: %b %d %H:%M:%S %Y
> [logging.debug] format: %(asctime)s (%(process)d) %(message)s
> [logging.debug] level: info
> [logging.debug] path: debug.log
> [logging.debug] propagate: no
> [logging.error] datefmt: %b %d %H:%M:%S %Y
> [logging.error] format: %(asctime)s (%(process)d) %(message)s
> [logging.error] level: info
> [logging.error] path: mailman.log
> [logging.error] propagate: no
> [logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
> [logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
> [logging.fromusenet] level: info
> [logging.fromusenet] path: mailman.log
> [logging.fromusenet] propagate: no
> [logging.http] datefmt: %b %d %H:%M:%S %Y
> [logging.http] format: %(asctime)s (%(process)d) %(message)s
> [logging.http] level: info
> [logging.http] path: mailman.log
> [logging.http] propagate: no
> [logging.locks] datefmt: %b %d %H:%M:%S %Y
> [logging.locks] format: %(asctime)s (%(process)d) %(message)s
> [logging.locks] level: info
> [logging.locks] path: mailman.log
> [logging.locks] propagate: no
> [logging.mischief] datefmt: %b %d %H:%M:%S %Y
> [logging.mischief] format: %(asctime)s (%(process)d) %(message)s
> [logging.mischief] level: info
> [logging.mischief] path: mailman.log
> [logging.mischief] propagate: no
> [logging.root] datefmt: %b %d %H:%M:%S %Y
> [logging.root] format: %(asctime)s (%(process)d) %(message)s
> [logging.root] level: info
> [logging.root] path: mailman.log
> [logging.root] propagate: no
> [logging.runner] datefmt: %b %d %H:%M:%S %Y
> [logging.runner] format: %(asctime)s (%(process)d) %(message)s
> [logging.runner] level: info
> [logging.runner] path: mailman.log
> [logging.runner] propagate: no
> [logging.smtp] datefmt: %b %d %H:%M:%S %Y
> [logging.smtp] every: $msgid smtp to $listname for $recip recips, completed
> in $time seconds
> [logging.smtp] failure: $msgid delivery to $recip failed with code
> $smtpcode, $smtpmsg
> [logging.smtp] format: %(asctime)s (%(process)d) %(message)s
> [logging.smtp] level: info
> [logging.smtp] path: smtp.log
> [logging.smtp] propagate: no
> [logging.smtp] refused: $msgid post to $listname from $sender, $size bytes,
> $refused failures
> [logging.smtp] success: $msgid post to $listname from $sender, $size bytes
> [logging.subscribe] datefmt: %b %d %H:%M:%S %Y
> [logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
> [logging.subscribe] level: info
> [logging.subscribe] path: mailman.log
> [logging.subscribe] propagate: no
> [logging.vette] datefmt: %b %d %H:%M:%S %Y
> [logging.vette] format: %(asctime)s (%(process)d) %(message)s
> [logging.vette] level: info
> [logging.vette] path: mailman.log
> [logging.vette] propagate: no
> [mailman] cache_life: 7d
> [mailman] default_language: en
> [mailman] email_commands_max_lines: 10
> [mailman] filtered_messages_are_preservable: no
> [mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
> [mailman] layout: fhs
> [mailman] listname_chars: [-_.0-9a-z]
> [mailman] noreply_address: noreply
> [mailman] pending_request_life: 3d
> [mailman] post_hook:
> [mailman] pre_hook:
> [mailman] sender_headers: from from_ reply-to sender
> [mailman] site_owner: changeme(a)example.com
> [mta] configuration: python:mailman.config.postfix
> [mta] delivery_retry_period: 5d
> [mta] incoming: mailman.mta.postfix.LMTP
> [mta] lmtp_host: 127.0.0.1 # IP where Mailman should listen for
> emails from MTA
> [mta] lmtp_port: 8024
> [mta] max_autoresponses_per_day: 10
> [mta] max_delivery_threads: 0
> [mta] max_recipients: 500
> [mta] max_sessions_per_connection: 0
> [mta] outgoing: mailman.mta.deliver.deliver
> [mta] remove_dkim_headers: no
> [mta] smtp_host: 127.0.0.1 # IP Where MTA is listening for
> emails
> [mta] smtp_pass:
> [mta] smtp_port: 25
> [mta] smtp_user:
> [mta] verp_confirm_format: $address+$cookie
> [mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
> [mta] verp_confirmations: no
> [mta] verp_delimiter: +
> [mta] verp_delivery_interval: 0
> [mta] verp_format: ${bounces}+${local}=${domain}
> [mta] verp_personalized_deliveries: no
> [mta] verp_probe_format: $bounces+$token@$domain
> [mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
> [mta] verp_probes: no
> [mta] verp_regexp:
> ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
> [nntp] host:
> [nntp] password:
> [nntp] port:
> [nntp] remove_headers:
> nntp-posting-host nntp-posting-date x-trace
> x-complaints-to xref date-received posted
> posting-version relay-version received
> [nntp] rewrite_duplicate_headers:
> To X-Original-To
> CC X-Original-CC
> Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
> MIME-Version X-MIME-Version
> [nntp] user:
> [passwords] configuration: python:mailman.config.passlib
> [passwords] password_length: 8
> [shell] banner: Welcome to the GNU Mailman shell
> [shell] history_file:
> [shell] prompt: >>>
> [shell] use_ipython: no
> [styles] default: legacy-default
> [styles] paths:
> mailman.styles
> [webservice] admin_pass: restpass
> [webservice] admin_user: restadmin
> [webservice] api_version: 3.1
> [webservice] hostname: localhost
> [webservice] port: 8001
> [webservice] show_tracebacks: yes
> [webservice] use_https: no
>
>
> What do you suggest? Thank you
>
> El mar., 11 jul. 2017 a las 14:31, Simon Hanna (<simon.hanna(a)serve-me.info
> >)
> escribió:
>
> > Below is how I would recommend to run Mailman for production using a
> > virtualenv
> >
> > # useradd -r -m -d /var/lib/mailman mailman
> >
> > # su - mailman
> >
> >
> > $ python3 -m venv env
> > $ source env/bin/activate
> > $ pip install mailman
> > $ mailman info
> >
> > Now you should have a working configuration in /var/lib/mailman/var/
> >
> > to run mailman you don't need to activate the virtualenv, just use the
> > executable /var/lib/mailman/env/bin/mailman
> >
> > cheers,
> > Simon
> > _______________________________________________
> > Mailman-users mailing list
> > mailman-users(a)mailman3.org
> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >
> --
>
> Atentamente / Best Regards
>
> Ing. Rafael Mora
> _______________________________________________
> Mailman-users mailing list
> mailman-users(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
7 years, 9 months

[MM3-users] Re: mailman3 not working for mailman21 lists
by Stephen J. Turnbull
blup(a)fortytwo.ch writes:
> First I did create the list with the old name and imported the old
> configs with mailman import21. As the list did not work then, I
> deleted it and created it again (with the same manual configuration
> as for the new list that's working).
OK. So as far as you know the configurations of list1 and list2 on
Mailman 3 are identical, at least in the case where you have deleted
list1 and recreated by hand.
> I don't have a qfiles directory.
Try queue/, especially look for the out[going], pipeline, and shunt
subdirectories.
> > Is the 'outgoing' qrunner still running? (ps ax | grep outgoing)
>
> no
Sorry, I got that wrong. Mark recommends this:
ps -fwwA|grep runner=|sed s/.*runner=//
and gave this as sample output:
archive:0:1
bounces:0:1
command:0:1
in:0:1
lmtp:0:1
nntp:0:1
out:0:1
pipeline:0:1
rest:0:1
retry:0:1
task:0:1
virgin:0:1
digest:0:1
rest:0:1
rest:0:1
so it looks like the process name of the runner is "out", not
"outgoing". Besides checking for the "out" runner, also check for
"pipeline", which has been known to fail in the past.
> But once more: list1 was working fine as long as mailman21 was used
> and stopped working when switching to mailman3. I don't expect spam
> filters that worked with mailman21 to stop working with mailman3.
Mailman 3 is a complete rewrite, essentially no Mailman 2 code was
left untouched because of the pervasiveness of the change of the
fundamental string type str from encoded bytes to abstract characters.
I don't expect behavior to change, but I certainly am not going to
rule anything out when trying to diagnose problems based on so little
information.
> I have more or less no Python knowledge (i.e. I can read and
> understand Python but can't write it). Could you please give me
> detailed command by command instructions. Thanks.
I'll take a look at it tomorrow, but I can't promise results until the
weekend if I can't write a script in 30 minutes. Normally Mark Sapiro
would handle this kind of thing, but he's offline for a couple weeks
so you've got me. My knowledge is mostly on the email protocols side
of things (Internet message format, authentication protocols), not the
internal processing. I'll do what I can, but if I can't do it real
quick it's probably going to take me several hours, which I'm not
going to have until the weekend.
Steve
2 years, 8 months

[MM3-users] Re: Emergency Moderation
by Allan Hansen
In the MM3 settings there is an option to ‘Hold for moderation’ when members or non-members post to the list.
I use that for the same cases where in MM2 I switched a list to ‘Emergency Moderation.’
My own current top-of-the-list issues:
A bug: Moderators can’t see/edit the list of members even when allowed to by list setting.
A feature request: Member changing email address on all lists he/she belongs to, without involving moderators.
Otherwise things appear to be running smoothly (I’m currently knocking very hard on an actual piece of wood - not my head). :-)
Yours,
Allan Hansen
hansen(a)rc.org
> On May 24, 2020, at 7:27 , Stephen J. Turnbull <turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
>
> Brian Carpenter writes:
>
>> Can I add this through a mailman core update via pip?
>
> Eventually .... This depends on when Abhilash gets enough content and
> a little bit of time to do a new release.
>
> Getting meta: You've been asking for very recent features fairly
> frequently. I understand that everybody feels better with released
> code, but to be honest, we do not have a deep quality assurance
> process. The test suite is voluminous and quite comprehensive, but
> that's not the same as having a proper beta process, mandatory
> reviewing, etc etc. It's not obvious to me that we can do a better QA
> for you than you can do for yourself.
>
> With that in mind, have you considered building your own from source,
> on a branch from a moderately recent tag, and cherry-picking only
> commits for features you really want right now?
>
> I admit I don't know how appropriate that is in our tree (I just build
> from master all the time), but I think that Abhilash is probably
> pretty careful to pull complete branches so that this should work. If
> it looks to you like the patches are a little "ragged around the
> edges", we can work on the process and try to make it more amenable to
> such cherry-picking for people like you who need some of the most
> recent commits ASAP, but don't want to accept the whole "bleeding edge".
>
> This also would be useful for your Affinity etc development, I think.
> (Of course maybe that's what you're talking about, but "emergency
> moderation" is a pretty common need in production.)
>
> Steve
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
4 years, 11 months

[MM3-users] Re: Apple Mail encoding again
by Mark Sapiro
On 4/12/22 11:45, David Newman wrote:
>
> To rule out the smtp module, I sent a PGP-signed message using a
> different MUA (Thunderbird, in my case). Mailman3 accepted this post
> without complaint, and I reported back to list users that this appears
> to be an Apple Mail encoding issue.
>
> Normally, that'd be the end of it. But this is a list for a bunch of
> Internet graybeards, including one of the authors of the SMTP protocols
> and the subscriber is a former IETF chair. He's grumbling that if this
> really were an Apple Mail issue, wouldn't it be far more widespread?
Maybe, but who knows.
The issue is with at least macOS 12.0.1, Mail.app Version 15.0
(3693.20.0.1.32), and GPG Mail 6.0, Build 2023.
That combination at least produces multipart/signed messages with
multipart/* parts containing a Content-Transfer-Encoding: header.
The Python 3 email library considers this to be a
InvalidMultipartContentTransferEncodingDefect() message defect.
I had a long exchange with Barry Warsaw about this. an excerpt is
It's definitely an Apple Mail issue. Both the message you sent and the
original message part have the same defect:
InvalidMultipartContentTransferEncodingDefect()
Also, My Thunderbird MUA wouldn't display the message content at all.
Interesting though that your original message was also signed and sent
by Apple Mail and didn't have the defect. It's structure was
multipart/signed
multipart/alternative
text/plain
text/html
application/pgp-signature
and none of the multipart parts have Content-Transfer-Encoding.
The follow up you sent with the original message was
multipart/signed
multipart/mixed *
text/plain
message/rfc822 (the attached message) *
multipart/signed *
text/plain
application/pgp-signature
text/plain (an empty plain text part)
text/plain (a quote of my message to you)
application/pgp-signature
All the asterisked parts have a Content-Transfer-Encoding header which
is the defect.
It seems to be related to the presence of the empty text/plain part
following the signature.
> I don't think it would be, because (a) Mailman2 is still far more
> pervasive than Mailman3 and (b) the combination of PGP signing and Apple
> Mail on MacOS and Mailman3 is still pretty unusual.
>
> Has anyone else hit this encoding issue, other than the post above? And
> did Mailman2 silently accept this because it was less strict about
> checking for bad encoding?
To my knowledge it's only been hit by Barry and the poster of the
original report
Mailman 2.1 is has the Python 2 email package which doesn't report
InvalidMultipartContentTransferEncodingDefect().
I reported it in November at
https://feedbackassistant.apple.com/feedback/9768496 which is open with
no reply.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
3 years

[MM3-users] Re: Docker Support Sucks
by Allan Hansen
Hi Brian,
You have been one of the good and generous people providing support. I hope i can repay a bit with this:
These are one-line bash scripts I wrote after moving to MM3, so I could do things not yet in MM3, such as
letting my moderators request a list’s members from me. I need one more script that will sync a text file
to an existing list, deleting and adding as necessary.
The scripts are for public use, reuse, misuse and overuse. I claim no rights and no responsibilities.
mm3Members.bash
#!/bin/bash
# mm3Members
#
# Obtain a list of members of a given list
#
# Usage:
# mm3Members.bash <listName>
# #
# Revisions:
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
exec /opt/mailman/mm/venv/bin/mailman -C "/opt/mailman/mm/mailman.cfg" members $1 |grep -v -e "has no members"|sed -e 's/.*/\L&/‘
mm3ASddMembers.bash
#!/bin/bash
# mm3AddMembers
#
# Add members from a given list.
#
# Usage:
# mm3AddMembers.bash <fileName> <listName>
# <fileName>: text file with addresses to add. Same legal formats as in mass subscribe
# #
# Revisions:
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
exec /opt/mailman/mm/venv/bin/mailman -C "/opt/mailman/mm/mailman.cfg" members --add $1 $2
mm3DeleteMembers.bash
#!/bin/bash
# mm3DeleteMembers
#
# Deletes members from a given list
# <fileName> List of members to delete. Legal format the same a formats used for mass subscribes
#
# Usage:
# mm3DeleteMembers.bash <fileName> <listName>
#
# Revisions:
#
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
exec /opt/mailman/mm/venv/bin/mailman -C "/opt/mailman/mm/mailman.cfg" members --delete $1 $2
mm3MemberCount.bash
#!/bin/bash
# mm3MemberCount
#
# Obtain count of the members of a given list
#
# Usage:
# mm3MemberCount.bash <listName>
#
# Revisions:
# Date Name Reason for change
# 28-Mar-2020 Allan Hansen Initial
#
/home/hansen/scripts/mm3Members.bash $1|wc
Yours,
Allan Hansen
hansen(a)rc.org
> On Jul 21, 2020, at 18:31 , Brian Carpenter <brian_carpenter(a)emwd.com> wrote:
>
> On 7/21/20 8:55 PM, Mark Sapiro wrote:
>> On 7/21/20 5:40 PM, Brian Carpenter wrote:
>>
>> Abhilash (@maxking) is one person and he has a $DayJob. We're all doing
>> the best we can.
>
> Well, I still need support.
>
>> This is not a Docker issue per se. It is a consequence of upgrading
>> Mailman core to 3.3.1+ and processing many old, stale, previously
>> unprocessed bounces. See
>> <https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…>
>
> I am not worried about the bounce issues at this point. I am just trying to get a membership list exported for a client.
>
>>
>>> So, I want to totally move away from the use of Docker (mainly because I have found it buggy and the support is simply lacking) and install Mailman 3 for this client from source. However I need to get an export of their list members. But of course, I can't. Rest API times out and I don't know how to apply the instructions I was given to fix it and I don't have days to way for one. So please help.
>>>
>>> I increased the gunicorn workers to 4, hoping that would allow me to do the CSV export. No. So was given these instructions:
>>>
>>> ###
>>> The issues seems to be due to timeout not due to high load. You want to increase the timeout for gunicorn and you can do that by specifying a gunicorn.ini config file:
>>>
>>> [webservice]
>>> configuration: /path/to/gunicorn.cfg
>>>
>>> and then in the gunicorn.cfg you can add
>>>
>>> [gunicorn]
>>> timeout = 90
>>> graceful_timeout = 30
>>> ###
>>>
>>> I applied the above changes to /opt/mailman/core/mailman-extra.cfg and created the gunicorn.cfg file. Restarted the docker container (mailman-core) and no access to Postorius due to no REST api.
>>>
>>> After restarting docker-mailman, I can't access Postorius due to the following error:
>>>
>>> ERROR 2020-07-20 20:16:27,351 15 postorius Mailman REST API not available
>> Is Mailman core running? If not, whats in core's mailman.log as to why not?
>
> It looks like but no error message in mailman.log. However I noted that the gunicorn process did not start.
>
> This is with the configuration line enabled in mailman-extra.cfg:
>
> # docker-compose restart mailman-core
> Restarting mailman-core ... done
> [root@nicu-net docker-mailman]# tail -f /opt/mailman/core/var/logs/mailman.log
> Jul 22 01:25:17 2020 (22) in runner caught SIGTERM. Stopping.
> Jul 22 01:25:17 2020 (25) out runner caught SIGTERM. Stopping.
> Jul 22 01:25:17 2020 (25) out runner exiting.
> Jul 22 01:25:17 2020 (21) command runner exiting.
> Jul 22 01:25:17 2020 (22) in runner exiting.
> Jul 22 01:25:17 2020 (24) nntp runner caught SIGTERM. Stopping.
> Jul 22 01:25:17 2020 (24) nntp runner exiting.
> [2020-07-22 01:25:19 +0000] [27] [INFO] Shutting down: Master
> Jul 22 01:25:21 2020 (1) Master stopped
> Jul 22 01:25:26 2020 (1) Master started
> Jul 22 01:25:44 2020 (27) rest runner started.
> Jul 22 01:25:44 2020 (26) pipeline runner started.
> Jul 22 01:25:44 2020 (20) bounces runner started.
> Jul 22 01:25:45 2020 (22) in runner started.
> Jul 22 01:25:45 2020 (28) retry runner started.
> Jul 22 01:25:46 2020 (29) virgin runner started.
> Jul 22 01:25:46 2020 (25) out runner started.
> Jul 22 01:25:46 2020 (23) lmtp runner started.
> Jul 22 01:25:46 2020 (24) nntp runner started.
> Jul 22 01:25:47 2020 (30) digest runner started.
> Jul 22 01:25:47 2020 (19) archive runner started.
> Jul 22 01:25:47 2020 (21) command runner started.
>
> This is with the configuration line disabled in mailman-extra.cfg:
>
> # docker-compose restart mailman-core
> Restarting mailman-core ... done
> [root@nicu-net docker-mailman]# tail -f /opt/mailman/core/var/logs/mailman.log
> Jul 22 01:27:49 2020 (1) Master stopped
> Jul 22 01:27:53 2020 (1) Master started
> Jul 22 01:28:10 2020 (30) digest runner started.
> Jul 22 01:28:10 2020 (29) virgin runner started.
> Jul 22 01:28:10 2020 (24) nntp runner started.
> Jul 22 01:28:10 2020 (25) out runner started.
> Jul 22 01:28:10 2020 (22) in runner started.
> Jul 22 01:28:11 2020 (28) retry runner started.
> Jul 22 01:28:11 2020 (27) rest runner started.
> [2020-07-22 01:28:11 +0000] [27] [INFO] Starting gunicorn 19.9.0
> [2020-07-22 01:28:11 +0000] [27] [INFO] Listening at: http://172.19.199.2:8001 (27)
> [2020-07-22 01:28:11 +0000] [27] [INFO] Using worker: sync
> [2020-07-22 01:28:11 +0000] [32] [INFO] Booting worker with pid: 32
> [2020-07-22 01:28:11 +0000] [33] [INFO] Booting worker with pid: 33
> [2020-07-22 01:28:11 +0000] [34] [INFO] Booting worker with pid: 34
> [2020-07-22 01:28:11 +0000] [35] [INFO] Booting worker with pid: 35
> Jul 22 01:28:11 2020 (19) archive runner started.
> Jul 22 01:28:11 2020 (21) command runner started.
> Jul 22 01:28:12 2020 (23) lmtp runner started.
> Jul 22 01:28:12 2020 (20) bounces runner started.
> Jul 22 01:28:12 2020 (26) pipeline runner started.
>
> --
> Please let me know if you need further assistance.
>
> Thank you for your business. We appreciate our clients.
> Brian Carpenter
> EMWD.com
>
> --
> EMWD's Knowledgebase:
> https://clientarea.emwd.com/index.php/knowledgebase
>
> EMWD's Community Forums
> http://discourse.emwd.com/
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
4 years, 9 months

[MM3-users] Re: Member Issue Discovered
by Brian Carpenter
On 11/4/20 12:04 PM, Stephen J. Turnbull wrote:
> Brian Carpenter writes:
>
> > If you mean if they don't have a Django user account, they can't
> > unsubscribe?
>
> The Django user account is more or less a proxy for the underlying
> Mailman User object, which is what we're concerned with here because
> that's where the data you want deleted is stored.
>
> > I think that is true if they are wanting to unsubscribe via
> > the web interface. But sending an email to
> > listname-unsubscribe@listdomain allows them to unsubscribe without such
> > user authentication. Isn't that correct?
>
> They don't need a Django password or social auth, but they'll still
> have to do the OTK dance. I don't see a reason to distinguish the
> methods of authentication. They all reduce to the OTK dance to prove
> ownership of a mailbox, then optional *delegation* to a password in
> Django or social auth via Gmail etc.
Please speak in simple terms. I am pretty sure my questions were
straightforward but I have a sneaky suspicion you convoluted the issue
with these replies. I feel like my questions were not answered.
>
> I understand that your users don't understand this or care to. Thing
> is, some of *our* users care about the features that this architecture
> enables.
I think everyone should care that data should be removed when there is
an expectation that it is being removed.
>
> > My intent in our changes is to give the list owner and member
> > exactly what they expect: when they explicitly remove a
> > subscription and/or user profile, that they expect their data to be
> > totally removed.
>
> That's fine, and you're welcome to implement that in Affinity. In
> fact, as I understand it, you have already done so. *I'm* not saying
> *nobody* should implement that.
>
> I'm saying that *Mailman* shouldn't, because a lot of subscribers to
> Mailman lists won't like it. The whole point of Mailman 3 is to cater
> to users who want powerful control over their subscriptions. For
> Mailman (Postorius), prompting the user "If you delete this
> subscription, you will have no subscriptions linked to this account.
> Would you like to delete the account as well?" (as I have proposed
> three times now) is the right way to go. This can be implemented via
> email with a second OTK.
Since the account is a django account, I don't see why unsubscribing
from a list has anything to do with that account except removing the
user's prefer settings for a list that they are no longer subscribed to.
For me I made this issue about those list members who unsubscribe from a
single list AND does not have a django user account. This discussion has
expanded to all kinds of scenarios.
Those who are the power users are not in play here. I am sure they
intend to to keep their subscriptions active and their django account
open. I am talking about those who want to leave a list or wants to
remove their django user account permanently.
>
> > I can easily picture a scenario where an older list has a number of
> > list members move to on to other things in life
>
> And I can picture a scenario where they take a summer break and
> reactivate a decade later. I would be *pissed off* if my data got
> deleted in that scenario. (Yes, I've done that in the five year
> variant, if not the full decade.)
Why would you be mad? Am I missing something here? The data that is
being kept are a few fields of data (email address, username, password,
real-name, and some list preferences). Why would anyone expect to have
such inactive accounts kept perpetually? Regardless, I am not talking
about removing accounts/subscriptions without a user's permission. I am
talking about when a user either does it themselves or asks a List Owner
to do so.
>
> > and even abandon their email accounts totally.
>
> Which is a totally different scenario. I deny your "imperative" in
> the former case; inactivity from the point of view of a list owner is
> (usually) not abandonment. I question it in the latter, because
> "abandon" is an inference drawn from lack of activity or bounces,
> either of which could be inadvertant (respectively the "summer break"
> scenario, and separation from an employer).
I worded that poorly. But remember if an email address that no longer
exists (because a list member never unsubscribed from a list and closed
their email provider account anyways) is removed due to bounces (as it
should), that user data still exists. I think that is not good and such
a scenario happens a lot.
>
> > In those cases it is imperative that those list addresses are
> > removed either via bounce processing or list owner intervention and
> > that no legacy data on such members remain.
>
> But how do you propose to identify "legacy data"? In Mailman 3,
> members are *people*, not addresses. Do you really want it to be the
> case that if Albert signs up with albert(a)example.com, and later gets
> fired by example.com, then all his subscriptions get bounce-cancelled,
> and his User profile gets irreversibly trashed? Or some large email
> provider hosting lots of posters decides to suddenly implement some
> spam protection that causes a ton of bounces (as DMARC p=reject did in
> 2014) and hundreds of users have their accounts trashed?
It worked for Mailman 2 right? What happened in those cases? They just
got resubscribed again. As you said, unsubscribing doesn't impact a
django account anyways. So I don't understand your point here. Again I
am talking about the scenario where a user is requesting to be removed
or does the removal themselves and expects their data to be removed.
> You just can't know without asking Albert what he wants done in his
> case and you can be quite sure you're doing the wrong thing in the
> DMARC-like case. In either case, resubscribing is a click per list if
> his data is retained (and Albert needs an OTK confirmation of another
> address). It's an annoying session of duplicating his configuration
> (including passwords and social auth links) if not, and probably some
> months of discovering that a configuration that built up over years
> wasn't accurately reproduced for some lists.
Apples and oranges here. For public lists and a user who does not have a
Affinity/Django account, it is just a click per list. For those who have
a django/Affinity account, well there account should still be there
since they never asked for it to be removed or did not remove it themselves.
Personally I think I am going to implement some sort of backup
generation tool for an Affinity account holder where they can download
their profile/list settings in a json or equivalent format before
account deletion. Then if they wish to create their account, they can
rebuild their profile from that backup.
>
> List owners, of course, can do what they want with their lists. If
> they want to add automation for their subscribers that simplify the
> lives of people who have simple needs, that's not something Mailman
> can, should, or will try to stop. That's *why* I support efforts like
> Affinity, Empathy, and Harmony.
>
> Steve
I personally intend to get into the "power-user" market. That is the #1
reason for creating my UIs. I have that flexibility.
--
Brian Carpenter
Harmonylists.com
Emwd.com
4 years, 5 months

[MM3-users] Uncaught runner exception: 'str' object has no attribute 'decode'
by Henrik Rasmussen
When held mails are released in Mailman (maybe also mails which are not held) they are sometimes not sent nor archived, as mentioned in https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/…
One of my list admins reported that he released two mails on Sep 25 07:20:48 2017 UTC, and only the first was sent to the members. In the mailman.log I found the following from that particular release:
Sep 25 07:20:48 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar HTTP/1.1" 200 353
Sep 25 07:20:48 2017 (36) held message approved, message-id: <CAF9K74uk331j91PfF6S1nQT2YvxywwhUFBWBBcdMGkNMMU4=TA(a)somemail.com>
Sep 25 07:20:48 2017 (36) 172.19.199.3 - - "POST /3.0/lists/listname.foo.bar/held/40 HTTP/1.1" 204 0
Sep 25 07:20:48 2017 (36) held message approved, message-id: <804D10D40C57024A90412246998CB72D873B794B(a)P1KITMBX07WC04.mailserver>
Sep 25 07:20:48 2017 (36) 172.19.199.3 - - "POST /3.0/lists/listname(a)foo.bar/held/42 HTTP/1.1" 204 0
Sep 25 07:20:48 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname(a)foo.bar/held?count=0&page=1 HTTP/1.1" 200 90
Sep 25 07:20:48 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname(a)foo.bar/held?count=10&page=1 HTTP/1.1" 200 90
Sep 25 07:20:53 2017 (28) HyperKitty archived message <CAF9K74uk331j91PfF6S1nQT2YvxywwhUFBWBBcdMGkNMMU4=TA(a)somemail.com> to https://listserver.foo.bar/hyperkitty/list/listname@foo.bar/message/IAKWSH7…
Sep 25 07:20:53 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname(a)foo.bar HTTP/1.1" 200 353
Sep 25 07:20:53 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname(a)foo.bar/config HTTP/1.1" 200 2473
Sep 25 07:20:53 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar HTTP/1.1" 200 353
Sep 25 07:20:53 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar/roster/owner HTTP/1.1" 200 613
Sep 25 07:20:53 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar/roster/moderator HTTP/1.1" 200 617
Sep 25 07:20:53 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar HTTP/1.1" 200 353
Sep 25 07:20:53 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname(a)foo.bar/requests HTTP/1.1" 200 90
Sep 25 07:20:56 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar HTTP/1.1" 200 353
Sep 25 07:20:56 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar/roster/owner HTTP/1.1" 200 613
Sep 25 07:20:56 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar/roster/moderator HTTP/1.1" 200 617
Sep 25 07:20:57 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname(a)foo.bar/config HTTP/1.1" 200 2473
Sep 25 07:20:57 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar/archivers HTTP/1.1" 200 81
Sep 25 07:20:57 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname.foo.bar/archivers HTTP/1.1" 200 81
Sep 25 07:20:57 2017 (36) 172.19.199.3 - - "GET /3.0/lists/listname(a)foo.bar/requests HTTP/1.1" 200 90
Sep 25 07:20:57 2017 (35) Uncaught runner exception: 'str' object has no attribute 'decode'
Sep 25 07:20:57 2017 (35) Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 171, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 264, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/runners/pipeline.py", line 37, in _dispose
process(mlist, msg, msgdata, pipeline)
File "/usr/local/lib/python3.6/site-packages/mailman/core/pipelines.py", line 53, in process
handler.process(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/handlers/subject_prefix.py", line 174, in process
mlist, msgdata, subject, prefix, prefix_pattern, ws)
File "/usr/local/lib/python3.6/site-packages/mailman/handlers/subject_prefix.py", line 72, in all_same_charset
chunks.append(chunk.decode(charset))
AttributeError: 'str' object has no attribute 'decode'
Sep 25 07:20:57 2017 (35) SHUNTING: 1506324057.584686+a13cc47dc1027a0cfb00c892396b3ba7efabb3dc
In addition, the log contains other trace backs that might or might not associate to this problem:
Sep 24 21:11:27 2017 (34) Uncaught runner exception: 'ascii' codec can't encode character '\udcea' in position 3093: ordinal not in range(128)
Sep 24 21:11:28 2017 (34) Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 171, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 264, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/runners/outgoing.py", line 93, in _dispose
self._func(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/deliver.py", line 86, in deliver
refused = agent.deliver(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/bulk.py", line 101, in deliver
mlist, msg, msgdata, recipients)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/base.py", line 70, in _deliver_to_recipients
sender, sorted(recipients), msg.as_string())
File "/usr/local/lib/python3.6/site-packages/mailman/mta/connection.py", line 84, in sendmail
results = self._connection.sendmail(envsender, recipients, msgtext)
File "/usr/local/lib/python3.6/smtplib.py", line 855, in sendmail
msg = _fix_eols(msg).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\udcea' in position 3093: ordinal not in range(128)
Sep 24 21:11:28 2017 (34) SHUNTING: 1506287488.0529234+cbf8a31cad265a40a18e8955be0c9ad8b48a1b66
...¨
Sep 25 07:20:57 2017 (35) Uncaught runner exception: 'str' object has no attribute 'decode'
Sep 25 07:20:57 2017 (35) Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 171, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 264, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/runners/pipeline.py", line 37, in _dispose
process(mlist, msg, msgdata, pipeline)
File "/usr/local/lib/python3.6/site-packages/mailman/core/pipelines.py", line 53, in process
handler.process(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/handlers/subject_prefix.py", line 174, in process
mlist, msgdata, subject, prefix, prefix_pattern, ws)
File "/usr/local/lib/python3.6/site-packages/mailman/handlers/subject_prefix.py", line 72, in all_same_charset
chunks.append(chunk.decode(charset))
AttributeError: 'str' object has no attribute 'decode'
Sep 25 07:20:57 2017 (35) SHUNTING: 1506324057.584686+a13cc47dc1027a0cfb00c892396b3ba7efabb3dc
...
Sep 25 09:19:58 2017 (30) deque: do_confirm_verify
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/app/workflow.py", line 69, in __next__
return step()
File "/usr/local/lib/python3.6/site-packages/mailman/app/subscriptions.py", line 420, in _step_send_confirmation
raise StopIteration
StopIteration
...
Sep 26 09:21:07 2017 (36) deque:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/app/workflow.py", line 69, in __next__
return step()
File "/usr/local/lib/python3.6/site-packages/mailman/app/subscriptions.py", line 217, in _step_sanity_checks
MemberRole.member)
mailman.interfaces.member.AlreadySubscribedError: sender(a)foo.bar is already a MemberRole.member of mailing list listname(a)listserver.foo.bar
...
Sep 26 13:32:29 2017 (30) Uncaught runner exception:
Sep 26 13:32:29 2017 (30) Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 171, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 264, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/runners/command.py", line 196, in _dispose
mlist, msg, msgdata, parts, results)
File "/usr/local/lib/python3.6/site-packages/mailman/commands/eml_confirm.py", line 53, in process
mlist).confirm(token)
File "/usr/local/lib/python3.6/site-packages/mailman/app/subscriptions.py", line 540, in confirm
PendableUnsubscription.PEND_TYPE)
AssertionError
...
Sep 27 13:23:02 2017 (32) Uncaught runner exception: 'content-transfer-encoding'
Sep 27 13:23:02 2017 (32) Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 171, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 264, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/runners/outgoing.py", line 93, in _dispose
self._func(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/deliver.py", line 86, in deliver
refused = agent.deliver(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/bulk.py", line 101, in deliver
mlist, msg, msgdata, recipients)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/base.py", line 70, in _deliver_to_recipients
sender, sorted(recipients), msg.as_string())
File "/usr/local/lib/python3.6/email/message.py", line 158, in as_string
g.flatten(self, unixfrom=unixfrom)
File "/usr/local/lib/python3.6/email/generator.py", line 116, in flatten
self._write(msg)
File "/usr/local/lib/python3.6/email/generator.py", line 181, in _write
self._dispatch(msg)
File "/usr/local/lib/python3.6/email/generator.py", line 214, in _dispatch
meth(msg)
File "/usr/local/lib/python3.6/email/generator.py", line 272, in _handle_multipart
g.flatten(part, unixfrom=False, linesep=self._NL)
File "/usr/local/lib/python3.6/email/generator.py", line 116, in flatten
self._write(msg)
File "/usr/local/lib/python3.6/email/generator.py", line 181, in _write
self._dispatch(msg)
File "/usr/local/lib/python3.6/email/generator.py", line 214, in _dispatch
meth(msg)
File "/usr/local/lib/python3.6/email/generator.py", line 358, in _handle_message
g.flatten(msg.get_payload(0), unixfrom=False, linesep=self._NL)
File "/usr/local/lib/python3.6/email/generator.py", line 116, in flatten
self._write(msg)
File "/usr/local/lib/python3.6/email/generator.py", line 189, in _write
msg.replace_header('content-transfer-encoding', munge_cte[0])
File "/usr/local/lib/python3.6/email/message.py", line 558, in replace_header
raise KeyError(_name)
KeyError: 'content-transfer-encoding'
Sep 27 13:23:02 2017 (32) SHUNTING: 1506518582.300981+aa68949ca566c7170a81a0bd643cee803f29c312
7 years, 6 months

[MM3-users] Re: Installing mailman 3
by Rafael Mora
Hello Kyle,
What steps do you suggest in order to install mailman v2 via rpm's??
Thank you.
El mar., 11 jul. 2017 a las 15:13, Kyle Richardson (<
kylerichardson2(a)gmail.com>) escribió:
> Looks like you are using the fhs (filesystem hierarchy standard) layout;
> is that what you intend? I would suggest changing the layout to "dev" for
> testing purposes. This will use your mailman.cfg/../.. as the var directory.
>
> Is it possible you also have mailman v2 installed via rpms?
>
> -Kyle
>
> On Tue, Jul 11, 2017 at 3:41 PM, Rafael Mora <rafael.mora.guti(a)gmail.com>
> wrote:
>
>> Hello,
>>
>> Here it's mailman info:
>> [root@localhost bin]# ./mailman info
>> GNU Mailman 3.2.0a1 (La Villa Strangiato)
>> Python 3.6.0 (default, Jul 7 2017, 11:59:56)
>> [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
>> config file: /etc/mailman.cfg
>> db url: sqlite:////var/lib/mailman/data/mailman.db
>> devmode: DISABLED
>> REST root url: http://localhost:8001/3.1/
>> REST credentials: restadmin:restpass
>>
>>
>> Here it's mailman conf:
>> [root@localhost bin]# ./mailman conf
>> [antispam] header_checks:
>> [antispam] jump_chain: hold
>> [archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
>> [archiver.mail_archive] clobber_date: maybe
>> [archiver.mail_archive] clobber_skew: 1d
>> [archiver.mail_archive] configuration: python:mailman.config.mail_archive
>> [archiver.mail_archive] enable: no
>> [archiver.master] class:
>> [archiver.master] clobber_date: maybe
>> [archiver.master] clobber_skew: 1d
>> [archiver.master] configuration: changeme
>> [archiver.master] enable: no
>> [archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
>> [archiver.mhonarc] clobber_date: maybe
>> [archiver.mhonarc] clobber_skew: 1d
>> [archiver.mhonarc] configuration: python:mailman.config.mhonarc
>> [archiver.mhonarc] enable: no
>> [archiver.prototype] class: mailman.archiving.prototype.Prototype
>> [archiver.prototype] clobber_date: maybe
>> [archiver.prototype] clobber_skew: 1d
>> [archiver.prototype] configuration: changeme
>> [archiver.prototype] enable: no
>> [bounces] register_bounces_every: 15m
>> [database] class: mailman.database.sqlite.SQLiteDatabase
>> [database] debug: no
>> [database] url: sqlite:///$DATA_DIR/mailman.db
>> [devmode] enabled: no
>> [devmode] recipient:
>> [devmode] testing: no
>> [devmode] wait: 60s
>> [digests] mime_digest_keep_headers:
>> Date From To Cc Subject Message-ID Keywords
>> In-Reply-To References Content-Type MIME-Version
>> Content-Transfer-Encoding Precedence Reply-To
>> Message List-Post
>> [digests] plain_digest_keep_headers:
>> Message Date From
>> Subject To Cc
>> Message-ID Keywords
>> Content-Type
>> [dmarc] cache_lifetime: 7d
>> [dmarc] org_domain_data_url:
>> https://publicsuffix.org/list/public_suffix_list.dat
>> [dmarc] resolver_lifetime: 5s
>> [dmarc] resolver_timeout: 3s
>> [language.ar] charset: utf-8
>> [language.ar] description: Arabic
>> [language.ar] enabled: yes
>> [language.ast] charset: iso-8859-1
>> [language.ast] description: Asturian
>> [language.ast] enabled: yes
>> [language.ca] charset: utf-8
>> [language.ca] description: Catalan
>> [language.ca] enabled: yes
>> [language.cs] charset: iso-8859-2
>> [language.cs] description: Czech
>> [language.cs] enabled: yes
>> [language.da] charset: iso-8859-1
>> [language.da] description: Danish
>> [language.da] enabled: yes
>> [language.de] charset: iso-8859-1
>> [language.de] description: German
>> [language.de] enabled: yes
>> [language.el] charset: iso-8859-7
>> [language.el] description: Greek
>> [language.el] enabled: yes
>> [language.es] charset: iso-8859-1
>> [language.es] description: Spanish
>> [language.es] enabled: yes
>> [language.et] charset: iso-8859-15
>> [language.et] description: Estonian
>> [language.et] enabled: yes
>> [language.eu] charset: iso-8859-15
>> [language.eu] description: Euskara
>> [language.eu] enabled: yes
>> [language.fi] charset: iso-8859-1
>> [language.fi] description: Finnish
>> [language.fi] enabled: yes
>> [language.fr] charset: iso-8859-1
>> [language.fr] description: French
>> [language.fr] enabled: yes
>> [language.gl] charset: utf-8
>> [language.gl] description: Galician
>> [language.gl] enabled: yes
>> [language.he] charset: utf-8
>> [language.he] description: Hebrew
>> [language.he] enabled: yes
>> [language.hr] charset: iso-8859-2
>> [language.hr] description: Croatian
>> [language.hr] enabled: yes
>> [language.hu] charset: iso-8859-2
>> [language.hu] description: Hungarian
>> [language.hu] enabled: yes
>> [language.ia] charset: iso-8859-15
>> [language.ia] description: Interlingua
>> [language.ia] enabled: yes
>> [language.it] charset: iso-8859-1
>> [language.it] description: Italian
>> [language.it] enabled: yes
>> [language.ja] charset: euc-jp
>> [language.ja] description: Japanese
>> [language.ja] enabled: yes
>> [language.ko] charset: euc-kr
>> [language.ko] description: Korean
>> [language.ko] enabled: yes
>> [language.lt] charset: iso-8859-13
>> [language.lt] description: Lithuanian
>> [language.lt] enabled: yes
>> [language.nl] charset: iso-8859-1
>> [language.nl] description: Dutch
>> [language.nl] enabled: yes
>> [language.no] charset: iso-8859-1
>> [language.no] description: Norwegian
>> [language.no] enabled: yes
>> [language.pl] charset: iso-8859-2
>> [language.pl] description: Polish
>> [language.pl] enabled: yes
>> [language.pt] charset: iso-8859-1
>> [language.pt] description: Protuguese
>> [language.pt] enabled: yes
>> [language.pt_BR] charset: iso-8859-1
>> [language.pt_BR] description: Protuguese (Brazil)
>> [language.pt_BR] enabled: yes
>> [language.ro] charset: iso-8859-2
>> [language.ro] description: Romanian
>> [language.ro] enabled: yes
>> [language.ru] charset: koi8-r
>> [language.ru] description: Russian
>> [language.ru] enabled: yes
>> [language.sk] charset: utf-8
>> [language.sk] description: Slovak
>> [language.sk] enabled: yes
>> [language.sl] charset: iso-8859-2
>> [language.sl] description: Slovenian
>> [language.sl] enabled: yes
>> [language.sr] charset: utf-8
>> [language.sr] description: Serbian
>> [language.sr] enabled: yes
>> [language.sv] charset: iso-8859-1
>> [language.sv] description: Swedish
>> [language.sv] enabled: yes
>> [language.tr] charset: iso-8859-9
>> [language.tr] description: Turkish
>> [language.tr] enabled: yes
>> [language.uk] charset: utf-8
>> [language.uk] description: Ukrainian
>> [language.uk] enabled: yes
>> [language.vi] charset: utf-8
>> [language.vi] description: Vietnamese
>> [language.vi] enabled: yes
>> [language.zh_CN] charset: utf-8
>> [language.zh_CN] description: Chinese
>> [language.zh_CN] enabled: yes
>> [language.zh_TW] charset: utf-8
>> [language.zh_TW] description: Chinese (Taiwan)
>> [language.zh_TW] enabled: yes
>> [logging.archiver] datefmt: %b %d %H:%M:%S %Y
>> [logging.archiver] format: %(asctime)s (%(process)d) %(message)s
>> [logging.archiver] level: info
>> [logging.archiver] path: mailman.log
>> [logging.archiver] propagate: no
>> [logging.bounce] datefmt: %b %d %H:%M:%S %Y
>> [logging.bounce] format: %(asctime)s (%(process)d) %(message)s
>> [logging.bounce] level: info
>> [logging.bounce] path: bounce.log
>> [logging.bounce] propagate: no
>> [logging.config] datefmt: %b %d %H:%M:%S %Y
>> [logging.config] format: %(asctime)s (%(process)d) %(message)s
>> [logging.config] level: info
>> [logging.config] path: mailman.log
>> [logging.config] propagate: no
>> [logging.database] datefmt: %b %d %H:%M:%S %Y
>> [logging.database] format: %(asctime)s (%(process)d) %(message)s
>> [logging.database] level: warn
>> [logging.database] path: mailman.log
>> [logging.database] propagate: no
>> [logging.debug] datefmt: %b %d %H:%M:%S %Y
>> [logging.debug] format: %(asctime)s (%(process)d) %(message)s
>> [logging.debug] level: info
>> [logging.debug] path: debug.log
>> [logging.debug] propagate: no
>> [logging.error] datefmt: %b %d %H:%M:%S %Y
>> [logging.error] format: %(asctime)s (%(process)d) %(message)s
>> [logging.error] level: info
>> [logging.error] path: mailman.log
>> [logging.error] propagate: no
>> [logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
>> [logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
>> [logging.fromusenet] level: info
>> [logging.fromusenet] path: mailman.log
>> [logging.fromusenet] propagate: no
>> [logging.http] datefmt: %b %d %H:%M:%S %Y
>> [logging.http] format: %(asctime)s (%(process)d) %(message)s
>> [logging.http] level: info
>> [logging.http] path: mailman.log
>> [logging.http] propagate: no
>> [logging.locks] datefmt: %b %d %H:%M:%S %Y
>> [logging.locks] format: %(asctime)s (%(process)d) %(message)s
>> [logging.locks] level: info
>> [logging.locks] path: mailman.log
>> [logging.locks] propagate: no
>> [logging.mischief] datefmt: %b %d %H:%M:%S %Y
>> [logging.mischief] format: %(asctime)s (%(process)d) %(message)s
>> [logging.mischief] level: info
>> [logging.mischief] path: mailman.log
>> [logging.mischief] propagate: no
>> [logging.root] datefmt: %b %d %H:%M:%S %Y
>> [logging.root] format: %(asctime)s (%(process)d) %(message)s
>> [logging.root] level: info
>> [logging.root] path: mailman.log
>> [logging.root] propagate: no
>> [logging.runner] datefmt: %b %d %H:%M:%S %Y
>> [logging.runner] format: %(asctime)s (%(process)d) %(message)s
>> [logging.runner] level: info
>> [logging.runner] path: mailman.log
>> [logging.runner] propagate: no
>> [logging.smtp] datefmt: %b %d %H:%M:%S %Y
>> [logging.smtp] every: $msgid smtp to $listname for $recip recips,
>> completed
>> in $time seconds
>> [logging.smtp] failure: $msgid delivery to $recip failed with code
>> $smtpcode, $smtpmsg
>> [logging.smtp] format: %(asctime)s (%(process)d) %(message)s
>> [logging.smtp] level: info
>> [logging.smtp] path: smtp.log
>> [logging.smtp] propagate: no
>> [logging.smtp] refused: $msgid post to $listname from $sender, $size
>> bytes,
>> $refused failures
>> [logging.smtp] success: $msgid post to $listname from $sender, $size bytes
>> [logging.subscribe] datefmt: %b %d %H:%M:%S %Y
>> [logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
>> [logging.subscribe] level: info
>> [logging.subscribe] path: mailman.log
>> [logging.subscribe] propagate: no
>> [logging.vette] datefmt: %b %d %H:%M:%S %Y
>> [logging.vette] format: %(asctime)s (%(process)d) %(message)s
>> [logging.vette] level: info
>> [logging.vette] path: mailman.log
>> [logging.vette] propagate: no
>> [mailman] cache_life: 7d
>> [mailman] default_language: en
>> [mailman] email_commands_max_lines: 10
>> [mailman] filtered_messages_are_preservable: no
>> [mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
>> [mailman] layout: fhs
>> [mailman] listname_chars: [-_.0-9a-z]
>> [mailman] noreply_address: noreply
>> [mailman] pending_request_life: 3d
>> [mailman] post_hook:
>> [mailman] pre_hook:
>> [mailman] sender_headers: from from_ reply-to sender
>> [mailman] site_owner: changeme(a)example.com
>> [mta] configuration: python:mailman.config.postfix
>> [mta] delivery_retry_period: 5d
>> [mta] incoming: mailman.mta.postfix.LMTP
>> [mta] lmtp_host: 127.0.0.1 # IP where Mailman should listen for
>> emails from MTA
>> [mta] lmtp_port: 8024
>> [mta] max_autoresponses_per_day: 10
>> [mta] max_delivery_threads: 0
>> [mta] max_recipients: 500
>> [mta] max_sessions_per_connection: 0
>> [mta] outgoing: mailman.mta.deliver.deliver
>> [mta] remove_dkim_headers: no
>> [mta] smtp_host: 127.0.0.1 # IP Where MTA is listening for
>> emails
>> [mta] smtp_pass:
>> [mta] smtp_port: 25
>> [mta] smtp_user:
>> [mta] verp_confirm_format: $address+$cookie
>> [mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
>> [mta] verp_confirmations: no
>> [mta] verp_delimiter: +
>> [mta] verp_delivery_interval: 0
>> [mta] verp_format: ${bounces}+${local}=${domain}
>> [mta] verp_personalized_deliveries: no
>> [mta] verp_probe_format: $bounces+$token@$domain
>> [mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
>> [mta] verp_probes: no
>> [mta] verp_regexp:
>> ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
>> [nntp] host:
>> [nntp] password:
>> [nntp] port:
>> [nntp] remove_headers:
>> nntp-posting-host nntp-posting-date x-trace
>> x-complaints-to xref date-received posted
>> posting-version relay-version received
>> [nntp] rewrite_duplicate_headers:
>> To X-Original-To
>> CC X-Original-CC
>> Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
>> MIME-Version X-MIME-Version
>> [nntp] user:
>> [passwords] configuration: python:mailman.config.passlib
>> [passwords] password_length: 8
>> [shell] banner: Welcome to the GNU Mailman shell
>> [shell] history_file:
>> [shell] prompt: >>>
>> [shell] use_ipython: no
>> [styles] default: legacy-default
>> [styles] paths:
>> mailman.styles
>> [webservice] admin_pass: restpass
>> [webservice] admin_user: restadmin
>> [webservice] api_version: 3.1
>> [webservice] hostname: localhost
>> [webservice] port: 8001
>> [webservice] show_tracebacks: yes
>> [webservice] use_https: no
>>
>>
>> What do you suggest? Thank you
>>
>> El mar., 11 jul. 2017 a las 14:31, Simon Hanna (<
>> simon.hanna(a)serve-me.info>)
>> escribió:
>>
>> > Below is how I would recommend to run Mailman for production using a
>> > virtualenv
>> >
>> > # useradd -r -m -d /var/lib/mailman mailman
>> >
>> > # su - mailman
>> >
>> >
>> > $ python3 -m venv env
>> > $ source env/bin/activate
>> > $ pip install mailman
>> > $ mailman info
>> >
>> > Now you should have a working configuration in /var/lib/mailman/var/
>> >
>> > to run mailman you don't need to activate the virtualenv, just use the
>> > executable /var/lib/mailman/env/bin/mailman
>> >
>> > cheers,
>> > Simon
>> > _______________________________________________
>> > Mailman-users mailing list
>> > mailman-users(a)mailman3.org
>> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> >
>> --
>>
>> Atentamente / Best Regards
>>
>> Ing. Rafael Mora
>> _______________________________________________
>> Mailman-users mailing list
>> mailman-users(a)mailman3.org
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>
>
> --
Atentamente / Best Regards
Ing. Rafael Mora
7 years, 9 months

[MM3-users] Re: Postorius: Show only own lists
by Thor Atle Rustad
2018-01-23 16:59 GMT+01:00 Terri Oda <terri(a)toybox.ca>:
>
>
> On January 23, 2018 6:26:51 AM PST, Thor Atle Rustad <
> thor.rustad(a)gmail.com> wrote:
> >2018-01-23 14:37 GMT+01:00 Simon Hanna <simon(a)hannaweb.eu>:
> >
> >> On 01/23/2018 12:10 PM, Thor Atle Rustad wrote:
> >>
> >>> Imagine an installation with 500+ mailing lists and almost as many
> >local
> >>> admins that are supposed to maintain their own local lists with a
> >few
> >>> local
> >>> members. As site admin, I see all 500+ lists, but I was expecting
> >*local*
> >>> admins to see only the lists they maintain. I have set all lists to
> >>> "advertised = False", so they are hidden from ordinary view. Is
> >there a
> >>> way
> >>> to show only relevant lists to local admins?
> >I believe I wrote Postorius in the subject line, but it may not be so
> >obvious. So yes, in Posterius I would like to hide the lists from email
> >harvesters, while relatively "untrusted" admins should have access to
> >basic
> >operations on the one list he/she "owns" (and without having to browse
> >through 50 pages of mailing lists). Somehow I don't think 500
> >superusers in
> >our system is a good idea!
>
> What do you mean by local admins?
>
> Is this
> 1. Giantsite.example.com hosts lists for a bunch of domains, and you want
> the logged in admins of mydomain.com to see their list admin pages but
> not otherdomain.org's lists
>
> 2. You want each logged in admin to have their own personal dashboard of
> list admin pages for lists they administrate, even though they're all under
> one big domain.
>
> (Neither of those scenarios talks about archives, since you say you're
> only talking about postorious)
>
> I think #2 is something we should be doing, and the old "todo" section of
> the interface kind of was made with that in mind. Probably worth mocking
> up some screenshots and opening a feature request to keep the idea in mind,
> but it should be more a matter of prioritizing how things are displayed
> than any huge change.
>
> I'm not sure if we have a "local admin" concept in the system that lines
> up with #1, though.
>
>
Ok, this would more like number 2. It's National.dogclub.com with its
various mailing lists like poodle.dogclub.com, which expands to
poodle-regionA.dogclub.com, poodle-regionB.dogclub.com,
poodle-regiionC.dogclub.com and so on. So with dozens of different dog
breeds and geographic chapters, the number of mailing lists are between 500
and 1000, but all are under the same dogclub.com domain. The members of
each list should be maintained by a person with some elevated rights, but
not enough to mess up the system. What I called "local admin" should have
rights to add and remove members of, say, the poodle-regionA mailing list.
7 years, 3 months

[MM3-users] Re: Installing mailman 3
by Rafael Mora
Hello,
I'm newbie in centos 7 and I might need a little bit of help
understanding (filesystem
hierarchy standard) layout, I don't know about it.
How do I check if I have mailman v2 installed???
How do I change the layout to "dev"??
Thank you
El mar., 11 jul. 2017 a las 15:13, Kyle Richardson (<
kylerichardson2(a)gmail.com>) escribió:
> Looks like you are using the fhs (filesystem hierarchy standard) layout;
> is that what you intend? I would suggest changing the layout to "dev" for
> testing purposes. This will use your mailman.cfg/../.. as the var directory.
>
> Is it possible you also have mailman v2 installed via rpms?
>
> -Kyle
>
> On Tue, Jul 11, 2017 at 3:41 PM, Rafael Mora <rafael.mora.guti(a)gmail.com>
> wrote:
>
>> Hello,
>>
>> Here it's mailman info:
>> [root@localhost bin]# ./mailman info
>> GNU Mailman 3.2.0a1 (La Villa Strangiato)
>> Python 3.6.0 (default, Jul 7 2017, 11:59:56)
>> [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
>> config file: /etc/mailman.cfg
>> db url: sqlite:////var/lib/mailman/data/mailman.db
>> devmode: DISABLED
>> REST root url: http://localhost:8001/3.1/
>> REST credentials: restadmin:restpass
>>
>>
>> Here it's mailman conf:
>> [root@localhost bin]# ./mailman conf
>> [antispam] header_checks:
>> [antispam] jump_chain: hold
>> [archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
>> [archiver.mail_archive] clobber_date: maybe
>> [archiver.mail_archive] clobber_skew: 1d
>> [archiver.mail_archive] configuration: python:mailman.config.mail_archive
>> [archiver.mail_archive] enable: no
>> [archiver.master] class:
>> [archiver.master] clobber_date: maybe
>> [archiver.master] clobber_skew: 1d
>> [archiver.master] configuration: changeme
>> [archiver.master] enable: no
>> [archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
>> [archiver.mhonarc] clobber_date: maybe
>> [archiver.mhonarc] clobber_skew: 1d
>> [archiver.mhonarc] configuration: python:mailman.config.mhonarc
>> [archiver.mhonarc] enable: no
>> [archiver.prototype] class: mailman.archiving.prototype.Prototype
>> [archiver.prototype] clobber_date: maybe
>> [archiver.prototype] clobber_skew: 1d
>> [archiver.prototype] configuration: changeme
>> [archiver.prototype] enable: no
>> [bounces] register_bounces_every: 15m
>> [database] class: mailman.database.sqlite.SQLiteDatabase
>> [database] debug: no
>> [database] url: sqlite:///$DATA_DIR/mailman.db
>> [devmode] enabled: no
>> [devmode] recipient:
>> [devmode] testing: no
>> [devmode] wait: 60s
>> [digests] mime_digest_keep_headers:
>> Date From To Cc Subject Message-ID Keywords
>> In-Reply-To References Content-Type MIME-Version
>> Content-Transfer-Encoding Precedence Reply-To
>> Message List-Post
>> [digests] plain_digest_keep_headers:
>> Message Date From
>> Subject To Cc
>> Message-ID Keywords
>> Content-Type
>> [dmarc] cache_lifetime: 7d
>> [dmarc] org_domain_data_url:
>> https://publicsuffix.org/list/public_suffix_list.dat
>> [dmarc] resolver_lifetime: 5s
>> [dmarc] resolver_timeout: 3s
>> [language.ar] charset: utf-8
>> [language.ar] description: Arabic
>> [language.ar] enabled: yes
>> [language.ast] charset: iso-8859-1
>> [language.ast] description: Asturian
>> [language.ast] enabled: yes
>> [language.ca] charset: utf-8
>> [language.ca] description: Catalan
>> [language.ca] enabled: yes
>> [language.cs] charset: iso-8859-2
>> [language.cs] description: Czech
>> [language.cs] enabled: yes
>> [language.da] charset: iso-8859-1
>> [language.da] description: Danish
>> [language.da] enabled: yes
>> [language.de] charset: iso-8859-1
>> [language.de] description: German
>> [language.de] enabled: yes
>> [language.el] charset: iso-8859-7
>> [language.el] description: Greek
>> [language.el] enabled: yes
>> [language.es] charset: iso-8859-1
>> [language.es] description: Spanish
>> [language.es] enabled: yes
>> [language.et] charset: iso-8859-15
>> [language.et] description: Estonian
>> [language.et] enabled: yes
>> [language.eu] charset: iso-8859-15
>> [language.eu] description: Euskara
>> [language.eu] enabled: yes
>> [language.fi] charset: iso-8859-1
>> [language.fi] description: Finnish
>> [language.fi] enabled: yes
>> [language.fr] charset: iso-8859-1
>> [language.fr] description: French
>> [language.fr] enabled: yes
>> [language.gl] charset: utf-8
>> [language.gl] description: Galician
>> [language.gl] enabled: yes
>> [language.he] charset: utf-8
>> [language.he] description: Hebrew
>> [language.he] enabled: yes
>> [language.hr] charset: iso-8859-2
>> [language.hr] description: Croatian
>> [language.hr] enabled: yes
>> [language.hu] charset: iso-8859-2
>> [language.hu] description: Hungarian
>> [language.hu] enabled: yes
>> [language.ia] charset: iso-8859-15
>> [language.ia] description: Interlingua
>> [language.ia] enabled: yes
>> [language.it] charset: iso-8859-1
>> [language.it] description: Italian
>> [language.it] enabled: yes
>> [language.ja] charset: euc-jp
>> [language.ja] description: Japanese
>> [language.ja] enabled: yes
>> [language.ko] charset: euc-kr
>> [language.ko] description: Korean
>> [language.ko] enabled: yes
>> [language.lt] charset: iso-8859-13
>> [language.lt] description: Lithuanian
>> [language.lt] enabled: yes
>> [language.nl] charset: iso-8859-1
>> [language.nl] description: Dutch
>> [language.nl] enabled: yes
>> [language.no] charset: iso-8859-1
>> [language.no] description: Norwegian
>> [language.no] enabled: yes
>> [language.pl] charset: iso-8859-2
>> [language.pl] description: Polish
>> [language.pl] enabled: yes
>> [language.pt] charset: iso-8859-1
>> [language.pt] description: Protuguese
>> [language.pt] enabled: yes
>> [language.pt_BR] charset: iso-8859-1
>> [language.pt_BR] description: Protuguese (Brazil)
>> [language.pt_BR] enabled: yes
>> [language.ro] charset: iso-8859-2
>> [language.ro] description: Romanian
>> [language.ro] enabled: yes
>> [language.ru] charset: koi8-r
>> [language.ru] description: Russian
>> [language.ru] enabled: yes
>> [language.sk] charset: utf-8
>> [language.sk] description: Slovak
>> [language.sk] enabled: yes
>> [language.sl] charset: iso-8859-2
>> [language.sl] description: Slovenian
>> [language.sl] enabled: yes
>> [language.sr] charset: utf-8
>> [language.sr] description: Serbian
>> [language.sr] enabled: yes
>> [language.sv] charset: iso-8859-1
>> [language.sv] description: Swedish
>> [language.sv] enabled: yes
>> [language.tr] charset: iso-8859-9
>> [language.tr] description: Turkish
>> [language.tr] enabled: yes
>> [language.uk] charset: utf-8
>> [language.uk] description: Ukrainian
>> [language.uk] enabled: yes
>> [language.vi] charset: utf-8
>> [language.vi] description: Vietnamese
>> [language.vi] enabled: yes
>> [language.zh_CN] charset: utf-8
>> [language.zh_CN] description: Chinese
>> [language.zh_CN] enabled: yes
>> [language.zh_TW] charset: utf-8
>> [language.zh_TW] description: Chinese (Taiwan)
>> [language.zh_TW] enabled: yes
>> [logging.archiver] datefmt: %b %d %H:%M:%S %Y
>> [logging.archiver] format: %(asctime)s (%(process)d) %(message)s
>> [logging.archiver] level: info
>> [logging.archiver] path: mailman.log
>> [logging.archiver] propagate: no
>> [logging.bounce] datefmt: %b %d %H:%M:%S %Y
>> [logging.bounce] format: %(asctime)s (%(process)d) %(message)s
>> [logging.bounce] level: info
>> [logging.bounce] path: bounce.log
>> [logging.bounce] propagate: no
>> [logging.config] datefmt: %b %d %H:%M:%S %Y
>> [logging.config] format: %(asctime)s (%(process)d) %(message)s
>> [logging.config] level: info
>> [logging.config] path: mailman.log
>> [logging.config] propagate: no
>> [logging.database] datefmt: %b %d %H:%M:%S %Y
>> [logging.database] format: %(asctime)s (%(process)d) %(message)s
>> [logging.database] level: warn
>> [logging.database] path: mailman.log
>> [logging.database] propagate: no
>> [logging.debug] datefmt: %b %d %H:%M:%S %Y
>> [logging.debug] format: %(asctime)s (%(process)d) %(message)s
>> [logging.debug] level: info
>> [logging.debug] path: debug.log
>> [logging.debug] propagate: no
>> [logging.error] datefmt: %b %d %H:%M:%S %Y
>> [logging.error] format: %(asctime)s (%(process)d) %(message)s
>> [logging.error] level: info
>> [logging.error] path: mailman.log
>> [logging.error] propagate: no
>> [logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
>> [logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
>> [logging.fromusenet] level: info
>> [logging.fromusenet] path: mailman.log
>> [logging.fromusenet] propagate: no
>> [logging.http] datefmt: %b %d %H:%M:%S %Y
>> [logging.http] format: %(asctime)s (%(process)d) %(message)s
>> [logging.http] level: info
>> [logging.http] path: mailman.log
>> [logging.http] propagate: no
>> [logging.locks] datefmt: %b %d %H:%M:%S %Y
>> [logging.locks] format: %(asctime)s (%(process)d) %(message)s
>> [logging.locks] level: info
>> [logging.locks] path: mailman.log
>> [logging.locks] propagate: no
>> [logging.mischief] datefmt: %b %d %H:%M:%S %Y
>> [logging.mischief] format: %(asctime)s (%(process)d) %(message)s
>> [logging.mischief] level: info
>> [logging.mischief] path: mailman.log
>> [logging.mischief] propagate: no
>> [logging.root] datefmt: %b %d %H:%M:%S %Y
>> [logging.root] format: %(asctime)s (%(process)d) %(message)s
>> [logging.root] level: info
>> [logging.root] path: mailman.log
>> [logging.root] propagate: no
>> [logging.runner] datefmt: %b %d %H:%M:%S %Y
>> [logging.runner] format: %(asctime)s (%(process)d) %(message)s
>> [logging.runner] level: info
>> [logging.runner] path: mailman.log
>> [logging.runner] propagate: no
>> [logging.smtp] datefmt: %b %d %H:%M:%S %Y
>> [logging.smtp] every: $msgid smtp to $listname for $recip recips,
>> completed
>> in $time seconds
>> [logging.smtp] failure: $msgid delivery to $recip failed with code
>> $smtpcode, $smtpmsg
>> [logging.smtp] format: %(asctime)s (%(process)d) %(message)s
>> [logging.smtp] level: info
>> [logging.smtp] path: smtp.log
>> [logging.smtp] propagate: no
>> [logging.smtp] refused: $msgid post to $listname from $sender, $size
>> bytes,
>> $refused failures
>> [logging.smtp] success: $msgid post to $listname from $sender, $size bytes
>> [logging.subscribe] datefmt: %b %d %H:%M:%S %Y
>> [logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
>> [logging.subscribe] level: info
>> [logging.subscribe] path: mailman.log
>> [logging.subscribe] propagate: no
>> [logging.vette] datefmt: %b %d %H:%M:%S %Y
>> [logging.vette] format: %(asctime)s (%(process)d) %(message)s
>> [logging.vette] level: info
>> [logging.vette] path: mailman.log
>> [logging.vette] propagate: no
>> [mailman] cache_life: 7d
>> [mailman] default_language: en
>> [mailman] email_commands_max_lines: 10
>> [mailman] filtered_messages_are_preservable: no
>> [mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
>> [mailman] layout: fhs
>> [mailman] listname_chars: [-_.0-9a-z]
>> [mailman] noreply_address: noreply
>> [mailman] pending_request_life: 3d
>> [mailman] post_hook:
>> [mailman] pre_hook:
>> [mailman] sender_headers: from from_ reply-to sender
>> [mailman] site_owner: changeme(a)example.com
>> [mta] configuration: python:mailman.config.postfix
>> [mta] delivery_retry_period: 5d
>> [mta] incoming: mailman.mta.postfix.LMTP
>> [mta] lmtp_host: 127.0.0.1 # IP where Mailman should listen for
>> emails from MTA
>> [mta] lmtp_port: 8024
>> [mta] max_autoresponses_per_day: 10
>> [mta] max_delivery_threads: 0
>> [mta] max_recipients: 500
>> [mta] max_sessions_per_connection: 0
>> [mta] outgoing: mailman.mta.deliver.deliver
>> [mta] remove_dkim_headers: no
>> [mta] smtp_host: 127.0.0.1 # IP Where MTA is listening for
>> emails
>> [mta] smtp_pass:
>> [mta] smtp_port: 25
>> [mta] smtp_user:
>> [mta] verp_confirm_format: $address+$cookie
>> [mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
>> [mta] verp_confirmations: no
>> [mta] verp_delimiter: +
>> [mta] verp_delivery_interval: 0
>> [mta] verp_format: ${bounces}+${local}=${domain}
>> [mta] verp_personalized_deliveries: no
>> [mta] verp_probe_format: $bounces+$token@$domain
>> [mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
>> [mta] verp_probes: no
>> [mta] verp_regexp:
>> ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
>> [nntp] host:
>> [nntp] password:
>> [nntp] port:
>> [nntp] remove_headers:
>> nntp-posting-host nntp-posting-date x-trace
>> x-complaints-to xref date-received posted
>> posting-version relay-version received
>> [nntp] rewrite_duplicate_headers:
>> To X-Original-To
>> CC X-Original-CC
>> Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
>> MIME-Version X-MIME-Version
>> [nntp] user:
>> [passwords] configuration: python:mailman.config.passlib
>> [passwords] password_length: 8
>> [shell] banner: Welcome to the GNU Mailman shell
>> [shell] history_file:
>> [shell] prompt: >>>
>> [shell] use_ipython: no
>> [styles] default: legacy-default
>> [styles] paths:
>> mailman.styles
>> [webservice] admin_pass: restpass
>> [webservice] admin_user: restadmin
>> [webservice] api_version: 3.1
>> [webservice] hostname: localhost
>> [webservice] port: 8001
>> [webservice] show_tracebacks: yes
>> [webservice] use_https: no
>>
>>
>> What do you suggest? Thank you
>>
>> El mar., 11 jul. 2017 a las 14:31, Simon Hanna (<
>> simon.hanna(a)serve-me.info>)
>> escribió:
>>
>> > Below is how I would recommend to run Mailman for production using a
>> > virtualenv
>> >
>> > # useradd -r -m -d /var/lib/mailman mailman
>> >
>> > # su - mailman
>> >
>> >
>> > $ python3 -m venv env
>> > $ source env/bin/activate
>> > $ pip install mailman
>> > $ mailman info
>> >
>> > Now you should have a working configuration in /var/lib/mailman/var/
>> >
>> > to run mailman you don't need to activate the virtualenv, just use the
>> > executable /var/lib/mailman/env/bin/mailman
>> >
>> > cheers,
>> > Simon
>> > _______________________________________________
>> > Mailman-users mailing list
>> > mailman-users(a)mailman3.org
>> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> >
>> --
>>
>> Atentamente / Best Regards
>>
>> Ing. Rafael Mora
>> _______________________________________________
>> Mailman-users mailing list
>> mailman-users(a)mailman3.org
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>
>
> --
Atentamente / Best Regards
Ing. Rafael Mora
7 years, 9 months

[MM3-users] Re: spanish localization
by Victoriano Giralt
On Thu, 2021-02-11 at 11:15 -0800, Mark Sapiro wrote:
> For Mailman core you need to run
>
> ```
> cd mailman/messages/es/LC_MESSAGES
> msgfmt -o mailman.mo mailman.po
>
> ```
> to compile the mailman.po file for gettext.
Mark, I'd say the Mailman core message files taht get installed by pip
are "a bit outdated" (source files dates point to a nightly build) ...
proof here:
[root@isoc-es messages]# pwd
/usr/local/lib/python3.6/site-packages/mailman/messages
[root@isoc-es messages]# ll */LC*/
ca/LC_MESSAGES/:
total 164
-rw-r--r-- 1 root root 66479 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 95099 Oct 30 17:30 mailman.po
de/LC_MESSAGES/:
total 184
-rw-r--r-- 1 root root 81693 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 104049 Jan 17 20:41 mailman.po
en/LC_MESSAGES/:
total 172
-rw-r--r-- 1 root root 74350 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 97233 Oct 30 17:30 mailman.po
eo/LC_MESSAGES/:
total 60
-rw-r--r-- 1 root root 321 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 55254 Oct 30 17:30 mailman.po
es/LC_MESSAGES/:
total 184
-rw-r--r-- 1 root root 80741 Feb 12 09:18 mailman.mo
-rw-r--r-- 1 root root 102963 Nov 7 01:50 mailman.po
fr/LC_MESSAGES/:
total 124
-rw-r--r-- 1 root root 42261 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 81452 Jan 17 20:41 mailman.po
he/LC_MESSAGES/:
total 180
-rw-r--r-- 1 root root 79940 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 101264 Jan 17 19:20 mailman.po
hu/LC_MESSAGES/:
total 72
-rw-r--r-- 1 root root 9500 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 59290 Feb 3 02:44 mailman.po
it/LC_MESSAGES/:
total 180
-rw-r--r-- 1 root root 78543 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 100864 Jan 17 20:41 mailman.po
ja/LC_MESSAGES/:
total 60
-rw-r--r-- 1 root root 1296 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 55755 Oct 30 17:30 mailman.po
ko/LC_MESSAGES/:
total 164
-rw-r--r-- 1 root root 66668 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 94598 Oct 30 17:30 mailman.po
nb_NO/LC_MESSAGES/:
total 68
-rw-r--r-- 1 root root 6263 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 57744 Jan 17 19:20 mailman.po
pl/LC_MESSAGES/:
total 60
-rw-r--r-- 1 root root 1933 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 56068 Oct 30 17:30 mailman.po
pt/LC_MESSAGES/:
total 60
-rw-r--r-- 1 root root 1734 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 55963 Oct 30 17:30 mailman.po
ru/LC_MESSAGES/:
total 80
-rw-r--r-- 1 root root 12651 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 62127 Oct 30 17:30 mailman.po
sq/LC_MESSAGES/:
total 60
-rw-r--r-- 1 root root 321 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 55227 Oct 30 17:30 mailman.po
tr/LC_MESSAGES/:
total 168
-rw-r--r-- 1 root root 73537 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 96452 Jan 17 20:41 mailman.po
zh_Hans/LC_MESSAGES/:
total 64
-rw-r--r-- 1 root root 4945 Feb 3 02:47 mailman.mo
-rw-r--r-- 1 root root 57269 Jan 17 19:20 mailman.po
--
Victoriano Giralt Innovation Director
Digital Transformation Vicerectorate University of Malaga
+34952131415 SPAIN
==================================================================
Note: signature.asc is the electronic signature of present message
A: Yes.
> Q: Are you sure ?
>> A: Because it reverses the logical flow of conversation.
>>> Q: Why is top posting annoying in email ?
4 years, 2 months

[MM3-users] ANNOUNCE: Mailman 3.1.0 final!
by Barry Warsaw
Hello Mailpeople!
On behalf of the entire team and all our wonderful contributors, I'm happy to
announce the release of GNU Mailman 3.1 final. My deep thanks go to all the
Mailman project sprinters at Pycon 2017 for getting us over the line!
Two years after the original release of Mailman 3.0, this version contains a
huge number of improvements across the entire stack. Many bugs have been
fixed and new features added in the Core, Postorius (web u/i), and HyperKitty
(archiver). Upgrading from Mailman 2.1 should be better too. We are seeing
more production sites adopt Mailman 3, and we've been getting great feedback
as these have rolled out.
Important: mailman-bundler, our previous recommended way of deploying Mailman
3, has been deprecated. Abhilash Raj is putting the finishing touches on
Docker images to deploy everything, and he'll have a further announcement in a
week or two.
Feedback is welcome:
https://github.com/maxking/docker-mailman
What is GNU Mailman?
GNU Mailman is free software for managing electronic mail discussion and
e-newsletter lists. Mailman is integrated with the web, making it easy for
users to manage their accounts and for list owners to administer their lists.
Mailman supports built-in archiving, automatic bounce processing, content
filtering, digest delivery, and more. Mailman 3 is released under the terms
of the GNU General Public License, version 3.
The best places to start for all things related to this release:
http://docs.mailman3.org/
http://www.list.org/
https://gitlab.com/mailman
(Note: due to timezone skew, some of the tarballs may not be available on PyPI
until tomorrow.)
Happy Mailman Day,
-Your friendly neighborhood cabal
An overview of what's new in Mailman 3.1
========================================
Feature parity with Mailman 2.1
-------------------------------
* You should be able to do just about everything that you could do in Mailman
2.1 *except* for topics and sibling/umbrella lists.
Core
----
* Added support for Python 3.5 and 3.6
* MySQL is now an officially supported database
* Many improvements with importing Mailman 2.1 lists
* DMARC mitigations have been added, based on, but different than the same
feature in Mailman 2.1
* The REST API requires HTTP/1.1
* A new REST API version (3.1) has been added which changes how UUIDs are
interpreted, fixing the problem for some JavaScript libraries
* Many new REST resources and methods have been added
* Individual mailing lists can augment the system's header matching rules
* `mailman create` now creates missing domains by default
* `mailman digests` now has `--verbose` and `--dry-run` options
* `mailman shell` now supports readline history
* `mailman members` can filter members based on their subscription roles
* A new template system has been added for all messages originating from
inside Mailman.
* The Message-ID-Hash header replaces X-Message-ID-Hash
* New placeholders have been added for headers and footers
* Unsubscriptions can now be confirmed and/or moderated
Postorius/HyperKitty
--------------------
* General U/I and U/X improvements
* Many more features from the Core's have been plumbed through
* We've adopted Django social auth logins and dropped Persona (since it's no
longer supported upstream). You can now log in via Facebook, Google,
GitHub, and GitLab.
Backward incompatibilities
--------------------------
* Core/REST: Held message resources now have an `original_subject` key that is
not RFC 2047 decoded. `subject` is now RFC 2047 decoded.
* Core/REST: If you've run pre-release versions from git head, and stored
welcome and goodbye templates via REST, the template key names have changed
backward incompatibility.
7 years, 11 months

[MM3-users] About the path forward [was: ... regarding message acceptance]
by Stephen J. Turnbull
I'm not Mark, but .... :-) "Plans", you ask? Hmm....
Pawel Grzywaczewski writes:
> Any plans to implement message acceptance based on another list?
I think that most Mailman 2.1 features are plausible proposals for
Mailman 3. While we don't make decisions based on user voting, we do
care about user requests. If you want to make a formal request, post
a request for enhancement (ie, issue) on our GitLab issue tracker, and
post a link here so other interested people can follow it.
> What about adding list1 as member to list2? In Mailman 2.1 there
> was an 'umbrella' feature I think it doesn't exist in Mailman3.
> Any plans to add it?
Same as above. I don't know Mark's plans, but he's been active on
these lists. I myself hope to have some time for development later in
the summer, but I've been away from the code for quite a while, and
have at least two prior projects I've expressed interest in. I have
no idea about Abhilash or Terri's time, except that they're always
busy, and there are a couple of other developers who might drift back
in at some point if something exciting starts happening.
However, these kinds of additions described above are somewhat more
complicated in Mailman 3 than they were in Mailman 2. We have added
the ability to identify groups of lists as domains (and therefore have
multiple lists by the same name if they are each in a different
domain), and the ability to identify groups of email addresses as
users. This means that there are more opportunities for unfortunate
things to happen.
For example, a user might have a particular address for posting to a
particular list, and be unhappy if they were accidentally "unmasked"
when they posted by a different address, and that post was accepted
because those addresses are both owned by the same user. Whether you
think this one is a "real problem" or not, we need to do more than a
little thinking about such things as we improve Mailman.
We missed the window for GSoC this year. We've had excellent success
in getting students (I don't think we were ever denied a slot we asked
for), so prospects for next year are good. I myself am looking at
mandatory retirement in a couple of years, and am planning to ramp up
development/consulting activity over this period. So I know a year is
a long time, but we are actively supporting existing features, and
intend to continue development for the foreseeable future.
Finally, Brian Carpenter and EMWD are actively developing alternatives
to Postorius and HyperKitty. (Affinity and Empathy, respectively; I
believe Affinity is already in beta, Empathy I don't know about
status). You can find out more about them in the Mailman Developers
<mailman-developers(a)python.org> archives and in the archives of this
list. These are independent friendly projects, not hostile forks.
You may find them to provide more straightforward access to
configurations you want, although they do depend on Mailman core for
much "back office" functionality, and obviously they're less mature
than Postorius and HyperKitty. But they have the advantage of
targeting a much more mature Mailman core, so they'll catch up fast.
EMWD hosts a lot of Mailman lists and hosts, so I for one would
consider a request for features from Affinity developers to be
representative of many list owners.[1]
Footnotes:
[1] Not to deprecate Empathy, but the relationship between core and
any archiver is pretty much "arm's length". Archiver features are
mostly independent of the core.
4 years, 8 months

[MM3-users] Re: Mailman Header Behavior
by Allan Hansen
Seth,
I also had assumed that the list name had to be in the header, but in =
fact it does not.
I munged the =E2=80=98From=E2=80=99 to another list address on the same =
server. This list address
is an auto-response list that informs the original sender (now =
recipient) that he/she
likely did not mean to use that address and suggests sending to the =
intended
address instead.
Yours,
Allan Hansen
hansen(a)rc.org
> On May 15, 2020, at 14:29 , Seth Seeger <seth(a)tofutavern.com> wrote:
>=20
> Is there a way to munge/rewrite the -owner and -bounces emails? =3D
> Otherwise, I had to go through the following to be able to use AWS =
SES:
>=20
> A note for going through AWS SES=3DE2=3D80=3DA6 The messages to =
-owner and =3D
> -bounces just get forwarded through, not re-written/munged. Because =3D=
> they can come from anyone, you cannot send them through AWS. I ended =
up =3D
> using header dependent relays in Postfix:
>=20
> main.cf:
> header_checks =3D3D pcre:/etc/postfix/header_dependent_relay
>=20
> And in /etc/postfix/header_dependent_relay file:
>=20
>> #
>> # Bounce messages are supposed to go to us
>> #
>> /^From:.*-bounces\@lists\.example\.com/ DUNNO
>> /^From:.*-owner\@lists\.example\.com/ DUNNO
>> =3D20
>> #
>> # Send certain domains out through Amazon
>> #
>> /^From:.*\@lists\.example\.com/ FILTER =3D
> smtpamazon:[your-smtp-relay.amazonaws.com]:587
>=20
> And add this block to /etc/postfix/main.cf:
>=20
>> #
>> # Send through Amazon SES
>> #
>> smtpamazon unix - - - - 10 smtp
>> -o smtp_sasl_password_maps=3D3Dhash:/etc/postfix/sasl_passwd
>=20
>=20
>=20
> That will let the emails from -bounces and -owner directly out, but =3D
> redirect any list traffic through SES.
>=20
> Seth
>=20
>=20
>=20
>=20
>> On May 15, 2020, at 12:31 PM, Samir Faci <samir(a)esamir.com> wrote:
>> =3D20
>> I'm trying to use AWS SES as a mail relay for IP Health and other =3D
> tidbits
>> and it seems like it's very particular on what the headers look like.
>> =3D20
>> The FROM field has to be from a verified email meaning the list name =
=3D
> has to
>> be in the from field.
>> =3D20
>> I'm getting something along these lines for the rejection:
>> =3D20
>> May 15 16:28:26 lists postfix/smtp[2938320]: 1EA6C13880A: to=3D3D<
>> csgeek(a)esamir.com>, =3D
> relay=3D3Demail-smtp.us-west-2.amazonaws.com[52.88.99.145]:587,
>> delay=3D3D0.76, delays=3D3D0.01/0.02/0.43/0.31, dsn=3D3D5.0.0, =3D
> status=3D3Dbounced (host
>> email-smtp.us-west-2.amazonaws.com[52.88.99.145] said: 554 Message
>> rejected: Email address is not verified. The following identities =3D
> failed
>> the check in region US-WEST-2: Samir Faci <samir(a)esamir.com> (in =
reply =3D
> to
>> end of DATA command))
>> =3D20
>> If on the other hand I enable the Anonymous list option then =3D
> everything
>> works, but I obviously have no clue who sent the email or how to =3D
> respond to
>> the person (if they're not subscribed)
>> =3D20
>> Is there a way to force mailman to ensure that the list name shows up =
=3D
> in
>> the from field?
>> =3D20
>> =3D20
>> --=3D20
>> Thank you
>> Samir Faci
>> https://keybase.io/csgeek
>> _______________________________________________
>> 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/
>=20
> _______________________________________________
> 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, 11 months

[MM3-users] Re: Apple Mail encoding again
by tlhackque
On 22-Apr-22 02:12, Stephen J. Turnbull wrote:
> tlhackque via Mailman-users writes:
>
> > An up-to-date Thunderbird user - the message with the
> > "mail-with-defect.txt" attachment, as forwarded by [MME-users] (selected
> > headers below for ID) displays as blank. Interestingly, the Thunderbird
> > error console has no error message related to this.
> >
> > So there's really no point in passing it along, unless "pass these
> > defects" turns into "repair these defects".
>
> That's a Thunderbird problem, though, and nonconforming to the Postel
> Principle.
As I subsequently wrote, I agree and logged a bug report for TB.
Apparently the other people who reported experiencing the issue here
never did. However, it's not clear whether it's the same "blank
display" issue - I'm pretty sure mine was due to the broken signature;
others seemed to indicate the CTE headers. So I hope those with the
ability to sort that out will add to the bug report...
The Postel Principle is a useful, sweeping generalization. It's not an
absolute. It doesn't say "be so liberal in what you accept that you do
something sensible with all possible input faults, including those that
you never thought of and any input contrary to a specification". One
could argue that TB was liberal enough not to crash. I don't expect any
MUA to display non-conforming messages as the sender intended. It's
unquestionably a bug that TB failed to display anything, even "I don't
understand this malformed message". If it did that, further conformance
to the Postel Principle would be a matter of degree. It could display
the raw message body, try to intuit and format the most involved
content, fall back to any text/plain part, offer to send a bug report to
vendor of the MUA identified in the headers, or...
However, the point I tried to make with this example is that passing-on
defects isn't a good solution. At best, receivers whose MUA tolerates a
defect (or interprets it in a useful way) benefit. But to others, MM
looks like a flaky source - some people can read some messages some of
the time. And it amplifies the impact of the defect by distributing it
to a large(r) audience. (Similar to the DDOS DNS amplification
attacks.) So if there's an issue identified that causes pain for the MM
community, I think it best to either (a) bounce the message with an
explanation or (b) if possible (and in a Postelish spirit) repair the
defect.
> > Note that MailMan is encapsulating a multipart/signed message in a
> > multipart/mixed in order to append it's footer, and reports that it
> > removed the signature part of the multipart/signed. This makes the
> > signed message format invalid. So at least, MM3 needs to handle signed
> > messages better: either include the signature or remove the signature
> > headers (an unwrapping exercise to convert the message to
> > unsigned)...
>
> For the former, we already try pretty hard to include the signature.
> At least on this list "Pass types" is
>
> multipart
> message/rfc822
> text
> application/pgp-signature
> application/x-pkcs7-signature
> application/pkcs7-signature
>
> although I see Mark just added that last one or two. Of course, "x-"
> tokens are deprecated except for private use, maybe we should be
> unsympathetic to x-pkcs7-signature, too? :-)
The last two were added in response to my analysis. There are a lot of
x-mime types that were subsequently standardized. There's no good
solution for migrating from an experiment to a standard. Your friend the
Postel Principle gets in the way - since it's clear that the semantics
are identical, you should generate the standard, but accept both the
experimental and standard... :-)
Converting to unsigned, while possible, is a bad idea in the vast
majority of cases. More later.
>
>
> > In either case, corrupting messages is a MM issue.
>
> I disagree, in part. Although you do address this, let me use the
> example of this case where the signed body is multipart/alternative.
> I think it's perfectly reasonable for a list to configure to remove
> the text/html part, which will break the signature. Then there are
> three possible ways to go: (1a) leave the signature in place, broken,
> thus informing recipients it was supposed to be signed and leaving it
> to them to follow up, (1b) to change the multipart/signed content-type
> to multipart/mixed and replace the signature with a "removed" notice,
> and (2) to remove the signature and multipart structure, leaving
> recipients unaware that the message was intended to be signed. Each
> of those is problematic, each in its own way. Supporting all of them
> and the list configuration infrastructure to allow admins to choose
> would be an unwarranted burden on us, IMO.
The fourth, and probably correct, possible action is to bounce the
message. Someone signed it for a reason. If its content violates the
list policy, it can't be fixed and stay signed. So tell the sender why
it can't be accepted, and give him the option to remove the banned
part(s) or remove the signature. If someone signs a message,
substituting the judgement of some random remote list manager (human or
automaton) doesn't seem like the right thing to do...
>
> > multipart/signed should imply accepting the signature part (in this
> > case, application/x-pkcs7-signature). If signatures aren't allowed by
> > policy, then multipart/signed should be bounced.
>
> I find it hard to believe that anyone would want a "deny signed
> bodies" policy
So would I. But I sign messages by default, and run into this. And the
argument goes "the signature doesn't add anything. It occupies space
(itself and it can cause e.g. base64 encoding of plain text) and my
users don't care and it's a techie's vanity exercise and it causes
problems (like the ones discussed here), and..."
> , but it's easily implemented. Put multipart/signed in
> "Filter types".
> A configuration explicitly banning signature
> algorithms but not multipart/signed is a user error in that case.
Yes. And (I won't mention the PP here, but...) it's clear that even
experienced administrators (e.g. Mark) fall into this trap. In fact, I
think accept "multipart" (meaning multipart/*) is a default or at least
recommended configuration. So MM should either detect it, or behave
reasonably. I'm suggesting that a reasonable behavior would be:
If an incoming message is signed and the associated signature part is
not explicitly banned, accept the signature part. If signed and the
signature part is banned, or if signed and signed mail is banned: bounce
the message.
> I
> guess I can imagine wanting to ban certain types (eg, known
> exploitable algorithms), and if one has such a use case and wants the
> message rejected rather than simply stripping the signature as
> unusable, "patches welcome" -- I can't see that level of care as worth
> our time, though.
I'm not going as far as selective algorithm enforcement. That would
only make sense if MM got smart enough to validate signatures of signed
mail - e.g. to bounce mail with bad signatures. (Which might be a
worthy goal, but out of scope of this exchange...)
But I stand by "if the sender signed it, then accept it or bounce it."
Messing with it only leads to where there be dragons.
>
> > (I don't think it's reasonable to expect MM admins to "know" to
> > configure their lists to pass signature parts if accepting signed -
> > after all, this list is run by experts :-)
>
> I agree with that. It's not clear that we should do something about
> it, though. There are two possibilities: (1) the list admin doesn't
> care about signatures, and simply wanted to allow multimedia mail, and
> (2) the list admin wants to admit signatures on purpose, for some
> purpose.
>
> In case (1), this is mostly a cosmetic problem, and possibly involves
> minor annoyance. The signature validation will fail and maybe there's
> a text notice about removed parts, that's cosmetic. A subscriber who
> cares about the signature might have to contact the author for
> validation, that's the annoyance. In case (2), we do not know what
> the requirements are. We should refuse to guess and we can assume
> that list admin knows [more about what] she's doing [than we possibly
> can] and leave it up to her.
I'm taking the position that the originator's intent should control.
If (s)he doesn't sign a message, then MM/the admin is free to change the
content per (hopefully published) list policy.
If (s)he did sign a message, the MM must either deliver it with the
signature intact, or bounce it for policy reasons.
>
> If you think that we can know a lot about a very common use case in
> principle, I'd like to hear about it, but for now that's my stance,
>
> Steve
>
3 years

[MM3-users] Re: Installing mailman 3
by Kyle Richardson
Rafael,
Apologies for the delay. I would certainly encourage you to stick with
mailman3 :-). Thanks for providing all of the details of your current
environment. Let me try and answer each of your questions as best I can.
You can check if mailman2 is already installed via rpms with the following
command:
# rpm -qa | grep -i mailman
Based on your `find` results, it looks as though you have multiple
locations where you have cloned or copied mailman3. At this point, it might
be easiest to start fresh. You mentioned you're using a CentOS 7 VM. Is it
possible to start from a clean build or snapshot?
Once you have a clean build, you should be able to follow Simon's
instructions to get a working mailman3 instance (steps reproduced below for
clarity).
# useradd -r -m -d /var/lib/mailman mailman
# su - mailman
$ python3 -m venv env
$ source env/bin/activate
$ pip install mailman
$ mailman info
From there you can adjust the layout in your mailman.cfg file at
/var/lib/mailman/var/etc/ (snippet below).
[mailman]
layout: dev
If you can't start from a clean CentOS 7 VM, then you should be able to
just wipe out your existing /var/lib/mailman directory and still use
Simon's instructions.
# rm -rf /var/lib/mailman
Hopefully this will help you get up and going.
-Kyle
On Thu, Jul 13, 2017 at 10:16 AM, Rafael Mora <rafael.mora.guti(a)gmail.com>
wrote:
> Hello Kyle,
>
> What steps do you suggest in order to install mailman v2 via rpm's??
>
> Thank you.
>
> El mar., 11 jul. 2017 a las 15:13, Kyle Richardson (<
> kylerichardson2(a)gmail.com>) escribió:
>
>> Looks like you are using the fhs (filesystem hierarchy standard) layout;
>> is that what you intend? I would suggest changing the layout to "dev" for
>> testing purposes. This will use your mailman.cfg/../.. as the var directory.
>>
>> Is it possible you also have mailman v2 installed via rpms?
>>
>> -Kyle
>>
>> On Tue, Jul 11, 2017 at 3:41 PM, Rafael Mora <rafael.mora.guti(a)gmail.com>
>> wrote:
>>
>>> Hello,
>>>
>>> Here it's mailman info:
>>> [root@localhost bin]# ./mailman info
>>> GNU Mailman 3.2.0a1 (La Villa Strangiato)
>>> Python 3.6.0 (default, Jul 7 2017, 11:59:56)
>>> [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
>>> config file: /etc/mailman.cfg
>>> db url: sqlite:////var/lib/mailman/data/mailman.db
>>> devmode: DISABLED
>>> REST root url: http://localhost:8001/3.1/
>>> REST credentials: restadmin:restpass
>>>
>>>
>>> Here it's mailman conf:
>>> [root@localhost bin]# ./mailman conf
>>> [antispam] header_checks:
>>> [antispam] jump_chain: hold
>>> [archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
>>> [archiver.mail_archive] clobber_date: maybe
>>> [archiver.mail_archive] clobber_skew: 1d
>>> [archiver.mail_archive] configuration: python:mailman.config.mail_
>>> archive
>>> [archiver.mail_archive] enable: no
>>> [archiver.master] class:
>>> [archiver.master] clobber_date: maybe
>>> [archiver.master] clobber_skew: 1d
>>> [archiver.master] configuration: changeme
>>> [archiver.master] enable: no
>>> [archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
>>> [archiver.mhonarc] clobber_date: maybe
>>> [archiver.mhonarc] clobber_skew: 1d
>>> [archiver.mhonarc] configuration: python:mailman.config.mhonarc
>>> [archiver.mhonarc] enable: no
>>> [archiver.prototype] class: mailman.archiving.prototype.Prototype
>>> [archiver.prototype] clobber_date: maybe
>>> [archiver.prototype] clobber_skew: 1d
>>> [archiver.prototype] configuration: changeme
>>> [archiver.prototype] enable: no
>>> [bounces] register_bounces_every: 15m
>>> [database] class: mailman.database.sqlite.SQLiteDatabase
>>> [database] debug: no
>>> [database] url: sqlite:///$DATA_DIR/mailman.db
>>> [devmode] enabled: no
>>> [devmode] recipient:
>>> [devmode] testing: no
>>> [devmode] wait: 60s
>>> [digests] mime_digest_keep_headers:
>>> Date From To Cc Subject Message-ID Keywords
>>> In-Reply-To References Content-Type MIME-Version
>>> Content-Transfer-Encoding Precedence Reply-To
>>> Message List-Post
>>> [digests] plain_digest_keep_headers:
>>> Message Date From
>>> Subject To Cc
>>> Message-ID Keywords
>>> Content-Type
>>> [dmarc] cache_lifetime: 7d
>>> [dmarc] org_domain_data_url:
>>> https://publicsuffix.org/list/public_suffix_list.dat
>>> [dmarc] resolver_lifetime: 5s
>>> [dmarc] resolver_timeout: 3s
>>> [language.ar] charset: utf-8
>>> [language.ar] description: Arabic
>>> [language.ar] enabled: yes
>>> [language.ast] charset: iso-8859-1
>>> [language.ast] description: Asturian
>>> [language.ast] enabled: yes
>>> [language.ca] charset: utf-8
>>> [language.ca] description: Catalan
>>> [language.ca] enabled: yes
>>> [language.cs] charset: iso-8859-2
>>> [language.cs] description: Czech
>>> [language.cs] enabled: yes
>>> [language.da] charset: iso-8859-1
>>> [language.da] description: Danish
>>> [language.da] enabled: yes
>>> [language.de] charset: iso-8859-1
>>> [language.de] description: German
>>> [language.de] enabled: yes
>>> [language.el] charset: iso-8859-7
>>> [language.el] description: Greek
>>> [language.el] enabled: yes
>>> [language.es] charset: iso-8859-1
>>> [language.es] description: Spanish
>>> [language.es] enabled: yes
>>> [language.et] charset: iso-8859-15
>>> [language.et] description: Estonian
>>> [language.et] enabled: yes
>>> [language.eu] charset: iso-8859-15
>>> [language.eu] description: Euskara
>>> [language.eu] enabled: yes
>>> [language.fi] charset: iso-8859-1
>>> [language.fi] description: Finnish
>>> [language.fi] enabled: yes
>>> [language.fr] charset: iso-8859-1
>>> [language.fr] description: French
>>> [language.fr] enabled: yes
>>> [language.gl] charset: utf-8
>>> [language.gl] description: Galician
>>> [language.gl] enabled: yes
>>> [language.he] charset: utf-8
>>> [language.he] description: Hebrew
>>> [language.he] enabled: yes
>>> [language.hr] charset: iso-8859-2
>>> [language.hr] description: Croatian
>>> [language.hr] enabled: yes
>>> [language.hu] charset: iso-8859-2
>>> [language.hu] description: Hungarian
>>> [language.hu] enabled: yes
>>> [language.ia] charset: iso-8859-15
>>> [language.ia] description: Interlingua
>>> [language.ia] enabled: yes
>>> [language.it] charset: iso-8859-1
>>> [language.it] description: Italian
>>> [language.it] enabled: yes
>>> [language.ja] charset: euc-jp
>>> [language.ja] description: Japanese
>>> [language.ja] enabled: yes
>>> [language.ko] charset: euc-kr
>>> [language.ko] description: Korean
>>> [language.ko] enabled: yes
>>> [language.lt] charset: iso-8859-13
>>> [language.lt] description: Lithuanian
>>> [language.lt] enabled: yes
>>> [language.nl] charset: iso-8859-1
>>> [language.nl] description: Dutch
>>> [language.nl] enabled: yes
>>> [language.no] charset: iso-8859-1
>>> [language.no] description: Norwegian
>>> [language.no] enabled: yes
>>> [language.pl] charset: iso-8859-2
>>> [language.pl] description: Polish
>>> [language.pl] enabled: yes
>>> [language.pt] charset: iso-8859-1
>>> [language.pt] description: Protuguese
>>> [language.pt] enabled: yes
>>> [language.pt_BR] charset: iso-8859-1
>>> [language.pt_BR] description: Protuguese (Brazil)
>>> [language.pt_BR] enabled: yes
>>> [language.ro] charset: iso-8859-2
>>> [language.ro] description: Romanian
>>> [language.ro] enabled: yes
>>> [language.ru] charset: koi8-r
>>> [language.ru] description: Russian
>>> [language.ru] enabled: yes
>>> [language.sk] charset: utf-8
>>> [language.sk] description: Slovak
>>> [language.sk] enabled: yes
>>> [language.sl] charset: iso-8859-2
>>> [language.sl] description: Slovenian
>>> [language.sl] enabled: yes
>>> [language.sr] charset: utf-8
>>> [language.sr] description: Serbian
>>> [language.sr] enabled: yes
>>> [language.sv] charset: iso-8859-1
>>> [language.sv] description: Swedish
>>> [language.sv] enabled: yes
>>> [language.tr] charset: iso-8859-9
>>> [language.tr] description: Turkish
>>> [language.tr] enabled: yes
>>> [language.uk] charset: utf-8
>>> [language.uk] description: Ukrainian
>>> [language.uk] enabled: yes
>>> [language.vi] charset: utf-8
>>> [language.vi] description: Vietnamese
>>> [language.vi] enabled: yes
>>> [language.zh_CN] charset: utf-8
>>> [language.zh_CN] description: Chinese
>>> [language.zh_CN] enabled: yes
>>> [language.zh_TW] charset: utf-8
>>> [language.zh_TW] description: Chinese (Taiwan)
>>> [language.zh_TW] enabled: yes
>>> [logging.archiver] datefmt: %b %d %H:%M:%S %Y
>>> [logging.archiver] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.archiver] level: info
>>> [logging.archiver] path: mailman.log
>>> [logging.archiver] propagate: no
>>> [logging.bounce] datefmt: %b %d %H:%M:%S %Y
>>> [logging.bounce] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.bounce] level: info
>>> [logging.bounce] path: bounce.log
>>> [logging.bounce] propagate: no
>>> [logging.config] datefmt: %b %d %H:%M:%S %Y
>>> [logging.config] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.config] level: info
>>> [logging.config] path: mailman.log
>>> [logging.config] propagate: no
>>> [logging.database] datefmt: %b %d %H:%M:%S %Y
>>> [logging.database] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.database] level: warn
>>> [logging.database] path: mailman.log
>>> [logging.database] propagate: no
>>> [logging.debug] datefmt: %b %d %H:%M:%S %Y
>>> [logging.debug] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.debug] level: info
>>> [logging.debug] path: debug.log
>>> [logging.debug] propagate: no
>>> [logging.error] datefmt: %b %d %H:%M:%S %Y
>>> [logging.error] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.error] level: info
>>> [logging.error] path: mailman.log
>>> [logging.error] propagate: no
>>> [logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
>>> [logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.fromusenet] level: info
>>> [logging.fromusenet] path: mailman.log
>>> [logging.fromusenet] propagate: no
>>> [logging.http] datefmt: %b %d %H:%M:%S %Y
>>> [logging.http] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.http] level: info
>>> [logging.http] path: mailman.log
>>> [logging.http] propagate: no
>>> [logging.locks] datefmt: %b %d %H:%M:%S %Y
>>> [logging.locks] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.locks] level: info
>>> [logging.locks] path: mailman.log
>>> [logging.locks] propagate: no
>>> [logging.mischief] datefmt: %b %d %H:%M:%S %Y
>>> [logging.mischief] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.mischief] level: info
>>> [logging.mischief] path: mailman.log
>>> [logging.mischief] propagate: no
>>> [logging.root] datefmt: %b %d %H:%M:%S %Y
>>> [logging.root] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.root] level: info
>>> [logging.root] path: mailman.log
>>> [logging.root] propagate: no
>>> [logging.runner] datefmt: %b %d %H:%M:%S %Y
>>> [logging.runner] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.runner] level: info
>>> [logging.runner] path: mailman.log
>>> [logging.runner] propagate: no
>>> [logging.smtp] datefmt: %b %d %H:%M:%S %Y
>>> [logging.smtp] every: $msgid smtp to $listname for $recip recips,
>>> completed
>>> in $time seconds
>>> [logging.smtp] failure: $msgid delivery to $recip failed with code
>>> $smtpcode, $smtpmsg
>>> [logging.smtp] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.smtp] level: info
>>> [logging.smtp] path: smtp.log
>>> [logging.smtp] propagate: no
>>> [logging.smtp] refused: $msgid post to $listname from $sender, $size
>>> bytes,
>>> $refused failures
>>> [logging.smtp] success: $msgid post to $listname from $sender, $size
>>> bytes
>>> [logging.subscribe] datefmt: %b %d %H:%M:%S %Y
>>> [logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.subscribe] level: info
>>> [logging.subscribe] path: mailman.log
>>> [logging.subscribe] propagate: no
>>> [logging.vette] datefmt: %b %d %H:%M:%S %Y
>>> [logging.vette] format: %(asctime)s (%(process)d) %(message)s
>>> [logging.vette] level: info
>>> [logging.vette] path: mailman.log
>>> [logging.vette] propagate: no
>>> [mailman] cache_life: 7d
>>> [mailman] default_language: en
>>> [mailman] email_commands_max_lines: 10
>>> [mailman] filtered_messages_are_preservable: no
>>> [mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
>>> [mailman] layout: fhs
>>> [mailman] listname_chars: [-_.0-9a-z]
>>> [mailman] noreply_address: noreply
>>> [mailman] pending_request_life: 3d
>>> [mailman] post_hook:
>>> [mailman] pre_hook:
>>> [mailman] sender_headers: from from_ reply-to sender
>>> [mailman] site_owner: changeme(a)example.com
>>> [mta] configuration: python:mailman.config.postfix
>>> [mta] delivery_retry_period: 5d
>>> [mta] incoming: mailman.mta.postfix.LMTP
>>> [mta] lmtp_host: 127.0.0.1 # IP where Mailman should listen
>>> for
>>> emails from MTA
>>> [mta] lmtp_port: 8024
>>> [mta] max_autoresponses_per_day: 10
>>> [mta] max_delivery_threads: 0
>>> [mta] max_recipients: 500
>>> [mta] max_sessions_per_connection: 0
>>> [mta] outgoing: mailman.mta.deliver.deliver
>>> [mta] remove_dkim_headers: no
>>> [mta] smtp_host: 127.0.0.1 # IP Where MTA is listening for
>>> emails
>>> [mta] smtp_pass:
>>> [mta] smtp_port: 25
>>> [mta] smtp_user:
>>> [mta] verp_confirm_format: $address+$cookie
>>> [mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<
>>> cookie>[^@]+)@.*$
>>> [mta] verp_confirmations: no
>>> [mta] verp_delimiter: +
>>> [mta] verp_delivery_interval: 0
>>> [mta] verp_format: ${bounces}+${local}=${domain}
>>> [mta] verp_personalized_deliveries: no
>>> [mta] verp_probe_format: $bounces+$token@$domain
>>> [mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
>>> [mta] verp_probes: no
>>> [mta] verp_regexp:
>>> ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
>>> [nntp] host:
>>> [nntp] password:
>>> [nntp] port:
>>> [nntp] remove_headers:
>>> nntp-posting-host nntp-posting-date x-trace
>>> x-complaints-to xref date-received posted
>>> posting-version relay-version received
>>> [nntp] rewrite_duplicate_headers:
>>> To X-Original-To
>>> CC X-Original-CC
>>> Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
>>> MIME-Version X-MIME-Version
>>> [nntp] user:
>>> [passwords] configuration: python:mailman.config.passlib
>>> [passwords] password_length: 8
>>> [shell] banner: Welcome to the GNU Mailman shell
>>> [shell] history_file:
>>> [shell] prompt: >>>
>>> [shell] use_ipython: no
>>> [styles] default: legacy-default
>>> [styles] paths:
>>> mailman.styles
>>> [webservice] admin_pass: restpass
>>> [webservice] admin_user: restadmin
>>> [webservice] api_version: 3.1
>>> [webservice] hostname: localhost
>>> [webservice] port: 8001
>>> [webservice] show_tracebacks: yes
>>> [webservice] use_https: no
>>>
>>>
>>> What do you suggest? Thank you
>>>
>>> El mar., 11 jul. 2017 a las 14:31, Simon Hanna (<
>>> simon.hanna(a)serve-me.info>)
>>> escribió:
>>>
>>> > Below is how I would recommend to run Mailman for production using a
>>> > virtualenv
>>> >
>>> > # useradd -r -m -d /var/lib/mailman mailman
>>> >
>>> > # su - mailman
>>> >
>>> >
>>> > $ python3 -m venv env
>>> > $ source env/bin/activate
>>> > $ pip install mailman
>>> > $ mailman info
>>> >
>>> > Now you should have a working configuration in /var/lib/mailman/var/
>>> >
>>> > to run mailman you don't need to activate the virtualenv, just use the
>>> > executable /var/lib/mailman/env/bin/mailman
>>> >
>>> > cheers,
>>> > Simon
>>> > _______________________________________________
>>> > Mailman-users mailing list
>>> > mailman-users(a)mailman3.org
>>> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>> >
>>> --
>>>
>>> Atentamente / Best Regards
>>>
>>> Ing. Rafael Mora
>>> _______________________________________________
>>> Mailman-users mailing list
>>> mailman-users(a)mailman3.org
>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>
>>
>> --
>
> Atentamente / Best Regards
>
> Ing. Rafael Mora
>
7 years, 9 months

[MM3-users] FW: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/
by Christian Stalberg
What is causing this error please?
-----Original Message-----
From: noreply(a)lists.ccalternatives.org <noreply(a)lists.ccalternatives.org>
Sent: Sunday, December 5, 2021 10:46 PM
To:
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/
Internal Server Error: /archives/
Report at /archives/
Internal Server Error: /archives/
Request Method: GET
Request URL: https://lists.ccalternatives.org/archives/?sort=active%22'!
Django Version: 3.0.11
Python Executable: /opt/mailman/mm/venv/bin/python Python Version: 3.7.3 Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/opt/mailman/mm/venv/lib/python3.7/site-packages']
Server time: Sun, 5 Dec 2021 22:46:20 -0800 Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Request information:
USER: AnonymousUser
GET:
sort = 'active"\'!'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
HTTP_ACCEPT_ENCODING = 'identity'
HTTP_CONNECTION = 'close'
HTTP_HOST = '127.0.0.1:8000'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0'
HTTP_X_FORWARDED_FOR = '185.220.101.143'
HTTP_X_FORWARDED_HOST = 'lists.ccalternatives.org'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'lists.ccalternatives.org'
PATH_INFO = '/archives/'
QUERY_STRING = "sort=active%22'!"
RAW_URI = "/archives/?sort=active%22'!"
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '36502'
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/20.0.4'
gunicorn.socket = <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 36502)> wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f0365963780> wsgi.file_wrapper = ''
wsgi.input = <gunicorn.http.body.Body object at 0x7f0365963e80> wsgi.input_terminated = True wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Admin', 'csa(a)web-analysts.net'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'lists.ccalternatives.org', '192.46.218.224', 'zarathustra.ccalternatives.org', '192.168.0.1'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/mailman/mm'
BROWSERID_AUDIENCES = ['http://localhost', 'http://localhost:8000', 'http://127.0.0.1:8000', 'http://lists.ccalternatives.org', 'https://localhost', 'https://localhost:8000', 'https://127.0.0.1:8000', 'https://lists.ccalternatives.org']
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211'}} CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'js': ['compressor.filters.jsmin.JSMinFilter'], 'css': ['compressor.filters.css_default.CssAbsoluteFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f036b678bf8> COMPRESS_MINT_DELAY = 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sass -t compressed {infile} {outfile}'), ('text/x-sass', 'sass -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/mm/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply(a)lists.ccalternatives.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_CONFIRMATION_FROM = 'postmaster(a)lists.ccalternatives.org'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/opt/mailman/mm/fulltext_index'}}
HYPERKITTY_DISABLE_SINGLETON_TASKS = True IGNORABLE_404_URLS = [] INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur'] LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/mm/logs/mailmansuite.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}} LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '::ffff:127.0.0.1', '192.46.218.224')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.ccalternatives.org'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default'} ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'noreply(a)lists.ccalternatives.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 3
SOCIALACCOUNT_PROVIDERS = {'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'gitlab': {'SCOPE': ['read_user']}} STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/mm/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_SSL = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
3 years, 4 months

[MM3-users] Re: Enable delivery
by Hirayama, Pat
Apologies, I should've said my "Mailman 3" server, not listserv.
MTA logs do not show messages being sent to the member(s) in question, even though other members are being sent messages. Nothing out of the mailman server, and nothing received by our outbound Postfix MTAs.
As for the CLI commands, I keep getting Attribute Error when I try them, like:
/opt/mailman # mailman shell -l listname(a)mailman.tld
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
The variable 'm' is the listname(a)mailman.tld mailing list
>>> from mailman.core.constants import system_preferences
>>> mbr = m.members.get_member('user(a)domain.com.')
>>> print(mbr.delivery_status)
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'delivery_status'
>>>
Thanks,
-p
Pat Hirayama
Pronouns: he/him/his
Systems Engineer
IT | Systems Engineering
Fred Hutchinson Cancer Center
O 206.667.4856
phirayam(a)fredhutch.org
________________________________
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Monday, December 9, 2024 18:38
To: mailman-users(a)mailman3.org <mailman-users(a)mailman3.org>
Subject: [MM3-users] Re: Enable delivery
CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.
On 12/9/24 17:35, Hirayama, Pat wrote:
> Greetings,
>
> I'm finding something a bit odd with our listserv.
Please see https://urldefense.com/v3/__https://wiki.list.org/DOC/Mailman*20is*20not*20…
> Some of the members of some of the lists are reporting that they aren't receiving messages sent to the list. When I review the member options for the person in question, I see that Delivery Status shows nothing selected (i.e. neither radio button is selected for Enabled or Disabled).
If you look in the MTA logs is mail being sent to them.
As far as the Delivery Status showing nothing, that means the member's
delivery_status is None. The ultimate delivery status is determined by
checking first the member's delivery_status, then the address's
delivery_status, then the user's delivery_status and finally Mailman's
global preferences. The first non-None value is what's used. See
https://urldefense.com/v3/__https://gitlab.com/mailman/mailman/-/blob/maste…
Also see the various tabs at
https://urldefense.com/v3/__https://www.example.com/mailman3/accounts/subsc…
> If I select Enabled and Save, then delivery starts working for that user.
This should only happen if the users address or user based preference or
the global preference is Disabled.
> There are other members of the list that have neither Enabled or Disabled selected, but they are working. Which also seems to mean that when I run:
>
> mailman members --nomail any listname@listserv
>
> Nothing is returned.
Because all members ultimately have delivery enabled.
> If anyone has any ideas about why this might be the case, or how I might proactively identify other members who aren't receiving mail, that would be appreciated. Alternately, any thoughts on how I might force all members to Delivery Status Enabled, that would also be great.
It shouldn't be necessary to do that. For one of these members, e.g.
user(a)example.com, that isn't getting mail, do this in mailman shell
```
mailman shell -l list(a)example.com
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
The variable 'm' is the list(a)example.com mailing list
>>> from mailman.core.constants import system_preferences
>>> mbr = m.members.get_member('user(a)example.com')
>>> print(mbr.delivery_status)
(this will print the ultimate delivery_status, for the components do)
>>> print(mbr.preferences.delivery_status)
(output)
>>> print(mbr.address.preferences.delivery_status)
(output)
>>> print(mbr.address.user.preferences.delivery_status)
(output)
>>> print(system_preferences.delivery_status)
(output)
>>>
```
The first of the (output) lines which is not None should be the same as
the output from print(mbr.delivery_status).
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailman-users(a)mailman3.org
To unsubscribe send an email to mailman-users-leave(a)mailman3.org
https://urldefense.com/v3/__https://lists.mailman3.org/mailman3/lists/mailm…
Archived at: https://urldefense.com/v3/__https://lists.mailman3.org/archives/list/mailma…
This message sent to phirayam(a)fredhutch.org
4 months, 2 weeks

[MM3-users] Re: Post installation issues (recipients refused) with Exim4 in a virtual host environment
by Kyriakos Terzopoulos
Please also find below the mailman conf command:
(venv) mailman@hestia:~/venv/bin$ ./mailman conf
[ARC] authserv_id:
[ARC] dkim: yes
[ARC] dmarc: yes
[ARC] domain:
[ARC] enabled: no
[ARC] privkey:
[ARC] selector:
[ARC] sig_headers: From, Sender, Reply-To, Subject, Date, Message-ID, To,
Cc, MIME-Version, Content-Type, Content-Transfer-Encoding, Content-ID,
Content-Description, Resent-Date, Resent-From, Resent-Sender, Resent-To,
Resent-Cc, Resent-Message-ID, In-Reply-To, References, List-Id, List-Help,
List-Unsubscribe, List-Subscribe, List-Post, List-Owner, List-Archive
[ARC] trusted_authserv_ids:
[antispam] header_checks:
[antispam] jump_chain: hold
[archiver.hyperkitty] class: mailman_hyperkitty.Archiver
[archiver.hyperkitty] clobber_date: maybe
[archiver.hyperkitty] clobber_skew: 1d
[archiver.hyperkitty] configuration: /etc/mailman3/mailman-hyperkitty.cfg
[archiver.hyperkitty] enable: yes
[archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
[archiver.mail_archive] clobber_date: maybe
[archiver.mail_archive] clobber_skew: 1d
[archiver.mail_archive] configuration: python:mailman.config.mail_archive
[archiver.mail_archive] enable: no
[archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
[archiver.mhonarc] clobber_date: maybe
[archiver.mhonarc] clobber_skew: 1d
[archiver.mhonarc] configuration: python:mailman.config.mhonarc
[archiver.mhonarc] enable: no
[archiver.prototype] class: mailman.archiving.prototype.Prototype
[archiver.prototype] clobber_date: maybe
[archiver.prototype] clobber_skew: 1d
[archiver.prototype] configuration: changeme
[archiver.prototype] enable: yes
[bounces] register_bounces_every: 15m
[database] class: mailman.database.postgresql.PostgreSQLDatabase
[database] debug: no
[database] url: postgresql://mailman:XXXXXXXXXX@localhost/mailman
[devmode] enabled: no
[devmode] recipient:
[devmode] testing: no
[devmode] wait: 60s
[digests] mime_digest_keep_headers:
Date From To Cc Subject Message-ID Keywords
In-Reply-To References Content-Type MIME-Version
Content-Transfer-Encoding Precedence Reply-To
Message List-Post
[digests] plain_digest_keep_headers:
Message Date From
Subject To Cc
Message-ID Keywords
Content-Type
[dmarc] cache_lifetime: 7d
[dmarc] org_domain_data_url:
https://publicsuffix.org/list/public_suffix_list.dat
[dmarc] resolver_lifetime: 5s
[dmarc] resolver_timeout: 3s
[language.ar] charset: utf-8
[language.ar] description: Arabic
[language.ar] enabled: yes
[language.ast] charset: utf-8
[language.ast] description: Asturian
[language.ast] enabled: yes
[language.bg] charset: utf-8
[language.bg] description: Bulgarian
[language.bg] enabled: yes
[language.ca] charset: utf-8
[language.ca] description: Catalan
[language.ca] enabled: yes
[language.cs] charset: utf-8
[language.cs] description: Czech
[language.cs] enabled: yes
[language.da] charset: utf-8
[language.da] description: Danish
[language.da] enabled: yes
[language.de] charset: utf-8
[language.de] description: German
[language.de] enabled: yes
[language.el] charset: utf-8
[language.el] description: Greek
[language.el] enabled: yes
[language.en] charset: us-ascii
[language.en] description: English (USA)
[language.en] enabled: yes
[language.es] charset: utf-8
[language.es] description: Spanish
[language.es] enabled: yes
[language.et] charset: utf-8
[language.et] description: Estonian
[language.et] enabled: yes
[language.eu] charset: utf-8
[language.eu] description: Euskara
[language.eu] enabled: yes
[language.fi] charset: utf-8
[language.fi] description: Finnish
[language.fi] enabled: yes
[language.fr] charset: utf-8
[language.fr] description: French
[language.fr] enabled: yes
[language.gl] charset: utf-8
[language.gl] description: Galician
[language.gl] enabled: yes
[language.he] charset: utf-8
[language.he] description: Hebrew
[language.he] enabled: yes
[language.hr] charset: utf-8
[language.hr] description: Croatian
[language.hr] enabled: yes
[language.hu] charset: utf-8
[language.hu] description: Hungarian
[language.hu] enabled: yes
[language.ia] charset: utf-8
[language.ia] description: Interlingua
[language.ia] enabled: yes
[language.it] charset: utf-8
[language.it] description: Italian
[language.it] enabled: yes
[language.ja] charset: utf-8
[language.ja] description: Japanese
[language.ja] enabled: yes
[language.ko] charset: utf-8
[language.ko] description: Korean
[language.ko] enabled: yes
[language.lt] charset: utf-8
[language.lt] description: Lithuanian
[language.lt] enabled: yes
[language.nl] charset: utf-8
[language.nl] description: Dutch
[language.nl] enabled: yes
[language.no] charset: utf-8
[language.no] description: Norwegian
[language.no] enabled: yes
[language.pl] charset: utf-8
[language.pl] description: Polish
[language.pl] enabled: yes
[language.pt] charset: utf-8
[language.pt] description: Portuguese
[language.pt] enabled: yes
[language.pt_BR] charset: utf-8
[language.pt_BR] description: Portuguese (Brazil)
[language.pt_BR] enabled: yes
[language.ro] charset: utf-8
[language.ro] description: Romanian
[language.ro] enabled: yes
[language.ru] charset: utf-8
[language.ru] description: Russian
[language.ru] enabled: yes
[language.sk] charset: utf-8
[language.sk] description: Slovak
[language.sk] enabled: yes
[language.sl] charset: utf-8
[language.sl] description: Slovenian
[language.sl] enabled: yes
[language.sr] charset: utf-8
[language.sr] description: Serbian
[language.sr] enabled: yes
[language.sv] charset: utf-8
[language.sv] description: Swedish
[language.sv] enabled: yes
[language.tr] charset: utf-8
[language.tr] description: Turkish
[language.tr] enabled: yes
[language.uk] charset: utf-8
[language.uk] description: Ukrainian
[language.uk] enabled: yes
[language.vi] charset: utf-8
[language.vi] description: Vietnamese
[language.vi] enabled: yes
[language.zh_CN] charset: utf-8
[language.zh_CN] description: Chinese
[language.zh_CN] enabled: yes
[language.zh_TW] charset: utf-8
[language.zh_TW] description: Chinese (Taiwan)
[language.zh_TW] enabled: yes
[logging.archiver] datefmt: %b %d %H:%M:%S %Y
[logging.archiver] format: %(asctime)s (%(process)d) %(message)s
[logging.archiver] level: info
[logging.archiver] path: mailman.log
[logging.archiver] propagate: no
[logging.bounce] datefmt: %b %d %H:%M:%S %Y
[logging.bounce] format: %(asctime)s (%(process)d) %(message)s
[logging.bounce] level: info
[logging.bounce] path: bounce.log
[logging.bounce] propagate: no
[logging.config] datefmt: %b %d %H:%M:%S %Y
[logging.config] format: %(asctime)s (%(process)d) %(message)s
[logging.config] level: info
[logging.config] path: mailman.log
[logging.config] propagate: no
[logging.database] datefmt: %b %d %H:%M:%S %Y
[logging.database] format: %(asctime)s (%(process)d) %(message)s
[logging.database] level: warn
[logging.database] path: mailman.log
[logging.database] propagate: no
[logging.debug] datefmt: %b %d %H:%M:%S %Y
[logging.debug] format: %(asctime)s (%(process)d) %(message)s
[logging.debug] level: info
[logging.debug] path: debug.log
[logging.debug] propagate: no
[logging.error] datefmt: %b %d %H:%M:%S %Y
[logging.error] format: %(asctime)s (%(process)d) %(message)s
[logging.error] level: info
[logging.error] path: mailman.log
[logging.error] propagate: no
[logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
[logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
[logging.fromusenet] level: info
[logging.fromusenet] path: mailman.log
[logging.fromusenet] propagate: no
[logging.http] datefmt: %b %d %H:%M:%S %Y
[logging.http] format: %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
[logging.http] level: info
[logging.http] path: mailman.log
[logging.http] propagate: no
[logging.locks] datefmt: %b %d %H:%M:%S %Y
[logging.locks] format: %(asctime)s (%(process)d) %(message)s
[logging.locks] level: info
[logging.locks] path: mailman.log
[logging.locks] propagate: no
[logging.mischief] datefmt: %b %d %H:%M:%S %Y
[logging.mischief] format: %(asctime)s (%(process)d) %(message)s
[logging.mischief] level: info
[logging.mischief] path: mailman.log
[logging.mischief] propagate: no
[logging.plugins] datefmt: %b %d %H:%M:%S %Y
[logging.plugins] format: %(asctime)s (%(process)d) %(message)s
[logging.plugins] level: info
[logging.plugins] path: plugins.log
[logging.plugins] propagate: no
[logging.root] datefmt: %b %d %H:%M:%S %Y
[logging.root] format: %(asctime)s (%(process)d) %(message)s
[logging.root] level: info
[logging.root] path: mailman.log
[logging.root] propagate: no
[logging.runner] datefmt: %b %d %H:%M:%S %Y
[logging.runner] format: %(asctime)s (%(process)d) %(message)s
[logging.runner] level: info
[logging.runner] path: mailman.log
[logging.runner] propagate: no
[logging.smtp] datefmt: %b %d %H:%M:%S %Y
[logging.smtp] every: $msgid smtp to $listname for $recip recips, completed
in $time seconds
[logging.smtp] failure: $msgid delivery to $recip failed with code
$smtpcode, $smtpmsg
[logging.smtp] format: %(asctime)s (%(process)d) %(message)s
[logging.smtp] level: info
[logging.smtp] path: smtp.log
[logging.smtp] propagate: no
[logging.smtp] refused: $msgid post to $listname from $sender, $size bytes,
$refused failures
[logging.smtp] success: $msgid post to $listname from $sender, $size bytes
[logging.subscribe] datefmt: %b %d %H:%M:%S %Y
[logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
[logging.subscribe] level: info
[logging.subscribe] path: mailman.log
[logging.subscribe] propagate: no
[logging.task] datefmt: %b %d %H:%M:%S %Y
[logging.task] format: %(asctime)s (%(process)d) %(message)s
[logging.task] level: info
[logging.task] path: mailman.log
[logging.task] propagate: no
[logging.vette] datefmt: %b %d %H:%M:%S %Y
[logging.vette] format: %(asctime)s (%(process)d) %(message)s
[logging.vette] level: info
[logging.vette] path: mailman.log
[logging.vette] propagate: no
[mailman] anonymous_list_keep_headers: ^x-mailman- ^x-content-filtered-by:
^x-topics:
^x-ack: ^x-beenthere: ^x-list-administrivia: ^x-spam-
[mailman] cache_life: 7d
[mailman] check_max_size_on_filtered_message: no
[mailman] default_language: en
[mailman] email_commands_max_lines: 10
[mailman] filter_report: no
[mailman] filtered_messages_are_preservable: no
[mailman] hold_digest: no
[mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
[mailman] layout: local
[mailman] listname_chars: [-_.0-9a-z]
[mailman] masthead_threshold: 4
[mailman] moderator_request_life: 180d
[mailman] noreply_address: noreply
[mailman] pending_request_life: 3d
[mailman] post_hook:
[mailman] pre_hook:
[mailman] run_tasks_every: 1h
[mailman] sender_headers: from from_ reply-to sender
[mailman] site_owner: kterzopoulos(a)XXXXXX.com
[mta] configuration: python:mailman.config.exim4
[mta] delivery_retry_period: 5d
[mta] incoming: mailman.mta.exim4.LMTP
[mta] lmtp_host: localhost
[mta] lmtp_port: 8024
[mta] max_autoresponses_per_day: 10
[mta] max_delivery_threads: 0
[mta] max_recipients: 500
[mta] max_sessions_per_connection: 0
[mta] outgoing: mailman.mta.deliver.deliver
[mta] remove_dkim_headers: no
[mta] smtp_host: mail.myproject.eu
[mta] smtp_pass:
[mta] smtp_port: 25
[mta] smtp_secure_mode: smtp
[mta] smtp_user:
[mta] smtp_verify_cert: yes
[mta] smtp_verify_hostname: yes
[mta] verp_confirm_format: $address+$cookie
[mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
[mta] verp_confirmations: yes
[mta] verp_delimiter: +
[mta] verp_delivery_interval: 1
[mta] verp_format: ${bounces}+${local}=${domain}
[mta] verp_personalized_deliveries: yes
[mta] verp_probe_format: $bounces+$token@$domain
[mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
[mta] verp_probes: no
[mta] verp_regexp:
^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
[nntp] gatenews_every: 5m
[nntp] host:
[nntp] password:
[nntp] port:
[nntp] remove_headers:
nntp-posting-host nntp-posting-date x-trace
x-complaints-to xref date-received posted
posting-version relay-version received
[nntp] rewrite_duplicate_headers:
To X-Original-To
CC X-Original-CC
Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
MIME-Version X-MIME-Version
[nntp] user:
[passwords] configuration: python:mailman.config.passlib
[passwords] password_length: 8
[paths.dev] archive_dir: $var_dir/archives
[paths.dev] bin_dir: $argv
[paths.dev] cache_dir: $var_dir/cache
[paths.dev] data_dir: $var_dir/data
[paths.dev] etc_dir: $var_dir/etc
[paths.dev] ext_dir: $var_dir/ext
[paths.dev] list_data_dir: $var_dir/lists
[paths.dev] lock_dir: $var_dir/locks
[paths.dev] lock_file: $lock_dir/master.lck
[paths.dev] log_dir: $var_dir/logs
[paths.dev] messages_dir: $var_dir/messages
[paths.dev] pid_file: $var_dir/master.pid
[paths.dev] queue_dir: $var_dir/queue
[paths.dev] template_dir: $var_dir/templates
[paths.dev] var_dir: $cfg_file/../..
[paths.fhs] archive_dir: $var_dir/archives
[paths.fhs] bin_dir: /sbin
[paths.fhs] cache_dir: $var_dir/cache
[paths.fhs] data_dir: $var_dir/data
[paths.fhs] etc_dir: /etc
[paths.fhs] ext_dir: /etc/mailman.d
[paths.fhs] list_data_dir: $var_dir/lists
[paths.fhs] lock_dir: /var/lock/mailman
[paths.fhs] lock_file: $lock_dir/master.lck
[paths.fhs] log_dir: /var/log/mailman
[paths.fhs] messages_dir: $var_dir/messages
[paths.fhs] pid_file: /var/run/mailman/master.pid
[paths.fhs] queue_dir: /var/spool/mailman
[paths.fhs] template_dir: $var_dir/templates
[paths.fhs] var_dir: /var/lib/mailman
[paths.here] archive_dir: $var_dir/archives
[paths.here] bin_dir: $argv
[paths.here] cache_dir: $var_dir/cache
[paths.here] data_dir: $var_dir/data
[paths.here] etc_dir: $var_dir/etc
[paths.here] ext_dir: $var_dir/ext
[paths.here] list_data_dir: $var_dir/lists
[paths.here] lock_dir: $var_dir/locks
[paths.here] lock_file: $lock_dir/master.lck
[paths.here] log_dir: $var_dir/logs
[paths.here] messages_dir: $var_dir/messages
[paths.here] pid_file: $var_dir/master.pid
[paths.here] queue_dir: $var_dir/queue
[paths.here] template_dir: $var_dir/templates
[paths.here] var_dir: $cwd/var
[paths.local] archive_dir: $var_dir/archives
[paths.local] bin_dir: $argv
[paths.local] cache_dir: $var_dir/cache
[paths.local] data_dir: $var_dir/data
[paths.local] etc_dir: $var_dir/etc
[paths.local] ext_dir: $var_dir/ext
[paths.local] list_data_dir: $var_dir/lists
[paths.local] lock_dir: $var_dir/locks
[paths.local] lock_file: $lock_dir/master.lck
[paths.local] log_dir: $var_dir/logs
[paths.local] messages_dir: $var_dir/messages
[paths.local] pid_file: $var_dir/master.pid
[paths.local] queue_dir: $var_dir/queue
[paths.local] template_dir: $var_dir/templates
[paths.local] var_dir: /opt/mailman/venv
[plugin.master] class:
[plugin.master] component_package:
[plugin.master] configuration:
[plugin.master] enabled: no
[runner.archive] class: mailman.runners.archive.ArchiveRunner
[runner.archive] instances: 1
[runner.archive] max_restarts: 10
[runner.archive] path: $QUEUE_DIR/$name
[runner.archive] sleep_time: 1s
[runner.archive] start: yes
[runner.bad] class: mailman.runners.fake.BadRunner
[runner.bad] instances: 1
[runner.bad] max_restarts: 10
[runner.bad] path: $QUEUE_DIR/$name
[runner.bad] sleep_time: 1s
[runner.bad] start: no
[runner.bounces] class: mailman.runners.bounce.BounceRunner
[runner.bounces] instances: 1
[runner.bounces] max_restarts: 10
[runner.bounces] path: $QUEUE_DIR/$name
[runner.bounces] sleep_time: 2m
[runner.bounces] start: yes
[runner.command] class: mailman.runners.command.CommandRunner
[runner.command] instances: 1
[runner.command] max_restarts: 10
[runner.command] path: $QUEUE_DIR/$name
[runner.command] sleep_time: 1s
[runner.command] start: yes
[runner.digest] class: mailman.runners.digest.DigestRunner
[runner.digest] instances: 1
[runner.digest] max_restarts: 10
[runner.digest] path: $QUEUE_DIR/$name
[runner.digest] sleep_time: 1s
[runner.digest] start: yes
[runner.in] class: mailman.runners.incoming.IncomingRunner
[runner.in] instances: 1
[runner.in] max_restarts: 10
[runner.in] path: $QUEUE_DIR/$name
[runner.in] sleep_time: 1s
[runner.in] start: yes
[runner.lmtp] class: mailman.runners.lmtp.LMTPRunner
[runner.lmtp] instances: 1
[runner.lmtp] max_restarts: 10
[runner.lmtp] path:
[runner.lmtp] sleep_time: 1s
[runner.lmtp] start: yes
[runner.nntp] class: mailman.runners.nntp.NNTPRunner
[runner.nntp] instances: 1
[runner.nntp] max_restarts: 10
[runner.nntp] path: $QUEUE_DIR/$name
[runner.nntp] sleep_time: 1s
[runner.nntp] start: yes
[runner.out] class: mailman.runners.outgoing.OutgoingRunner
[runner.out] instances: 1
[runner.out] max_restarts: 10
[runner.out] path: $QUEUE_DIR/$name
[runner.out] sleep_time: 1s
[runner.out] start: yes
[runner.pipeline] class: mailman.runners.pipeline.PipelineRunner
[runner.pipeline] instances: 1
[runner.pipeline] max_restarts: 10
[runner.pipeline] path: $QUEUE_DIR/$name
[runner.pipeline] sleep_time: 1s
[runner.pipeline] start: yes
[runner.rest] class: mailman.runners.rest.RESTRunner
[runner.rest] instances: 1
[runner.rest] max_restarts: 10
[runner.rest] path:
[runner.rest] sleep_time: 1s
[runner.rest] start: yes
[runner.retry] class: mailman.runners.retry.RetryRunner
[runner.retry] instances: 1
[runner.retry] max_restarts: 10
[runner.retry] path: $QUEUE_DIR/$name
[runner.retry] sleep_time: 15m
[runner.retry] start: yes
[runner.shunt] class: mailman.runners.fake.ShuntRunner
[runner.shunt] instances: 1
[runner.shunt] max_restarts: 10
[runner.shunt] path: $QUEUE_DIR/$name
[runner.shunt] sleep_time: 1s
[runner.shunt] start: no
[runner.task] class: mailman.runners.task.TaskRunner
[runner.task] instances: 1
[runner.task] max_restarts: 10
[runner.task] path:
[runner.task] sleep_time: 1m
[runner.task] start: yes
[runner.virgin] class: mailman.runners.virgin.VirginRunner
[runner.virgin] instances: 1
[runner.virgin] max_restarts: 10
[runner.virgin] path: $QUEUE_DIR/$name
[runner.virgin] sleep_time: 1s
[runner.virgin] start: yes
[shell] banner: 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.
[shell] history_file: $var_dir/history.py
[shell] prompt: >>>
[shell] use_ipython: no
[styles] default: legacy-default
[webservice] admin_pass: restpass
[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
*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>
On Wed, 11 Oct 2023 at 12:37, Kyriakos Terzopoulos <
kyriakos.terzopoulos(a)gmail.com> wrote:
> Hi,
>
> I have the following in my mailman log
>
> [11/Oct/2023:12:31:39 +0300] "GET /3.1/lists/
> testlist(a)myproject.eu/held/count HTTP/1.1" 200 73 "-" "GNU Mailman REST
> client v3.3.5"
> [11/Oct/2023:12:31:43 +0300] "GET /3.1/lists/testlist.myproject.eu
> HTTP/1.1" 200 425 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:43 +0300] "GET /3.1/lists/testlist(a)myproject.eu/config
> HTTP/1.1" 200 3111 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:43 +0300] "GET /3.1/lists/
> testlist.myproject.eu/archivers HTTP/1.1" 200 100 "-" "GNU Mailman REST
> client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/testlist.myproject.eu
> HTTP/1.1" 200 425 "-" "GNU Mailman REST client v3.3.5"
> Oct 11 12:31:51 2023 (1534165) deque: do_confirm_verify
> Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.10/site-packages/mailman/app/workflow.py",
> line 69, in __next__
> return step()
> File
> "/opt/mailman/venv/lib/python3.10/site-packages/mailman/app/subscriptions.py",
> line 382, in _step_send_confirmation
> raise StopIteration
> StopIteration
> [11/Oct/2023:12:31:51 +0300] "POST /3.1/members HTTP/1.1" 202 143 "-" "GNU
> Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/testlist.myproject.eu
> HTTP/1.1" 200 425 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/testlist(a)myproject.eu/config
> HTTP/1.1" 200 3111 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/
> testlist.myproject.eu/archivers HTTP/1.1" 200 100 "-" "GNU Mailman REST
> client v3.3.5"
>
> *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>
>
>
>
> On Wed, 11 Oct 2023 at 11:54, Odhiambo Washington <odhiambo(a)gmail.com>
> wrote:
>
>> On Wed, Oct 11, 2023 at 11:15 AM Kyriakos Terzopoulos <
>> kyriakos.terzopoulos(a)gmail.com> wrote:
>>
>> > Hi,
>> >
>> > I have set up (I believe successfully) and configured the following in a
>> > Virtualhost environment (with HestiaCP):
>> >
>> > - A record for lists.mydomain.com
>> > - Venv
>> > - Mailman core
>> > - Mailman web (run migrate, collectstatic, compress, compilemessages)
>> > Postorius
>> > - gunicorn, hyperkitty
>> > - Nginx
>> > - SMTP exim4 conf
>> >
>> > I can see Posrorius and I have logged in and created my first mailing
>> list:
>> >
>> > [image: Screenshot 2023-10-11 at 10.57.31 AM.png]
>> >
>> > My issue is that even though I have subscribed to my list as you can see
>> > above, I am not receiving the confirmation email. I get a "recipients
>> > refused" error. The smtp log for mailman is as follows:
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> recipients
>> refused:
>> > {'
>> > kyriakos.terzopoulos(a)gmail.com': (550, b'Verification failed for
>> > <testlist-bounces+kyriakos.terzopoulos=gmail.com(a)myproject.eu
>> > >\nUnrouteable
>> > address\nSender verify failed')}
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> smtp to
>> > testlist(a)myproject.eu for 1 recips, completed in 0.26796579360961914
>> > seconds
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> post to
>> > testlist(a)myproject.eu from
>> > testlist-confirm+c9b20c5290bec43147a7e96a6b8cd825daf913d7(a)myproject.eu,
>> > 1667 bytes, 1 failures
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> delivery to
>> > kyriakos.terzopoulos(a)gmail.com failed with code 550, b'Verification
>> failed
>> > for <testlist-bounces+kyriakos.terzopoulos=gmail.com(a)myproject.eu
>> > >\nUnrouteable
>> > address\nSender verify failed'
>> >
>> > I have used the configuration for exim that is here
>> > <
>> >
>> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/mta.h…
>> > >
>> > and
>> > I have also tested with the alternative approach that is documented in
>> >
>>
>> What do you have in the Exim's mainlog?
>>
>>
>> --
>> 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]
>> _______________________________________________
>> Mailman-users mailing list -- mailman-users(a)mailman3.org
>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>> Archived at:
>> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
>>
>> This message sent to kyriakos.terzopoulos(a)gmail.com
>>
>
1 year, 6 months

[MM3-users] Re: [Django] ERROR (EXTERNAL IP): Service Unavailable
by dancab@caltech.edu
Thanks Mark. I can't see the held messages view at all for this list.
I don't think there's any sensitive info so I'm posting the entire message I get to the server admin email.
[Django] ERROR (EXTERNAL IP): Service Unavailable: /postorius/lists/cpa-announcement.caltech.edu/held_messages
root(a)mailman3.caltech.edu
Tue 2/23/2021 10:30 AM
Service Unavailable: /postorius/lists/cpa-announcement.caltech.edu/held_messages
Report at /postorius/lists/cpa-announcement.caltech.edu/held_messages
Service Unavailable: /postorius/lists/cpa-announcement.caltech.edu/held_messages
Request Method: GET
Request URL: https://mailman3.caltech.edu/postorius/lists/cpa-announcement.caltech.edu/h…
Django Version: 3.0.10
Python Executable: /opt/mailmanve/bin/python3
Python Version: 3.6.8
Python Path: ['/var/www/mailman-www', '/opt/mailmanve/bin', '/usr/lib64/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/opt/mailmanve/lib64/python3.6/site-packages', '/opt/mailmanve/lib/python3.6/site-packages']
Server time: Tue, 23 Feb 2021 18:30:19 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Request information:
USER: dancab
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
_ga = 'GA1.2.1144367399.1613604556'
csrftoken = 'CtA6fFlrwV2fkDonIRHKdBX3V1lRQJA7UjRxYE2nCGEi6s65mFkkLDe3EEKkxgyo'
sessionid = 'm1dqvcmvcs12dxc8pui8u2wrz5cncam4'
META:
CSRF_COOKIE = 'CtA6fFlrwV2fkDonIRHKdBX3V1lRQJA7UjRxYE2nCGEi6s65mFkkLDe3EEKkxgyo'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9,es-US;q=0.8,es;q=0.7'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_COOKIE = '_ga=GA1.2.1144367399.1613604556; csrftoken=CtA6fFlrwV2fkDonIRHKdBX3V1lRQJA7UjRxYE2nCGEi6s65mFkkLDe3EEKkxgyo; sessionid=m1dqvcmvcs12dxc8pui8u2wrz5cncam4'
HTTP_HOST = 'mailman3.caltech.edu'
HTTP_PRAGMA = 'akamai-x-cache-on, akamai-x-cache-remote-on, akamai-x-check-cacheable, akamai-x-get-cache-key, akamai-x-get-extracted-values, akamai-x-get-ssl-client-session-id, akamai-x-get-true-cache-key, akamai-x-serial-no, akamai-x-get-request-id,akamai-x-get-nonces,akamai-x-get-client-ip,akamai-x-feo-trace'
HTTP_REFERER = 'https://mailman3.caltech.edu/postorius/lists/cpa-announcement.caltech.edu/'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
HTTP_X_FORWARDED_FOR = '131.215.248.132'
HTTP_X_FORWARDED_HOST = 'mailman3.caltech.edu'
HTTP_X_FORWARDED_PORT = '443'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'mailman3.caltech.edu'
PATH_INFO = '/postorius/lists/cpa-announcement.caltech.edu/held_messages'
QUERY_STRING = ''
RAW_URI = '/postorius/lists/cpa-announcement.caltech.edu/held_messages'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '49702'
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SOFTWARE = 'gunicorn/20.0.4'
gunicorn.socket = <socket.socket fd=15, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 49702)>
wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f31f8c22f60>
wsgi.file_wrapper = ''
wsgi.input = <gunicorn.http.body.Body object at 0x7f31f8c22ef0>
wsgi.input_terminated = True
wsgi.multiprocess = False
wsgi.multithread = False
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'dancab(a)its.caltech.edu'),)"
ALLOWED_HOSTS = ['api.mailman3.caltech.edu', 'mailman3.caltech.edu', 'www.mailman3.caltech.edu', 'www.lists.caltech.edu', 'lists.caltech.edu', 'localhost']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django_auth_ldap.backend.LDAPBackend', 'django.contrib.auth.backends.ModelBackend')"
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_BIND_DN = ''
AUTH_LDAP_BIND_PASSWORD = '********************'
AUTH_LDAP_SERVER_URI = 'ldap://ldapslave5.caltech.edu'
AUTH_LDAP_START_TLS = True
AUTH_LDAP_USER_ATTR_MAP = {'username': 'uid', 'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'}
AUTH_LDAP_USER_SEARCH = <LDAPSearch: ou=Accounts,ou=ITS,o=Caltech,c=US>
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/var/www/mailman-www'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'js': ['compressor.filters.jsmin.JSMinFilter'], 'css': ['compressor.filters.css_default.CssAbsoluteFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f31ffd0d268>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = False
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/less', 'lessc {infile} {outfile}'), ('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/www/mailman-www/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman3_prod', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'aus-sql1.caltech.edu', 'PORT': '3306', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postmaster(a)mailman3.caltech.edu'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 587
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/www/mailman-www/fulltext_index'}}
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'DEBUG', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/var/www/mailman-www/logs/mailmansuite.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'DEBUG'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://mailman3.caltech.edu'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_SCHEME', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)mailman3.caltech.edu'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
STATICFILES_DIRS = []
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/www/mailman-www/static/'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
4 years, 2 months

[MM3-users] Re: [Mailman-Users] Mailman 3 Ready?
by Stephen J. Turnbull
Allan Hansen writes:
> What is the best, easiest, guaranteed-to-work way to get this
> Mailman 3 up and running (OS, add-ons, options, etc.). When I tried
> myself, I saw a lot of options that I really did not really care to
> have because I did not know the consequences of each. I’m an
> application programmer, not a systems programmer.
It's email, there are no guarantees. I hate to say that, but that's
the way it is.
In particular, I'm concerned about the "iRedMail" integration, which
may be a complete wildcard from my point of view. With respect to the
relevant iRedMail components, I can say that Mailman 3 is perfectly
happy with Postfix as MTA (it's the recommended configuration,
although I use Exim4 for historical reasons), and I've been satisfied
with a small-scale set of lists (about 10 active ones, with at most 20
subscribers total) using Apache+mod_swgi to host Postorius and
HyperKitty. The problem would be if your friend (is that the Frank in
the CC? hi, Frank!) really really wants to manage Mailman 3 through
iRedAdmin -- that will get messy I suspect, and pragmatically
speaking, we can't support it, we don't have the cycles. So he'd be
on his own, especially since the iRedMail folks have their own bespoke
mailing list manager. I would recommend avoiding iRedAdmin
integration, and just using Postorius since the subscribers and
non-site-admin moderators (if any) will need to use Postorius anyway.
Ignoring the iRedAdmin issue, the absolute simplest is
1. Install any Linux distribution with a Docker package.
2. Install the distribution's Docker package.
3. Download and install Mailman Project's Mailman 3 container.
4. Upgrade the container manually (ie, download and reinstall) as
appropriate.
For reference, what I would recommend to my friends, who would give me
hands-on access in emergencies:
1. Install the Debian distribution. (What I use.)
2. Pin the Mailman 3 packages to "experimental". The idea would be
to get Mailman 3 upgrades as fast as possible, even at the risk of
packaging issues. (My experience with default-to-experimental
system for several years was that this happened at most once a
year, and the three or four cases all got fixed within days.)
3. Install the Mailman 3 packages.
4. Adjust any dependencies that need non-"stable" versions.
5. Upgrade via apt or whatever occasionally.
6. When Mailman 3 is working well, downgrade the pins to a more
stable level.
Since you do have such a friend, there's probably a similar process
that works for his distribution-of-choice.
> The problem is that my MacOS users are getting tripped up by the
> mangling, as it is hidden by the mail clients. I have instructed
> them to remove previous recipients regularly from the list of such,
> if they contain the ‘via list’ string. But they don’t read my
> emails, and we see many embarrassing email ssent to the lists that
> are meant for one-on-one communication.
I guess we could provide a setting where reply-to goes *only* to
author, instead of to author *and* list as we currently recommend.
But that is going to make you (or list owners) the focus of user ire
because their intended replies to list go only to author. What do you
think?
tl;dr The rest is me blowing off steam. :-)
> The fact that the mangling will continue is a disappointment.
It's a disappointment to the sane people at the IETF, too, including
the rep from Yahoo!, who's a very smart lady (I may be biased, she
gave me a kitten once. ;-) Yahoo! is violating the original concept
(DMARC "p=reject" was supposed to be used *only* for "transactional"
mail, i.e., direct private communication between a business and its
clients), but I see her point: when you've had a hundred million or so
address books hacked and sold to spammers, and the spammers are
sending literally millions of "recommendation from a friend" spams per
hour for days on end, you use the tools to hand.
> I’m inclined to tell all my AOL and Yahoo users and others in the same
> boat to find another email service.
I know the feeling. I'm lucky in that respect: the Ministry of
Education prohibits use of yahoo mailboxes at Japanese universities.
(Which is a WTF of a different kind: yahoo.co.jp is a franchise, not
controlled by yahoo.com, and doesn't use p=reject at least at the time
MoE issued that policy.)
Mail is just hard. It was designed for a "friendly network of users",
not for today's rather hostile open Internet, and even if they had
envisioned this in the 70s when the message format and SMTP mail
transmission protocol were designed, the fundamental problem is that
pretty much everyone has a genuine need, even if only occasional, to
receive messages from untrusted and even unknown senders.
5 years, 4 months

[MM3-users] unknown encoding: windows-874
by Mark Dadgar
Anyone seen this before? Just started happening today.
Latest ubuntu packages:
- Mark
-----
mark(a)pdc-racing.net | 408-348-2878
——
Internal Server Error: /mailman3/hyperkitty/api/mailman/archive
LookupError at /hyperkitty/api/mailman/archive
unknown encoding: windows-874
Request Method: POST
Request URL: http://localhost/mailman3/hyperkitty/api/mailman/archive?key=MiloIsTheBestD… <http://localhost/mailman3/hyperkitty/api/mailman/archive?key=MiloIsTheBestD…>
Django Version: 2.2.12
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.8.2
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: Wed, 13 May 2020 16:42:46 -0700
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
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/lib/python3/dist-packages/django/views/decorators/http.py" in inner
40. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in _decorator
71. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/csrf.py" in wrapped_view
54. return view_func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in archive
117. add_to_list(mlist_fqdn, msg)
File "/usr/lib/python3/dist-packages/hyperkitty/lib/incoming.py" in add_to_list
123. email.content, attachments = scrubber.scrub()
File "/usr/lib/python3/dist-packages/django_mailman3/lib/scrub.py" in scrub
77. attachments = self._get_all_attachments()
File "/usr/lib/python3/dist-packages/django_mailman3/lib/scrub.py" in _get_all_attachments
98. attachments.append(self._parse_attachment(part, part_num))
File "/usr/lib/python3/dist-packages/django_mailman3/lib/scrub.py" in _parse_attachment
156. payload = part.get_content()
File "/usr/lib/python3.8/email/message.py" in get_content
1096. if content_manager is None:
File "/usr/lib/python3.8/email/contentmanager.py" in get_content
22. return self.get_handlers[maintype](msg, *args, **kw)
File "/usr/lib/python3.8/email/contentmanager.py" in get_text_content
67. return content.decode(charset, errors=errors)
Exception Type: LookupError at /hyperkitty/api/mailman/archive
Exception Value: unknown encoding: windows-874
Request information:
USER: AnonymousUser
GET:
key = <REDACTED>
POST:
mlist = <REDACTED>
FILES:
message = <InMemoryUploadedFile: message.txt ()>
COOKIES: No cookie data
META:
CONTENT_LENGTH = '52215'
CONTENT_TYPE = 'multipart/form-data; boundary=c697884a8c5c014c7e388933c444cab3'
CONTEXT_DOCUMENT_ROOT = '/var/www/html'
CONTEXT_PREFIX = ''
DOCUMENT_ROOT = '/var/www/html'
GATEWAY_INTERFACE = 'CGI/1.1'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_CONNECTION = 'keep-alive'
HTTP_HOST = 'localhost'
HTTP_USER_AGENT = 'python-requests/2.22.0'
PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin'
PATH_INFO = '/hyperkitty/api/mailman/archive'
QUERY_STRING = 'key=MiloIsTheBestDogEver2018%21'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '45516'
REQUEST_METHOD = 'POST'
REQUEST_SCHEME = 'http'
REQUEST_URI = '/mailman3/hyperkitty/api/mailman/archive?key=MiloIsTheBestDogEver2018%21'
SCRIPT_FILENAME = 'proxy:uwsgi://localhost//hyperkitty/api/mailman/archive' <uwsgi://localhost//hyperkitty/api/mailman/archive'>
SCRIPT_NAME = '/mailman3'
SERVER_ADDR = '127.0.0.1'
SERVER_ADMIN = 'webmaster@localhost'
SERVER_NAME = 'localhost'
SERVER_PORT = '80'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SIGNATURE = '<address>Apache/2.4.41 (Ubuntu) Server at localhost Port 80</address>\n'
SERVER_SOFTWARE = 'Apache/2.4.41 (Ubuntu)'
uwsgi.core = 1
uwsgi.node = b'mail'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7ff7d81444b0>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'mark(a)pdc-racing.net <mailto:mark@pdc-racing.net>'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_COMPRESSOR = 'compressor.css.CssCompressor'
COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter']
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7ff7db78fb80>
COMPRESS_JS_COMPRESSOR = 'compressor.js.JsCompressor'
COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = '()'
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', 'NAME': '/var/lib/dbconfig-common/sqlite3/mailman3-web/mailman3web.db', 'USER': '', 'PASSWORD': '********************', 'HOST': '', 'PORT': '', 'OPTIONS': {}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)pdc-racing.net <mailto:postorius@pdc-racing.net>'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'pdc-racing.net <http://pdc-racing.net/>'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'xapian_backend.XapianEngine', 'PATH': '/var/lib/mailman3/web/xapian_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'django_mailman3.lib.auth.fedora')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/ <http://localhost/mailman3/>'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)pdc-racing.net <mailto:root@pdc-racing.net>'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
4 years, 11 months

[MM3-users] Re: Installing mailman 3
by Rafael Mora
Dear Kyle,
I did what you suggested and this is what I got:
[root@localhost ~]# rpm -qa | grep -i mailman
[root@localhost ~]# rm -rf /var/lib/mailman
[root@localhost ~]# find / -name mailman
/run/lock/mailman
/etc/selinux/targeted/active/modules/100/mailman
/etc/selinux/targeted/tmp/modules/100/mailman
/root/mailman
/root/mailman/src/mailman
/root/mailman/venv/bin/mailman
/root/dev/mailman
/root/dev/mailman/venv3/bin/mailman
/root/dev/mailman/mailman
/root/dev/mailman/mailman/src/mailman
/var/log/mailman
/var/spool/mailman
/usr/local/lib/python3.6/site-packages/mailman-3.2.0a1-py3.6.egg/mailman
/mailman
/mailman/mailman
/mailman/mailman/src/mailman
/mailman/mailman/build/lib/mailman
How do I wipe all other mailman directories? using rm -rf???
I don't think I can start with a brand new centos 7 for the moment.
Thank you
El jue., 13 jul. 2017 a las 10:13, Kyle Richardson (<
kylerichardson2(a)gmail.com>) escribió:
> Rafael,
>
> Apologies for the delay. I would certainly encourage you to stick with
> mailman3 :-). Thanks for providing all of the details of your current
> environment. Let me try and answer each of your questions as best I can.
>
> You can check if mailman2 is already installed via rpms with the following
> command:
>
> # rpm -qa | grep -i mailman
>
> Based on your `find` results, it looks as though you have multiple
> locations where you have cloned or copied mailman3. At this point, it might
> be easiest to start fresh. You mentioned you're using a CentOS 7 VM. Is it
> possible to start from a clean build or snapshot?
>
> Once you have a clean build, you should be able to follow Simon's
> instructions to get a working mailman3 instance (steps reproduced below for
> clarity).
>
> # useradd -r -m -d /var/lib/mailman mailman
> # su - mailman
> $ python3 -m venv env
> $ source env/bin/activate
> $ pip install mailman
> $ mailman info
>
> From there you can adjust the layout in your mailman.cfg file at
> /var/lib/mailman/var/etc/ (snippet below).
>
> [mailman]
> layout: dev
>
> If you can't start from a clean CentOS 7 VM, then you should be able to
> just wipe out your existing /var/lib/mailman directory and still use
> Simon's instructions.
>
> # rm -rf /var/lib/mailman
>
> Hopefully this will help you get up and going.
>
> -Kyle
>
> On Thu, Jul 13, 2017 at 10:16 AM, Rafael Mora <rafael.mora.guti(a)gmail.com>
> wrote:
>
>> Hello Kyle,
>>
>> What steps do you suggest in order to install mailman v2 via rpm's??
>>
>> Thank you.
>>
>> El mar., 11 jul. 2017 a las 15:13, Kyle Richardson (<
>> kylerichardson2(a)gmail.com>) escribió:
>>
>>> Looks like you are using the fhs (filesystem hierarchy standard) layout;
>>> is that what you intend? I would suggest changing the layout to "dev" for
>>> testing purposes. This will use your mailman.cfg/../.. as the var directory.
>>>
>>> Is it possible you also have mailman v2 installed via rpms?
>>>
>>> -Kyle
>>>
>>> On Tue, Jul 11, 2017 at 3:41 PM, Rafael Mora <rafael.mora.guti(a)gmail.com
>>> > wrote:
>>>
>>>> Hello,
>>>>
>>>> Here it's mailman info:
>>>> [root@localhost bin]# ./mailman info
>>>> GNU Mailman 3.2.0a1 (La Villa Strangiato)
>>>> Python 3.6.0 (default, Jul 7 2017, 11:59:56)
>>>> [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
>>>> config file: /etc/mailman.cfg
>>>> db url: sqlite:////var/lib/mailman/data/mailman.db
>>>> devmode: DISABLED
>>>> REST root url: http://localhost:8001/3.1/
>>>> REST credentials: restadmin:restpass
>>>>
>>>>
>>>> Here it's mailman conf:
>>>> [root@localhost bin]# ./mailman conf
>>>> [antispam] header_checks:
>>>> [antispam] jump_chain: hold
>>>> [archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
>>>> [archiver.mail_archive] clobber_date: maybe
>>>> [archiver.mail_archive] clobber_skew: 1d
>>>> [archiver.mail_archive] configuration:
>>>> python:mailman.config.mail_archive
>>>> [archiver.mail_archive] enable: no
>>>> [archiver.master] class:
>>>> [archiver.master] clobber_date: maybe
>>>> [archiver.master] clobber_skew: 1d
>>>> [archiver.master] configuration: changeme
>>>> [archiver.master] enable: no
>>>> [archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
>>>> [archiver.mhonarc] clobber_date: maybe
>>>> [archiver.mhonarc] clobber_skew: 1d
>>>> [archiver.mhonarc] configuration: python:mailman.config.mhonarc
>>>> [archiver.mhonarc] enable: no
>>>> [archiver.prototype] class: mailman.archiving.prototype.Prototype
>>>> [archiver.prototype] clobber_date: maybe
>>>> [archiver.prototype] clobber_skew: 1d
>>>> [archiver.prototype] configuration: changeme
>>>> [archiver.prototype] enable: no
>>>> [bounces] register_bounces_every: 15m
>>>> [database] class: mailman.database.sqlite.SQLiteDatabase
>>>> [database] debug: no
>>>> [database] url: sqlite:///$DATA_DIR/mailman.db
>>>> [devmode] enabled: no
>>>> [devmode] recipient:
>>>> [devmode] testing: no
>>>> [devmode] wait: 60s
>>>> [digests] mime_digest_keep_headers:
>>>> Date From To Cc Subject Message-ID Keywords
>>>> In-Reply-To References Content-Type MIME-Version
>>>> Content-Transfer-Encoding Precedence Reply-To
>>>> Message List-Post
>>>> [digests] plain_digest_keep_headers:
>>>> Message Date From
>>>> Subject To Cc
>>>> Message-ID Keywords
>>>> Content-Type
>>>> [dmarc] cache_lifetime: 7d
>>>> [dmarc] org_domain_data_url:
>>>> https://publicsuffix.org/list/public_suffix_list.dat
>>>> [dmarc] resolver_lifetime: 5s
>>>> [dmarc] resolver_timeout: 3s
>>>> [language.ar] charset: utf-8
>>>> [language.ar] description: Arabic
>>>> [language.ar] enabled: yes
>>>> [language.ast] charset: iso-8859-1
>>>> [language.ast] description: Asturian
>>>> [language.ast] enabled: yes
>>>> [language.ca] charset: utf-8
>>>> [language.ca] description: Catalan
>>>> [language.ca] enabled: yes
>>>> [language.cs] charset: iso-8859-2
>>>> [language.cs] description: Czech
>>>> [language.cs] enabled: yes
>>>> [language.da] charset: iso-8859-1
>>>> [language.da] description: Danish
>>>> [language.da] enabled: yes
>>>> [language.de] charset: iso-8859-1
>>>> [language.de] description: German
>>>> [language.de] enabled: yes
>>>> [language.el] charset: iso-8859-7
>>>> [language.el] description: Greek
>>>> [language.el] enabled: yes
>>>> [language.es] charset: iso-8859-1
>>>> [language.es] description: Spanish
>>>> [language.es] enabled: yes
>>>> [language.et] charset: iso-8859-15
>>>> [language.et] description: Estonian
>>>> [language.et] enabled: yes
>>>> [language.eu] charset: iso-8859-15
>>>> [language.eu] description: Euskara
>>>> [language.eu] enabled: yes
>>>> [language.fi] charset: iso-8859-1
>>>> [language.fi] description: Finnish
>>>> [language.fi] enabled: yes
>>>> [language.fr] charset: iso-8859-1
>>>> [language.fr] description: French
>>>> [language.fr] enabled: yes
>>>> [language.gl] charset: utf-8
>>>> [language.gl] description: Galician
>>>> [language.gl] enabled: yes
>>>> [language.he] charset: utf-8
>>>> [language.he] description: Hebrew
>>>> [language.he] enabled: yes
>>>> [language.hr] charset: iso-8859-2
>>>> [language.hr] description: Croatian
>>>> [language.hr] enabled: yes
>>>> [language.hu] charset: iso-8859-2
>>>> [language.hu] description: Hungarian
>>>> [language.hu] enabled: yes
>>>> [language.ia] charset: iso-8859-15
>>>> [language.ia] description: Interlingua
>>>> [language.ia] enabled: yes
>>>> [language.it] charset: iso-8859-1
>>>> [language.it] description: Italian
>>>> [language.it] enabled: yes
>>>> [language.ja] charset: euc-jp
>>>> [language.ja] description: Japanese
>>>> [language.ja] enabled: yes
>>>> [language.ko] charset: euc-kr
>>>> [language.ko] description: Korean
>>>> [language.ko] enabled: yes
>>>> [language.lt] charset: iso-8859-13
>>>> [language.lt] description: Lithuanian
>>>> [language.lt] enabled: yes
>>>> [language.nl] charset: iso-8859-1
>>>> [language.nl] description: Dutch
>>>> [language.nl] enabled: yes
>>>> [language.no] charset: iso-8859-1
>>>> [language.no] description: Norwegian
>>>> [language.no] enabled: yes
>>>> [language.pl] charset: iso-8859-2
>>>> [language.pl] description: Polish
>>>> [language.pl] enabled: yes
>>>> [language.pt] charset: iso-8859-1
>>>> [language.pt] description: Protuguese
>>>> [language.pt] enabled: yes
>>>> [language.pt_BR] charset: iso-8859-1
>>>> [language.pt_BR] description: Protuguese (Brazil)
>>>> [language.pt_BR] enabled: yes
>>>> [language.ro] charset: iso-8859-2
>>>> [language.ro] description: Romanian
>>>> [language.ro] enabled: yes
>>>> [language.ru] charset: koi8-r
>>>> [language.ru] description: Russian
>>>> [language.ru] enabled: yes
>>>> [language.sk] charset: utf-8
>>>> [language.sk] description: Slovak
>>>> [language.sk] enabled: yes
>>>> [language.sl] charset: iso-8859-2
>>>> [language.sl] description: Slovenian
>>>> [language.sl] enabled: yes
>>>> [language.sr] charset: utf-8
>>>> [language.sr] description: Serbian
>>>> [language.sr] enabled: yes
>>>> [language.sv] charset: iso-8859-1
>>>> [language.sv] description: Swedish
>>>> [language.sv] enabled: yes
>>>> [language.tr] charset: iso-8859-9
>>>> [language.tr] description: Turkish
>>>> [language.tr] enabled: yes
>>>> [language.uk] charset: utf-8
>>>> [language.uk] description: Ukrainian
>>>> [language.uk] enabled: yes
>>>> [language.vi] charset: utf-8
>>>> [language.vi] description: Vietnamese
>>>> [language.vi] enabled: yes
>>>> [language.zh_CN] charset: utf-8
>>>> [language.zh_CN] description: Chinese
>>>> [language.zh_CN] enabled: yes
>>>> [language.zh_TW] charset: utf-8
>>>> [language.zh_TW] description: Chinese (Taiwan)
>>>> [language.zh_TW] enabled: yes
>>>> [logging.archiver] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.archiver] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.archiver] level: info
>>>> [logging.archiver] path: mailman.log
>>>> [logging.archiver] propagate: no
>>>> [logging.bounce] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.bounce] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.bounce] level: info
>>>> [logging.bounce] path: bounce.log
>>>> [logging.bounce] propagate: no
>>>> [logging.config] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.config] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.config] level: info
>>>> [logging.config] path: mailman.log
>>>> [logging.config] propagate: no
>>>> [logging.database] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.database] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.database] level: warn
>>>> [logging.database] path: mailman.log
>>>> [logging.database] propagate: no
>>>> [logging.debug] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.debug] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.debug] level: info
>>>> [logging.debug] path: debug.log
>>>> [logging.debug] propagate: no
>>>> [logging.error] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.error] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.error] level: info
>>>> [logging.error] path: mailman.log
>>>> [logging.error] propagate: no
>>>> [logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.fromusenet] level: info
>>>> [logging.fromusenet] path: mailman.log
>>>> [logging.fromusenet] propagate: no
>>>> [logging.http] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.http] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.http] level: info
>>>> [logging.http] path: mailman.log
>>>> [logging.http] propagate: no
>>>> [logging.locks] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.locks] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.locks] level: info
>>>> [logging.locks] path: mailman.log
>>>> [logging.locks] propagate: no
>>>> [logging.mischief] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.mischief] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.mischief] level: info
>>>> [logging.mischief] path: mailman.log
>>>> [logging.mischief] propagate: no
>>>> [logging.root] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.root] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.root] level: info
>>>> [logging.root] path: mailman.log
>>>> [logging.root] propagate: no
>>>> [logging.runner] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.runner] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.runner] level: info
>>>> [logging.runner] path: mailman.log
>>>> [logging.runner] propagate: no
>>>> [logging.smtp] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.smtp] every: $msgid smtp to $listname for $recip recips,
>>>> completed
>>>> in $time seconds
>>>> [logging.smtp] failure: $msgid delivery to $recip failed with code
>>>> $smtpcode, $smtpmsg
>>>> [logging.smtp] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.smtp] level: info
>>>> [logging.smtp] path: smtp.log
>>>> [logging.smtp] propagate: no
>>>> [logging.smtp] refused: $msgid post to $listname from $sender, $size
>>>> bytes,
>>>> $refused failures
>>>> [logging.smtp] success: $msgid post to $listname from $sender, $size
>>>> bytes
>>>> [logging.subscribe] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.subscribe] level: info
>>>> [logging.subscribe] path: mailman.log
>>>> [logging.subscribe] propagate: no
>>>> [logging.vette] datefmt: %b %d %H:%M:%S %Y
>>>> [logging.vette] format: %(asctime)s (%(process)d) %(message)s
>>>> [logging.vette] level: info
>>>> [logging.vette] path: mailman.log
>>>> [logging.vette] propagate: no
>>>> [mailman] cache_life: 7d
>>>> [mailman] default_language: en
>>>> [mailman] email_commands_max_lines: 10
>>>> [mailman] filtered_messages_are_preservable: no
>>>> [mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
>>>> [mailman] layout: fhs
>>>> [mailman] listname_chars: [-_.0-9a-z]
>>>> [mailman] noreply_address: noreply
>>>> [mailman] pending_request_life: 3d
>>>> [mailman] post_hook:
>>>> [mailman] pre_hook:
>>>> [mailman] sender_headers: from from_ reply-to sender
>>>> [mailman] site_owner: changeme(a)example.com
>>>> [mta] configuration: python:mailman.config.postfix
>>>> [mta] delivery_retry_period: 5d
>>>> [mta] incoming: mailman.mta.postfix.LMTP
>>>> [mta] lmtp_host: 127.0.0.1 # IP where Mailman should listen
>>>> for
>>>> emails from MTA
>>>> [mta] lmtp_port: 8024
>>>> [mta] max_autoresponses_per_day: 10
>>>> [mta] max_delivery_threads: 0
>>>> [mta] max_recipients: 500
>>>> [mta] max_sessions_per_connection: 0
>>>> [mta] outgoing: mailman.mta.deliver.deliver
>>>> [mta] remove_dkim_headers: no
>>>> [mta] smtp_host: 127.0.0.1 # IP Where MTA is listening for
>>>> emails
>>>> [mta] smtp_pass:
>>>> [mta] smtp_port: 25
>>>> [mta] smtp_user:
>>>> [mta] verp_confirm_format: $address+$cookie
>>>> [mta] verp_confirm_regexp:
>>>> ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
>>>> [mta] verp_confirmations: no
>>>> [mta] verp_delimiter: +
>>>> [mta] verp_delivery_interval: 0
>>>> [mta] verp_format: ${bounces}+${local}=${domain}
>>>> [mta] verp_personalized_deliveries: no
>>>> [mta] verp_probe_format: $bounces+$token@$domain
>>>> [mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
>>>> [mta] verp_probes: no
>>>> [mta] verp_regexp:
>>>> ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
>>>> [nntp] host:
>>>> [nntp] password:
>>>> [nntp] port:
>>>> [nntp] remove_headers:
>>>> nntp-posting-host nntp-posting-date x-trace
>>>> x-complaints-to xref date-received posted
>>>> posting-version relay-version received
>>>> [nntp] rewrite_duplicate_headers:
>>>> To X-Original-To
>>>> CC X-Original-CC
>>>> Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
>>>> MIME-Version X-MIME-Version
>>>> [nntp] user:
>>>> [passwords] configuration: python:mailman.config.passlib
>>>> [passwords] password_length: 8
>>>> [shell] banner: Welcome to the GNU Mailman shell
>>>> [shell] history_file:
>>>> [shell] prompt: >>>
>>>> [shell] use_ipython: no
>>>> [styles] default: legacy-default
>>>> [styles] paths:
>>>> mailman.styles
>>>> [webservice] admin_pass: restpass
>>>> [webservice] admin_user: restadmin
>>>> [webservice] api_version: 3.1
>>>> [webservice] hostname: localhost
>>>> [webservice] port: 8001
>>>> [webservice] show_tracebacks: yes
>>>> [webservice] use_https: no
>>>>
>>>>
>>>> What do you suggest? Thank you
>>>>
>>>> El mar., 11 jul. 2017 a las 14:31, Simon Hanna (<
>>>> simon.hanna(a)serve-me.info>)
>>>> escribió:
>>>>
>>>> > Below is how I would recommend to run Mailman for production using a
>>>> > virtualenv
>>>> >
>>>> > # useradd -r -m -d /var/lib/mailman mailman
>>>> >
>>>> > # su - mailman
>>>> >
>>>> >
>>>> > $ python3 -m venv env
>>>> > $ source env/bin/activate
>>>> > $ pip install mailman
>>>> > $ mailman info
>>>> >
>>>> > Now you should have a working configuration in /var/lib/mailman/var/
>>>> >
>>>> > to run mailman you don't need to activate the virtualenv, just use the
>>>> > executable /var/lib/mailman/env/bin/mailman
>>>> >
>>>> > cheers,
>>>> > Simon
>>>> > _______________________________________________
>>>> > Mailman-users mailing list
>>>> > mailman-users(a)mailman3.org
>>>> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>> >
>>>> --
>>>>
>>>> Atentamente / Best Regards
>>>>
>>>> Ing. Rafael Mora
>>>> _______________________________________________
>>>> Mailman-users mailing list
>>>> mailman-users(a)mailman3.org
>>>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>>>>
>>>
>>> --
>>
>> Atentamente / Best Regards
>>
>> Ing. Rafael Mora
>>
>
> --
Atentamente / Best Regards
Ing. Rafael Mora
7 years, 9 months

[MM3-users] Mailman 3 Status Update Please?
by Stephen J. Turnbull
Adding a slightly different perspective to Abhilash's and Barry's.
ddw David Wilson writes:
> From my perspective of being an senior (ie overaged) person
> desirous of implementing fully-featured, capable, scalable,
> reliable, secure
I'm not sure if "secure" is a real requirement, a nice-to-have, or
intended as a compliment to Mailman, but "secure" is not something we
can claim. Mail is inherently a security problem, because there is no
universal way to authenticate senders. It's possible under certain
conditions to configure a system to be secure in the sense of allowing
only authentic senders, but even when possible it is not easy. Ask
John Podesta (for a well-known example) or Matt Tait (aka Twitter's
@pwnallthethings, a security expert who has publically admitted that
he's come "this close" to clicking on spear-phishing attachments).
Mailman itself is a complex application with a very large attack
surface. If containerized, it will be rather difficult to exploit the
rest of the system, but Mailman itself contains a lot of private data
(email addresses and associated display names, which are frequently
real names), and in enterprise situations may have access to
enterprise databases "containing the whole store".
> applications such as Mailman, I am convinced that I am thoroughly
> over my head.
That's what we're here for! Of course we're volunteers, so our
availability is less than 99% reliable and time is limited. I don't
know of any consulting services providing Mailman 3 consulting yet,
but given the activity of this list I believe we'll see them soon. If
you have funding to offer and want to kickstart the process, you could
go to the vendors page on our website and talk to some of them.
> From my limited perspective, it would seem to me that a 'nice to
> have' system would incorporate the following.
>
> 1. An open container standard configurable system install, compatible
> with different web & mail servers, DB utilities, etc;
We have a container system which is configurable. However, IMHO
"standard" and "configurable/compatible" are incompatible goals. What
we can reasonably provide is a full system-in-a-box for people who
only want to configure Mailman itself (ie, add lists and users, and
configure their settings in the web interfaces). For people with
specific desiderata such as a particular mail transport agent or web
server different from those provided by our "Mailman-3-in-a-box",
they're going to need somewhat advanced sysadmin skills for the
forseeable future because the configuration requirements of web
services and mail services must be coordinated, and have subtle,
implementation-dependent interactions.
We hope that the vendors referred to above (including mail hosts, mail
consultants, and system management framework vendors like cPanel) will
soon start providing more "Mailman 3 in a box" services (both software
distributions and as VMs in cloud services), as well as consulting
services for those with specific needs not served by existing
containerized versions.
> 2. Python 3 version Django utilities for archiving and mail list name
> management;
In progress.
> 3. A design/plan from an inside expert perspective stating costs, time
> and resources to implement the plan, incorporating crowdfunding to
> pay for project.
We don't have spare cycles at the moment. None of us actively consult
for money on Mailman, which means neither direct engineering
capability nor management capability are available. I'm considering
this, but since I'm currently a life-long academic with a full-time
job for the next few years, I'm not in a big hurry, and would need to
acquire skills/partners for the aspects I've no experience in. :-) (I
guess that's :-( from your perspective.) With a two-year timeline, if
I decide to do it, likely I'd actually open for business in about
1.5-2 years (based on seasonal cycles in free time). I don't know
offhand of anyone else even thinking about it.
This could change at any time with entry of new developers, of course,
but it's only fair to warn you that this is the current status.
> 4. As a backup incentive to the crowdfunding plan might be the offer of
> an expert to set up a system for each significant amount donated,
> say US$1,000, such as might be accomplished by an SSL session on the
> target computer/server after the user has specified all necessary
> detail as required in a template.
We do have ways to donate via our relationship with the FSF, but the
same issues described above (no reliable gobs of available time for
project oversight or actual development) apply.
> I am sure that the program author and other major contributors could
> greatly enhance this list.
>
> In summary, I guess what I am requesting is an overview forecast by half
> year period and out for the next two years?
For 6 and 12 months out, Abhilash's summary list, and Barry's, all are
goals I support. We should also have a plug-in implementating the ARC
protocol which improves authentication capabilities by allowing a
list's subscribers (more precisely, their mail hosts) to extend
transitive trust to senders that the list has authenticated. Although
providing such authentication services *in Mailman* is suboptimal and
sometimes impossible, we can provide containerized Mailman with that
service.
Steve
--
Associate Professor Division of Policy and Planning Science
http://turnbull/sk.tsukuba.ac.jp/ Faculty of Systems and Information
Email: turnbull(a)sk.tsukuba.ac.jp University of Tsukuba
Tel: 029-853-5175 Tennodai 1-1-1, Tsukuba 305-8573 JAPAN
7 years, 9 months

[MM3-users] Re: ModuleNotFoundError: No module named 'mailman_web'
by gordon@dickens.com
This is the entire error sent via email every minute or so:
Traceback (most recent call last):
File "/opt/mailman/venv/bin/mailman-web", line 5, in <module>
from mailman_web.manage import main
ModuleNotFoundError: No module named 'mailman_web'
When I try to login to mailman then I get thse following error:
Service Unavailable: /mailman3/lists/
Report at /mailman3/lists/
Service Unavailable: /mailman3/lists/
Request Method: GET
Request URL: http://host2.mailhub4u.com/mailman3/lists/
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.9.2
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '/opt/mailman/venv/lib/python3.9/site-packages']
Server time: Tue, 31 Oct 2023 21:08:56 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Request information:
USER: gordon
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = 'BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS'
PHPSESSID = 'a36fftlm8j0khrlciu3uut8n5a'
testing = '1'
sid = '8a3f6ce1fe7c07389eea7d68f5346563'
sessiontest = '1'
Horde = '48dflipuqm8oi32on7dadjffl8'
horde_secret_key = '4jhq7cri14q2vdkvs3r6r2auqk'
sessionid = 'gsrrjekrl6huw5myr37lop21cyltpmst'
META:
CSRF_COOKIE = 'BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.5'
HTTP_AUTHORIZATION = 'Basic cm9vdDokQ3JAYmJ5LVAzbGljYW4k'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_COOKIE = 'csrftoken=BgEa4GddvSCScj8Bm9aSJz2V2vuvQin3boRLAM4ZqjL8Aq1I0l989xbv6nI2LbuS; PHPSESSID=a36fftlm8j0khrlciu3uut8n5a; testing=1; sid=8a3f6ce1fe7c07389eea7d68f5346563; sessiontest=1; Horde=48dflipuqm8oi32on7dadjffl8; horde_secret_key=4jhq7cri14q2vdkvs3r6r2auqk; sessionid=gsrrjekrl6huw5myr37lop21cyltpmst'
HTTP_HOST = '127.0.0.1:8000'
HTTP_REFERER = 'https://host2.mailhub4u.com/mailman3/lists/'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0'
HTTP_X_FORWARDED_FOR = '173.165.166.34'
HTTP_X_FORWARDED_HOST = 'host2.mailhub4u.com'
HTTP_X_FORWARDED_SERVER = 'host2.mailhub4u.com'
PATH_INFO = '/mailman3/lists/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/mailman3/lists/'
SCRIPT_NAME = ''
SERVER_NAME = 'slc.mailhub4u.com'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 0
uwsgi.node = b'slc.mailhub4u.com'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f509a270810>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'gordon(a)mailhub4u.com'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f509d83d0d0>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman3web', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)host2.mailhub4u.com'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'host2.mailhub4u.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': 'fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '209.95.44.128', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)host2.mailhub4u.com'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
1 year, 5 months

[MM3-users] What is this EMail trying to tell me
by Martin Lorenz
Since I rebootet my VPS yesterday I get tons of these and can't find out what's wrong.
Please help.
-------- Weitergeleitete Nachricht --------
Betreff: [Django] ERROR (EXTERNAL IP): Service Unavailable: /mailman3/lists/ku-venne-2020.list.poc.im/
Datum: Fri, 09 Dec 2022 04:58:15 -0000
Von: django(a)poc.im
An: root@localhost
Service Unavailable: /mailman3/lists/ku-venne-2020.list.poc.im/
Report at /mailman3/lists/ku-venne-2020.list.poc.im/
Service Unavailable: /mailman3/lists/ku-venne-2020.list.poc.im/
Request Method: GET
Request URL: http://list.holoclan.de/mailman3/lists/ku-venne-2020.list.poc.im/
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.9.2
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '/opt/mailman/venv/lib/python3.9/site-packages']
Server time: Fri, 9 Dec 2022 04:58:15 +0000
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Request information:
USER: AnonymousUser
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_CHARSET = 'utf-8;q=0.7,iso-8859-1;q=0.2,*;q=0.1'
HTTP_CONNECTION = 'close'
HTTP_HOST = 'list.holoclan.de'
HTTP_USER_AGENT = 'Mozilla/5.0 (compatible; DotBot/1.2; +https://opensiteexplorer.org/dotbot; help(a)moz.com)'
HTTP_X_FORWARDED_FOR = '216.244.66.197'
HTTP_X_FORWARDED_HOST = 'list.holoclan.de'
HTTP_X_FORWARDED_PROTO = 'http'
PATH_INFO = '/mailman3/lists/ku-venne-2020.list.poc.im/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/mailman3/lists/ku-venne-2020.list.poc.im/'
SCRIPT_NAME = ''
SERVER_NAME = 'arda.holoclan.de'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
uwsgi.core = 1
uwsgi.node = b'arda.holoclan.de'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f8d77ae15f0>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'root@localhost'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'list.holoclan.de', 'list.poc.im', 'list.lorenz.im']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f8d816d30d0>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailmanweb', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'mailman(a)list.poc.im'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': 'fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'django(a)poc.im'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo', 'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'], 'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale', 'timezone'], 'VERSION': 'v2.4'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
2 years, 4 months

[MM3-users] [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/
by Christian
How can I resolve this error please? Running GNU Mailman Core version 3.3.5,
API version 3.1, Python Version 3.7.3, on Debian 4.19.316-1
Internal Server Error: /archives/
Report at /archives/
Internal Server Error: /archives/
Request Method: GET
Request URL: https://lists.ccalternatives.org/archives/?sort=active%22
Django Version: 3.2.15
Python Executable: /opt/mailman/mm/venv/bin/python Python Version: 3.7.3
Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin',
'/usr/lib/python37.zip', '/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/opt/mailman/mm/venv/lib/python3.7/site-packages']
Server time: Tue, 22 Apr 2025 03:34:51 -0700 Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
None
Request information:
USER: AnonymousUser
GET:
sort = 'active"'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, br, deflate'
HTTP_CONNECTION = 'close'
HTTP_FROM = 'gptbot(at)openai.com'
HTTP_HOST = '127.0.0.1:8000'
HTTP_USER_AGENT = 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko;
compatible; GPTBot/1.2; +https://openai.com/gptbot)'
HTTP_X_FORWARDED_FOR = '20.171.207.133'
HTTP_X_FORWARDED_HOST = 'lists.ccalternatives.org'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'lists.ccalternatives.org'
HTTP_X_OPENAI_HOST_HASH = '910456030'
PATH_INFO = '/archives/'
QUERY_STRING = 'sort=active%22'
RAW_URI = '/archives/?sort=active%22'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '33220'
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/20.0.4'
gunicorn.socket = <socket.socket fd=4, family=AddressFamily.AF_INET,
type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000),
raddr=('127.0.0.1', 33220)> wsgi.errors =
<gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f00da285278>
wsgi.file_wrapper = <class 'gunicorn.http.wsgi.FileWrapper'> wsgi.input =
<gunicorn.http.body.Body object at 0x7f00da285a20> wsgi.input_terminated =
True wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Admin', 'csa(a)web-analysts.net'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'lists.ccalternatives.org',
'192.46.218.224', 'zarathustra.ccalternatives.org', '192.168.0.1']
APPEND_SLASH = True AUTHENTICATION_BACKENDS =
"('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/mailman/mm'
BROWSERID_AUDIENCES = ['http://localhost', 'http://localhost:8000',
'http://127.0.0.1:8000', 'http://lists.ccalternatives.org',
'https://localhost', 'https://localhost:8000', 'https://127.0.0.1:8000',
'https://lists.ccalternatives.org']
CACHES = {'default': {'BACKEND':
'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION':
'127.0.0.1:11211'}} CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js':
'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css':
['compressor.filters.css_default.CssAbsoluteFilter'], 'js':
['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f00e0e8d620> COMPRESS_MINT_DELAY
= 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sass -t compressed {infile}
{outfile}'), ('text/x-sass', 'sass -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/mm/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL =
'/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************',
'HOST': '127.0.0.1', 'PORT': '', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT':
True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST':
{'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None,
'NAME': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y
%H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b
%d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d
%B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR
= '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER =
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply(a)lists.ccalternatives.org'
DEFAULT_HASHING_ALGORITHM = 'sha256'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_CONFIRMATION_FROM = 'postmaster(a)lists.ccalternatives.org'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS =
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/opt/mailman/mm/fulltext_index'}}
HYPERKITTY_DISABLE_SINGLETON_TASKS = True IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.messages',
'django.contrib.staticfiles', 'rest_framework', 'django_gravatar',
'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth',
'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian
Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'),
('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs',
'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da',
'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'),
('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British
English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian
Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'),
('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et',
'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr',
'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'),
('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'),
('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia',
'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is',
'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'),
('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'),
('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt',
'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'),
('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian
Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'),
('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt',
'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru',
'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'),
('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw',
'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th',
'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm',
'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi',
'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional
Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur'] LANGUAGE_CODE
= 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'},
'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler',
'filename': '/opt/mailman/mm/logs/mailmansuite.log', 'formatter':
'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter':
'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins',
'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers':
['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers':
['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format':
'%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple':
{'format': '%(levelname)s %(message)s'}}} LOGGING_CONFIG =
'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '::ffff:127.0.0.1',
'192.46.218.224')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.ccalternatives.org'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'noreply(a)lists.ccalternatives.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 3
SOCIALACCOUNT_PROVIDERS = {'google': {'SCOPE': ['profile', 'email'],
'AUTH_PARAMS': {'access_type': 'online'}}, 'gitlab': {'SCOPE':
['read_user']}} STATICFILES_DIRS = '()'
STATICFILES_FINDERS =
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/mm/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE =
'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_SSL = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
4 days, 18 hours

[MM3-users] Internal Server Error: /archives/
by Christian
What is this error and how can I fix it please? Running Debian 4.19.316-1
-----Original Message-----
From: noreply(a)lists.domedoman.ie <noreply(a)lists.domedoman.ie>
Sent: Friday, November 29, 2024 5:08 AM
To: csa(a)web-analysts.net
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/
Internal Server Error: /archives/
Report at /archives/
Internal Server Error: /archives/
Request Method: GET
Request URL: https://lists.domedoman.ie/archives/?sort=active%22%27!
Django Version: 3.2.15
Python Executable: /opt/mailman/mm/venv/bin/python Python Version: 3.7.3 Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/opt/mailman/mm/venv/lib/python3.7/site-packages']
Server time: Fri, 29 Nov 2024 05:07:58 -0800 Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
None
Request information:
USER: AnonymousUser
GET:
sort = 'active"\'!'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
HTTP_ACCEPT_ENCODING = 'gzip,deflate'
HTTP_CONNECTION = 'close'
HTTP_HOST = '127.0.0.1:8000'
HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.2.5 (KHTML, like Gecko) Version/8.0.2 Safari/600.2.5 (Amazonbot/0.1; +https://developer.amazon.com/support/amazonbot)'
HTTP_X_FORWARDED_FOR = '52.204.37.237'
HTTP_X_FORWARDED_HOST = 'lists.domedoman.ie'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'lists.domedoman.ie'
PATH_INFO = '/archives/'
QUERY_STRING = 'sort=active%22%27!'
RAW_URI = '/archives/?sort=active%22%27!'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '38786'
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/20.0.4'
gunicorn.socket = <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 38786)> wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7fe24109e6d8> wsgi.file_wrapper = <class 'gunicorn.http.wsgi.FileWrapper'> wsgi.input = <gunicorn.http.body.Body object at 0x7fe240d83080> wsgi.input_terminated = True wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Admin', 'csa(a)web-analysts.net'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'lists.domedoman.ie', '192.46.218.224', 'zarathustra.domedoman.ie', '192.168.0.1'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/mailman/mm'
BROWSERID_AUDIENCES = ['http://localhost', 'http://localhost:8000', 'http://127.0.0.1:8000', 'http://lists.domedoman.ie', 'https://localhost', 'https://localhost:8000', 'https://127.0.0.1:8000', 'https://lists.domedoman.ie']
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211'}} CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'js': ['compressor.filters.jsmin.JSMinFilter'], 'css': ['compressor.filters.css_default.CssAbsoluteFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fe24756d620> COMPRESS_MINT_DELAY = 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sass -t compressed {infile} {outfile}'), ('text/x-sass', 'sass -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/mm/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply(a)lists.domedoman.ie'
DEFAULT_HASHING_ALGORITHM = 'sha256'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_CONFIRMATION_FROM = 'postmaster(a)lists.domedoman.ie'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/opt/mailman/mm/fulltext_index'}}
HYPERKITTY_DISABLE_SINGLETON_TASKS = True IGNORABLE_404_URLS = [] INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur'] LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/mm/logs/mailmansuite.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}} LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '::ffff:127.0.0.1', '192.46.218.224')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.domedoman.ie'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default'} ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'noreply(a)lists.domedoman.ie'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 3
SOCIALACCOUNT_PROVIDERS = {'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'gitlab': {'SCOPE': ['read_user']}} STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/mm/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_SSL = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
4 months, 4 weeks

[MM3-users] Re: Bad Signature with Gmail
by Massimo Zappalà
Hi Mark, thanks for the reply.
my /etc/opendkim.conf
AutoRestart Yes
AutoRestartRate 10/1h
UMask 002
Syslog yes
SyslogSuccess Yes
LogWhy Yes
Canonicalization relaxed/simple
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
Mode sv
PidFile /var/run/opendkim/opendkim.pid
SignatureAlgorithm rsa-sha256
UserID opendkim:opendkim
Socket inet:12301@localhost
my /etc/opendkim/SigningTable
*(a)catania.linux.it mailselector._domainkey.catania.linux.it
full email django error
Internal Server Error: /hyperkitty/api/mailman/archive
OperationalError at /hyperkitty/api/mailman/archive
(1366, "Incorrect string value: '\\xF0\\x9F\\x98\\xB1\\xF0\\x9F...' for column `mailman3web`.`hyperkitty_email`.`content` at row 1")
Request Method: POST
Request URL: https://lists.catania.linux.it/hyperkitty/api/mailman/archive?key=mykey
Django Version: 1.11.29
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['.', '', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']
Server time: Sab, 19 Set 2020 20:05:41 +0200
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
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/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py" in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
The above exception ((1366, "Incorrect string value: '\\xF0\\x9F\\x98\\xB1\\xF0\\x9F...' for column `mailman3web`.`hyperkitty_email`.`content` at row 1")) was the direct cause of the following exception:
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/http.py" in inner
40. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in _decorator
69. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in archive
115. add_to_list(mlist_fqdn, msg)
File "/usr/lib/python3/dist-packages/hyperkitty/lib/incoming.py" in add_to_list
151. email.save()
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in save
808. force_update=force_update, update_fields=update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in save_base
838. updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in _save_table
924. result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in _do_insert
963. using=using, raw=raw)
File "/usr/lib/python3/dist-packages/django/db/models/manager.py" in manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/lib/python3/dist-packages/django/db/models/query.py" in _insert
1079. return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py" in execute_sql
1112. cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/utils.py" in __exit__
94. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/lib/python3/dist-packages/django/utils/six.py" in reraise
685. raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py" in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
Exception Type: OperationalError at /hyperkitty/api/mailman/archive
Exception Value: (1366, "Incorrect string value: '\\xF0\\x9F\\x98\\xB1\\xF0\\x9F...' for column `mailman3web`.`hyperkitty_email`.`content` at row 1")
Request information:
USER: AnonymousUser
GET:
key = 'mykey'
POST:
mlist = 'lug(a)catania.linux.it'
FILES:
message = <InMemoryUploadedFile: message.txt ()>
COOKIES: No cookie data
META:
CONTENT_LENGTH = '2485'
CONTENT_TYPE = 'multipart/form-data; boundary=3fc2cf34ecf58287e2b148ab43b4b111'
DOCUMENT_ROOT = '/usr/share/nginx/html'
HTTPS = 'on'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_CONNECTION = 'keep-alive'
HTTP_CONTENT_LENGTH = '2485'
HTTP_CONTENT_TYPE = 'multipart/form-data; boundary=3fc2cf34ecf58287e2b148ab43b4b111'
HTTP_HOST = 'lists.catania.linux.it'
HTTP_USER_AGENT = 'python-requests/2.21.0'
PATH_INFO = '/hyperkitty/api/mailman/archive'
QUERY_STRING = 'key=mykey'
REMOTE_ADDR = '95.216.191.209'
REMOTE_PORT = '35022'
REQUEST_METHOD = 'POST'
REQUEST_SCHEME = 'https'
REQUEST_URI = '/hyperkitty/api/mailman/archive?key=mykey'
SCRIPT_NAME = ''
SERVER_NAME = 'lists.catania.linux.it'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 0
uwsgi.node = b'glugct.catania.linux.it'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f9cb9209438>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'admin(a)catania.linux.it'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_COMPRESSOR = 'compressor.css.CssCompressor'
COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter']
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f9cb829cd90>
COMPRESS_JS_COMPRESSOR = 'compressor.js.JsCompressor'
COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/less', 'lessc {infile} {outfile}'), ('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman3web', 'USER': 'mailman3web', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)lists.catania.linux.it'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'lists.catania.linux.it'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'it-IT'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '::ffff:127.0.0.1', '95.216.191.209')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)lists.catania.linux.it'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'Europe/Rome'
USE_ETAGS = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
Max
4 years, 7 months

[MM3-users] Internal Server Error: Reattach this thread
by hasimoto@designet.co.jp
Hi,
In the archive, clicking "Reconnect this thread" causes an internal server error.
I received the following email, but I don't know how to solve it, please help me.
-- -- -- --
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/list/testml@list1.example.com/thread/LQ6F7D7EVVUSIJJ7B5S675ZVSU5ZZCBU/reattach-suggest
-- -- -- --
Internal Server Error: /archives/list/testml@list1.example.com/thread/LQ6F7D7EVVUSIJJ7B5S675ZVSU5ZZCBU/reattach-suggest
AttributeError at /archives/list/testml@list1.example.com/thread/LQ6F7D7EVVUSIJJ7B5S675ZVSU5ZZCBU/reattach-suggest
'function' object has no attribute 'lower'
Request Method: GET
Request URL: http://mailman.example.com/archives/list/testml@list1.example.com/thread/LQ…
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.10.6
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/opt/mailman/venv/lib/python3.10/site-packages']
Server time: 水, 19 10月 2022 01:07:28 +0000
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/lib/view_helpers.py", line 134, in inner
return func(request, *args, **kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/views/thread.py", line 413, in reattach_suggest
default_search_query = stripped_subject(
File "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/lib/utils.py", line 155, in stripped_subject
if subject.lower().startswith(mlist.subject_prefix.lower()):
Exception Type: AttributeError at /archives/list/testml@list1.example.com/thread/LQ6F7D7EVVUSIJJ7B5S675ZVSU5ZZCBU/reattach-suggest
Exception Value: 'function' object has no attribute 'lower'
Request information:
USER: admin
GET:
q = ''
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = 'cBq9h8x7bG6BMboc89DB8ucQiToTRTpwijt0uJbVXq47ucV2cAGYh05TsaVARobK'
sessionid = 'upuj3rv0wkxafklk633lx2jppwgrco1t'
META:
CSRF_COOKIE = 'cBq9h8x7bG6BMboc89DB8ucQiToTRTpwijt0uJbVXq47ucV2cAGYh05TsaVARobK'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_ACCEPT_LANGUAGE = 'ja,en-US;q=0.7,en;q=0.3'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'csrftoken=cBq9h8x7bG6BMboc89DB8ucQiToTRTpwijt0uJbVXq47ucV2cAGYh05TsaVARobK; sessionid=upuj3rv0wkxafklk633lx2jppwgrco1t'
HTTP_HOST = 'mailman.example.com'
HTTP_REFERER = 'http://mailman.example.com/archives/list/testml@list1.example.com/thread/LQ…'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0'
HTTP_X_FORWARDED_FOR = '192.168.30.94'
HTTP_X_REQUESTED_WITH = 'XMLHttpRequest'
PATH_INFO = '/archives/list/testml@list1.example.com/thread/LQ6F7D7EVVUSIJJ7B5S675ZVSU5ZZCBU/reattach-suggest'
QUERY_STRING = 'q='
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/archives/list/testml@list1.example.com/thread/LQ6F7D7EVVUSIJJ7B5S675ZVSU5ZZCBU/reattach-suggest?q='
SCRIPT_NAME = ''
SERVER_NAME = 'ubuntu22'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
uwsgi.core = 0
uwsgi.node = b'ubuntu22'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f4ac0d23570>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'http'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'admin1(a)example.org'),)"
ALLOWED_HOSTS = ['127.0.0.1', 'mailman.example.com']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f4ac443e050>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailmanweb', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'admin1(a)example.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': 'fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://mailman.example.com/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'admin1(a)example.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo', 'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'], 'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale', 'timezone'], 'VERSION': 'v2.4'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
-- -- -- --
Thank you.
2 years, 6 months

[MM3-users] Help with Newbie error -- I think I deleted my server
by William Oliver
I have recently installed mailman3 on a Debian system with Posftix and
Dovecot. I did it directly and did not use the docker setup.
I managed to get it working to the point that I could send mail locally
and outside my domain through mailman and log in as administrator.
I decided to add a domain, but noticed on the form that the server was
called "example.com." Clearly, I thought, I missed a configuration item
here.
I clicked on that, and it took me to a page where I could add servers.
So, I added my real domain (libertyfp.org) It successfully added it,
so I decided that I clearly didn't need "example.com" as a server, and
deleted it using the same page.
Immediately, I got an "internal server error" and have now lost all web
interfaces. I tried restarting the daemons and rebooting the box, to
no avail.
The error message sent to my admin email is shown below.
So... I have a couple of questions:
1) How can I set libertyfp.org as my server by use of a config file?
2) Failing that, how do a add "example.com" back, since I no longer
have the web interface?
I can't believe I did this. It took me a week to get this up and
working, and I destroyed it in ten minutes after it was working.
Any help would be appreciated. I suppose reinstalling will go much more
quickly, since I know the mistakes I made over the past few days, but I
really don't want to do that...
Here's what it sends me:
DoesNotExist at /mailman3/lists/
Site matching query does not exist.
Request Method: GET
Request URL: https://www.libertyfp.org/mailman3/lists/
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.9.2
Python Path: ['/etc/mailman3/', '.', '', '/etc/mailman3',
'/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-
dynload', '/opt/mailman/venv/lib/python3.9/site-packages']
Server time: Sat, 25 Dec 2021 04:14:00 +0000
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/venv/lib/python3.9/site-
packages/postorius/views/list.py", line 978, in list_index
return render(request, template,
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request,
using=using)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/template/base.py", line 169, in render
with context.bind_template(self):
File "/usr/lib/python3.9/contextlib.py", line 117, in __enter__
return next(self.gen)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/template/context.py", line 246, in bind_template
updates.update(processor(self.request))
File "/opt/mailman/venv/lib/python3.9/site-
packages/django_mailman3/context_processors.py", line 32, in common
context["site_name"] = get_current_site(request).name
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/contrib/sites/shortcuts.py", line 13, in
get_current_site
return Site.objects.get_current(request)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/contrib/sites/models.py", line 58, in get_current
return self._get_site_by_id(site_id)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/contrib/sites/models.py", line 30, in _get_site_by_id
site = self.get(pk=site_id)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/opt/mailman/venv/lib/python3.9/site-
packages/django/db/models/query.py", line 415, in get
raise self.model.DoesNotExist(
Exception Type: DoesNotExist at /mailman3/lists/
Exception Value: Site matching query does not exist.
Request information:
USER: AnonymousUser
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken =
'qklMdfLOyqa1TWm0b8nEHMFVBLaa0CgU2DXhSywjpgZMTnCSTNA4MkD4lGLB6z5N'
META:
CSRF_COOKIE =
'qklMdfLOyqa1TWm0b8nEHMFVBLaa0CgU2DXhSywjpgZMTnCSTNA4MkD4lGLB6z5N'
CSRF_COOKIE_USED = True
HTTP_ACCEPT =
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image
/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9'
HTTP_CONNECTION = 'close'
HTTP_COOKIE =
'csrftoken=qklMdfLOyqa1TWm0b8nEHMFVBLaa0CgU2DXhSywjpgZMTnCSTNA4MkD4lGLB
6z5N'
HTTP_DNT = '1'
HTTP_HOST = 'www.libertyfp.org'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'none'
HTTP_SEC_FETCH_USER = '?1'
HTTP_SEC_GPC = '1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
HTTP_X_FORWARDED_FOR = '174.212.65.52'
HTTP_X_FORWARDED_HOST = 'www.libertyfp.org'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'www.libertyfp.org'
PATH_INFO = '/mailman3/lists/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/mailman3/lists/'
SCRIPT_NAME = ''
SERVER_NAME = 'libertyfp.org'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
uwsgi.core = 0
uwsgi.node = b'libertyfp.org'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f8591167d90>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'fp145(a)libertyfp.org'),)"
ALLOWED_HOSTS = ['localhost', 'www.libertyfp.org', 'libertyfp.org',
'mail.libertyfp.org', 'list.libertyfp.org', '127.0.0.1']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS =
"('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js':
'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css':
['compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.cssmin.rCSSMinFilter'], 'js':
['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f859064d670>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = False
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile}
{outfile}'), ('text/x-sass', 'sassc -t compressed {infile}
{outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE':
'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman', 'USER':
'mailman', 'PASSWORD': '********************', 'HOST': 'localhost',
'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True,
'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST':
{'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y
%H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER =
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'mailman(a)libertyfp.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = 'mailman(a)libertyfp.org'
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS =
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/opt/mailman/web/fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.messages',
'django.contrib.staticfiles', 'rest_framework', 'django_gravatar',
'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth',
'allauth.account', 'allauth.socialaccount']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast',
'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be',
'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'),
('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'),
('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en',
'English'), ('en-au', 'Australian English'), ('en-gb', 'British
English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar',
'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx',
'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve',
'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa',
'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'),
('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he',
'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper
Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia',
'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is',
'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka',
'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'),
('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt',
'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml',
'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my',
'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl',
'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa',
'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br',
'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk',
'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'),
('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'),
('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'),
('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur',
'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified
Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class':
'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO',
'class': 'logging.handlers.WatchedFileHandler', 'filename':
'/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius':
{'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters':
{'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s
%(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE =
'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm':
'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)localhost.local'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER =
'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo',
'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google':
{'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type':
'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'],
'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale',
'timezone'], 'VERSION': 'v2.4'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS =
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
3 years, 4 months

[MM3-users] FW: [Django] ERROR (EXTERNAL IP): Internal Server Error: /user-profile/
by Christian Stalberg
Is this anything to be concerned about? It seems like an attempted break-in as I have no user named alekos.pantazis.
-----Original Message-----
From: noreply(a)lists.ccalternatives.org <noreply(a)lists.ccalternatives.org>
Sent: Tuesday, October 12, 2021 7:55 AM
To: csa(a)web-analysts.net
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /user-profile/
Internal Server Error: /user-profile/
TemplateSyntaxError at /user-profile/
'd_gravatar' is not a registered tag library. Must be one of:
account
admin_list
admin_modify
admin_urls
bootstrap_tags
cache
compress
date_helpers
debugger_tags
gravatar
highlight
highlighting
hk_generic
hk_haystack
i18n
indent_text
l10n
log
markdown
membership_helpers
more_like_this
nav_helpers
p_gravatar
pagination
rest_framework
socialaccount
static
syntax_color
tz
widont
Request Method: GET
Request URL: https://lists.ccalternatives.org/user-profile/
Django Version: 3.0.11
Python Executable: /opt/mailman/mm/venv/bin/python Python Version: 3.7.3 Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/opt/mailman/mm/venv/lib/python3.7/site-packages']
Server time: Tue, 12 Oct 2021 07:54:41 -0700 Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 1021, in find_library
return parser.libraries[name]
During handling of the above exception ('d_gravatar'), another exception occurred:
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/views/profile.py", line 97, in user_profile
'gravatar_url': gravatar_url,
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loader.py", line 61, in render_to_string
template = get_template(template_name, using=using)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loader.py", line 15, in get_template
return engine.get_template(template_name)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/backends/django.py", line 34, in get_template
return Template(self.engine.get_template(template_name), self)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/engine.py", line 143, in get_template
template, origin = self.find_template(template_name)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/engine.py", line 125, in find_template
template = loader.get_template(name, skip=skip)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loaders/cached.py", line 53, in get_template
template = super().get_template(template_name, skip)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loaders/base.py", line 30, in get_template
contents, origin, origin.template_name, self.engine,
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 156, in __init__
self.nodelist = self.compile_nodelist()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 194, in compile_nodelist
return parser.parse()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 477, in parse
raise self.error(token, e)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 475, in parse
compiled_result = compile_func(self, token)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/loader_tags.py", line 266, in do_extends
nodelist = parser.parse()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 477, in parse
raise self.error(token, e)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/base.py", line 475, in parse
compiled_result = compile_func(self, token)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 1078, in load
lib = find_library(parser, name)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/template/defaulttags.py", line 1025, in find_library
name, "\n".join(sorted(parser.libraries)),
Exception Type: TemplateSyntaxError at /user-profile/ Exception Value: 'd_gravatar' is not a registered tag library. Must be one of:
account
admin_list
admin_modify
admin_urls
bootstrap_tags
cache
compress
date_helpers
debugger_tags
gravatar
highlight
highlighting
hk_generic
hk_haystack
i18n
indent_text
l10n
log
markdown
membership_helpers
more_like_this
nav_helpers
p_gravatar
pagination
rest_framework
socialaccount
static
syntax_color
tz
widont
Request information:
USER: alekos.pantazis
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = 'qYEFt1aMtwVpwCk4CX0vJca60Vq74nuPFdpVsSpxSlXcuNILLVDA6I5PS8VM35fi'
sessionid = 'lxn3gc50hvx9l8nbhcx9eq8hbg9wcdmj'
META:
CSRF_COOKIE = 'qYEFt1aMtwVpwCk4CX0vJca60Vq74nuPFdpVsSpxSlXcuNILLVDA6I5PS8VM35fi'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9,el;q=0.8,es;q=0.7'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'csrftoken=qYEFt1aMtwVpwCk4CX0vJca60Vq74nuPFdpVsSpxSlXcuNILLVDA6I5PS8VM35fi; sessionid=lxn3gc50hvx9l8nbhcx9eq8hbg9wcdmj'
HTTP_DNT = '1'
HTTP_HOST = '127.0.0.1:8000'
HTTP_REFERER = 'https://lists.ccalternatives.org/mailman3/lists/?all-lists'
HTTP_SEC_CH_UA = '"Chromium";v="94", "Google Chrome";v="94", ";Not A Brand";v="99"'
HTTP_SEC_CH_UA_MOBILE = '?0'
HTTP_SEC_CH_UA_PLATFORM = '"Windows"'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'
HTTP_X_FORWARDED_FOR = '109.242.137.79'
HTTP_X_FORWARDED_HOST = 'lists.ccalternatives.org'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'lists.ccalternatives.org'
PATH_INFO = '/user-profile/'
QUERY_STRING = ''
RAW_URI = '/user-profile/'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '41760'
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/20.0.4'
gunicorn.socket = <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 41760)> wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f57fcb5f048> wsgi.file_wrapper = ''
wsgi.input = <gunicorn.http.body.Body object at 0x7f57fcc5cc18> wsgi.input_terminated = True wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Admin', 'csa(a)web-analysts.net'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'lists.ccalternatives.org', '192.46.218.224'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/mailman/mm'
BROWSERID_AUDIENCES = ['http://localhost', 'http://localhost:8000', 'http://127.0.0.1:8000', 'http://lists.ccalternatives.org', 'https://localhost', 'https://localhost:8000', 'https://127.0.0.1:8000', 'https://lists.ccalternatives.org']
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211'}} CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f58032bd7b8> COMPRESS_MINT_DELAY = 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sass -t compressed {infile} {outfile}'), ('text/x-sass', 'sass -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/mm/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply(a)lists.ccalternatives.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_CONFIRMATION_FROM = 'postmaster(a)lists.ccalternatives.org'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/opt/mailman/mm/fulltext_index'}}
HYPERKITTY_DISABLE_SINGLETON_TASKS = True IGNORABLE_404_URLS = [] INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur'] LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/mm/logs/mailmansuite.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}} LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '::ffff:127.0.0.1', '192.46.218.224')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.ccalternatives.org'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default'} ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'noreply(a)lists.ccalternatives.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 3
SOCIALACCOUNT_PROVIDERS = {'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'gitlab': {'SCOPE': ['read_user']}} STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/mm/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_SSL = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
3 years, 6 months

[MM3-users] Fwd: [Django] ERROR (EXTERNAL IP): Internal Server Error: /mailman3/hyperkitty/api/mailman/archive
by Gordon Dickens
My mailman3 installation has now been up and running successfully for
several weeks without any issues and then the following error message
was emailed to me by my server.
What's up with this error message and what do I need to do?
Thanks,
Gordon
-------- Forwarded Message --------
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error:
/mailman3/hyperkitty/api/mailman/archive
Date: Fri, 20 Nov 2020 01:25:41 -0000
From: [1]root(a)host2.mailhub4u.com
To: [2]gordon(a)mailhub4u.com
Internal Server Error: /mailman3/hyperkitty/api/mailman/archive
OperationalError at /hyperkitty/api/mailman/archive
(1366, "Incorrect string value: '\\xF0\\x9F\\xA4\\xA3\\xF0\\x9F...' for
column `mailman3web`.`hyperkitty_email`.`content` at row 1")
Request Method: POST
Request URL:
[3]http://localhost/mailman3/hyperkitty/api/mailman/archive?key=0123456
789abcdef0123456789ABCDEF
Django Version: 1.11.29
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['.', '', '/usr/lib/python37.zip', '/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/usr/local/lib/python3.7/dist-packages',
'/usr/lib/python3/dist-packages']
Server time: Fri, 20 Nov 2020 01:25:40 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback:
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in
execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py"
in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in
defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
The above exception ((1366, "Incorrect string value:
'\\xF0\\x9F\\xA4\\xA3\\xF0\\x9F...' for column
`mailman3web`.`hyperkitty_email`.`content` at row 1")) was the direct
cause of the following exception:
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py"
in inner
41. response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in
_get_response
187. response = self.process_exception_by_middleware(e, request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in
_get_response
185. response = wrapped_callback(request, *callback_args,
**callback_kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/http.py"
in inner
40. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in
_decorator
69. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/csrf.py"
in wrapped_view
58. return view_func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in
archive
115. add_to_list(mlist_fqdn, msg)
File "/usr/lib/python3/dist-packages/hyperkitty/lib/incoming.py" in
add_to_list
151. email.save()
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in save
808. force_update=force_update, update_fields=update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in
save_base
838. updated = self._save_table(raw, cls, force_insert, force_update,
using, update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in
_save_table
924. result = self._do_insert(cls._base_manager, using, fields,
update_pk, raw)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in
_do_insert
963. using=using, raw=raw)
File "/usr/lib/python3/dist-packages/django/db/models/manager.py" in
manager_method
85. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/usr/lib/python3/dist-packages/django/db/models/query.py" in
_insert
1079. return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py"
in execute_sql
1112. cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in
execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/utils.py" in __exit__
94. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/lib/python3/dist-packages/django/utils/six.py" in reraise
685. raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in
execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py"
in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in
defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
Exception Type: OperationalError at /hyperkitty/api/mailman/archive
Exception Value: (1366, "Incorrect string value:
'\\xF0\\x9F\\xA4\\xA3\\xF0\\x9F...' for column
`mailman3web`.`hyperkitty_email`.`content` at row 1")
Request information:
USER: AnonymousUser
GET:
key = '0123456789abcdef0123456789ABCDEF'
POST:
mlist = '[4]members(a)georgiajets.org'
FILES:
message = <InMemoryUploadedFile: message.txt ()>
COOKIES: No cookie data
META:
CONTENT_LENGTH = '7720'
CONTENT_TYPE = 'multipart/form-data;
boundary=8da553dce5f76815f62f12a1b8c0efac'
CONTEXT_DOCUMENT_ROOT = '/var/www/html'
CONTEXT_PREFIX = ''
DOCUMENT_ROOT = '/var/www/html'
GATEWAY_INTERFACE = 'CGI/1.1'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_CONNECTION = 'keep-alive'
HTTP_HOST = 'localhost'
HTTP_USER_AGENT = 'python-requests/2.21.0'
PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PATH_INFO = '/hyperkitty/api/mailman/archive'
QUERY_STRING = 'key=0123456789abcdef0123456789ABCDEF'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '53006'
REQUEST_METHOD = 'POST'
REQUEST_SCHEME = 'http'
REQUEST_URI =
'/mailman3/hyperkitty/api/mailman/archive?key=0123456789abcdef012345678
9ABCDEF'
SCRIPT_FILENAME =
'proxy:uwsgi://localhost//hyperkitty/api/mailman/archive'
SCRIPT_NAME = '/mailman3'
SERVER_ADDR = '127.0.0.1'
SERVER_ADMIN = 'webmaster@localhost'
SERVER_NAME = 'localhost'
SERVER_PORT = '80'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SIGNATURE = '<address>Apache/2.4.38 (Debian) Server at localhost
Port 80</address>\n'
SERVER_SOFTWARE = 'Apache/2.4.38 (Debian)'
uwsgi.core = 0
uwsgi.node = b'slc.mailhub4u.com'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f6a278df600>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', '[5]gordon(a)mailhub4u.com'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS =
"('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_COMPRESSOR = 'compressor.css.CssCompressor'
COMPRESS_CSS_FILTERS =
['compressor.filters.css_default.CssAbsoluteFilter']
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_JINJA2_GET_ENVIRONMENT = <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f6a2d586620>
COMPRESS_JS_COMPRESSOR = 'compressor.js.JsCompressor'
COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/less', 'lessc {infile} {outfile}'),
('text/x-scss', 'sassc -t compressed {infile} {outfile}'),
('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':
'mailman3web', 'USER': 'mailman3web', 'PASSWORD':
'********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS':
{'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME':
None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y
%H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER =
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = '[6]postorius(a)host2.mailhub4u.com'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'host2.mailhub4u.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS =
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.messages',
'django.contrib.staticfiles', 'rest_framework', 'django_gravatar',
'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth',
'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast',
'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be',
'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'),
('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'),
('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en',
'English'), ('en-au', 'Australian English'), ('en-gb', 'British
English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar',
'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx',
'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve',
'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa',
'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'),
('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he',
'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper
Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id',
'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'),
('ja', 'Japanese'), ('ka', 'Georgian'), ('kk', 'Kazakh'), ('km',
'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'),
('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml',
'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my',
'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl',
'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa',
'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br',
'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk',
'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'),
('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'),
('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'),
('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur',
'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'),
('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class':
'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', 'filename':
'/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}, 'postorius':
{'handlers': ['file'], 'level': 'INFO', 'propagate': True}},
'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s
%(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s
%(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE =
'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = '[7]http://localhost/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default',
'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = '[8]root(a)host2.mailhub4u.com'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER =
'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS =
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_ETAGS = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
References
1. mailto:root@host2.mailhub4u.com
2. mailto:gordon@mailhub4u.com
3. http://localhost/mailman3/hyperkitty/api/mailman/archive?key=0123456789abcd…
4. mailto:members@georgiajets.org
5. mailto:gordon@mailhub4u.com
6. mailto:postorius@host2.mailhub4u.com
7. http://localhost/mailman3/
8. mailto:root@host2.mailhub4u.com
4 years, 5 months

[MM3-users] Hacking attempts?
by Lists
Hi,
We are seeing thousands of these emails every day, looks like someone is trying to hack our Mailman3 but would appreciate someone with more knowledge of MM3 to confirm.
Is this a problem with our setup? i.e. the “Internal Server Error” bit, or are the hackers just sending bad data that is causing the error? also how do we stop/block this?
TIA and here is a typical email:
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /mailman3/accounts/fedora/login/
Internal Server Error: /mailman3/accounts/fedora/login/
TypeError at /accounts/fedora/login/
_openid_consumer() missing 2 required positional arguments: 'provider' and 'endpoint'
Request Method: GET
Request URL: https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next… <https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next…>
Django Version: 2.2.26
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: Thu, 14 Jul 2022 02:34:04 -0400
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
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/lib/python3/dist-packages/django/views/generic/base.py" in view
71. return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/generic/base.py" in dispatch
97. return handler(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py" in get
56. return self.post(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py" in post
67. client = _openid_consumer(request)
Exception Type: TypeError at /accounts/fedora/login/
Exception Value: _openid_consumer() missing 2 required positional arguments: 'provider' and 'endpoint'
Request information:
USER: AnonymousUser
GET:
process = 'login'
next = '/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:mailman3/hyperkitty/list/44net@mailman.ampr.org>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
CONTEXT_DOCUMENT_ROOT = '/var/www/html'
CONTEXT_PREFIX = ''
DOCUMENT_ROOT = '/var/www/html'
GATEWAY_INTERFACE = 'CGI/1.1'
HTTPS = 'on'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip,deflate'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_HOST = 'mailman.ardc.net <http://mailman.ardc.net/>'
HTTP_USER_AGENT = 'Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/ <http://webmeup-crawler.com/>)'
PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PATH_INFO = '/accounts/fedora/login/'
QUERY_STRING = 'process=login&next=/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
REMOTE_ADDR = '157.90.177.212'
REMOTE_PORT = '63384'
REQUEST_METHOD = 'GET'
REQUEST_SCHEME = 'https'
REQUEST_URI = '/mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
SCRIPT_FILENAME = 'proxy:uwsgi://localhost//accounts/fedora/login/' <uwsgi://localhost//accounts/fedora/login/'>
SCRIPT_NAME = '/mailman3'
SERVER_ADDR = '44.1.1.29'
SERVER_ADMIN = 'postmaster(a)ardc.net <mailto:postmaster@ardc.net>'
SERVER_NAME = 'mailman.ardc.net <http://mailman.ardc.net/>'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SIGNATURE = '<address>Apache/2.4.53 (Debian) Server at mailman.ardc.net <http://mailman.ardc.net/> Port 443</address>\n'
SERVER_SOFTWARE = 'Apache/2.4.53 (Debian)'
SSL_TLS_SNI = 'mailman.ardc.net <http://mailman.ardc.net/>'
uwsgi.core = 1
uwsgi.node = b'mailman'
uwsgi.version = b'2.0.19.1-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f8e0b4a0410>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'postmaster(a)ardc.net <mailto:postmaster@ardc.net>'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f8e17d7a670>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = '()'
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': ‘X.X.X.X', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)mailman.ardc.net <mailto:postorius@mailman.ardc.net>'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'mailman.ardc.net <http://mailman.ardc.net/>'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'django_mailman3.lib.auth.fedora')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '10.4.16.129', '44.1.1.29')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/ <http://localhost/mailman3/>'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)mailman.ardc.net <mailto:root@mailman.ardc.net>'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y’
2 years, 9 months

[MM3-users] hyperkitty: "incorrect string value" for botched utf-8 encoding
by thoralf
hi,
my hyperkitty installation (3.2.1 from debian buster) started to act up
recently with
(1366, "Incorrect string value: '\\xF0\\x9F\\x99\\x82\\x0AA...' for
column `mailman3web`.`hyperkitty_email`.`content` at row 1")
for every new mail that is about to be archived, i'll quote the full
error mail at the end of this mail.
i traced the issue to a slighty smiling face (aka u+1f642) in this
rather interestingly encoded email:
[…]
Content-Type: multipart/mixed;
boundary="===============2457401976140816263=="
--===============2457401976140816263==
Content-Type: multipart/alternative; boundary="5ecb6fd9_327b23c6_2042"
--5ecb6fd9_327b23c6_2042
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
kann halt NIE am mittwoch. viel spass =F0=9F=99=82
[…]
--5ecb6fd9_327b23c6_2042
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
<html xmlns=3D=22http://www.w3.org/1999/xhtml=22>
[…]
<div dir=3D=22auto=22>kann halt NIE am mittwoch. viel spass =F0=9F=99=82<=
/div>
--5ecb6fd9_327b23c6_2042--
[…]
--===============2457401976140816263==--
… which still lingers around in
/var/lib/mailman3/archives/hyperkitty/spool .
is this to be expected, or might it be a good idea to amend mailman3 /
hyperkitty to deal with this more gracefully?
thank you & with kind regards,
t.
---
Internal Server Error: /hyperkitty/api/mailman/archive
OperationalError at /hyperkitty/api/mailman/archive
(1366, "Incorrect string value: '\\xF0\\x9F\\x99\\x82\\x0AA...' for
column `mailman3web`.`hyperkitty_email`.`content` at row 1")
Request Method: POST
Request URL: https://redacted
Django Version: 1.11.28
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['.', '', '/usr/lib/python37.zip', '/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']
Server time: Mon, 25 May 2020 13:26:09 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback:
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py"
in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in
defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
The above exception ((1366, "Incorrect string value:
'\\xF0\\x9F\\x99\\x82\\x0AA...' for column
`mailman3web`.`hyperkitty_email`.`content` at row 1")) was the direct
cause of the following exception:
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py"
in inner
41. response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in
_get_response
187. response =
self.process_exception_by_middleware(e, request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in
_get_response
185. response = wrapped_callback(request,
*callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/http.py" in
inner
40. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in
_decorator
69. return func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/decorators/csrf.py" in
wrapped_view
58. return view_func(*args, **kwargs)
File "/usr/lib/python3/dist-packages/hyperkitty/views/mailman.py" in archive
115. add_to_list(mlist_fqdn, msg)
File "/usr/lib/python3/dist-packages/hyperkitty/lib/incoming.py" in
add_to_list
151. email.save()
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in save
808. force_update=force_update,
update_fields=update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in save_base
838. updated = self._save_table(raw, cls, force_insert,
force_update, using, update_fields)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in
_save_table
924. result = self._do_insert(cls._base_manager, using,
fields, update_pk, raw)
File "/usr/lib/python3/dist-packages/django/db/models/base.py" in _do_insert
963. using=using, raw=raw)
File "/usr/lib/python3/dist-packages/django/db/models/manager.py" in
manager_method
85. return getattr(self.get_queryset(), name)(*args,
**kwargs)
File "/usr/lib/python3/dist-packages/django/db/models/query.py" in _insert
1079. return
query.get_compiler(using=using).execute_sql(return_id)
File "/usr/lib/python3/dist-packages/django/db/models/sql/compiler.py"
in execute_sql
1112. cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/utils.py" in __exit__
94. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/usr/lib/python3/dist-packages/django/utils/six.py" in reraise
685. raise value.with_traceback(tb)
File "/usr/lib/python3/dist-packages/django/db/backends/utils.py" in execute
64. return self.cursor.execute(sql, params)
File "/usr/lib/python3/dist-packages/django/db/backends/mysql/base.py"
in execute
101. return self.cursor.execute(query, args)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
250. self.errorhandler(self, exc, value)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in
defaulterrorhandler
50. raise errorvalue
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in execute
247. res = self._query(query)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _query
411. rowcount = self._do_query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/cursors.py" in _do_query
374. db.query(q)
File "/usr/lib/python3/dist-packages/MySQLdb/connections.py" in query
292. _mysql.connection.query(self, query)
Exception Type: OperationalError at /hyperkitty/api/mailman/archive
Exception Value: (1366, "Incorrect string value:
'\\xF0\\x9F\\x99\\x82\\x0AA...' for column
`mailman3web`.`hyperkitty_email`.`content` at row 1")
Request information:
USER: AnonymousUser
GET:
key = 'redacted'
POST:
mlist = 'redacted'
FILES:
message = <InMemoryUploadedFile: message.txt ()>
COOKIES: No cookie data
META:
CONTENT_LENGTH = '6223'
CONTENT_TYPE = 'multipart/form-data;
boundary=4cd93acbb8c0c45d7bd46fdf1d6a31fa'
CONTEXT_DOCUMENT_ROOT = '/var/www/html'
CONTEXT_PREFIX = ''
DOCUMENT_ROOT = '/var/www/html'
GATEWAY_INTERFACE = 'CGI/1.1'
HTTPS = 'on'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_CONNECTION = 'keep-alive'
HTTP_HOST = 'lists.bing-bong.de'
HTTP_USER_AGENT = 'python-requests/2.21.0'
PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PATH_INFO = '/hyperkitty/api/mailman/archive'
QUERY_STRING = 'key=redacted'
REMOTE_ADDR = '78.47.218.110'
REMOTE_PORT = '36358'
REQUEST_METHOD = 'POST'
REQUEST_SCHEME = 'https'
REQUEST_URI = 'redacted'
SCRIPT_FILENAME = 'proxy:uwsgi://localhost/hyperkitty/api/mailman/archive'
SCRIPT_NAME = ''
SERVER_ADDR = '78.47.218.110'
SERVER_ADMIN = 'admin(a)bing-bong.de'
SERVER_NAME = 'lists.bing-bong.de'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SIGNATURE = '<address>Apache/2.4.38 (Debian) Server at
lists.bing-bong.de Port 443</address>\n'
SERVER_SOFTWARE = 'Apache/2.4.38 (Debian)'
SSL_TLS_SNI = 'lists.bing-bong.de'
uwsgi.core = 1
uwsgi.node = b'bing-bong'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f2ae6af2d68>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'mm3admin(a)bing-bong.de'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_COMPRESSOR = 'compressor.css.CssCompressor'
COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter']
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_JINJA2_GET_ENVIRONMENT = <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f2ae8341f28>
COMPRESS_JS_COMPRESSOR = 'compressor.js.JsCompressor'
COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/less', 'lessc {infile} {outfile}'),
('text/x-scss', 'sassc -t compressed {infile} {outfile}'),
('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':
'mailman3web', 'USER': 'mailman3web', 'PASSWORD':
'********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS':
{'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME':
None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y
%H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER =
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)bing-bong.de'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'bing-bong.de'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS =
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.messages',
'django.contrib.staticfiles', 'rest_framework', 'django_gravatar',
'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth',
'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'),
('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn',
'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'),
('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'),
('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au',
'Australian English'), ('en-gb', 'British English'), ('eo',
'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'),
('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni',
'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et',
'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'),
('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish
Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr',
'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia',
'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is',
'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'),
('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'),
('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk',
'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr',
'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne',
'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os',
'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'),
('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru',
'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'),
('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'),
('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'),
('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk',
'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans',
'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'},
'file': {'level': 'INFO', 'class':
'logging.handlers.RotatingFileHandler', 'filename':
'/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}}, 'formatters':
{'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s
%(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '78.47.218.110',
'2a01:4f8:c17:567::2/64')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://lists.bing-bong.de/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)bing-bong.de'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS =
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_ETAGS = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
4 years, 10 months

[MM3-users] Internal Server Error: /mailman3/accounts/fedora/login/
by Alain D D Williams
Twice today I have received many (50+) emails like the one below.
Many at about 1pm, then it stopped now I am getting them again.
An Internet search does not bring up anything useful.
The domain at the start of 'Request URL' varies as does the name of the list
(in this example 'announce(a)leavesden.org') The domain of the list is not
necessarily the same as the domain at the start of the URL.
I can receive several in a minute.
Anyone any idea ?
----- Forwarded message from root(a)bf2024.phcomp.co.uk -----
Date: Mon, 02 Dec 2024 22:19:12 -0000
From: root(a)bf2024.phcomp.co.uk
To: root@localhost
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /mailman3/accounts/fedora/login/
Internal Server Error: /mailman3/accounts/fedora/login/
TypeError at /accounts/fedora/login/
OpenIDProvider.get_server_settings() missing 1 required positional argument: 'endpoint'
Request Method: GET
Request URL: https://www.leavesden.org.uk/mailman3/accounts/fedora/login/?next=%2Fmailma…
Django Version: 3.2.19
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.11.2
Python Path: ['.', '', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/usr/local/lib/python3.11/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.11/dist-packages']
Server time: Mon, 02 Dec 2024 22:19:07 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_mailman3.lib.auth.fedora')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py", line 56, in get
return self.post(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py", line 67, in post
client = _openid_consumer(
File "/usr/lib/python3/dist-packages/allauth/socialaccount/providers/openid/views.py", line 27, in _openid_consumer
server_settings = provider.get_server_settings(endpoint)
Exception Type: TypeError at /accounts/fedora/login/
Exception Value: OpenIDProvider.get_server_settings() missing 1 required positional argument: 'endpoint'
Request information:
USER: AnonymousUser
GET:
next = '/mailman3/hyperkitty/list/announce(a)leavesden.org.uk/2020/12/'
process = 'login'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
CONTEXT_DOCUMENT_ROOT = '/var/www/leavesden/html'
CONTEXT_PREFIX = ''
DOCUMENT_ROOT = '/var/www/leavesden/html'
GATEWAY_INTERFACE = 'CGI/1.1'
HTTPS = 'on'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip'
HTTP_ACCEPT_LANGUAGE = 'en-us,en-gb,en;q=0.7,*;q=0.3'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_HOST = 'www.leavesden.org.uk'
HTTP_USER_AGENT = 'serpstatbot/2.1 (advanced backlink tracking bot; https://serpstatbot.com/; abuse(a)serpstatbot.com)'
PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PATH_INFO = '/accounts/fedora/login/'
QUERY_STRING = 'next=%2Fmailman3%2Fhyperkitty%2Flist%2Fannounce%40leavesden.org.uk%2F2020%2F12%2F&process=login'
REMOTE_ADDR = '144.76.69.39'
REMOTE_PORT = '33902'
REQUEST_METHOD = 'GET'
REQUEST_SCHEME = 'https'
REQUEST_URI = '/mailman3/accounts/fedora/login/?next=%2Fmailman3%2Fhyperkitty%2Flist%2Fannounce%40leavesden.org.uk%2F2020%2F12%2F&process=login'
SCRIPT_FILENAME = 'proxy:uwsgi://localhost//accounts/fedora/login/'
SCRIPT_NAME = '/mailman3'
SCRIPT_URI = 'https://www.leavesden.org.uk/mailman3/accounts/fedora/login/'
SCRIPT_URL = '/mailman3/accounts/fedora/login/'
SERVER_ADDR = '85.119.82.114'
SERVER_ADMIN = 'addw(a)phcomp.co.uk'
SERVER_NAME = 'www.leavesden.org.uk'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SIGNATURE = '********************'
SERVER_SOFTWARE = 'Apache/2.4.62 (Debian)'
SSL_TLS_SNI = 'www.leavesden.org.uk'
uwsgi.core = 1
uwsgi.node = b'bf2024.phcomp.co.uk'
uwsgi.version = b'2.0.21-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x7f42defc8b50>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'root@localhost'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f42e6122700>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = '()'
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman3web', 'USER': 'mailman3web', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATA_UPLOAD_MAX_NUMBER_FILES = 100
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'mailman3(a)bf2024.phcomp.co.uk'
DEFAULT_HASHING_ALGORITHM = 'sha256'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'bf2024.phcomp.co.uk'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'django_mailman3.lib.auth.fedora')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE = 'en-gb'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/mailman3/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'retry': 400, 'save_limit': 100, 'orm': 'default', 'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)bf2024.phcomp.co.uk'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
----- End forwarded message -----
--
Alain Williams
Linux/GNU Consultant - Mail systems, Web sites, Networking, Programmer, IT Lecturer.
+44 (0) 787 668 0256 https://www.phcomp.co.uk/
Parliament Hill Computers. Registration Information: https://www.phcomp.co.uk/Contact.html
#include <std_disclaimer.h>
4 months, 3 weeks

[MM3-users] Several Postorius errors over the weekend
by Andrew Hodgson
Hi.
I've had several Postorius error messages which have resulted in an email. Is this someone up to mischief or have I missed a configuration somewhere? We had several of these over a short period and nothing since then which makes me think someone was running a script on the endpoint, but would be interested in confirmation from those that know better.
Thanks.
Andrew.
Internal Server Error: /accounts/login/
TemplateDoesNotExist at /accounts/login/ 429.html
Request Method: HEAD
Request URL: http://lists.hodgsonfamily.org/accounts/login/?next=%2F%61%63%63%6F%75%6E%7…
Django Version: 4.2.13
Python Executable: /opt/mailman/venv/bin/python3 Python Version: 3.12.3 Python Path: ['/opt/mailman', '/', '/opt/mailman/venv/bin', '/etc/mailman3', '/usr/lib/python312.zip', '/usr/lib/python3.12', '/usr/lib/python3.12/lib-dynload', '/opt/mailman/venv/lib/python3.12/site-packages', '/usr/local/lib/python3.12/dist-packages', '/usr/lib/python3/dist-packages', '/etc/mailman3'] Server time: Fri, 09 Aug 2024 15:32:41 +0000 Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('allauth.account.middleware.AccountMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
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 (most recent call last):
File "/opt/mailman/venv/lib/python3.12/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/django/views/generic/base.py", line 104, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/django/utils/decorators.py", line 46, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/allauth/decorators.py", line 10, in wrap
resp = ratelimit.consume_or_429(request, action=action, **rl_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/allauth/core/ratelimit.py", line 140, in consume_or_429
return handler429(request)
^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/allauth/core/ratelimit.py", line 125, in _handler429
return render(request, "429." + app_settings.TEMPLATE_EXTENSION, status=429)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/django/template/loader.py", line 61, in render_to_string
template = get_template(template_name, using=using)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.12/site-packages/django/template/loader.py", line 19, in get_template
raise TemplateDoesNotExist(template_name, chain=chain)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Exception Type: TemplateDoesNotExist at /accounts/login/ Exception Value: 429.html Raised during: allauth.account.views.LoginView Request information:
USER: AnonymousUser
GET:
next = '/accounts/login//**/AND/**/(SELECT/**/DIFFERENCE(NULL,NULL))/**/IS/**/NULL--/**/CiLH'
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = '********************'
META:
CSRF_COOKIE = 'ArmbEBfvw1lQgbvFKczV9km53k5UFC6G'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = '********************'
HTTP_HOST = 'lists.hodgsonfamily.org'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.04 (lucid) Firefox/3.6.15 FirePHP/0.5'
HTTP_X_FORWARDED_FOR = '141.98.255.143'
PATH_INFO = '/accounts/login/'
QUERY_STRING = 'next=%2F%61%63%63%6F%75%6E%74%73%2F%6C%6F%67%69%6E%2F%2F%2A%2A%2F%41%4E%44%2F%2A%2A%2F%28%53%45%4C%45%43%54%2F%2A%2A%2F%44%49%46%46%45%52%45%4E%43%45%28%4E%55%4C%4C%2C%4E%55%4C%4C%29%29%2F%2A%2A%2F%49%53%2F%2A%2A%2F%4E%55%4C%4C%2D%2D%2F%2A%2A%2F%43%69%4C%48'
RAW_URI = '/accounts/login/?next=%2F%61%63%63%6F%75%6E%74%73%2F%6C%6F%67%69%6E%2F%2F%2A%2A%2F%41%4E%44%2F%2A%2A%2F%28%53%45%4C%45%43%54%2F%2A%2A%2F%44%49%46%46%45%52%45%4E%43%45%28%4E%55%4C%4C%2C%4E%55%4C%4C%29%29%2F%2A%2A%2F%49%53%2F%2A%2A%2F%4E%55%4C%4C%2D%2D%2F%2A%2A%2F%43%69%4C%48'
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '35918'
REQUEST_METHOD = 'HEAD'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/22.0.0'
gunicorn.socket = <socket.socket fd=4, family=2, type=1, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 35918)> wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7dddf0dddf60> wsgi.file_wrapper = <class 'gunicorn.http.wsgi.FileWrapper'> wsgi.input = <gunicorn.http.body.Body object at 0x7dddf0dde540> wsgi.input_terminated = True wsgi.multiprocess = False wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'andrew(a)hodgson.io'),)"
ALLOWED_HOSTS = ['localhost', 'lists.hodgsonfamily.org'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web') CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7dddf3f61440> COMPRESS_MINT_DELAY = 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_MANIFEST_STORAGE_ALIAS = 'compressor-offine'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_STORAGE_ALIAS = 'compressor'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_MASKED = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = ['https://lists.hodgsonfamily.org']
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'PORT': '', 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATA_UPLOAD_MAX_NUMBER_FILES = 100 DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M'] DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)lists.hodgsonfamily.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/opt/mailman/web/fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount'] INTERNAL_IPS = [] LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('ckb', 'Central Kurdish (Sorani)'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ur'] LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.TimedRotatingFileHandler', 'filename': '/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose', 'when': 'midnight', 'backupCount': 5}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}, 'q': {'level': 'WARNING', 'propagate': False, 'handlers': ['console', 'file']}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}} LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('allauth.account.middleware.AccountMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default', 'workers': 2} ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECRET_KEY_FALLBACKS = '********************'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'postorius(a)lists.hodgsonfamily.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo', 'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'], 'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale', 'timezone'], 'VERSION': 'v2.4'}} STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'UTC'
USE_DEPRECATED_PYTZ = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
8 months, 1 week

[MM3-users] Re: signup / registration error - permissions and cert chains
by David Newman
On 12/31/21 4:56 PM, Mark Sapiro wrote:
> On 12/30/21 4:48 PM, David Newman wrote:
>>
>> The etc/mailman3/settings.py file includes these settings:
>>
>> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
>> EMAIL_HOST = 'localhost'
>> EMAIL_PORT = 25
>
> These 2 (localhost and port 25) are defaults.
>
>
>> EMAIL_HOST_USER = 'dnewman(a)networktest.com'
>> EMAIL_HOST_PASSWORD = 'wouldnt-you-like-to-know'
>
> Why are you authenticating? This should not be necessary.
>
>
>> EMAIL_USE_TLS = 'True'
>> EMAIL_SSL_CERTFILE = '/etc/ssl/certs/myhost.crt'
>> EMAIL_SSL_KEYFILE = '/etc/ssl/private/myhost.key'
>
> And why are you trying to use TLS? This is only for SMTP between Django
> and the MTA on the loopback port. TLS is overkill.
After stripping this down to the defaults:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
and restarting mailman3 (necessary?) and mailmanweb, the system emails
me (as alias for root) an error like the one pasted below after I try
creating a new user account.
After changing EMAIL_HOST to the system's canonical FQDN and again
restarting mailman3 and mailmanweb, the error is the same, and still
from postorius@localhost.
Also, FWIW, the user is created and is visible in the Django admin
panel, but any login attempt produces the same error as the one pasted
below.
The hostname settings in postfix's main.cf are as follows:
# hostname
myhostname = mail9.networktest.com
myorigin = /etc/mailname
mydomain = networktest.com
Here is the error, sanitized with 'dom1.tld' and 'dom2.tld' addresses.
Thanks in advance for additional troubleshooting clues.
Internal Server Error: /accounts/signup/
SMTPRecipientsRefused at /accounts/signup/
{'newuser(a)dom1.tld': (504, b'5.5.2 <postorius@localhost>: Sender address
rejected: need fully-qualified address')}
Request Method: POST
Request URL: http://mail.dom2.tld/accounts/signup/
Django Version: 3.0.14
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.9.2
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python39.zip',
'/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload',
'/opt/mailman/venv/lib/python3.9/site-packages']
Server time: Fri, 31 Dec 2021 17:30:30 -0800
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/handlers/exception.py",
line 34, in inner
response = get_response(request)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/handlers/base.py",
line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/handlers/base.py",
line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/views/generic/base.py",
line 71, in view
return self.dispatch(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/utils/decorators.py",
line 43, in _wrapper
return bound_method(*args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/views/decorators/debug.py",
line 76, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
230, in dispatch
return super(SignupView, self).dispatch(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
74, in dispatch
response = super(RedirectAuthenticatedUserMixin, self).dispatch(
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
204, in dispatch
return super(CloseableSignupMixin, self).dispatch(request, *args,
**kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/views/generic/base.py",
line 97, in dispatch
return handler(request, *args, **kwargs)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
102, in post
response = self.form_valid(form)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/views.py", line
248, in form_valid
return complete_signup(
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/utils.py", line
209, in complete_signup
return perform_login(
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/utils.py", line
175, in perform_login
send_email_confirmation(request, user, signup=signup, email=email)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/utils.py", line
346, in send_email_confirmation
email_address.send_confirmation(request, signup=signup)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/models.py",
line 62, in send_confirmation
confirmation.send(request, signup=signup)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/models.py",
line 169, in send
get_adapter(request).send_confirmation_mail(request, self, signup)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/adapter.py",
line 464, in send_confirmation_mail
self.send_mail(email_template,
emailconfirmation.email_address.email, ctx)
File
"/opt/mailman/venv/lib/python3.9/site-packages/allauth/account/adapter.py",
line 136, in send_mail
msg.send()
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/mail/message.py",
line 284, in send
return self.get_connection(fail_silently).send_messages([self])
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/mail/backends/smtp.py",
line 109, in send_messages
sent = self._send(message)
File
"/opt/mailman/venv/lib/python3.9/site-packages/django/core/mail/backends/smtp.py",
line 125, in _send
self.connection.sendmail(from_email, recipients,
message.as_bytes(linesep='\r\n'))
File "/usr/lib/python3.9/smtplib.py", line 885, in sendmail
raise SMTPRecipientsRefused(senderrs)
Exception Type: SMTPRecipientsRefused at /accounts/signup/
Exception Value: {'newuser(a)dom1.tld': (504, b'5.5.2
<postorius@localhost>: Sender address rejected: need fully-qualified
address')}
Request information:
USER: AnonymousUser
GET: No GET data
POST:
csrfmiddlewaretoken =
'Nk6NjFAaf4bWPOWUZJzrKcTHvIHIXVjSdTb79KeRoM9LpRqK9ljKhXWdWKbfAwMf'
email = 'newuser(a)dom1.tld'
username = 'newuser(a)dom1.tld'
password1 = '********************'
password2 = '********************'
next = '/accounts/login/'
FILES: No FILES data
COOKIES:
roundcube_sessid = 'epth5c1jhmbjrfquire5p9chd9'
csrftoken =
'uRqeKMsMSoItwOWLTRXT7dEwGoN0cCy2UqvyAR6t16Gi6RqB3tHcEYH27qhxPd1p'
META:
CONTENT_LENGTH = '217'
CONTENT_TYPE = 'application/x-www-form-urlencoded'
CSRF_COOKIE =
'uRqeKMsMSoItwOWLTRXT7dEwGoN0cCy2UqvyAR6t16Gi6RqB3tHcEYH27qhxPd1p'
HTTP_ACCEPT =
'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9'
HTTP_CACHE_CONTROL = 'max-age=0'
HTTP_CONNECTION = 'close'
HTTP_COOKIE = 'roundcube_sessid=epth5c1jhmbjrfquire5p9chd9;
csrftoken=uRqeKMsMSoItwOWLTRXT7dEwGoN0cCy2UqvyAR6t16Gi6RqB3tHcEYH27qhxPd1p'
HTTP_DNT = '1'
HTTP_HOST = 'mail.dom2.tld'
HTTP_ORIGIN = 'https://mail.dom2.tld'
HTTP_REFERER = 'https://mail.dom2.tld/'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_SEC_GPC = '1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
HTTP_X_FORWARDED_FOR = '75.82.86.131'
PATH_INFO = '/accounts/signup/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'POST'
REQUEST_URI = '/accounts/signup/'
SCRIPT_NAME = ''
SERVER_NAME = 'mail9'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
uwsgi.core = 1
uwsgi.node = b'mail9'
uwsgi.version = b'2.0.20'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7fb27a13a3b0>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'http'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'hostmaster(a)networktest.com'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', '162.251.233.247',
'mail9.networktest.com', 'lists.networktest.com', 'lists.dom1.tld',
'mail.dom2.tld']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js':
'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css':
['compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.cssmin.rCSSMinFilter'], 'js':
['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fb27d6eb550>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile}
{outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':
'mailmanweb', 'USER': 'mailman', 'PASSWORD': '********************',
'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'charset': 'utf8mb4'},
'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME':
None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y
%H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S',
'%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER =
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius@localhost'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'mail9.networktest.com'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS =
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = True
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/opt/mailman/web/fulltext_index'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.messages',
'django.contrib.staticfiles', 'rest_framework', 'django_gravatar',
'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth',
'allauth.account', 'allauth.socialaccount']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'),
('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn',
'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'),
('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'),
('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au',
'Australian English'), ('en-gb', 'British English'), ('eo',
'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'),
('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni',
'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et',
'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'),
('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish
Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr',
'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy',
'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'),
('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka',
'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'),
('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt',
'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml',
'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'),
('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn',
'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl',
'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'),
('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl',
'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn',
'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'),
('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'),
('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'),
('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant',
'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'},
'file': {'level': 'INFO', 'class':
'logging.handlers.WatchedFileHandler', 'filename':
'/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius':
{'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters':
{'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s
%(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm':
'default'}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)localhost.local'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 2
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo',
'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google':
{'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type':
'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'],
'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale',
'timezone'], 'VERSION': 'v2.4'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS =
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
dn
>
>
>> But this might only be for email, not Postorius/Django.
>
>
> Actually it is only for mail from Django
>
>
3 years, 3 months

[MM3-users] Debian 12: Following docs does not create /opt/mailman/web/xapian_index
by Philip Bondi
Hello to all:
Following along: https://docs.mailman3.org/en/latest/install/virtualenv.html#setting-up-full…
But Method 1 does not create /opt/mailman/web/xapian_index for me on Debian 12
export XAPIAN_VERSION="1.4.27"
curl https://raw.githubusercontent.com/notanumber/xapian-haystack/master/xapian_… -o xapian_wheel_builder.sh
bash xapian_wheel_builder.sh $XAPIAN_VERSION
(venv) mailman@shackleton12:~$ find /opt/mailman -type d -name '*xapian*'
/opt/mailman/venv/lib/python3.11/site-packages/xapian
/opt/mailman/venv/lib/python3.11/site-packages/xapian_haystack-3.1.0.dist-info
/opt/mailman/venv/lib/python3.11/site-packages/xapian-1.4.27.dist-info
(venv) mailman@shackleton12:~$ find /opt/mailman -type f -name '*xapian_index*'
(venv) mailman@shackleton12:~$
When I try to search, I get this stack trace by email:
Internal Server Error: /archives/search
PermissionError at /archives/search
[Errno 13] Permission denied: '/opt/mailman/web/xapian_index'
Request Method: GET
Request URL: http://systemdatabase.ca/archives/search?mlist=ebill%40systemdatabase.ca&q=…
Django Version: 4.2.20
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.11.2
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/opt/mailman/venv/lib/python3.11/site-packages']
Server time: Tue, 01 Apr 2025 16:54:49 +0000
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('allauth.account.middleware.AccountMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/venv/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/hyperkitty/views/search.py", line 54, in search
results = EmptySearchQuerySet()
^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/haystack/query.py", line 25, in __init__
self._determine_backend()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/haystack/query.py", line 58, in _determine_backend
self.query = connections[backend_alias].get_query()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/haystack/backends/__init__.py", line 1100, in get_query
return self.query(using=self.using)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/haystack/backends/__init__.py", line 510, in __init__
self.backend = connections[self._using].get_backend()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/haystack/backends/__init__.py", line 1092, in get_backend
self._backend = self.backend(self.using, **self.options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/mailman/venv/lib/python3.11/site-packages/xapian_backend.py", line 207, in __init__
os.makedirs(self.path)
^^^^^^^^^^^^^^^^^^^^^^
File "<frozen os>", line 225, in makedirs
<source code not available>
^^^^^^^^^^^^^^^^^
Exception Type: PermissionError at /archives/search
Exception Value: [Errno 13] Permission denied: '/opt/mailman/web/xapian_index'
Raised during: hyperkitty.views.search.search
Request information:
USER: pjbondi
GET:
mlist = 'ebill(a)systemdatabase.ca'
q = 'cost'
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = '********************'
sessionid = '********************'
META:
CSRF_COOKIE = '8C2Wu0RN7MyvvyBP89caOkgFalH79NYD'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br, zstd'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.9'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_COOKIE = '********************'
HTTP_HOST = 'systemdatabase.ca'
HTTP_REFERER = 'https://systemdatabase.ca/archives/list/ebill@systemdatabase.ca/latest'
HTTP_SEC_CH_UA = '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"'
HTTP_SEC_CH_UA_MOBILE = '?0'
HTTP_SEC_CH_UA_PLATFORM = '"Windows"'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36'
HTTP_X_FORWARDED_FOR = '192.168.1.1'
HTTP_X_FORWARDED_HOST = 'systemdatabase.ca'
HTTP_X_FORWARDED_SERVER = 'systemdatabase.ca'
PATH_INFO = '/archives/search'
QUERY_STRING = 'mlist=ebill%40systemdatabase.ca&q=cost'
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/archives/search?mlist=ebill%40systemdatabase.ca&q=cost'
SCRIPT_NAME = ''
SERVER_NAME = 'shackleton12'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 0
uwsgi.node = b'shackleton12'
uwsgi.version = b'2.0.28'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x7fa484b846b0>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_LOGIN_METHODS = {'username', 'email'}
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'pjbondi(a)systemdatabase.com'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'systemdatabase.ca', '192.168.1.8']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fa480f33f60>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_MANIFEST_STORAGE_ALIAS = 'compressor-offine'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_STORAGE_ALIAS = 'compressor'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_MASKED = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = ['https://systemdatabase.ca']
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailmanweb', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATA_UPLOAD_MAX_NUMBER_FILES = 100
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'pjbondi(a)systemdatabase.com'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'PATH': '/opt/mailman/web/xapian_index', 'ENGINE': 'xapian_backend.XapianEngine'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('ckb', 'Central Kurdish (Sorani)'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}, 'q': {'level': 'WARNING', 'propagate': False, 'handlers': ['console', 'file']}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('allauth.account.middleware.AccountMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default', 'workers': 2}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECRET_KEY_FALLBACKS = '********************'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'pjbondi(a)systemdatabase.com'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo', 'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'], 'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale', 'timezone'], 'VERSION': 'v2.4'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_DEPRECATED_PYTZ = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
3 weeks, 4 days

[MM3-users] Django Internal Server Error on held_messages
by Hasan Berkay Çağır
Hello,
We've been running a Mailman3 instance with Debian 10's official package:
Mailman Core Version: GNU Mailman 3.2.1 (La Villa Strangiato)
Mailman Core API Version: 3.0
Mailman Core Python Version: 3.7.3 (default, Jan 22 2021, 20:04:44) [GCC 8.3.0]
For some reason, and only on some lists, when we try to see held messages on Postorius, we get an error message "An error occurred while processing your request." and the following error email:
"""
Internal Server Error: /postorius/lists/list.example.com/held_messages
KeyError at /postorius/lists/list.example.com/held_messages
'file'
Request Method: GET
Request URL: https://mailman.example.com/postorius/lists/list.example.com/held_messages
Django Version: 1.11.29
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['.', '', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/dist-packages', '/usr/lib/python3/dist-packages']
Server time: Thu, 24 Mar 2022 08:39:10 +0000
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback:
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/postorius/auth/decorators.py" in wrapper
58. return fn(*args, **kwargs)
File "/usr/lib/python3/dist-packages/postorius/views/list.py" in list_moderation
520. paginator_class=MailmanPaginator)
File "/usr/lib/python3/dist-packages/django_mailman3/lib/paginator.py" in paginate
72. objects = paginator.page(page_num)
File "/usr/lib/python3/dist-packages/django_mailman3/lib/paginator.py" in page
48. result = self.function(count=self.per_page, page=number)
File "/usr/lib/python3/dist-packages/mailmanclient/restobjects/mailinglist.py" in get_held_page
134. return Page(self._connection, url, HeldMessage, count, page)
File "/usr/lib/python3/dist-packages/mailmanclient/restbase/page.py" in __init__
37. self._create_page()
File "/usr/lib/python3/dist-packages/mailmanclient/restbase/page.py" in _create_page
62. response, content = self._connection.call(self._build_url())
File "/usr/lib/python3/dist-packages/mailmanclient/restbase/connection.py" in call
99. raise HTTPError(url, response.status, content, response, None)
During handling of the above exception (HTTP Error 500: b'A server error occurred. Please contact the administrator.'), another exception occurred:
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/usr/lib/python3/dist-packages/postorius/middleware.py" in __call__
39. return self.get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner
43. response = response_for_exception(request, exc)
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in response_for_exception
93. response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in handle_uncaught_exception
135. extra={'status_code': 500, 'request': request},
File "/usr/lib/python3.7/logging/__init__.py" in error
1412. self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python3.7/logging/__init__.py" in _log
1519. self.handle(record)
File "/usr/lib/python3.7/logging/__init__.py" in handle
1529. self.callHandlers(record)
File "/usr/lib/python3.7/logging/__init__.py" in callHandlers
1591. hdlr.handle(record)
File "/usr/lib/python3.7/logging/__init__.py" in handle
905. self.emit(record)
File "/usr/lib/python3/dist-packages/django/utils/log.py" in emit
118. reporter = ExceptionReporter(request, is_email=True, *exc_info)
File "/usr/lib/python3/dist-packages/django/views/debug.py" in __init__
246. self.template_info = getattr(self.exc_value, 'template_debug', None)
File "/usr/lib/python3.7/tempfile.py" in __getattr__
614. file = self.__dict__['file']
Exception Type: KeyError at /postorius/lists/list.example.com/held_messages
Exception Value: 'file'
Request information:
USER: root
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
rl_anonymous_id = '*'
rl_user_id = '*'
rl_group_id = '*'
rl_trait = '*'
rl_group_trait = '*'
rl_page_init_referrer = '*'
rl_page_init_referring_domain = '*'
csrftoken = '*'
sessionid = '*'
META:
CONTENT_LENGTH = ''
CONTENT_TYPE = ''
CSRF_COOKIE = '*'
DOCUMENT_ROOT = '/etc/nginx/html'
HTTPS = 'on'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.5'
HTTP_CACHE_CONTROL = 'max-age=0'
HTTP_COOKIE = '*'
HTTP_DNT = '1'
HTTP_HOST = 'mailman.example.com'
HTTP_REFERER = 'https://mailman.example.com/postorius/lists/list.example.com/'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'same-origin'
HTTP_TE = 'trailers'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:98.0) Gecko/20100101 Firefox/98.0'
PATH_INFO = '/postorius/lists/list.example.com/held_messages'
QUERY_STRING = ''
REMOTE_ADDR = '::1'
REMOTE_PORT = '58290'
REQUEST_METHOD = 'GET'
REQUEST_SCHEME = 'https'
REQUEST_URI = '/postorius/lists/list.example.com/held_messages'
SCRIPT_NAME = ''
SERVER_NAME = 'mailman.example.com'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/2.0'
uwsgi.core = 0
uwsgi.node = b'example.com'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7f8f7a6bf870>
wsgi.multiprocess = False
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'admin(a)example.com'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_COMPRESSOR = 'compressor.css.CssCompressor'
COMPRESS_CSS_FILTERS = ['compressor.filters.css_default.CssAbsoluteFilter']
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f8f7b50d598>
COMPRESS_JS_COMPRESSOR = 'compressor.js.JsCompressor'
COMPRESS_JS_FILTERS = ['compressor.filters.jsmin.JSMinFilter']
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/less', 'lessc {infile} {outfile}'), ('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman3web', 'USER': 'mailman3web', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_CONTENT_TYPE = 'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)example.com'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'example.com'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIDDLEWARE_CLASSES = ['django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'https://mailman.example.com/'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)example.com'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_ETAGS = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'SAMEORIGIN'
YEAR_MONTH_FORMAT = 'F Y'
"""
I've tried to debug this issue as much as I can but couldn't figure out anything. I wonder if anyone has encountered something like this or might have a clue about what's the problem here?
Thanks in advance,
Berkay
3 years, 1 month

[MM3-users] Internal Server Error: /mailman3/accounts/fedora/login/
by Mohsen Masoudfar
Hi,
I am getting the following errors starting some days ago. It is unclear to me what is causing this. I searched internet, there are some similar reports that mention bugs causing this. I am running mailman3 as Ubuntu 18 package and they do not provide any update for this.
Internal Server Error: /mailman3/accounts/fedora/login/
ProgrammingError at /accounts/fedora/login/ relation "socialaccount_openidstore" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "socialaccount_openidstore...
^
Request Method: GET
Request URL: https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Flistserv2…
Django Version: 1.11.11
Python Executable: /usr/bin/uwsgi-core
Python Version: 2.7.17
Python Path: ['.', '', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
Server time: Tue, 27 Dec 2022 11:01:12 -0500 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',
'paintstore',
'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.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback:
File "/usr/lib/python2.7/dist-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/usr/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py" in view
68. return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch
88. return handler(request, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/django_mailman3/lib/auth/fedora/views.py" in get
59. return self.post(request, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/django_mailman3/lib/auth/fedora/views.py" in post
72. auth_request = client.begin(form.cleaned_data['openid'])
File "/usr/lib/python2.7/dist-packages/openid/consumer/consumer.py" in begin
353. return self.beginWithoutDiscovery(service, anonymous)
File "/usr/lib/python2.7/dist-packages/openid/consumer/consumer.py" in beginWithoutDiscovery
376. auth_req = self.consumer.begin(service)
File "/usr/lib/python2.7/dist-packages/openid/consumer/consumer.py" in begin
598. assoc = self._getAssociation(service_endpoint)
File "/usr/lib/python2.7/dist-packages/openid/consumer/consumer.py" in _getAssociation
1158. assoc = self.store.getAssociation(endpoint.server_url)
File "/usr/lib/python2.7/dist-packages/allauth/socialaccount/providers/openid/utils.py" in getAssociation
96. if stored_assocs.count() == 0:
File "/usr/lib/python2.7/dist-packages/django/db/models/query.py" in count
364. return self.query.get_count(using=self.db)
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py" in get_count
504. number = obj.get_aggregation(using, ['__count'])['__count']
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/query.py" in get_aggregation
485. result = compiler.execute_sql(SINGLE)
File "/usr/lib/python2.7/dist-packages/django/db/models/sql/compiler.py" in execute_sql
899. raise original_exception
Exception Type: ProgrammingError at /accounts/fedora/login/ Exception Value: relation "socialaccount_openidstore" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "socialaccount_openidstore...
^
Request information:
USER: AnonymousUser
GET:
process = u'login'
next = u'/mailman3/hyperkitty/list/sec_g_zoom(a)listserv2.aaas.org/message/new'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
CONTEXT_DOCUMENT_ROOT = '/var/www/html'
CONTEXT_PREFIX = ''
DOCUMENT_ROOT = '/var/www/html'
GATEWAY_INTERFACE = 'CGI/1.1'
HTTPS = 'on'
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_CONNECTION = 'keep-alive'
HTTP_FROM = 'googlebot(at)googlebot.com'
HTTP_HOST = 'listserv2.aaas.org'
HTTP_USER_AGENT = 'Googlebot/2.1 (+https://nam12.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.google.com%2Fbot.html&data=05%7C01%7Cmmasoudf%40aaas.org%7Cc767333920c94048355708dae823947a%7C2eebd8ff9ed140f0a15638e5dfb3bc56%7C0%7C0%7C638077536774767693%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=8%2F5tgjkoHnu%2BWaHwrNVRzcJUh%2BcQ9%2BFUkmB3psMzKMU%3D&reserved=0)'
PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin'
PATH_INFO = u'/accounts/fedora/login/'
QUERY_STRING = 'process=login&next=%2Fmailman3%2Fhyperkitty%2Flist%2Fsec_g_zoom%40listserv2.aaas.org%2Fmessage%2Fnew'
REMOTE_ADDR = '66.249.66.53'
REMOTE_PORT = '37189'
REQUEST_METHOD = 'GET'
REQUEST_SCHEME = 'https'
REQUEST_URI = '/mailman3/accounts/fedora/login/?process=login&next=%2Fmailman3%2Fhyperkitty%2Flist%2Fsec_g_zoom%40listserv2.aaas.org%2Fmessage%2Fnew'
SCRIPT_FILENAME = 'proxy:uwsgi://localhost//accounts/fedora/login/'
SCRIPT_NAME = u'/mailman3'
SERVER_ADDR = '172.24.9.130'
SERVER_ADMIN = 'mmasoudf(a)aaas.org'
SERVER_NAME = 'listserv2.aaas.org'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
SERVER_SIGNATURE = '<address>Apache/2.4.29 (Ubuntu) Server at listserv2.aaas.org Port 443</address>\n'
SERVER_SOFTWARE = 'Apache/2.4.29 (Ubuntu)'
SSL_TLS_SNI = 'listserv2.aaas.org'
uwsgi.core = 0
uwsgi.node = 'listserv2'
uwsgi.version = '2.0.15-debian'
wsgi.errors = <open file 'wsgi_errors', mode 'w' at 0x7fdfa1c748a0> wsgi.file_wrapper = ''
wsgi.input = <uwsgi._Input object at 0x7fdfa1ccc710> wsgi.multiprocess = False wsgi.multithread = True wsgi.run_once = False wsgi.url_scheme = 'https'
wsgi.version = u'(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = u"(('Mailman Suite Admin', 'mmasoudf(a)aaas.org'),)"
ALLOWED_HOSTS = ['*']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = u"('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = u'********************'
AUTH_USER_MODEL = u'auth.User'
BASE_DIR = '/usr/share/mailman3-web'
CACHES = {u'default': {u'BACKEND': u'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = u'default'
CACHE_MIDDLEWARE_KEY_PREFIX = u'********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESS_CACHEABLE_PRECOMPILERS = u'()'
COMPRESS_CACHE_BACKEND = u'default'
COMPRESS_CACHE_KEY_FUNCTION = u'********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = u''
COMPRESS_CLEAN_CSS_BINARY = u'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = u''
COMPRESS_CLOSURE_COMPILER_BINARY = u'java -jar compiler.jar'
COMPRESS_CSS_COMPRESSOR = u'compressor.css.CssCompressor'
COMPRESS_CSS_FILTERS = [u'compressor.filters.css_default.CssAbsoluteFilter']
COMPRESS_CSS_HASHING_METHOD = u'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_JINJA2_GET_ENVIRONMENT = <function JINJA2_GET_ENVIRONMENT at 0x7fdfa1de2f50> COMPRESS_JS_COMPRESSOR = u'compressor.js.JsCompressor'
COMPRESS_JS_FILTERS = [u'compressor.filters.jsmin.JSMinFilter']
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = False
COMPRESS_OFFLINE_CONTEXT = {u'STATIC_URL': '/mailman3/static/'} COMPRESS_OFFLINE_MANIFEST = u'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = u'CACHE'
COMPRESS_PARSER = u'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = u"(('text/less', 'lessc {infile} {outfile}'), ('text/x-scss', 'sass -t compressed {infile} {outfile}'), ('text/x-sass', 'sass -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/lib/mailman3/web/static'
COMPRESS_STORAGE = u'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {u'STATIC_URL': '/mailman3/static/'} COMPRESS_URL = '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER = u'/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = u'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = u'--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = u'--terminal'
COMPRESS_YUI_BINARY = u'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = u''
COMPRESS_YUI_JS_ARGUMENTS = u''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = u'csrftoken'
CSRF_COOKIE_PATH = u'/'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = u'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = u'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': 'mailman3web', 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'PORT': '', 'HOST': 'localhost', 'USER': 'mailman3web', 'TEST': {'COLLATION': None, 'CHARSET': None, 'NAME': None, 'MIRROR': None}, 'PASSWORD': u'********************', 'OPTIONS': {}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = u'N j, Y, P'
DATETIME_INPUT_FORMATS = [u'%Y-%m-%d %H:%M:%S', u'%Y-%m-%d %H:%M:%S.%f', u'%Y-%m-%d %H:%M', u'%Y-%m-%d', u'%m/%d/%Y %H:%M:%S', u'%m/%d/%Y %H:%M:%S.%f', u'%m/%d/%Y %H:%M', u'%m/%d/%Y', u'%m/%d/%y %H:%M:%S', u'%m/%d/%y %H:%M:%S.%f', u'%m/%d/%y %H:%M', u'%m/%d/%y'] DATE_FORMAT = u'N j, Y'
DATE_INPUT_FORMATS = [u'%Y-%m-%d', u'%m/%d/%Y', u'%m/%d/%y', u'%b %d %Y', u'%b %d, %Y', u'%d %b %Y', u'%d %b, %Y', u'%B %d %Y', u'%B %d, %Y', u'%d %B %Y', u'%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = u'.'
DEFAULT_CHARSET = u'utf-8'
DEFAULT_CONTENT_TYPE = u'text/html'
DEFAULT_EXCEPTION_REPORTER_FILTER = u'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = u'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'postorius(a)listserv2.aaas.org'
DEFAULT_INDEX_TABLESPACE = u''
DEFAULT_TABLESPACE = u''
DISALLOWED_USER_AGENTS = []
EMAILNAME = 'listserv2.aaas.org'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = u'localhost'
EMAIL_HOST_PASSWORD = u'********************'
EMAIL_HOST_USER = u''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = u'********************'
EMAIL_SUBJECT_PREFIX = u'[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = u'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = [u'django.core.files.uploadhandler.MemoryFileUploadHandler', u'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = u'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME = 'localhost.local'
IGNORABLE_404_URLS = []
INSTALLED_APPS = u"('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', 'paintstore', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'django_mailman3.lib.auth.fedora')"
INTERNAL_IPS = []
LANGUAGES = [(u'af', u'Afrikaans'), (u'ar', u'Arabic'), (u'ast', u'Asturian'), (u'az', u'Azerbaijani'), (u'bg', u'Bulgarian'), (u'be', u'Belarusian'), (u'bn', u'Bengali'), (u'br', u'Breton'), (u'bs', u'Bosnian'), (u'ca', u'Catalan'), (u'cs', u'Czech'), (u'cy', u'Welsh'), (u'da', u'Danish'), (u'de', u'German'), (u'dsb', u'Lower Sorbian'), (u'el', u'Greek'), (u'en', u'English'), (u'en-au', u'Australian English'), (u'en-gb', u'British English'), (u'eo', u'Esperanto'), (u'es', u'Spanish'), (u'es-ar', u'Argentinian Spanish'), (u'es-co', u'Colombian Spanish'), (u'es-mx', u'Mexican Spanish'), (u'es-ni', u'Nicaraguan Spanish'), (u'es-ve', u'Venezuelan Spanish'), (u'et', u'Estonian'), (u'eu', u'Basque'), (u'fa', u'Persian'), (u'fi', u'Finnish'), (u'fr', u'French'), (u'fy', u'Frisian'), (u'ga', u'Irish'), (u'gd', u'Scottish Gaelic'), (u'gl', u'Galician'), (u'he', u'Hebrew'), (u'hi', u'Hindi'), (u'hr', u'Croatian'), (u'hsb', u'Upper Sorbian'), (u'hu', u'Hungarian'), (u'ia', u'Interlingua'), (u'id', u'Indonesian'), (u'io', u'Ido'), (u'is', u'Icelandic'), (u'it', u'Italian'), (u'ja', u'Japanese'), (u'ka', u'Georgian'), (u'kk', u'Kazakh'), (u'km', u'Khmer'), (u'kn', u'Kannada'), (u'ko', u'Korean'), (u'lb', u'Luxembourgish'), (u'lt', u'Lithuanian'), (u'lv', u'Latvian'), (u'mk', u'Macedonian'), (u'ml', u'Malayalam'), (u'mn', u'Mongolian'), (u'mr', u'Marathi'), (u'my', u'Burmese'), (u'nb', u'Norwegian Bokm\xe5l'), (u'ne', u'Nepali'), (u'nl', u'Dutch'), (u'nn', u'Norwegian Nynorsk'), (u'os', u'Ossetic'), (u'pa', u'Punjabi'), (u'pl', u'Polish'), (u'pt', u'Portuguese'), (u'pt-br', u'Brazilian Portuguese'), (u'ro', u'Romanian'), (u'ru', u'Russian'), (u'sk', u'Slovak'), (u'sl', u'Slovenian'), (u'sq', u'Albanian'), (u'sr', u'Serbian'), (u'sr-latn', u'Serbian Latin'), (u'sv', u'Swedish'), (u'sw', u'Swahili'), (u'ta', u'Tamil'), (u'te', u'Telugu'), (u'th', u'Thai'), (u'tr', u'Turkish'), (u'tt', u'Tatar'), (u'udm', u'Udmurt'), (u'uk', u'Ukrainian'), (u'ur', u'Urdu'), (u'vi', u'Vietnamese'), (u'zh-hans', u'Simplified Chinese'), (u'zh-hant', u'Traditional Chinese')] LANGUAGES_BIDI = [u'he', u'ar', u'fa', u'ur'] LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_NAME = u'django_language'
LANGUAGE_COOKIE_PATH = u'/'
LOCALE_PATHS = []
LOGGING = {'loggers': {'django': {'handlers': ['file'], 'propagate': True, 'level': 'INFO'}, 'hyperkitty': {'handlers': ['file'], 'propagate': True, 'level': 'INFO'}, 'django.request': {'handlers': ['mail_admins', 'file'], 'propagate': True, 'level': 'INFO'}, 'postorius': {'handlers': ['file'], 'propagate': True, 'level': 'INFO'}}, 'disable_existing_loggers': False, 'handlers': {'console': {'formatter': 'simple', 'class': 'logging.StreamHandler'}, 'file': {'level': 'INFO', 'formatter': 'verbose', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log'}, 'mail_admins': {'class': 'django.utils.log.AdminEmailHandler', 'filters': ['require_debug_false'], 'level': 'ERROR'}}, 'formatters': {'simple': {'format': '%(levelname)s %(message)s'}, 'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}}, 'version': 1, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}}
LOGGING_CONFIG = u'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = u"('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = u'********************'
MAILMAN_REST_API_PASS = u'********************'
MAILMAN_REST_API_URL = u'********************'
MAILMAN_REST_API_USER = u'********************'
MANAGERS = []
MEDIA_ROOT = u''
MEDIA_URL = u''
MESSAGE_STORAGE = u'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = None
MIDDLEWARE_CLASSES = u"('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = u'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = u'********************'
PASSWORD_RESET_TIMEOUT_DAYS = u'********************'
PREPEND_WWW = False
Q_CLUSTER = {'orm': 'default', 'save_limit': 100, 'timeout': 300} ROOT_URLCONF = 'urls'
SECRET_KEY = u'********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'root(a)listserv2.aaas.org'
SESSION_CACHE_ALIAS = u'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = u'sessionid'
SESSION_COOKIE_PATH = u'/'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = u'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = u'm/d/Y P'
SHORT_DATE_FORMAT = u'm/d/Y'
SIGNING_BACKEND = u'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {}
STATICFILES_DIRS = u'()'
STATICFILES_FINDERS = u"('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = u'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/lib/mailman3/web/static'
STATIC_URL = '/mailman3/static/'
TEMPLATES = [{'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}, 'BACKEND': 'django.template.backends.django.DjangoTemplates'}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = u'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = u','
TIME_FORMAT = u'P'
TIME_INPUT_FORMATS = [u'%H:%M:%S', u'%H:%M:%S.%f', u'%H:%M'] TIME_ZONE = 'UTC'
USE_ETAGS = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = u'SAMEORIGIN'
YEAR_MONTH_FORMAT = u'F Y'
Best regards
Mohsen Masoudfar
2 years, 3 months

[MM3-users] Re: Hacking attempts?
by Tim Cutts
You could use an application like fail2ban to watch your mailman/web logs and automatically firewall off attacking IP addresses which cause a lot of these errors in a defined window of time. This application is independent from mailman, and you can use it to protect against all kinds of brute force attacks. Ssh, web, mail - anything that creates a log file recording errors from remote IP addresses.
Just be careful when configuring it for remote servers so you don’t saw off the branch you’re sitting on…. I run a mail server for my family, and on one occasion a family member repeatedly got her password wrong which caused fail2ban to lock all of us out because it blocked our home NAT address, and I had to use my mobile phone to unblock us. :-)
Tim
> On 14 Jul 2022, at 08:29, Lists via Mailman-users <mailman-users(a)mailman3.org> wrote:
>
> Hi,
>
> We are seeing thousands of these emails every day, looks like someone is trying to hack our Mailman3 but would appreciate someone with more knowledge of MM3 to confirm.
>
> Is this a problem with our setup? i.e. the “Internal Server Error” bit, or are the hackers just sending bad data that is causing the error? also how do we stop/block this?
>
> TIA and here is a typical email:
>
>
> Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /mailman3/accounts/fedora/login/
>
> Internal Server Error: /mailman3/accounts/fedora/login/
>
> TypeError at /accounts/fedora/login/
> _openid_consumer() missing 2 required positional arguments: 'provider' and 'endpoint'
>
> Request Method: GET
> Request URL: https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next… <https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next…>
> Django Version: 2.2.26
> 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: Thu, 14 Jul 2022 02:34:04 -0400
> 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
> 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/lib/python3/dist-packages/django/views/generic/base.py" in view
> 71. return self.dispatch(request, *args, **kwargs)
>
> File "/usr/lib/python3/dist-packages/django/views/generic/base.py" in dispatch
> 97. return handler(request, *args, **kwargs)
>
> File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py" in get
> 56. return self.post(request, *args, **kwargs)
>
> File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py" in post
> 67. client = _openid_consumer(request)
>
> Exception Type: TypeError at /accounts/fedora/login/
> Exception Value: _openid_consumer() missing 2 required positional arguments: 'provider' and 'endpoint'
> Request information:
> USER: AnonymousUser
>
> GET:
> process = 'login'
> next = '/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:mailman3/hyperkitty/list/44net@mailman.ampr.org>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
>
> POST: No POST data
>
> FILES: No FILES data
>
> COOKIES: No cookie data
>
> META:
> CONTEXT_DOCUMENT_ROOT = '/var/www/html'
> CONTEXT_PREFIX = ''
> DOCUMENT_ROOT = '/var/www/html'
> GATEWAY_INTERFACE = 'CGI/1.1'
> HTTPS = 'on'
> HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
> HTTP_ACCEPT_ENCODING = 'gzip,deflate'
> HTTP_CONNECTION = 'Keep-Alive'
> HTTP_HOST = 'mailman.ardc.net <http://mailman.ardc.net/>'
> HTTP_USER_AGENT = 'Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/ <http://webmeup-crawler.com/>)'
> PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
> PATH_INFO = '/accounts/fedora/login/'
> QUERY_STRING = 'process=login&next=/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
> REMOTE_ADDR = '157.90.177.212'
> REMOTE_PORT = '63384'
> REQUEST_METHOD = 'GET'
> REQUEST_SCHEME = 'https'
> REQUEST_URI = '/mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
> SCRIPT_FILENAME = 'proxy:uwsgi://localhost//accounts/fedora/login/' <uwsgi://localhost//accounts/fedora/login/'>
> SCRIPT_NAME = '/mailman3'
> SERVER_ADDR = '44.1.1.29'
> SERVER_ADMIN = 'postmaster(a)ardc.net <mailto:postmaster@ardc.net>'
> SERVER_NAME = 'mailman.ardc.net <http://mailman.ardc.net/>'
> SERVER_PORT = '443'
> SERVER_PROTOCOL = 'HTTP/1.1'
> SERVER_SIGNATURE = '<address>Apache/2.4.53 (Debian) Server at mailman.ardc.net <http://mailman.ardc.net/> Port 443</address>\n'
> SERVER_SOFTWARE = 'Apache/2.4.53 (Debian)'
> SSL_TLS_SNI = 'mailman.ardc.net <http://mailman.ardc.net/>'
> uwsgi.core = 1
> uwsgi.node = b'mailman'
> uwsgi.version = b'2.0.19.1-debian'
> wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
> wsgi.file_wrapper = ''
> wsgi.input = <uwsgi._Input object at 0x7f8e0b4a0410>
> wsgi.multiprocess = False
> wsgi.multithread = True
> wsgi.run_once = False
> wsgi.url_scheme = 'https'
> wsgi.version = '(1, 0)'
>
> Settings:
> Using settings module settings
> ABSOLUTE_URL_OVERRIDES = {}
> ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
> ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
> ACCOUNT_EMAIL_REQUIRED = True
> ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
> ACCOUNT_UNIQUE_EMAIL = True
> ADMINS = "(('Mailman Suite Admin', 'postmaster(a)ardc.net <mailto:postmaster@ardc.net>'),)"
> ALLOWED_HOSTS = ['*']
> APPEND_SLASH = True
> AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
> AUTH_PASSWORD_VALIDATORS = '********************'
> AUTH_USER_MODEL = 'auth.User'
> BASE_DIR = '/usr/share/mailman3-web'
> CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
> CACHE_MIDDLEWARE_ALIAS = 'default'
> CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
> CACHE_MIDDLEWARE_SECONDS = 600
> COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
> COMPRESS_CACHEABLE_PRECOMPILERS = '()'
> COMPRESS_CACHE_BACKEND = 'default'
> COMPRESS_CACHE_KEY_FUNCTION = '********************'
> COMPRESS_CLEAN_CSS_ARGUMENTS = ''
> COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
> COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
> COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
> COMPRESS_CSS_HASHING_METHOD = 'mtime'
> COMPRESS_DATA_URI_MAX_SIZE = 1024
> COMPRESS_DEBUG_TOGGLE = None
> COMPRESS_ENABLED = True
> COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
> COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f8e17d7a670>
> COMPRESS_MINT_DELAY = 30
> COMPRESS_MTIME_DELAY = 10
> COMPRESS_OFFLINE = True
> COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
> COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
> COMPRESS_OFFLINE_TIMEOUT = 31536000
> COMPRESS_OUTPUT_DIR = 'CACHE'
> COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
> COMPRESS_PRECOMPILERS = '()'
> COMPRESS_REBUILD_TIMEOUT = 2592000
> COMPRESS_ROOT = '/var/lib/mailman3/web/static'
> COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
> COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
> COMPRESS_URL = '/mailman3/static/'
> COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
> COMPRESS_VERBOSE = False
> COMPRESS_YUGLIFY_BINARY = 'yuglify'
> COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
> COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
> COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
> COMPRESS_YUI_CSS_ARGUMENTS = ''
> COMPRESS_YUI_JS_ARGUMENTS = ''
> CSRF_COOKIE_AGE = 31449600
> CSRF_COOKIE_DOMAIN = None
> CSRF_COOKIE_HTTPONLY = False
> CSRF_COOKIE_NAME = 'csrftoken'
> CSRF_COOKIE_PATH = '/'
> CSRF_COOKIE_SAMESITE = 'Lax'
> CSRF_COOKIE_SECURE = False
> CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
> CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
> CSRF_TRUSTED_ORIGINS = []
> CSRF_USE_SESSIONS = False
> DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': ‘X.X.X.X', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
> DATABASE_ROUTERS = []
> DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
> DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
> DATETIME_FORMAT = 'N j, Y, P'
> DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
> DATE_FORMAT = 'N j, Y'
> DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
> DEBUG = False
> DEBUG_PROPAGATE_EXCEPTIONS = False
> DECIMAL_SEPARATOR = '.'
> DEFAULT_CHARSET = 'utf-8'
> DEFAULT_CONTENT_TYPE = 'text/html'
> DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
> DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
> DEFAULT_FROM_EMAIL = 'postorius(a)mailman.ardc.net <mailto:postorius@mailman.ardc.net>'
> DEFAULT_INDEX_TABLESPACE = ''
> DEFAULT_TABLESPACE = ''
> DISALLOWED_USER_AGENTS = []
> EMAILNAME = 'mailman.ardc.net <http://mailman.ardc.net/>'
> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
> EMAIL_HOST = 'localhost'
> EMAIL_HOST_PASSWORD = '********************'
> EMAIL_HOST_USER = ''
> EMAIL_PORT = 25
> EMAIL_SSL_CERTFILE = None
> EMAIL_SSL_KEYFILE = '********************'
> EMAIL_SUBJECT_PREFIX = '[Django] '
> EMAIL_TIMEOUT = None
> EMAIL_USE_LOCALTIME = False
> EMAIL_USE_SSL = False
> EMAIL_USE_TLS = False
> FILE_CHARSET = 'utf-8'
> FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
> FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
> FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
> FILE_UPLOAD_PERMISSIONS = None
> FILE_UPLOAD_TEMP_DIR = None
> FILTER_VHOST = False
> FIRST_DAY_OF_WEEK = 0
> FIXTURE_DIRS = []
> FORCE_SCRIPT_NAME = None
> FORMAT_MODULE_PATH = None
> FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
> HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
> HOSTNAME = 'localhost.local'
> IGNORABLE_404_URLS = []
> INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'django_mailman3.lib.auth.fedora')"
> INTERNAL_IPS = []
> LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
> LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
> LANGUAGE_CODE = 'en-us'
> LANGUAGE_COOKIE_AGE = None
> LANGUAGE_COOKIE_DOMAIN = None
> LANGUAGE_COOKIE_NAME = 'django_language'
> LANGUAGE_COOKIE_PATH = '/'
> LOCALE_PATHS = []
> LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
> LOGGING_CONFIG = 'logging.config.dictConfig'
> LOGIN_REDIRECT_URL = 'list_index'
> LOGIN_URL = 'account_login'
> LOGOUT_REDIRECT_URL = None
> LOGOUT_URL = 'account_logout'
> MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '10.4.16.129', '44.1.1.29')"
> MAILMAN_ARCHIVER_KEY = '********************'
> MAILMAN_REST_API_PASS = '********************'
> MAILMAN_REST_API_URL = '********************'
> MAILMAN_REST_API_USER = '********************'
> MANAGERS = []
> MEDIA_ROOT = ''
> MEDIA_URL = ''
> MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
> MESSAGE_TAGS = {40: 'danger'}
> MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
> MIGRATION_MODULES = {}
> MONTH_DAY_FORMAT = 'F j'
> NUMBER_GROUPING = 0
> PASSWORD_HASHERS = '********************'
> PASSWORD_RESET_TIMEOUT_DAYS = '********************'
> POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/ <http://localhost/mailman3/>'
> PREPEND_WWW = False
> Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
> ROOT_URLCONF = 'urls'
> SECRET_KEY = '********************'
> SECURE_BROWSER_XSS_FILTER = False
> SECURE_CONTENT_TYPE_NOSNIFF = False
> SECURE_HSTS_INCLUDE_SUBDOMAINS = False
> SECURE_HSTS_PRELOAD = False
> SECURE_HSTS_SECONDS = 0
> SECURE_PROXY_SSL_HEADER = None
> SECURE_REDIRECT_EXEMPT = []
> SECURE_SSL_HOST = None
> SECURE_SSL_REDIRECT = False
> SERVER_EMAIL = 'root(a)mailman.ardc.net <mailto:root@mailman.ardc.net>'
> SESSION_CACHE_ALIAS = 'default'
> SESSION_COOKIE_AGE = 1209600
> SESSION_COOKIE_DOMAIN = None
> SESSION_COOKIE_HTTPONLY = True
> SESSION_COOKIE_NAME = 'sessionid'
> SESSION_COOKIE_PATH = '/'
> SESSION_COOKIE_SAMESITE = 'Lax'
> SESSION_COOKIE_SECURE = False
> SESSION_ENGINE = 'django.contrib.sessions.backends.db'
> SESSION_EXPIRE_AT_BROWSER_CLOSE = False
> SESSION_FILE_PATH = None
> SESSION_SAVE_EVERY_REQUEST = False
> SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
> SETTINGS_MODULE = 'settings'
> SHORT_DATETIME_FORMAT = 'm/d/Y P'
> SHORT_DATE_FORMAT = 'm/d/Y'
> SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
> SILENCED_SYSTEM_CHECKS = []
> SITE_ID = 1
> SOCIALACCOUNT_PROVIDERS = {}
> STATICFILES_DIRS = '()'
> STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
> STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
> STATIC_ROOT = '/var/lib/mailman3/web/static'
> STATIC_URL = '/mailman3/static/'
> TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
> TEST_NON_SERIALIZED_APPS = []
> TEST_RUNNER = 'django.test.runner.DiscoverRunner'
> THOUSAND_SEPARATOR = ','
> TIME_FORMAT = 'P'
> TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
> TIME_ZONE = 'UTC'
> USE_I18N = True
> USE_L10N = True
> USE_THOUSAND_SEPARATOR = False
> USE_TZ = True
> USE_X_FORWARDED_HOST = True
> USE_X_FORWARDED_PORT = False
> WSGI_APPLICATION = 'wsgi.application'
> X_FRAME_OPTIONS = 'SAMEORIGIN'
> YEAR_MONTH_FORMAT = 'F Y’
>
>
>
>
> _______________________________________________
> 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/
2 years, 9 months

[MM3-users] Re: using SSH/TLS with external MTA
by Roland Giesler
On 2024/07/28 00:39, Mark Sapiro wrote:
> On 7/27/24 15:16, Roland Giesler via Mailman-users wrote:
>>
>> The server runs power-mailinabox, which uses Postfix indeed. All my
>> mail, and quite a few others' mail is sent from the using SMTP-Auth
>> on port 465. Actually, this message is sent via that server too. So
>> it's clear to me that MM3 is not authenticating for some reason.
>
> What do you see in Mailman's smtp.log and in the mail.log on the mail
> server?
The smtp log is in syslog...
Jul 28 12:48:19 mailman postfix/smtpd[63855]: connect from localhost[::1]
Jul 28 12:48:19 mailman postfix/smtpd[63855]: NOQUEUE: reject: RCPT from
localhost[::1]: 454 4.7.1 <roland(a)giesler.za.net>: Relay access denied;
from=<postorius(a)giesler.za.net> to=<roland(a)giesler.za.net> proto=ESMTP
helo=<mailman.fast.za.net>
Jul 28 12:48:19 mailman postfix/smtpd[63769]: lost connection after RSET
from localhost[::1]
Jul 28 12:48:19 mailman postfix/smtpd[63769]: disconnect from
localhost[::1] ehlo=1 mail=1 rcpt=0/1 rset=1 commands=3/4
Jul 28 12:48:19 mailman postfix/smtpd[63769]: connect from localhost[::1]
Jul 28 12:48:19 mailman postfix/smtpd[63769]: 4D0DE120A5B:
client=localhost[::1]
Jul 28 12:48:19 mailman postfix/cleanup[63291]: 4D0DE120A5B:
message-id=<172217089931.2150.9004701361968608890(a)mailman.fast.za.net>
Jul 28 12:48:19 mailman postfix/qmgr[330]: 4D0DE120A5B:
from=<root(a)giesler.za.net>, size=21782, nrcpt=1 (queue active)
Jul 28 12:48:19 mailman postfix/smtpd[63769]: disconnect from
localhost[::1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Jul 28 12:48:19 mailman postfix/local[63575]: 4D0DE120A5B:
to=<root@localhost>, relay=local, delay=0.01, delays=0.01/0/0/0,
dsn=2.0.0, status=sent (delivered to mailbox)
Jul 28 12:48:19 mailman postfix/qmgr[330]: 4D0DE120A5B: removed
I think I see what's going on here. The mail is being sent from
postorius(a)giesler.za.net and there is no log entry on
box2.gtahardware.co.za that shows this logon attempt. So it seems it's
not going to that server, but rather to the local postfix.
A mail was sent to root on the localhost with the following content:
Return-Path: <root(a)giesler.za.net>
X-Original-To: root@localhost
Delivered-To: root@localhost
Received: from mailman.fast.za.net (localhost [IPv6:::1])
by mailman.localdomain (Postfix) with ESMTP id 2174A120A5B
for <root@localhost>; Sun, 28 Jul 2024 13:11:03 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error:
/accounts/login/
From: root(a)giesler.za.net
To: root@localhost
Date: Sun, 28 Jul 2024 13:11:03 -0000
Message-ID: <172217226313.2150.10895652368679013629(a)mailman.fast.za.net>
Internal Server Error: /accounts/login/
SMTPRecipientsRefused at /accounts/login/
{'roland(a)giesler.za.net': (454, b'4.7.1 <roland(a)giesler.za.net>: Relay acce=
ss denied')}
Request Method: POST
Request URL: http://192.168.161.103/accounts/login/
Django Version: 3.2.12
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.10.12
Python Path: ['.', '', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/u=
sr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', =
'/usr/lib/python3/dist-packages', '/usr/lib/python3.10/dist-packages']
Server time: Sun, 28 Jul 2024 15:11:03 +0200
Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_mailman3.lib.auth.fedora')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File
"/usr/lib/python3/dist-packages/django/core/handlers/exception.py", line
47, in inner
response =3D get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py",
line 181, in _get_response
response =3D wrapped_callback(request, *callback_args,
**callback_kwargs)
File "/usr/lib/python3/dist-packages/django/views/generic/base.py",
line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/django/utils/decorators.py",
line 43, in _wrapper
return bound_method(*args, **kwargs)
File
"/usr/lib/python3/dist-packages/django/views/decorators/debug.py", line
89, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
146, in dispatch
return super(LoginView, self).dispatch(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
74, in dispatch
response =3D super(RedirectAuthenticatedUserMixin, self).dispatch(
File "/usr/lib/python3/dist-packages/django/views/generic/base.py",
line 98, in dispatch
return handler(request, *args, **kwargs)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
102, in post
response =3D self.form_valid(form)
File "/usr/lib/python3/dist-packages/allauth/account/views.py", line
159, in form_valid
return form.login(self.request, redirect_url=3Dsuccess_url)
File "/usr/lib/python3/dist-packages/allauth/account/forms.py", line
196, in login
ret =3D perform_login(
File "/usr/lib/python3/dist-packages/allauth/account/utils.py", line
175, in perform_login
send_email_confirmation(request, user, signup=3Dsignup, email=3Demail)
File "/usr/lib/python3/dist-packages/allauth/account/utils.py", line
346, in send_email_confirmation
email_address.send_confirmation(request, signup=3Dsignup)
File "/usr/lib/python3/dist-packages/allauth/account/models.py", line
62, in send_confirmation
confirmation.send(request, signup=3Dsignup)
File "/usr/lib/python3/dist-packages/allauth/account/models.py", line
169, in send
get_adapter(request).send_confirmation_mail(request, self, signup)
File "/usr/lib/python3/dist-packages/allauth/account/adapter.py",
line 464, in send_confirmation_mail
self.send_mail(email_template,
emailconfirmation.email_address.email, ctx)
File "/usr/lib/python3/dist-packages/allauth/account/adapter.py",
line 136, in send_mail
msg.send()
File "/usr/lib/python3/dist-packages/django/core/mail/message.py",
line 284, in send
return self.get_connection(fail_silently).send_messages([self])
File
"/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.py", line
109, in send_messages
sent =3D self._send(message)
File
"/usr/lib/python3/dist-packages/django/core/mail/backends/smtp.py", line
125, in _send
self.connection.sendmail(from_email, recipients,
message.as_bytes(linesep=3D'\r\n'))
File "/usr/lib/python3.10/smtplib.py", line 901, in sendmail
raise SMTPRecipientsRefused(senderrs)
Exception Type: SMTPRecipientsRefused at /accounts/login/
Exception Value: {'roland(a)giesler.za.net': (454, b'4.7.1
<roland(a)giesler.za.net>: Relay access denied')}
Request information:
USER: AnonymousUser
GET: No GET data
POST:
csrfmiddlewaretoken =3D
'41gp97hhfO2FhiEzOFLf1c5P3WLxk5TZvOgF0Qske6zI3EHtk8YK3w6wlEhLQAVS'
login =3D 'roland(a)giesler.za.net'
password =3D '********************'
next =3D '/postorius/lists/'
FILES: No FILES data
COOKIES:
csrftoken =3D
'aW8mw1heNIcuQ1YTMwnWMzi9DMaDFES6BJ8CnKshM0JxCn1NiZArOTjQVuGRb9UZ'
META:
CONTENT_LENGTH =3D '164'
CONTENT_TYPE =3D 'application/x-www-form-urlencoded'
CSRF_COOKIE =3D
'aW8mw1heNIcuQ1YTMwnWMzi9DMaDFES6BJ8CnKshM0JxCn1NiZArOTjQVuGRb9UZ'
DOCUMENT_ROOT =3D '/usr/share/nginx/html'
HTTP_ACCEPT =3D
'text/html,application/xhtml+xml,application/xml;q=3D0.9,image/avif,image/webp,image/apng,*/*;q=3D0.8'
HTTP_ACCEPT_ENCODING =3D 'gzip, deflate'
HTTP_ACCEPT_LANGUAGE =3D 'en-GB,en'
HTTP_CACHE_CONTROL =3D 'max-age=3D0'
HTTP_CONNECTION =3D 'keep-alive'
HTTP_CONTENT_LENGTH =3D '164'
HTTP_CONTENT_TYPE =3D 'application/x-www-form-urlencoded'
HTTP_COOKIE =3D
'csrftoken=3DaW8mw1heNIcuQ1YTMwnWMzi9DMaDFES6BJ8CnKshM0JxCn1NiZArOTjQVuGRb9UZ'
HTTP_HOST =3D '192.168.161.103'
HTTP_ORIGIN =3D 'http://192.168.161.103'
HTTP_REFERER =3D
'http://192.168.161.103/accounts/login/?next=3D/postorius/lists/'
HTTP_SEC_GPC =3D '1'
HTTP_UPGRADE_INSECURE_REQUESTS =3D '1'
HTTP_USER_AGENT =3D 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
PATH_INFO =3D '/accounts/login/'
QUERY_STRING =3D ''
REMOTE_ADDR =3D '192.168.131.150'
REMOTE_PORT =3D '60098'
REQUEST_METHOD =3D 'POST'
REQUEST_SCHEME =3D 'http'
REQUEST_URI =3D '/accounts/login/'
SCRIPT_NAME =3D ''
SERVER_NAME =3D ''
SERVER_PORT =3D '80'
SERVER_PROTOCOL =3D 'HTTP/1.1'
uwsgi.core =3D 1
uwsgi.node =3D b'mailman'
uwsgi.version =3D b'2.0.20-debian'
wsgi.errors =3D <_io.TextIOWrapper name=3D2 mode=3D'w'
encoding=3D'ANSI_X3.4-1968'>
wsgi.file_wrapper =3D <built-in function uwsgi_sendfile>
wsgi.input =3D <uwsgi._Input object at 0x7facb44bd530>
wsgi.multiprocess =3D False
wsgi.multithread =3D True
wsgi.run_once =3D False
wsgi.url_scheme =3D 'http'
wsgi.version =3D '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES =3D {}
ACCOUNT_AUTHENTICATION_METHOD =3D 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL =3D 'https'
ACCOUNT_EMAIL_REQUIRED =3D True
ACCOUNT_EMAIL_VERIFICATION =3D 'mandatory'
ACCOUNT_UNIQUE_EMAIL =3D True
ADMINS =3D "(('Mailman Suite Admin', 'root@localhost'),)"
ALLOWED_HOSTS =3D ['*']
APPEND_SLASH =3D True
AUTHENTICATION_BACKENDS =3D
"('django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS =3D '********************'
AUTH_USER_MODEL =3D 'auth.User'
BASE_DIR =3D '/usr/share/mailman3-web'
CACHES =3D {'default': {'BACKEND':
'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS =3D 'default'
CACHE_MIDDLEWARE_KEY_PREFIX =3D '********************'
CACHE_MIDDLEWARE_SECONDS =3D 600
COMPRESSORS =3D {'css': 'compressor.css.CssCompressor', 'js':
'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS =3D '()'
COMPRESS_CACHE_BACKEND =3D 'default'
COMPRESS_CACHE_KEY_FUNCTION =3D '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS =3D ''
COMPRESS_CLEAN_CSS_BINARY =3D 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS =3D ''
COMPRESS_CLOSURE_COMPILER_BINARY =3D 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD =3D 'mtime'
COMPRESS_DATA_URI_MAX_SIZE =3D 1024
COMPRESS_DEBUG_TOGGLE =3D None
COMPRESS_ENABLED =3D True
COMPRESS_FILTERS =3D {'css':
['compressor.filters.css_default.CssAbsoluteFilter'], 'js':
['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT =3D <function
CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7facb6a52b00>
COMPRESS_MINT_DELAY =3D 30
COMPRESS_MTIME_DELAY =3D 10
COMPRESS_OFFLINE =3D True
COMPRESS_OFFLINE_CONTEXT =3D {'STATIC_URL': '/mailman3/static/'}
COMPRESS_OFFLINE_MANIFEST =3D 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT =3D 31536000
COMPRESS_OUTPUT_DIR =3D 'CACHE'
COMPRESS_PARSER =3D 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS =3D '()'
COMPRESS_REBUILD_TIMEOUT =3D 2592000
COMPRESS_ROOT =3D '/var/lib/mailman3/web/static'
COMPRESS_STORAGE =3D 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT =3D {'STATIC_URL': '/mailman3/static/'}
COMPRESS_URL =3D '/mailman3/static/'
COMPRESS_URL_PLACEHOLDER =3D '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE =3D False
COMPRESS_YUGLIFY_BINARY =3D 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS =3D '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS =3D '--terminal'
COMPRESS_YUI_BINARY =3D 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS =3D ''
COMPRESS_YUI_JS_ARGUMENTS =3D ''
CSRF_COOKIE_AGE =3D 31449600
CSRF_COOKIE_DOMAIN =3D None
CSRF_COOKIE_HTTPONLY =3D False
CSRF_COOKIE_NAME =3D 'csrftoken'
CSRF_COOKIE_PATH =3D '/'
CSRF_COOKIE_SAMESITE =3D 'Lax'
CSRF_COOKIE_SECURE =3D False
CSRF_FAILURE_VIEW =3D 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME =3D 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS =3D []
CSRF_USE_SESSIONS =3D False
DATABASES =3D {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME':
'mailman3web', 'USER': 'mailman3web', 'PASSWORD':
'********************', 'HOST': 'localhost', 'PORT': '', 'OPTIONS':
{'init_command': "SET sql_mode=3D'STRICT_TRANS_TABLES'"},
'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0,
'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None,
'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS =3D []
DATA_UPLOAD_MAX_MEMORY_SIZE =3D 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS =3D 1000
DATA_UPLOAD_MAX_NUMBER_FILES =3D 100
DATETIME_FORMAT =3D 'N j, Y, P'
DATETIME_INPUT_FORMATS =3D ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f',
'%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y
%H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT =3D 'N j, Y'
DATE_INPUT_FORMATS =3D ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y',
'%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B
%Y', '%d %B, %Y']
DEBUG =3D False
DEBUG_PROPAGATE_EXCEPTIONS =3D False
DECIMAL_SEPARATOR =3D '.'
DEFAULT_AUTO_FIELD =3D 'django.db.models.AutoField'
DEFAULT_CHARSET =3D 'utf-8'
DEFAULT_EXCEPTION_REPORTER =3D 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER =3D
'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE =3D 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL =3D 'postorius(a)giesler.za.net'
DEFAULT_HASHING_ALGORITHM =3D 'sha256'
DEFAULT_INDEX_TABLESPACE =3D ''
DEFAULT_TABLESPACE =3D ''
DISALLOWED_USER_AGENTS =3D []
EMAILNAME =3D 'giesler.za.net'
EMAIL_BACKEND =3D 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST =3D 'localhost'
EMAIL_HOST_PASSWORD =3D '********************'
EMAIL_HOST_USER =3D ''
EMAIL_PORT =3D 25
EMAIL_SSL_CERTFILE =3D None
EMAIL_SSL_KEYFILE =3D '********************'
EMAIL_SUBJECT_PREFIX =3D '[Django] '
EMAIL_TIMEOUT =3D None
EMAIL_USE_LOCALTIME =3D False
EMAIL_USE_SSL =3D False
EMAIL_USE_TLS =3D False
FILE_UPLOAD_DIRECTORY_PERMISSIONS =3D None
FILE_UPLOAD_HANDLERS =3D
['django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE =3D 2621440
FILE_UPLOAD_PERMISSIONS =3D 420
FILE_UPLOAD_TEMP_DIR =3D None
FILTER_VHOST =3D False
FIRST_DAY_OF_WEEK =3D 0
FIXTURE_DIRS =3D []
FORCE_SCRIPT_NAME =3D None
FORMAT_MODULE_PATH =3D None
FORM_RENDERER =3D 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS =3D {'default': {'ENGINE':
'haystack.backends.whoosh_backend.WhooshEngine', 'PATH':
'/var/lib/mailman3/web/fulltext_index'}}
HOSTNAME =3D 'localhost.local'
IGNORABLE_404_URLS =3D []
INSTALLED_APPS =3D "('hyperkitty', 'postorius', 'django_mailman3',
'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.sites', 'django.contrib.messages',
'django.contrib.staticfiles', 'rest_framework', 'django_gravatar',
'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth',
'allauth.account', 'allauth.socialaccount',
'django_mailman3.lib.auth.fedora')"
INTERNAL_IPS =3D []
LANGUAGES =3D [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz',
'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg',
'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'),
('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'),
('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el',
'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb',
'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar',
'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx',
'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve',
'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa',
'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'),
('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he',
'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper
Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia',
'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'),
('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka',
'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'),
('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb',
'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk',
'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr',
'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokm=C3=A5l'), ('ne',
'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os',
'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'),
('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru',
'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'),
('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'),
('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'),
('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'),
('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'),
('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant',
'Traditional Chinese')]
LANGUAGES_BIDI =3D ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE =3D 'en-za'
LANGUAGE_COOKIE_AGE =3D None
LANGUAGE_COOKIE_DOMAIN =3D None
LANGUAGE_COOKIE_HTTPONLY =3D False
LANGUAGE_COOKIE_NAME =3D 'django_language'
LANGUAGE_COOKIE_PATH =3D '/'
LANGUAGE_COOKIE_SAMESITE =3D None
LANGUAGE_COOKIE_SECURE =3D False
LOCALE_PATHS =3D []
LOGGING =3D {'version': 1, 'disable_existing_loggers': False, 'filters':
{'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}},
'handlers': {'mail_admins': {'level': 'ERROR', 'filters':
['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'},
'file': {'level': 'INFO', 'class':
'logging.handlers.RotatingFileHandler', 'filename':
'/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'},
'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}},
'loggers': {'django.request': {'handlers': ['mail_admins', 'file'],
'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'],
'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers':
['file'], 'level': 'INFO', 'propagate': True}}, 'formatters':
{'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s
%(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG =3D 'logging.config.dictConfig'
LOGIN_REDIRECT_URL =3D 'list_index'
LOGIN_URL =3D 'account_login'
LOGOUT_REDIRECT_URL =3D None
LOGOUT_URL =3D 'account_logout'
MAILMAN_ARCHIVER_FROM =3D "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY =3D '********************'
MAILMAN_REST_API_PASS =3D '********************'
MAILMAN_REST_API_URL =3D '********************'
MAILMAN_REST_API_USER =3D '********************'
MANAGERS =3D []
MEDIA_ROOT =3D ''
MEDIA_URL =3D '/'
MESSAGE_STORAGE =3D
'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS =3D {40: 'danger'}
MIDDLEWARE =3D "('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES =3D {}
MONTH_DAY_FORMAT =3D 'F j'
NUMBER_GROUPING =3D 0
PASSWORD_HASHERS =3D '********************'
PASSWORD_RESET_TIMEOUT =3D '********************'
PASSWORD_RESET_TIMEOUT_DAYS =3D '********************'
POSTORIUS_TEMPLATE_BASE_URL =3D 'http://localhost/mailman3/'
PREPEND_WWW =3D False
Q_CLUSTER =3D {'timeout': 300, 'save_limit': 100, 'orm': 'default',
'poll': 5}
ROOT_URLCONF =3D 'urls'
SECRET_KEY =3D '********************'
SECURE_BROWSER_XSS_FILTER =3D False
SECURE_CONTENT_TYPE_NOSNIFF =3D True
SECURE_HSTS_INCLUDE_SUBDOMAINS =3D False
SECURE_HSTS_PRELOAD =3D False
SECURE_HSTS_SECONDS =3D 0
SECURE_PROXY_SSL_HEADER =3D None
SECURE_REDIRECT_EXEMPT =3D []
SECURE_REFERRER_POLICY =3D 'same-origin'
SECURE_SSL_HOST =3D None
SECURE_SSL_REDIRECT =3D False
SERVER_EMAIL =3D 'root(a)giesler.za.net'
SESSION_CACHE_ALIAS =3D 'default'
SESSION_COOKIE_AGE =3D 1209600
SESSION_COOKIE_DOMAIN =3D None
SESSION_COOKIE_HTTPONLY =3D True
SESSION_COOKIE_NAME =3D 'sessionid'
SESSION_COOKIE_PATH =3D '/'
SESSION_COOKIE_SAMESITE =3D 'Lax'
SESSION_COOKIE_SECURE =3D False
SESSION_ENGINE =3D 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE =3D False
SESSION_FILE_PATH =3D None
SESSION_SAVE_EVERY_REQUEST =3D False
SESSION_SERIALIZER =3D
'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE =3D 'settings'
SHORT_DATETIME_FORMAT =3D 'm/d/Y P'
SHORT_DATE_FORMAT =3D 'm/d/Y'
SIGNING_BACKEND =3D 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS =3D []
SITE_ID =3D 1
SOCIALACCOUNT_PROVIDERS =3D {}
STATICFILES_DIRS =3D '()'
STATICFILES_FINDERS =3D
"('django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE =3D
'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT =3D '/var/lib/mailman3/web/static'
STATIC_URL =3D '/mailman3/static/'
TEMPLATES =3D [{'BACKEND':
'django.template.backends.django.DjangoTemplates', 'DIRS': [],
'APP_DIRS': True, 'OPTIONS': {'context_processors':
['django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS =3D []
TEST_RUNNER =3D 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR =3D ','
TIME_FORMAT =3D 'P'
TIME_INPUT_FORMATS =3D ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE =3D 'Africa/Johannesburg'
USE_I18N =3D True
USE_L10N =3D True
USE_THOUSAND_SEPARATOR =3D False
USE_TZ =3D True
USE_X_FORWARDED_HOST =3D True
USE_X_FORWARDED_PORT =3D False
WSGI_APPLICATION =3D 'wsgi.application'
X_FRAME_OPTIONS =3D 'DENY'
YEAR_MONTH_FORMAT =3D 'F Y'
8 months, 4 weeks

[MM3-users] Hyperkitty not receaving messages / empty archive [Django] ERROR (EXTERNAL IP): Internal Server Error: /hyperkitty/api/mailman/urls
by Helge Baumgart
Hello Everybody,
i have set up a fresh mailman3 installation with maxkings Docker compose
image (https://github.com/maxking/docker-mailman)
I've got it working except i get a very strange hyperkitty error:
Each time i'm sending a post to the list, it gets distributed to the
emailadresses of the list, and at the same time i'm geting a bunch of
error Mails.
And: There are no Mails visible in the Archive.
The directory under core/var/archive/hyperkitty/spool/ listst the
mails....though...
Hyperkitty-Api-Key in the docker-compose.yml is set via .env Variabel,
so it should be identical.
That ist the error Mail i receive:
Can annybody hint me where to search further, what is wrong?
If searched insesivly but found nothing as of jet.... :-(
Thank you in advance!
Helge
Internal Server Error: /hyperkitty/api/mailman/urls
TypeError at /hyperkitty/api/mailman/urls
unsupported operand types(s) or combination of types: 'str' and 'NoneType'
Request Method: GET
Request URL:http://mailman-web:8000/hyperkitty/api/mailman/urls?mlist=test%40lists.mydomain.net&msgid=2291673b-c760-4651-8025-ae170429d587%40web.de
Django Version: 4.1.12
Python Executable: /usr/bin/uwsgi
Python Version: 3.11.6
Python Path: ['.', '', '/usr/lib/python311.zip', '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', '/usr/lib/python3.11/site-packages']
Server time: Tue, 21 Jan 2025 13:12:13 +0000
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_mailman3.lib.auth.fedora',
'allauth.socialaccount.providers.openid',
'allauth.socialaccount.providers.github',
'allauth.socialaccount.providers.gitlab',
'allauth.socialaccount.providers.google']
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',
'allauth.account.middleware.AccountMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/usr/lib/python3.11/site-packages/django/core/handlers/exception.py", line 56, in inner
response = get_response(request)
File "/usr/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3.11/site-packages/hyperkitty/views/mailman.py", line 109, in _decorator
not hmac.compare_digest(
Exception Type: TypeError at /hyperkitty/api/mailman/urls
Exception Value: unsupported operand types(s) or combination of types: 'str' and 'NoneType'
Raised during: hyperkitty.views.mailman.urls
Request information:
USER: AnonymousUser
GET:
mlist = 'test(a)lists.mydomain.net'
msgid = '2291673b-c760-4651-8025-ae170429d587(a)web.de'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
HTTP_ACCEPT = '*/*'
HTTP_ACCEPT_ENCODING = 'gzip, deflate'
HTTP_AUTHORIZATION = 'Token 3ezHkyhUqlD0qB2LiLb4xORyuVFCwimlVZidlOk7XJqjy9QBaNM6O0w4aSR162bN2tIFMdWFKOpfQ1Zq5QYrrVE4IsNFGvkLfGwbf58uENJmUD2yvA0pGXTlvLc3KFD1'
HTTP_CONNECTION = 'keep-alive'
HTTP_HOST = 'mailman-web:8000'
HTTP_USER_AGENT = 'python-requests/2.31.0'
PATH_INFO = '/hyperkitty/api/mailman/urls'
QUERY_STRING = 'mlist=test%40lists.mydomain.net&msgid=2291673b-c760-4651-8025-ae170429d587%40web.de'
REMOTE_ADDR = '172.26.0.2'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/hyperkitty/api/mailman/urls?mlist=test%40lists.mydomain.net&msgid=2291673b-c760-4651-8025-ae170429d587%40web.de'
SCRIPT_NAME = ''
SERVER_NAME = 'mailman-web'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 1
uwsgi.node = b'mailman-web'
uwsgi.version = b'2.0.22'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x790fb0ef82b0>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'it(a)mydomain.net'),)"
ALLOWED_HOSTS = ['localhost', 'mailman-web', '172.26.0.3', 'lists.mydomain.net', 'lists.mydomain.net']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/mailman-web'
CACHES = {'default': {'BACKEND': 'diskcache.DjangoCache', 'LOCATION': '/opt/mailman-web-data/diskcache', 'OPTIONS': {'size_limit': 1073741824}}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x790fb2323420>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = False
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/less', 'lessc {infile} {outfile}'), ('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman-web-data/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_MASKED = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'NAME': 'mailmandb', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'database', 'PORT': '', 'CONN_MAX_AGE': 600, 'CONN_HEALTH_CHECKS': False, 'ENGINE': 'django.db.backends.postgresql', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATA_UPLOAD_MAX_NUMBER_FILES = 100
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount']
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'lists(a)mydomain.net'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
DISKCACHE_PATH = '/opt/mailman-web-data/diskcache'
DISKCACHE_SIZE = 1073741824
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = '172.26.0.5'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/opt/mailman-web-data/fulltext_index'}}
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'django_mailman3.lib.auth.fedora', 'allauth.socialaccount.providers.openid', 'allauth.socialaccount.providers.github', 'allauth.socialaccount.providers.gitlab', 'allauth.socialaccount.providers.google']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/opt/mailman-web-data/logs/mailmanweb.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple', 'level': 'INFO', 'stream': <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('172.26.0.2',)"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MAILMAN_WEB_SOCIAL_AUTH = ['django_mailman3.lib.auth.fedora', 'allauth.socialaccount.providers.openid', 'allauth.socialaccount.providers.github', 'allauth.socialaccount.providers.gitlab', 'allauth.socialaccount.providers.google']
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'allauth.account.middleware.AccountMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://mailman-web:8000'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'retry': 300, 'save_limit': 100, 'orm': 'default'}
ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECRET_KEY_FALLBACKS = '********************'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'lists(a)mydomain.net'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo', 'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'], 'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale', 'timezone'], 'VERSION': 'v2.4'}}
STATICFILES_DIRS = []
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman-web-data/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_DEPRECATED_PYTZ = False
USE_I18N = True
USE_L10N = True
USE_SSL = False
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
That is my docker-compose.yml:
services:
postfix:
image: boky/postfix #mailu/postfix
restart: unless-stopped
container_name: postfix #_incomming
volumes:
- ./data/postfix/etc:/etc/postfix/ #main.cf.d
- ./data/core:/opt/mailman
ports:
- "${MM3_INTERNAL_POSTFIX_SMTP_PORT}:25"
- "${MM3_INTERNAL_POSTFIX_SUBM_PORT}:587"
environment:
- HOSTNAME=${MM3_HOSTNAME}
- RELAYHOST=${MM3_RELAYHOST}
#- RELAYHOST_USERNAME=${MM3_RELAYHOST_USERNAME} # = An (optional) username for the relay server
#- RELAYHOST_PASSWORD=${MM3_RELAYHOST_PASSWORD} # = An (optional) login password for the relay server
- POSTFIX_mynetworks=${MM3_POSTFIX_mynetworks} #=127.0.0.0/24,10.8.0.0/24,172.26.0.0/24,192.168.1.0/24 )
#- ALLOWED_SENDER_DOMAINS=${MM3_ALLOWED_SENDER_DOMAINS} #
- ALLOW_EMPTY_SENDER_DOMAINS=${MM3_ALLOW_EMPTY_SENDER_DOMAINS} #="true" #'), MM3_ALLOWED_SENDER_DOMAINS can be unset
#- MASQUERADED_DOMAINS=${MM3_MASQUERADED_DOMAINS} # = domains where you want to masquerade internal hosts
networks:
mailman:
ipv4_address: ${MM3_IP_INTERNAL_POSTFIX} #172.26.0.5
#services:
mailman-core:
image: maxking/mailman-core:0.4 # Use a specific version tag (tag latest is not published)
container_name: mailman-core
hostname: mailman-core
restart: unless-stopped
volumes:
- ./data/core:/opt/mailman/
stop_grace_period: 30s
links:
- database:database
depends_on:
database:
condition: service_healthy
environment:
- DATABASE_URL=postgresql://mailman:mailmanpass@database/mailmandb
- DATABASE_TYPE=postgres
- DATABASE_CLASS=mailman.database.postgresql.PostgreSQLDatabase
- HYPERKITTY_API_KEY=${MM3_HYPERKITTY_API_KEY} #someapikey_longAndTrustworty
- TIMEZONE=${MM3_TIMEZONE} #Europe/Berlin
- MTA=postfix
- SMTP_HOST=172.26.0.5 #postfix # outgoing smtp Sererv
- SMTP_PORT=25 #${MM3_INTERNAL_POSTFIX_SMTP_PORT} # Outgoing SMTPS Server Port
ports:
- "8001:8001" # API removed 127.0.0.1
- "8024:8024" # LMTP - incoming emails
#extra_hosts:
# - ${MM3_HOSTNAME}:${MM3_IP_INTERNAL_POSTFIX}
networks:
mailman:
ipv4_address: ${MM3_IP_INTERNAL_CORE} #172.26.0.2
mailman-web:
image: maxking/mailman-web:0.4 # Use a specific version tag (tag latest is not published)
container_name: mailman-web
hostname: mailman-web
restart: unless-stopped
depends_on:
database:
condition: service_healthy
links:
- mailman-core:mailman-core
- database:database
volumes:
- ./data/web:/opt/mailman-web-data
environment:
- DATABASE_TYPE=postgres
- DATABASE_URL=postgresql://mailman:mailmanpass@database/mailmandb
- HAYPERKITTY_API_KEY=${MM3_HYPERKITTY_API_KEY} #someapikey_longAndTrustworty
- UWSGI_STATIC_MAP=/static=/opt/mailman-web-data/static
- SECRET_KEY=${MM3_SECRET_KEY} #blah-blah-secret_undgehie
- SERVE_FROM_DOMAIN=${MM3_SERVE_FROM_DOMAIN} #lists.mydomain.net
- MAILMAN_ADMIN_USER=${MM3_MAILMAN_ADMIN_USER} #it
- MAILMAN_ADMIN_EMAIL=${MM3_MAILMAN_ADMIN_EMAIL} #it(a)mydomain.net
- DJANGO_ALLOWED_HOSTS=${MM3_DJANGO_ALLOWED_HOSTS} #lists.mydomain.net
- SMTP_HOST=172.26.0.5 #postfix
- SMTP_PORT=25 #${MM3_INTERNAL_POSTFIX_SMTP_PORT}
- TIMEZONE=${MM3_TIMEZONE} #Europe/Berlin
ports:
- "8000:8000" # HTTP removed 127.0.0.1
- "8080:8080" # uwsgi
# extra_hosts:
# - ${MM3_HOSTNAME}:${MM3_IP_INTERNAL_POSTFIX}
networks:
mailman:
ipv4_address: ${MM3_IP_INTERNAL_WEB} #172.26.0.3
database:
environment:
- POSTGRES_DB=mailmandb
- POSTGRES_USER=mailman
- POSTGRES_PASSWORD=mailmanpass
- TIMEZONE=${MM3_TIMEZONE} #Europe/Berlin
image: postgres:12-alpine
volumes:
- ./data/database:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready --dbname mailmandb --username mailman"]
interval: 10s
timeout: 5s
retries: 5
networks:
mailman:
ipv4_address: ${MM3_IP_INTERNAL_DB} #172.26.0.4
networks:
mailman:
driver: bridge
ipam:
driver: default
config:
- subnet: ${MM3_SUBNET} #172.26.0.0/24
Mailman-extra.cfg:
[mailman]
site_owner:mailman@mydomain.de
max_recipients=1
SMTP_MAX_RCPTS = 1
run_tasks_every: 1h
VERP_CONFIRMATIONS = Yes
VERP_PASSWORD_REMINDERS = Yes
VERP_PERSONALIZED_DELIVERIES = Yes
VERP_DELIVERY_INTERVAL = 1
VERP_PROBES: Yes
[devmode]
enabled: no
recipient:it@mydomain.de
#
# extra local settings for mailmen
[mta]
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
lmtp_host: 172.26.0.2
lmtp_port: 8024
smtp_host: 172.26.0.5
smtp_port: 25
#configuration: /etc/postfix-mailman.cfg
#
#
#
[logging.smtp]
level: warn
[language.en]
charset: utf-8
[language.de]
charset: utf-8
and my settings_locale.py from mailman-web:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = '172.26.0.5'
EMAIL_PORT = 25
USE_SSL = False
DEFAULT_FROM_EMAIL ="lists(a)mydomain.net"
SERVER_EMAIL ="lists(a)mydomain.net"
#DEBUG = True
#: Default list of admins who receive the emails from error logging.
ADMINS = (
('Mailman Suite Admin', 'it(a)mydomain.net'),
)
3 months

[MM3-users] Re: hyperkitty threads by month question
by Bryan Fields
Sorry for the delay, I was on some travel last week.
On 7/19/24 7:30 PM, Mark Sapiro wrote:
> That URL gives me as server error. What's in the Django (mailman-web)
> logs for that?
I did notice hitting a 500 error on occasion, sometimes it works.
When this happens, I get an email error below.
> Are you running all the Django periodic jobs and is qcluster running?
Ok, the docs said that qcluster service wasn't needed under uWSGI
https://docs.mailman3.org/en/latest/install/virtualenv.html#automatically-s…
qcluster does appear to be running:
218916 ? Sl 0:00 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
218929 ? Sl 0:00 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940851 ? Ss 0:00 /bin/sh -c /opt/mailman/venv/bin/mailman-web qcluster
3940854 ? S 0:01 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940856 ? S 117:32 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940860 ? S 0:28 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
3940861 ? Sl 3048:11 /opt/mailman/venv/bin/python3 /opt/mailman/venv/bin/mailman-web qcluster
=== Email Error ===
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/list/nanog(a)nanog-mm3.keekles.org/
Internal Server Error: /archives/list/nanog(a)nanog-mm3.keekles.org/
NoReverseMatch at /archives/list/nanog(a)nanog-mm3.keekles.org/
Reverse for 'hk_archives_with_month' with keyword arguments '{'year': 999, 'mlist_fqdn': 'nanog(a)nanog-mm3.keekles.org', 'month': 12}' not found. 2 pattern(s) tried: ['archives/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$', 'hyperkitty/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$']
Request Method: GET
Request URL: http://nanog-mm3.keekles.org/archives/list/nanog@nanog-mm3.keekles.org/
Django Version: 4.2.13
Python Executable: /opt/mailman/venv/bin/uwsgi
Python Version: 3.10.12
Python Path: ['.', '', '/etc/mailman3', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/opt/mailman/venv/lib/python3.10/site-packages']
Server time: Thu, 25 Jul 2024 18:16:17 +0000
Installed Applications:
['hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount']
Installed Middleware:
('allauth.account.middleware.AccountMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Traceback (most recent call last):
File "/opt/mailman/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/lib/view_helpers.py", line 137, in inner
return func(request, *args, **kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/hyperkitty/views/mlist.py", line 239, in overview
return render(request, "hyperkitty/overview.html", context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/templatetags/cache.py", line 53, in render
value = self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/loader_tags.py", line 208, in render
return template.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 177, in render
return self._render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
return self.nodelist.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
return self.render(context)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/template/defaulttags.py", line 471, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/urls/base.py", line 88, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
File "/opt/mailman/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 828, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /archives/list/nanog(a)nanog-mm3.keekles.org/
Exception Value: Reverse for 'hk_archives_with_month' with keyword arguments '{'year': 999, 'mlist_fqdn': 'nanog(a)nanog-mm3.keekles.org', 'month': 12}' not found. 2 pattern(s) tried: ['archives/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$', 'hyperkitty/list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/(?P<year>\\d{4})/(?P<month>\\d\\d?)/$']
Raised during: hyperkitty.views.mlist.overview
Request information:
USER: nanogadmin
GET: No GET data
POST: No POST data
FILES: No FILES data
COOKIES:
csrftoken = '********************'
sessionid = '********************'
META:
CSRF_COOKIE = '6F7ioB7blmJwLwKQLH0DPuAoWTW8mQGI'
HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'en-US,en;q=0.5'
HTTP_CONNECTION = 'Keep-Alive'
HTTP_COOKIE = '********************'
HTTP_HOST = 'nanog-mm3.keekles.org'
HTTP_SEC_FETCH_DEST = 'document'
HTTP_SEC_FETCH_MODE = 'navigate'
HTTP_SEC_FETCH_SITE = 'none'
HTTP_SEC_FETCH_USER = '?1'
HTTP_UPGRADE_INSECURE_REQUESTS = '1'
HTTP_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:109.0) Gecko/20100101 Firefox/115.0'
HTTP_X_FORWARDED_FOR = '47.206.239.202'
HTTP_X_FORWARDED_HOST = 'nanog-mm3.keekles.org'
HTTP_X_FORWARDED_SERVER = 'nanog-mm3.keekles.org'
PATH_INFO = '/archives/list/nanog(a)nanog-mm3.keekles.org/'
QUERY_STRING = ''
REMOTE_ADDR = '127.0.0.1'
REQUEST_METHOD = 'GET'
REQUEST_URI = '/archives/list/nanog(a)nanog-mm3.keekles.org/'
SCRIPT_NAME = ''
SERVER_NAME = 'nanog-mm3'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.1'
uwsgi.core = 1
uwsgi.node = b'nanog-mm3'
uwsgi.version = b'2.0.26'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x7ff7bcd9f850>
wsgi.multiprocess = True
wsgi.multithread = True
wsgi.run_once = False
wsgi.url_scheme = 'http'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Suite Admin', 'root@localhost'), ('bryan fields', 'bryan(a)bryanfields.net'))"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'nanog-mm3.keekles.org']
APPEND_SLASH = True
AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = PosixPath('/opt/mailman/web')
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.cssmin.rCSSMinFilter'], 'js': ['compressor.filters.jsmin.rJSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7ff7bdb09750>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sassc -t compressed {infile} {outfile}'), ('text/x-sass', 'sassc -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/web/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_MASKED = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = ['https://nanog-mm3.keekles.org']
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailmanweb', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': 'localhost', 'PORT': '5432', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'CONN_HEALTH_CHECKS': False, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_ROUTERS = []
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATA_UPLOAD_MAX_NUMBER_FILES = 100
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'admin(a)nanog-mm3.keekles.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'PATH': '/opt/mailman/web/xapian_index', 'ENGINE': 'xapian_backend.XapianEngine'}}
HYPERKITTY_ENABLE_GRAVATAR = True
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount']
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('ckb', 'Central Kurdish (Sorani)'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('ms', 'Malay'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'ckb', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/web/logs/mailmanweb.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}, 'q': {'level': 'WARNING', 'propagate': False, 'handlers': ['console', 'file']}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = '/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('allauth.account.middleware.AccountMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
PREPEND_WWW = False
Q_CLUSTER = {'retry': 360, 'timeout': 300, 'save_limit': 100, 'orm': 'default', 'workers': 2}
ROOT_URLCONF = 'mailman_web.urls'
SECRET_KEY = '********************'
SECRET_KEY_FALLBACKS = '********************'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'admin(a)nanog-mm3.keekles.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 1
SOCIALACCOUNT_PROVIDERS = {'openid': {'SERVERS': [{'id': 'yahoo', 'name': 'Yahoo', 'openid_url': 'http://me.yahoo.com'}]}, 'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'facebook': {'METHOD': 'oauth2', 'SCOPE': ['email'], 'FIELDS': ['email', 'name', 'first_name', 'last_name', 'locale', 'timezone'], 'VERSION': 'v2.4'}}
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/web/static'
STATIC_URL = '/static/'
STORAGES = {'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'}, 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'}}
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
USE_DEPRECATED_PYTZ = False
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'mailman_web.wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
--
Bryan Fields
727-409-1194 - Voice
http://bryanfields.net
9 months

[MM3-users] Re: Hacking attempts?
by Lists
Hi Tim,
Yes, we use fail2ban already. I just wanted to check that this is actually being caused solely by the would be hackers and the “error” isn’t indicative of something we’ve configured wrong within MM3?
Also, this error doesn’t appear in the MM or Apache logs, it just gets emailed, so I am going to have to figure out how to turn on the appropriate logging in order to get fail2ban to monitor it. Any pointers in this regard would be gratefully received.
Thanks,
Chris
> On 14 Jul 2022, at 13:09, Tim Cutts <tim(a)thecutts.org> wrote:
>
> You could use an application like fail2ban to watch your mailman/web logs and automatically firewall off attacking IP addresses which cause a lot of these errors in a defined window of time. This application is independent from mailman, and you can use it to protect against all kinds of brute force attacks. Ssh, web, mail - anything that creates a log file recording errors from remote IP addresses.
>
> Just be careful when configuring it for remote servers so you don’t saw off the branch you’re sitting on…. I run a mail server for my family, and on one occasion a family member repeatedly got her password wrong which caused fail2ban to lock all of us out because it blocked our home NAT address, and I had to use my mobile phone to unblock us. :-)
>
> Tim
>
>> On 14 Jul 2022, at 08:29, Lists via Mailman-users <mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>> wrote:
>>
>> Hi,
>>
>> We are seeing thousands of these emails every day, looks like someone is trying to hack our Mailman3 but would appreciate someone with more knowledge of MM3 to confirm.
>>
>> Is this a problem with our setup? i.e. the “Internal Server Error” bit, or are the hackers just sending bad data that is causing the error? also how do we stop/block this?
>>
>> TIA and here is a typical email:
>>
>>
>> Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /mailman3/accounts/fedora/login/
>>
>> Internal Server Error: /mailman3/accounts/fedora/login/
>>
>> TypeError at /accounts/fedora/login/
>> _openid_consumer() missing 2 required positional arguments: 'provider' and 'endpoint'
>>
>> Request Method: GET
>> Request URL: https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next… <https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next…><https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next… <https://mailman.ardc.net/mailman3/accounts/fedora/login/?process=login&next…>>
>> Django Version: 2.2.26
>> 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: Thu, 14 Jul 2022 02:34:04 -0400
>> 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
>> 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/lib/python3/dist-packages/django/views/generic/base.py" in view
>> 71. return self.dispatch(request, *args, **kwargs)
>>
>> File "/usr/lib/python3/dist-packages/django/views/generic/base.py" in dispatch
>> 97. return handler(request, *args, **kwargs)
>>
>> File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py" in get
>> 56. return self.post(request, *args, **kwargs)
>>
>> File "/usr/lib/python3/dist-packages/django_mailman3/lib/auth/fedora/views.py" in post
>> 67. client = _openid_consumer(request)
>>
>> Exception Type: TypeError at /accounts/fedora/login/
>> Exception Value: _openid_consumer() missing 2 required positional arguments: 'provider' and 'endpoint'
>> Request information:
>> USER: AnonymousUser
>>
>> GET:
>> process = 'login'
>> next = '/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:mailman3/hyperkitty/list/44net@mailman.ampr.org><mailto:mailman3/hyperkitty/list/44net@mailman.ampr.org <mailto:mailman3/hyperkitty/list/44net@mailman.ampr.org>>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
>>
>> POST: No POST data
>>
>> FILES: No FILES data
>>
>> COOKIES: No cookie data
>>
>> META:
>> CONTEXT_DOCUMENT_ROOT = '/var/www/html'
>> CONTEXT_PREFIX = ''
>> DOCUMENT_ROOT = '/var/www/html'
>> GATEWAY_INTERFACE = 'CGI/1.1'
>> HTTPS = 'on'
>> HTTP_ACCEPT = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
>> HTTP_ACCEPT_ENCODING = 'gzip,deflate'
>> HTTP_CONNECTION = 'Keep-Alive'
>> HTTP_HOST = 'mailman.ardc.net <http://mailman.ardc.net/> <http://mailman.ardc.net/ <http://mailman.ardc.net/>>'
>> HTTP_USER_AGENT = 'Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/ <http://webmeup-crawler.com/> <http://webmeup-crawler.com/ <http://webmeup-crawler.com/>>)'
>> PATH = '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
>> PATH_INFO = '/accounts/fedora/login/'
>> QUERY_STRING = 'process=login&next=/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org><mailto:process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org <mailto:process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org>>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
>> REMOTE_ADDR = '157.90.177.212'
>> REMOTE_PORT = '63384'
>> REQUEST_METHOD = 'GET'
>> REQUEST_SCHEME = 'https'
>> REQUEST_URI = '/mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net(a)mailman.ampr.org <mailto:mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org><mailto:mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org <mailto:mailman3/accounts/fedora/login/?process=login&next=/mailman3/hyperkitty/list/44net@mailman.ampr.org>>/message/O5Z2YZBJZXFPH2ACAORN6BST7B2S3M3P/'
>> SCRIPT_FILENAME = 'proxy:uwsgi://localhost//accounts/fedora/login/' <uwsgi://localhost//accounts/fedora/login/'><uwsgi://localhost//accounts/fedora/login/' <uwsgi://localhost//accounts/fedora/login/'>>
>> SCRIPT_NAME = '/mailman3'
>> SERVER_ADDR = '44.1.1.29'
>> SERVER_ADMIN = 'postmaster(a)ardc.net <mailto:postmaster@ardc.net> <mailto:postmaster@ardc.net <mailto:postmaster@ardc.net>>'
>> SERVER_NAME = 'mailman.ardc.net <http://mailman.ardc.net/> <http://mailman.ardc.net/ <http://mailman.ardc.net/>>'
>> SERVER_PORT = '443'
>> SERVER_PROTOCOL = 'HTTP/1.1'
>> SERVER_SIGNATURE = '<address>Apache/2.4.53 (Debian) Server at mailman.ardc.net <http://mailman.ardc.net/><http://mailman.ardc.net/ <http://mailman.ardc.net/>> Port 443</address>\n'
>> SERVER_SOFTWARE = 'Apache/2.4.53 (Debian)'
>> SSL_TLS_SNI = 'mailman.ardc.net <http://mailman.ardc.net/> <http://mailman.ardc.net/ <http://mailman.ardc.net/>>'
>> uwsgi.core = 1
>> uwsgi.node = b'mailman'
>> uwsgi.version = b'2.0.19.1-debian'
>> wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
>> wsgi.file_wrapper = ''
>> wsgi.input = <uwsgi._Input object at 0x7f8e0b4a0410>
>> wsgi.multiprocess = False
>> wsgi.multithread = True
>> wsgi.run_once = False
>> wsgi.url_scheme = 'https'
>> wsgi.version = '(1, 0)'
>>
>> Settings:
>> Using settings module settings
>> ABSOLUTE_URL_OVERRIDES = {}
>> ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
>> ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
>> ACCOUNT_EMAIL_REQUIRED = True
>> ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
>> ACCOUNT_UNIQUE_EMAIL = True
>> ADMINS = "(('Mailman Suite Admin', 'postmaster(a)ardc.net <mailto:postmaster@ardc.net><mailto:postmaster@ardc.net <mailto:postmaster@ardc.net>>'),)"
>> ALLOWED_HOSTS = ['*']
>> APPEND_SLASH = True
>> AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
>> AUTH_PASSWORD_VALIDATORS = '********************'
>> AUTH_USER_MODEL = 'auth.User'
>> BASE_DIR = '/usr/share/mailman3-web'
>> CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}}
>> CACHE_MIDDLEWARE_ALIAS = 'default'
>> CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
>> CACHE_MIDDLEWARE_SECONDS = 600
>> COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
>> COMPRESS_CACHEABLE_PRECOMPILERS = '()'
>> COMPRESS_CACHE_BACKEND = 'default'
>> COMPRESS_CACHE_KEY_FUNCTION = '********************'
>> COMPRESS_CLEAN_CSS_ARGUMENTS = ''
>> COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
>> COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
>> COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
>> COMPRESS_CSS_HASHING_METHOD = 'mtime'
>> COMPRESS_DATA_URI_MAX_SIZE = 1024
>> COMPRESS_DEBUG_TOGGLE = None
>> COMPRESS_ENABLED = True
>> COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
>> COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f8e17d7a670>
>> COMPRESS_MINT_DELAY = 30
>> COMPRESS_MTIME_DELAY = 10
>> COMPRESS_OFFLINE = True
>> COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
>> COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
>> COMPRESS_OFFLINE_TIMEOUT = 31536000
>> COMPRESS_OUTPUT_DIR = 'CACHE'
>> COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
>> COMPRESS_PRECOMPILERS = '()'
>> COMPRESS_REBUILD_TIMEOUT = 2592000
>> COMPRESS_ROOT = '/var/lib/mailman3/web/static'
>> COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
>> COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/mailman3/static/'}
>> COMPRESS_URL = '/mailman3/static/'
>> COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
>> COMPRESS_VERBOSE = False
>> COMPRESS_YUGLIFY_BINARY = 'yuglify'
>> COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
>> COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
>> COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
>> COMPRESS_YUI_CSS_ARGUMENTS = ''
>> COMPRESS_YUI_JS_ARGUMENTS = ''
>> CSRF_COOKIE_AGE = 31449600
>> CSRF_COOKIE_DOMAIN = None
>> CSRF_COOKIE_HTTPONLY = False
>> CSRF_COOKIE_NAME = 'csrftoken'
>> CSRF_COOKIE_PATH = '/'
>> CSRF_COOKIE_SAMESITE = 'Lax'
>> CSRF_COOKIE_SECURE = False
>> CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
>> CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
>> CSRF_TRUSTED_ORIGINS = []
>> CSRF_USE_SESSIONS = False
>> DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': ‘X.X.X.X', 'PORT': '', 'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", 'charset': 'utf8mb4'}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}}
>> DATABASE_ROUTERS = []
>> DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440
>> DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
>> DATETIME_FORMAT = 'N j, Y, P'
>> DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y']
>> DATE_FORMAT = 'N j, Y'
>> DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
>> DEBUG = False
>> DEBUG_PROPAGATE_EXCEPTIONS = False
>> DECIMAL_SEPARATOR = '.'
>> DEFAULT_CHARSET = 'utf-8'
>> DEFAULT_CONTENT_TYPE = 'text/html'
>> DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
>> DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
>> DEFAULT_FROM_EMAIL = 'postorius(a)mailman.ardc.net <mailto:postorius@mailman.ardc.net><mailto:postorius@mailman.ardc.net <mailto:postorius@mailman.ardc.net>>'
>> DEFAULT_INDEX_TABLESPACE = ''
>> DEFAULT_TABLESPACE = ''
>> DISALLOWED_USER_AGENTS = []
>> EMAILNAME = 'mailman.ardc.net <http://mailman.ardc.net/> <http://mailman.ardc.net/ <http://mailman.ardc.net/>>'
>> EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
>> EMAIL_HOST = 'localhost'
>> EMAIL_HOST_PASSWORD = '********************'
>> EMAIL_HOST_USER = ''
>> EMAIL_PORT = 25
>> EMAIL_SSL_CERTFILE = None
>> EMAIL_SSL_KEYFILE = '********************'
>> EMAIL_SUBJECT_PREFIX = '[Django] '
>> EMAIL_TIMEOUT = None
>> EMAIL_USE_LOCALTIME = False
>> EMAIL_USE_SSL = False
>> EMAIL_USE_TLS = False
>> FILE_CHARSET = 'utf-8'
>> FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
>> FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
>> FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
>> FILE_UPLOAD_PERMISSIONS = None
>> FILE_UPLOAD_TEMP_DIR = None
>> FILTER_VHOST = False
>> FIRST_DAY_OF_WEEK = 0
>> FIXTURE_DIRS = []
>> FORCE_SCRIPT_NAME = None
>> FORMAT_MODULE_PATH = None
>> FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
>> HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/var/lib/mailman3/web/fulltext_index'}}
>> HOSTNAME = 'localhost.local'
>> IGNORABLE_404_URLS = []
>> INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount', 'django_mailman3.lib.auth.fedora')"
>> INTERNAL_IPS = []
>> LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')]
>> LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur']
>> LANGUAGE_CODE = 'en-us'
>> LANGUAGE_COOKIE_AGE = None
>> LANGUAGE_COOKIE_DOMAIN = None
>> LANGUAGE_COOKIE_NAME = 'django_language'
>> LANGUAGE_COOKIE_PATH = '/'
>> LOCALE_PATHS = []
>> LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.RotatingFileHandler', 'filename': '/var/log/mailman3/web/mailman-web.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'INFO', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}, 'postorius': {'handlers': ['file'], 'level': 'INFO', 'propagate': True}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}}
>> LOGGING_CONFIG = 'logging.config.dictConfig'
>> LOGIN_REDIRECT_URL = 'list_index'
>> LOGIN_URL = 'account_login'
>> LOGOUT_REDIRECT_URL = None
>> LOGOUT_URL = 'account_logout'
>> MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '10.4.16.129', '44.1.1.29')"
>> MAILMAN_ARCHIVER_KEY = '********************'
>> MAILMAN_REST_API_PASS = '********************'
>> MAILMAN_REST_API_URL = '********************'
>> MAILMAN_REST_API_USER = '********************'
>> MANAGERS = []
>> MEDIA_ROOT = ''
>> MEDIA_URL = ''
>> MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
>> MESSAGE_TAGS = {40: 'danger'}
>> MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
>> MIGRATION_MODULES = {}
>> MONTH_DAY_FORMAT = 'F j'
>> NUMBER_GROUPING = 0
>> PASSWORD_HASHERS = '********************'
>> PASSWORD_RESET_TIMEOUT_DAYS = '********************'
>> POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost/mailman3/ <http://localhost/mailman3/><http://localhost/mailman3/ <http://localhost/mailman3/>>'
>> PREPEND_WWW = False
>> Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default', 'poll': 5}
>> ROOT_URLCONF = 'urls'
>> SECRET_KEY = '********************'
>> SECURE_BROWSER_XSS_FILTER = False
>> SECURE_CONTENT_TYPE_NOSNIFF = False
>> SECURE_HSTS_INCLUDE_SUBDOMAINS = False
>> SECURE_HSTS_PRELOAD = False
>> SECURE_HSTS_SECONDS = 0
>> SECURE_PROXY_SSL_HEADER = None
>> SECURE_REDIRECT_EXEMPT = []
>> SECURE_SSL_HOST = None
>> SECURE_SSL_REDIRECT = False
>> SERVER_EMAIL = 'root(a)mailman.ardc.net <mailto:root@mailman.ardc.net> <mailto:root@mailman.ardc.net <mailto:root@mailman.ardc.net>>'
>> SESSION_CACHE_ALIAS = 'default'
>> SESSION_COOKIE_AGE = 1209600
>> SESSION_COOKIE_DOMAIN = None
>> SESSION_COOKIE_HTTPONLY = True
>> SESSION_COOKIE_NAME = 'sessionid'
>> SESSION_COOKIE_PATH = '/'
>> SESSION_COOKIE_SAMESITE = 'Lax'
>> SESSION_COOKIE_SECURE = False
>> SESSION_ENGINE = 'django.contrib.sessions.backends.db'
>> SESSION_EXPIRE_AT_BROWSER_CLOSE = False
>> SESSION_FILE_PATH = None
>> SESSION_SAVE_EVERY_REQUEST = False
>> SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
>> SETTINGS_MODULE = 'settings'
>> SHORT_DATETIME_FORMAT = 'm/d/Y P'
>> SHORT_DATE_FORMAT = 'm/d/Y'
>> SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
>> SILENCED_SYSTEM_CHECKS = []
>> SITE_ID = 1
>> SOCIALACCOUNT_PROVIDERS = {}
>> STATICFILES_DIRS = '()'
>> STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
>> STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
>> STATIC_ROOT = '/var/lib/mailman3/web/static'
>> STATIC_URL = '/mailman3/static/'
>> TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
>> TEST_NON_SERIALIZED_APPS = []
>> TEST_RUNNER = 'django.test.runner.DiscoverRunner'
>> THOUSAND_SEPARATOR = ','
>> TIME_FORMAT = 'P'
>> TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
>> TIME_ZONE = 'UTC'
>> USE_I18N = True
>> USE_L10N = True
>> USE_THOUSAND_SEPARATOR = False
>> USE_TZ = True
>> USE_X_FORWARDED_HOST = True
>> USE_X_FORWARDED_PORT = False
>> WSGI_APPLICATION = 'wsgi.application'
>> X_FRAME_OPTIONS = 'SAMEORIGIN'
>> YEAR_MONTH_FORMAT = 'F Y’
>>
>>
>>
>>
>> _______________________________________________
>> Mailman-users mailing list -- mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>
>> To unsubscribe send an email to mailman-users-leave(a)mailman3.org <mailto:mailman-users-leave@mailman3.org>
>> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/ <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/>
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org <mailto:mailman-users-leave@mailman3.org>
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/ <https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/>
2 years, 9 months

[MM3-users] Re: Mailman 3 Status Update Please?
by ddw David Wilson
Thanks to the three quality responses to my request for a status
update. All respondents clearly know about which they speak, which is
certainly more than I can say for myself.
From the excellent quality and quantity of the recent messages going
through this mailman-users group, it's easy to be excited about the
wonderful, thriving development & implementation community. Wow!
[Technical term]
As a casual, very interested observer, it's nice to see this up-tick
(IMO) in activity, suggesting great advances are imminent:-) in this
software, originally started over a decade ago.
In this environment of ever increasing rate of change with a
corresponding increase in complexities, number of dependencies, etc, I
continue be impressed how Barry et al can stay the course, moving slowly
and steadily (hopefully) towards the objective of 'having everything in
the box' that 'just works'. That may be a somewhat unrealistic goal for
such a multi-faced program, configurable for the myriad of user
requirements.
My own goal is to implement and train others (once I learn how to do it
myself) to use Mailman3 for various cottage and/or condo/HOA
associations, each with their own lists of members, an executive board,
(sub)committees, special interest groups, and so on with many common
communication/data processing requirements.
Your point regarding security of messaging is appreciated but until the
average email incorporates something like PGP, then messages themselves
will be insecure. Since I am not contemplating a banking system, I am
not unduly concerned direct about fiscal consequences such as revealing
credit card numbers and/or social insurance numbers..
Regarding financial contributions, until I have a regular revenue
stream, anticipated to be priced out at approximately $25 per month per
organization, given that we will be operating as a not-for-profit
entity, I only spend/invest my own money only to specifically move
towards that goal. I was referring to money in exchange for specific,
targeted, measurable goals designed to get us going but can see how that
would not be feasible with the vast scope of this immense project.
Once up and running with a critical mass of users, we anticipate
spending/returning about one third of revenue to various OSS software
projects, of which Mailman3 is expected to figure prominently.
Personally, when it comes to contributing, I like to have my funds tied
or directed to specific, measurable, delivered goals such as frequently
seen with crowdfunding applications, rather than simply contributing to
an open pool of cash, not earmarked for something specific. Just me,
perhaps, but tying the dollars to results makes me feel good, even if
it's awkward for those who simply want to delve into the code to fix an
irritating bug or work on the next inter-application interface, etc.
As an example of identifying specific, identifiable goals to motivate
donations, I helped start a charity poker run fund raiser for our local
hospital, with all funds allocated to purchase specific items, including
a digital mammography unit and now stretcher beds for the emergency
room, with our four year total contribution approaching CDN$50,000. And
all this money from a rural community numbering under 4,000 people.
I gather that with the high quality of the talent pool contributing to
this user group that volunteer programmer time is more important than
money, recognizing that having more money is never a bad thing.
I started this message, and plan to end it as well, with many thanks to
the various respondents and expressed how impressed I am with the
quality and knowledge apparent from both those asking and answering
questions. The progress leads me to believe that in the foreseeable
future, that this suite of programs will workable for me, with a
little/lot of help from my friends:-).
Keep up the great work.
Your cheerleader,
Dave Wilson
On 17-07-23 09:53 PM, Stephen J. Turnbull wrote:
> Adding a slightly different perspective to Abhilash's and Barry's.
>
> ddw David Wilson writes:
>
> > From my perspective of being an senior (ie overaged) person
> > desirous of implementing fully-featured, capable, scalable,
> > reliable, secure
>
> I'm not sure if "secure" is a real requirement, a nice-to-have, or
> intended as a compliment to Mailman, but "secure" is not something we
> can claim. Mail is inherently a security problem, because there is no
> universal way to authenticate senders. It's possible under certain
> conditions to configure a system to be secure in the sense of allowing
> only authentic senders, but even when possible it is not easy. Ask
> John Podesta (for a well-known example) or Matt Tait (aka Twitter's
> @pwnallthethings, a security expert who has publically admitted that
> he's come "this close" to clicking on spear-phishing attachments).
>
> Mailman itself is a complex application with a very large attack
> surface. If containerized, it will be rather difficult to exploit the
> rest of the system, but Mailman itself contains a lot of private data
> (email addresses and associated display names, which are frequently
> real names), and in enterprise situations may have access to
> enterprise databases "containing the whole store".
>
> > applications such as Mailman, I am convinced that I am thoroughly
> > over my head.
>
> That's what we're here for! Of course we're volunteers, so our
> availability is less than 99% reliable and time is limited. I don't
> know of any consulting services providing Mailman 3 consulting yet,
> but given the activity of this list I believe we'll see them soon. If
> you have funding to offer and want to kickstart the process, you could
> go to the vendors page on our website and talk to some of them.
>
> > From my limited perspective, it would seem to me that a 'nice to
> > have' system would incorporate the following.
> >
> > 1. An open container standard configurable system install, compatible
> > with different web & mail servers, DB utilities, etc;
>
> We have a container system which is configurable. However, IMHO
> "standard" and "configurable/compatible" are incompatible goals. What
> we can reasonably provide is a full system-in-a-box for people who
> only want to configure Mailman itself (ie, add lists and users, and
> configure their settings in the web interfaces). For people with
> specific desiderata such as a particular mail transport agent or web
> server different from those provided by our "Mailman-3-in-a-box",
> they're going to need somewhat advanced sysadmin skills for the
> forseeable future because the configuration requirements of web
> services and mail services must be coordinated, and have subtle,
> implementation-dependent interactions.
>
> We hope that the vendors referred to above (including mail hosts, mail
> consultants, and system management framework vendors like cPanel) will
> soon start providing more "Mailman 3 in a box" services (both software
> distributions and as VMs in cloud services), as well as consulting
> services for those with specific needs not served by existing
> containerized versions.
>
> > 2. Python 3 version Django utilities for archiving and mail list name
> > management;
>
> In progress.
>
> > 3. A design/plan from an inside expert perspective stating costs, time
> > and resources to implement the plan, incorporating crowdfunding to
> > pay for project.
>
> We don't have spare cycles at the moment. None of us actively consult
> for money on Mailman, which means neither direct engineering
> capability nor management capability are available. I'm considering
> this, but since I'm currently a life-long academic with a full-time
> job for the next few years, I'm not in a big hurry, and would need to
> acquire skills/partners for the aspects I've no experience in. :-) (I
> guess that's :-( from your perspective.) With a two-year timeline, if
> I decide to do it, likely I'd actually open for business in about
> 1.5-2 years (based on seasonal cycles in free time). I don't know
> offhand of anyone else even thinking about it.
>
> This could change at any time with entry of new developers, of course,
> but it's only fair to warn you that this is the current status.
>
> > 4. As a backup incentive to the crowdfunding plan might be the offer of
> > an expert to set up a system for each significant amount donated,
> > say US$1,000, such as might be accomplished by an SSL session on the
> > target computer/server after the user has specified all necessary
> > detail as required in a template.
>
> We do have ways to donate via our relationship with the FSF, but the
> same issues described above (no reliable gobs of available time for
> project oversight or actual development) apply.
>
> > I am sure that the program author and other major contributors could
> > greatly enhance this list.
> >
> > In summary, I guess what I am requesting is an overview forecast by half
> > year period and out for the next two years?
>
> For 6 and 12 months out, Abhilash's summary list, and Barry's, all are
> goals I support. We should also have a plug-in implementating the ARC
> protocol which improves authentication capabilities by allowing a
> list's subscribers (more precisely, their mail hosts) to extend
> transitive trust to senders that the list has authenticated. Although
> providing such authentication services *in Mailman* is suboptimal and
> sometimes impossible, we can provide containerized Mailman with that
> service.
>
> Steve
>
>
7 years, 9 months