Re: problems installing mailman3 under gentoo and upgrading mailman2 to mailman3
by John Covici
I don't think this reply got to the mailing list, so I am sending it
again, sorry if its a duplicate.
On Sat, 13 Mar 2021 00:33:58 -0500,
Mark Sapiro wrote:
>
> On 3/12/21 7:36 PM, John Covici wrote:
> > Hi. I am having a great deal of difficulty installing mailman3 using
> > gentoo and sendmail. Also, I want to upgrade my old mailman2 data to
> > mailman3.
> >
> > What I have done so far is to install the mailman3 packages from my
> > repository and got this:
> > django-mailman3 version 1.3.4, mailmanclient version 3.3.1, mailman
> > version 3.3.2 (apparently the core), postorius version 1.3.3 and
> > hyperkitty version 1.3.3. I also have mariadb and postgresql already installed.
>
>
> Are these gentoo packages? If so, I have no idea how they are
> configured.
Anyway I can tell, there was no configuration (we call them use flags)
they just seemed to install the files in what seems to be the correct
places.
>
>
> > Now trying to read your documentation, it seems it wants me to
> > reinstall some packages using pip in the home directory of the mailman
> > user in a python virtual environment, that was the first thing. But I
> > would like to avoid multiple package managers wherever possible --
> > gentoo is already a lot of maintainance without dealing with pip's
> > maintainance. The binaries also seem to be different from my gentoo packages.
>
>
> Our documantation generally covers installing from source. If you are
> installing gentoo packages, you should be looking at gentoo docs and
> going to gentoo for help.
>
> We recommend installing Mailman and the web components in a virtualenv,
> but it is not a requirement. We also suggest that postgresql is a better
> choice than MariaDB.
>
I sort of am installing from source, gentoo installs from source. No
one on the gentoo users mailing list seems to be able to help me,
except to tell me to use a different mailing list mechanism called
mlmmj.
>
> > So, how do I proceed with getting mailman3 up and working, configuring
> > the database, configs, etc and I guess after doing that upgrading
> > mailman2 and getting sendmail to interface properly with mailman3?
>
> Importing lists from Mailman 2 is done with the `mailman import21`
> command. See
> <https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/commands/d…>.
> Importing archives is done with the Django management
> `hyperkitty_import` command. See
> <https://docs.mailman3.org/projects/hyperkitty/en/latest/install.html#import…>
>
> For sendmail, see
> <https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/mta.h…>
Thanks.
--
Your life is like a penny. You're going to lose it. The question is:
How do
you spend it?
John Covici wb2una
covici(a)ccs.covici.com
--
Your life is like a penny. You're going to lose it. The question is:
How do
you spend it?
John Covici wb2una
covici(a)ccs.covici.com
5 years, 3 months
Re: Problems with New MM3 Installation
by Mark Sapiro
On 5/11/21 7:46 PM, Jeff wrote:
>
> I really appreciate your assistance. New messages are now being archived as expected, but I still have a few small remaining issues to work out with my MM3 installation:
>
> 1) some emails that arrived before I got the archive working are still sitting in:
>
> /usr/local/mailman3/mm/var/archives/prototype/[listname]@[domain]/new
>
> Strangely this includes at least one email that was archived. Should this directly be cleared as messages are archived? Is there a way to force it to be cleared?
/usr/local/mailman3/mm/var/archives/prototype/[listname]@[domain] is a
collection of messages in maildir format. This is how the prototype
archiver stores messages. This has nothing to do with HyperKitty. It is
a separate archiver. If you don't want messages to be stored there, you
can disable the prototype archiver for the list by unchecking prototype
in Postorius -> Settings -> Archiving -> Active archivers or disable it
entirely for the installation by setting
```
[archiver.prototype]
enable: no
```
in mailman.cfg
> 2) Some messages that arrived while I was having other problems with the setup have been stored in:
>
> /usr/local/mailman3/mm/var/queue/shunt
>
> What should I do to get these messages processed?
Assuming the issues that caused them to be shunted have been fixed, just
run the command
```
mailman unshunt
```
> 3) Similar to above, some messages are in:
>
> /usr/local/mailman3/mm/var/queue/bad
>
> How can I get these messages processed?
First examine the messages with
```
mailman qfile /usr/local/mailman3/mm/var/queue/bad/<file>
```
To be sure you want them. Also examine mailman.log for the times they
were stored in the `bad` queue. You are looking for 'Skipping and
preserving unparseable message: <file>' and/or 'SHUNTING FAILED,
preserving original entry: <file> messages and you want to determine
which runner preserved the message. There may be a 'whichq' entry in the
message's metadata in which case, that's the answer.
Once you have determined the queue, you can just move the .psv file from
the bad queue to the appropriate queue, renaming it from .psv to .pck in
the process.
> 4 Modified the template for “list:admin:action:post” through Postorious and emails that arrived after that were put in the “shunt” queue. I traced this problem to POSTORIUS_TEMPLATE_BASE_URL. By default, it is set to "http://localhost:8000 <http://localhost:8000/>” which is where uwsgi is listening. However, uwsigi is listening for uwsgi:/ not http://. Should I change POSTORIUS_TEMPLATE_BASE_URL to “uwsgi://localhost:8000 <uwsgi://localhost:8000>” or keep http but make it something else?
I know little about uwsgi. setting it to `uwsgi://localhost:8000` might
work. You could also set it to the base URL that a user would use to
access the web UI, e.g. `https://example.com` and that would presumably
be proxied to uwsgi. For example, on the server for this list we have
```
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.mailman3.org'
```
which gets proxied to gunicorn, but the idea is the same.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years, 1 month
Re: Some doc updates from Fedora install experience
by tlhackque
On 26-Jun-17 15:31, Abhilash Raj wrote:
> Excerpts from tlhackque--- via Mailman-users's message of June 24,
> 2017 4:21 am:
>> I had to read code to discover that the web UI (Postorious) server
>> address doesn't exist in any config file.
>
> That is True, there is no stright forward way for Mailman Core to know
> who is
> using the API and where is the Web UI working. I *think* "Web Host" is
> used to
> generate emails, but that can't always be completely accurate because
> there is
> no easy way to know what is the "root" url for Postorius and
> Hyperkitty. Generally, the default configurations place it at
> "/postorius/" and
> "/hyperkitty/", but there are installations where it is placed at
> "/mailman3/"
> and "/archives/".
>
It would be helpful for API users to "register" with Mailman, so that
API clients can figure out how to direct users to their web pages.
There has to be a directory somewhere, and Mailman is the central
character. It doesn't have to be one place. Perhaps something like
"get( '/lists/config/admin_ui') and get('/lists/config/subscriber_ui") -
which could return something like:
[ {"type":"gui", "name":"postorius",
"uri":"https://www.example.net/mailman3/"},
{"type":"cli","name":"mailmanclient","uri":"domain://my.socket.example.net:1234"},{"type":"gui","name":"mailmanx","uri":"file:///usr/sbin/mailman-Tk"},
...]
(Where the order indicates preference).
Speaking of which, without this knowledge, how can Mailman provide the
personalized "to unsubscribe, visit your account at "...." customizations"?
I see that there are URLs for headers/footers, but we seem to have lost
the ability to insert the URL for the GUI managing your list/account
into personalized e-mails...
>>
>> To bind it to something other than localhost, you put the desired ip
>> address & port on the
>>
>> `python manage.py runserver` command line (in mailman-suite_project.
>
> Ok, so you should never use this in production.
AGREEED
> This command starts a
> "development" server which is only supposed to be used in the development
> environment.
My development environment is a VM for Mailman, and other VMs for the
mail server. And if I try to run a web browser on the Mailman VM, it
takes over the machine and even so is unresponsive. So I needed to make the
UI visible on the network where my PC is. I do understand the issues,
and there are firewalls protecting the environment.
> For any production use, in general for any python web app, we use a
> wsgi server which interfaces between Django and a "real" web server
> like Nginx
> or Apache. I would recommend using uwsgi. This[1] and [2] might be of
> help.
>
AGREE. I know that I will have to do this eventually. But my immediate
goal is to see if it's possible to get my application talking to Mailman
V3 - it's a 1-user environment. So I needed an evaluation environment
with the absolute minimum setup costs. If things work out, I'll do the
right thing. If not, I can't afford to have spent a week or so
untangling nested webservers talking to each-other with frameworks, a
half-dozen passwords and config files.
This was the quickest path I could find to an 'almost out-of-the-box'
evaluation and prototyping environment...and pretty much the only
"step-by-step" instructions that I could find. I'd have tried
"step-by-step" for production if (a) I could find it and (b) I could
configure it with less than a couple of days of study :-(
I decided to document this in case it helps someone else.
I strongly agree that it's not production, and not for all users.
> There is some configuration over here[3] that might help you get it
> running. You
> would have to change some parameters in the configuration though.
>
>>
>> It must be an IP address - it doesn't resolve DNS names. The port is
>> appended to the IP address with a ':'.
>>
>> So, in venv 2.7
>> `cd mailman-suite_project && python manage.py runserver
>> 10.0.0.11:8000` will work.
>>
>> There are all sorts of issues if your network is at all public, but
>> in my
>> case, a multi-machine walled garden, with no local web browser, it
>> allowed
>> bootstrapping to continue.
>
> It is not supposed to be public and should only be used for development.
>
Agree, agree, agree.
>>
>> The runserver command also takes --ipv6 (or -6) to bind to an IPv6
>> address,
>> --nothreading and --noreload also exist (but i haven't tracked down
>> whethere
>> they're useful')
>
> There are a whole lot of other optins available to `python manage.py`
> command
> which you can find in the documentation for Django.
Truth be told, I had no idea that 'runserver" had anything to do with
Django. I was just
following instructions to get something out of the box and onto the wire.
FWIW, 'python manage.py --help' and 'python manage.py help runserver'
are semi-intructive.
I still have no clue what an "auto-reloader" is, but the help does say
that --noreload won't use it :-)
It's clear that a lot of work has gone into this release -- but it's
also quite frustrating for
people who just want to explore using it to get through the setup effort.
I've made some progress.
> --
> thanks,
> Abhilash Raj
8 years, 11 months
Re: Confusing mailman user model
by Gilles Filippini
Gilles Filippini a écrit le 19/07/2020 à 19:10 :
> Gilles Filippini a écrit le 19/07/2020 à 18:00 :
>> Mark Sapiro a écrit le 19/07/2020 à 17:30 :
>>> On 7/19/20 8:10 AM, Gilles Filippini wrote:
>>>> Hi,
>>>>
>>>> I'm trying to understand the Mailman user model, and I'm confused about
>>>> the respective roles of tables 'auth_user' and 'user'.
>>>
>>>
>>> auth_user is a Django auth table. These are the users listed in the
>>> Django admin web UI.
>>>
>>> user is Mailman core's users.
>>>
>>>
>>>> Both have an 'id' column referred to as 'user_id' when used as a foreign
>>>> key. But there seems to be no relation at all between them as they use
>>>> different ids for the same user.
>>>
>>>
>>> Right, they are unrelated.
>>>
>>>
>>>> Our mailman server was migrated from mailman2 to mailman3 about 1.5 year
>>>> ago, and there is an inconsistency I'd like to fix:
>>>> 2 of our users have a registered Mailman account with their respective
>>>> email addresses in table 'auth_user', but these very same addresses in
>>>> the 'address' table are linked to another old admin account in the
>>>> 'user' table.
>>>
>>> Their Mailman account is the 'old' one. the auth_user account is a
>>> Django account
>>>>
>>>> Then if add one of these addresses as a domain owner, it it the old
>>>> admin address which is selected instead. How could I fix that?
>>>
>>>
>>> That's because domain owner in a Mailman thing and involvs the Mailman
>>> user. You could delete the Django users via the Django admin UI and then
>>> re-register them via Postorius. That *might* work.
>>
>> When login into postorius, it is the Django account that is used, right?
>> Then how is the mailman account retrieved from there? It seems UUIDs are
>> used in the process, but I fail understanding how, so far. Wouldn't it
>> be safe to retrieve the new Mailman account associated to these Django
>> users, and link there emails from 'address' table' to them?
>
> Reading the mailman-web source code I understand now that the mailman
> account is retrieved from the Django account email address. Then both
> users are tied to the same old mailman admin account, and deleting then
> registering them again won't change anything on this aspect.
>
> Would this work?
> 1- For both addresses, update their record in table 'address' to set
> 'user_id' to null
> 2- On their next login to Mailman-web, a new mailman account would be
> created and associated with their own email address.
Done that, and it worked.
Thanks,
_g.
5 years, 11 months
Re: templates
by Christian
Okay I sent a test message this morning and subscribers are reporting they
did not receive it. The smtp.log shows 'smtp to
degrowcali(a)lists.ccalternatives.org for 25 recips, completed in
3276.275292634964 seconds' (see below)
I alone received it however and it is listed in the archive. Below is the
excerpt from smtp.log. Two of my 5 lists are exhibiting this behavior, while
2 other lists are working normally. Please advise. Thank you.
root@zarathustra:/opt/mailman/mm/var/logs# vi smtp.log
May 05 08:09:24 2023 (768) ('127.0.0.1', 48706) recip:
degrowcali-bounces+vortexanthony=hotmail.com(a)lists.ccalternatives.org
May 05 08:09:24 2023 (768) ('127.0.0.1', 48706) >> b'DATA'
May 05 08:09:24 2023 (768) ('127.0.0.1', 48706) >> b'QUIT'
May 05 08:09:24 2023 (768) ('127.0.0.1', 48706) connection lost
May 05 08:09:24 2023 (768) ('127.0.0.1', 48706) Connection lost during
_handle_client()
May 05 08:11:35 2023 (768) Available AUTH mechanisms: LOGIN(builtin)
PLAIN(builtin)
May 05 08:11:35 2023 (768) Peer: ('127.0.0.1', 60312)
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) handling connection
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) >> b'LHLO
zarathustra.ccalternatives.org'
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) >> b'MAIL FROM:<> SIZE=9885
BODY=8BITMIME'
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) sender: <>
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) >> b'RCPT
TO:<degrowcali-bounces+alaitz.aritza=gmail.com(a)lists.ccalternatives.org>'
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) recip:
degrowcali-bounces+alaitz.aritza=gmail.com(a)lists.ccalternatives.org
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) >> b'DATA'
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) >> b'QUIT'
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) connection lost
May 05 08:11:35 2023 (768) ('127.0.0.1', 60312) Connection lost during
_handle_client()
May 05 08:13:46 2023 (771)
<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org> smtp to
degrowcali(a)lists.ccalternatives.org for 25 recips, completed in
3276.275292634964 seconds
May 05 08:13:46 2023 (771)
<046f01d97f5c$27c4ada0$774e08e0$(a)degrowthcalifornia.org> post to
degrowcali(a)lists.ccalternatives.org from christian(a)degrowthcalifornia.org,
5012 bytes
May 05 08:13:46 2023 (771)
<168329874052.765.12737190159456781981(a)zarathustra.ccalternatives.org> smtp
to degrowcali(a)lists.ccalternatives.org for 1 recips, completed in
0.011698722839355469 seconds
May 05 08:13:46 2023 (771)
<168329874052.765.12737190159456781981(a)zarathustra.ccalternatives.org> post
to degrowcali(a)lists.ccalternatives.org from
degrowcali-bounces+6397d6fde210be0b39dbf22a9868e61d6e2d0f23(a)lists.ccalternat
ives.org, 11445 bytes
May 05 08:13:46 2023 (771)
<168329886073.765.17844938860507947692(a)zarathustra.ccalternatives.org> smtp
to degrowcali(a)lists.ccalternatives.org for 1 recips, completed in
0.00799560546875 seconds
May 05 08:13:46 2023 (771)
<168329886073.765.17844938860507947692(a)zarathustra.ccalternatives.org> post
to degrowcali(a)lists.ccalternatives.org from
degrowcali-bounces+62749dfe16f9d39e2cd0c3e94754723efbe8169d(a)lists.ccalternat
ives.org, 11400 bytes
May 05 08:13:46 2023 (771)
<168329958151.765.3625387421642934590(a)zarathustra.ccalternatives.org> smtp
to degrowcali(a)lists.ccalternatives.org for 1 recips, completed in
0.008965730667114258 seconds
May 05 08:13:46 2023 (771)
<168329958151.765.3625387421642934590(a)zarathustra.ccalternatives.org> post
to degrowcali(a)lists.ccalternatives.org from
degrowcali-bounces+8890cbead24710cdebeedbbd96d99fcd7f6f1343(a)lists.ccalternat
ives.org, 11426 bytes
May 05 08:13:46 2023 (768) Available AUTH mechanisms: LOGIN(builtin)
PLAIN(builtin)
May 05 08:13:46 2023 (768) Peer: ('127.0.0.1', 39046)
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) handling connection
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) >> b'LHLO
zarathustra.ccalternatives.org'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) >> b'MAIL FROM:<> SIZE=15076
BODY=8BITMIME'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) sender: <>
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) >> b'RCPT
TO:<degrowcali-bounces+6397d6fde210be0b39dbf22a9868e61d6e2d0f23(a)lists.ccalte
rnatives.org>'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) recip:
degrowcali-bounces+6397d6fde210be0b39dbf22a9868e61d6e2d0f23(a)lists.ccalternat
ives.org
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) >> b'DATA'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) >> b'QUIT'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) connection lost
May 05 08:13:46 2023 (768) ('127.0.0.1', 39046) Connection lost during
_handle_client()
May 05 08:13:46 2023 (768) Available AUTH mechanisms: LOGIN(builtin)
PLAIN(builtin)
May 05 08:13:46 2023 (768) Peer: ('127.0.0.1', 39050)
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) handling connection
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) >> b'LHLO
zarathustra.ccalternatives.org'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) >> b'MAIL FROM:<> SIZE=15049
BODY=8BITMIME'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) sender: <>
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) >> b'RCPT
TO:<degrowcali-bounces+8890cbead24710cdebeedbbd96d99fcd7f6f1343(a)lists.ccalte
rnatives.org>'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) recip:
degrowcali-bounces+8890cbead24710cdebeedbbd96d99fcd7f6f1343(a)lists.ccalternat
ives.org
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) >> b'DATA'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) >> b'QUIT'
May 05 08:13:46 2023 (768) ('127.0.0.1', 39050) connection lost
-----Original Message-----
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Thursday, May 4, 2023 12:19 PM
To: mailman-users(a)mailman3.org
Subject: [MM3-users] Re: templates
On 5/4/23 11:15, Christian via Mailman-users wrote:
> In March when I started troubleshooting my lists, you stated:
>
> "Also, one other thing you might check. Do these non-working lists
> have templates defined in postorius, in particular, one for
> list:member:regular:footer, and if not, are there any in Mailman's
> mailto:var/templates/lists/redlatinleg@lists.ccalternatives.org/ derectory
> that Mailman doesn't have permission to find and read?"
>
> There are no other templates listed in either Postorius nor in
> Mailman's var/templates (as I stated, I do not even lave a 'lists'
> subdirectory under Mailman's var/templates). My subscribers are not
> receiving message distributions from my lists, even while some of them
> are listed in the archives.
See the original thread at
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/U
HWOG6S57FM2SIQWHEPWM3CDUSAMLOOP/
(which you hijacked about 4 messages in) and particularly the message at
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message/
NZ7G3JMYXFTQNVJ2DYGJ6PETEQT55SKB/
Without further information, I can't say more than that.
--
Mark Sapiro <mailto:mark@msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailto:mailman-users@mailman3.org To
unsubscribe send an email to mailto:mailman-users-leave@mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Archived at:
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message/
GJNYZK3DK4UZYAILV7JZ62PPVPDPKNOZ/
This message sent to mailto:csa@web-analysts.net
3 years, 1 month
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'),
)
1 year, 5 months
Re: Mailman core: basic internationalization howto?
by thor.rustad@gmail.com
I made it work, sort of, after creating the directory structure templates/site/no and put the templates inside the 'no' folder. However, I can't make it work without setting the language manually for each list first. New lists are created with English as their language, breaking the creation of welcome mail. Also, I can not add members to the lists from Postorius. I want all new lists to use utf-8 without having to use mailman shell. How can it be done?
8 years, 8 months
mail host choices when creating a new list
by Andrew Hodder
Hi!
So, I'm trying to create a new list and pick one of the other mail domains
we have configured (from the django admin panel), yet in the "Create New
List" page in postorius, I see only a single option (the first domain we'd
added/set as the default) in the drop-down under "Mail Host". Am I missing
somewhere else I need to add alternative mail domains to? Thanks in
advance!
Sincerely,
Andrew Hodder
Systems Administrator
Support Operations, Afilias
E-mail: drew(a)afilias.info
Phone: +1 416.673.4164
Fax: +1 416.646.1541
8 years, 8 months
Unknown attribute: max_message_size
by Thor Atle Rustad
If I make changes here:
https://example.com/postorius/lists/test2.example.com/settings/message_acce…,
I get a warning that the Maximum Message Size field at the bottom is
mandatory. However, if I put a number in that field and save, I get
"Unknown attribute: max_message_size". That makes sense, since Mark states
in
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
that max_messages_size is not exposed in REST.
What to do?
I have Maxking mailman-docker but can easily copy files into the image if
necessary.
Thor
8 years, 6 months
Re: confirm-email: error NoReverseMatc
by Peter Münster
On Wed, Jan 31 2018, Simon Hanna wrote:
>> LOGIN_REDIRECT_URL = ''
>
> I guess that's the issue. Try using something else for LOGIN_REDIRECT_URL
Indeed, you're right, thank you!
> It should either be a valid path so "/postorius/" for instance
> or a valid view name like "list_index"
'/' works well for me.
--
Peter
8 years, 4 months