Re: New year releases!
by Torge Riedel
Dears,
I like to know and discuss ideas to get the update process more stable!
Today I updated core and web of mailman3 and ran into all the issues you can have:
- Dependencies are not updated properly
- In case you use "--force-reinstall" Django gets also updated in web and you need to update the urls.py file accordingly
- Enhancement of settings file required (DEFAULT_AUTO_FIELD = ...)
Finally I got it working, but there is always the fear for breaking something on update.
I know it is open source and no one gets paid for the work. But I think there is space for improvement here.
Kind regards
Torge
Am 04.01.23 um 10:59 schrieb Abhilash Raj:
> Hello Everyone,
>
> Happy new year!
>
> I am pleased to announce several new releases for GNU Mailman project.
>
> 1. Mailman Core 3.3.8 [1]
> 2. Postorius 1.3.8 [2]
> 3. Hyperkitty 1.3.7 [3]
> 4. Mailmanclient 3.3.5 [4]
> 5. Django-mailman3 1.3.9 [5]
> 6. Mailman-hyperkitty 1.2.1 [6]
>
> All the releases are published to PyPI and you can find links to all the PyPI projects:
>
> https://docs.mailman3.org/en/latest/
>
> A full list of change logs are available below:
>
> [1]: https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/NEWS.…
> [2]: https://docs.mailman3.org/projects/postorius/en/latest/news.html#news-1-3-8
> [3]: https://docs.mailman3.org/projects/hyperkitty/en/latest/news.html#news-1-3-7
> [4]: https://docs.mailman3.org/projects/mailmanclient/en/latest/src/mailmanclien…
> [5]: https://gitlab.com/mailman/django-mailman3/-/blob/master/README.rst
> [6]: https://gitlab.com/mailman/mailman-hyperkitty/-/blob/master/README.rst
>
> Finally, the minimum Python version required is 3.7, and all the components now support Python 3.7 to 3.11.
>
> Thanks to all the contributors for making this release possible!
>
> If you find any issues, you can report them at the respective bug tracker for the projects. The links to issue trackers are available
> here: https://docs.mailman3.org/en/latest/
>
> Installation documentation is available at
>
> https://docs.mailman3.org/en/latest/install/install.html
>
> and if you are upgrading an existing virtualenv install you can refer
>
> https://docs.mailman3.org/en/latest/upgrade-3.2.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 torgeriedel(a)gmx.de
3 years, 5 months
Re: New year releases!
by Jeff
I finally got around to doing this upgrade. I followed the instructions at:
https://docs.mailman3.org/en/latest/upgrade-3.2.html
Everything seemed to go fine but, mailman3 failed to start because “_BindParamClause” could not be found in sqlalchemy.sql.expression. It looks like alembic-1.6.2 is not completely compatible with SQLAlchemy-2.0.6. I fixed the problem by hacking sqla_compat.py in alembic-1.6.2, but should Mailman start requiring a newer version of alembic?
> On Jan 4, 2023, at 4:59 AM, Abhilash Raj <maxking(a)asynchronous.in> wrote:
>
> Hello Everyone,
>
> Happy new year!
>
> I am pleased to announce several new releases for GNU Mailman project.
>
> 1. Mailman Core 3.3.8 [1]
> 2. Postorius 1.3.8 [2]
> 3. Hyperkitty 1.3.7 [3]
> 4. Mailmanclient 3.3.5 [4]
> 5. Django-mailman3 1.3.9 [5]
> 6. Mailman-hyperkitty 1.2.1 [6]
>
> All the releases are published to PyPI and you can find links to all the PyPI projects:
>
> https://docs.mailman3.org/en/latest/
>
> A full list of change logs are available below:
>
> [1]: https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/NEWS.…
> [2]: https://docs.mailman3.org/projects/postorius/en/latest/news.html#news-1-3-8
> [3]: https://docs.mailman3.org/projects/hyperkitty/en/latest/news.html#news-1-3-7
> [4]: https://docs.mailman3.org/projects/mailmanclient/en/latest/src/mailmanclien…
> [5]: https://gitlab.com/mailman/django-mailman3/-/blob/master/README.rst
> [6]: https://gitlab.com/mailman/mailman-hyperkitty/-/blob/master/README.rst
>
> Finally, the minimum Python version required is 3.7, and all the components now support Python 3.7 to 3.11.
>
> Thanks to all the contributors for making this release possible!
>
> If you find any issues, you can report them at the respective bug tracker for the projects. The links to issue trackers are available
> here: https://docs.mailman3.org/en/latest/
>
> Installation documentation is available at
>
> https://docs.mailman3.org/en/latest/install/install.html
>
> and if you are upgrading an existing virtualenv install you can refer
>
> https://docs.mailman3.org/en/latest/upgrade-3.2.html
>
>
> --
> thanks,
> Abhilash Raj (maxking)
> _______________________________________________
> 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 mm3(a)steele.com
___________________________________________
Mailman's content filtering has removed the
following MIME parts from this message.
Content-Type: image/vnd.microsoft.icon
Name: favicon.ico
Replaced multipart/alternative part with first alternative.
3 years, 4 months
Re: Disable archives per list
by Mark Sapiro
On 2/25/21 1:57 AM, Bernd Wurst wrote:
>
> Can I as the server admin disable archiving (or set other list options)
> in a way that the list admin can not change it via postorious?
As the server admin, you can enable/disable archivers sitewide. See
<https://gitlab.com/mailman/mailman/-/blob/master/src/mailman/config/schema.…>
et seq.
Note that the prototype archiver, if enabled, stores messages in the
file system in maildir format.
Normally a list admin can select which of the enabled archivers is
active for that list via Postorius. To prevent this, you would have to
modify Postorius. It would be easy enough to just remove settings from
the relevant templates.
> Can I have custom archiver settings per list or per domain
> (customer-specific hyperkitty)?
I'm not sure what you mean by "custom archiver settings", but other than
enable/disable and public/private, probably not.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years, 5 months
Re: Subscription issue with ghost confirmations
by Brian Carpenter
On 10/29/20 12:21 PM, Mark Sapiro wrote:
> On 10/29/20 8:51 AM, Brian Carpenter wrote:
>> On 10/29/20 11:33 AM, Mark Sapiro wrote:
>>> The real question is if a user has a subscription waiting confirmation
>>> and the policy is changed to moderate, is a second request rejected
>>> because of the request waiting confirmation. If so, I think this is a
>>> bug which should be fixed.
>>>
>> Do you think this is a bug with Mailman core or my system?
>
> If the current policy is moderate and the user has a prior request
> waiting confirmation and a new request is rejected because of the prior
> request waiting confirmation, I think that is a bug in core, but I don't
> know if that is the case or not.
I think it is a bug in Mailman 3 core. I am seeing the same behavior on
my Postorius server.
--
Brian Carpenter
Harmonylists.com
Emwd.com
5 years, 9 months
Re: Where does sender postorius@ come from?
by Jens Günther
Thanks for the hint. Unfortunately it's not working as expected. I'm
using the docker-setup and tried it in 2 different locations, but
neither got the expected effect:
- I put the variable in the mm-web-container-environment:
mm-web:
environment:
- EMAIL_CONFIRMATION_FROM=myaddress(a)something.org
- Then I tried settings_local.py with:
EMAIL_CONFIRMATION_FROM = 'myaddress(a)something.org'
What am I missing, where do I have to set this value correctly?
Thanks for the help! Jens.
Am 08.06.23 um 01:57 schrieb Mark Sapiro:
> On 6/7/23 14:13, Jens Günther wrote:
>>
>> The more important question would be, where :-) since I already
>> checked if I can set it to something alse, I might need a hint where
>> exactly I can find it. In the SERVE_FROM_DOMAIN/admin I did not
>> stumble upon it. If you don't know it, no problem, let's just wait for
>> somebody who does, thanks.
>
>
> It's the EMAIL_CONFIRMATION_FROM setting in your Django settings.
>
3 years, 1 month
Re: Accept these non-members
by Lars Bjørndal
On Mon, Mar 09, 2026 at 02:40:29AM +0900, Stephen J. Turnbull wrote:
> Lars Bjørndal writes:
>
> > All addresses, both addresses that I know has sent messages to the
> > list and others, are marked as MemberRole.nonmember> Action.defer
>
> Post from these nonmembers go through normal checks (spam, for
> example) before being distributed.
>
> > When I view non-members in postorius, I get some differences:
> >
> > Some ar marked: Regular List default, and others Regular Default
> > processing.
>
> "List default" means "this user has not made a choice, so Mailman will
> check what is 'normal' for the list in the list's configuration".
>
> In detail, Postorius is intended to allow users and list
> administrators to *modify* configurations. At delivery time, these
> configurations "cascade", typically in this way:
>
> - if this subscription has a setting, apply it, and return; if not
> - if the address this subscription delivers to has a setting, apply
> it, and return; if not
> - if the user who owns that address has a setting, apply it, and
> return; if not
> - if the list that is subscribed to has a setting, apply it, and
> return;
> - otherwise, use the fallback setting from the source code.
>
> In Postorius, the "no setting" option is displayed in such a way that
> the person considering changing the setting knows what the next level
> of the cascade is. "List default" means "this user has not made a
> choice, so Mailman will check what is 'normal' for the list in the
> list's configuration".
>
> "Default processing" is a regular option, that can be applied to this
> post. It means "check if the user is allowed to post at all, then
> check for reasons (eg, spam) why this post might not be OK". Usually
> "list normal" is also "Default processing", but it might be "Hold for
> moderator", for example.
>
> On the other hand, Mark's script will return the option that will be
> applied using the logic of the cascade.
Which script?
> > The list is imported from Mm 2.1 a long time ago. I don't know if
> > that matters.
>
> I don't think it does.
>
> > Hm, this is a mystery to me. Is there othere places I can search
> > for addresses that are aloud to send to the list?
>
> I don't understand what you want. The "mailman shell interaction"
> that Mark posted earlier gives you exactly the list of members who can
> post to the specified list. If some are "trusted users" who don't go
> through the spam checker, etc, they are displayed with Action.accept.
> Other posters are displayed with Action.defer. But both will
> automatically be distributed as long as they appear to be legit posts
> (not spam, etc).
As menitoned in my first post, this is an announce-only list.
In the Settings for this list, under Message Acceptance, the Default action to take when a member posts to the list is set to (X) Reject (with notification). The same goes for non-members. In the same Tab, Accept these non-members edit field is empty. Because one of the subscribed addresses to this list is another mailing list, all messages goes both to this announce-only list and to the subscribed list. So to the announce list, there are a few non-members that are allowed to post, e.g. bypass the default actions, which is set to Reject.
Hope this clarify my situation a bit. I don't see any place where to find the list of allowed addresses to post.
Thanks,
Lars
4 months, 4 weeks
Re: New platform administrators
by Abhilash Raj
On Tue, Sep 18, 2018, at 1:14 PM, Simon Hanna wrote:
> On 9/18/18 5:42 PM, Hellen Cubero wrote:
> > Hello!
> > I would like to know how to add a new site administrator to the mailman 3.2
> > platform. Can you help me please?
>
> You are probably referring to Postorius the webui?
>
> If yes, you just add another superuser. If the admin is enabled, you can
> just visit https://you-url/admin sign in, and create a new user with
> staff and superuser permissions.
>
> You can also do that on the cli using ./manage.py createsuperuser
A better way would be to ask them to sign-up as a regular user and then you can go into the Admin Console (/admin) and add flags for Superuser for the user you want to promote.
Create Superuser and Django's create user interfaces don't tie up with all-auth, which creates problems because their EmailAddress records aren't created, like they should be.
--
thanks,
Abhilash Raj (maxking)
7 years, 10 months
Re: Default setting for Delivery status
by Mark Sapiro
On 10/10/22 15:31, Mark Dale via Mailman-users wrote:
>
> Where and how do I set the default setting of "Delivery status" to be
> "Enabled".
It already is. See
https://gitlab.com/mailman/mailman/-/blob/master/src/mailman/core/constants…
> I'm not seeing any clues in mailman3-web/settings.py
>
> At the moment, a new subscriber is neither "Enabled" or "Disabled".
That's because the member's list based preferences for that list are not
set, so we fall back to address based preferences if set and finally to
global preferences where Delivery status is enabled.
Log in to Postorius and select Mailman settings from the dropdown on the
upper right at your user name to see more.
New list members don't have and list based preferences for that list and
just fall back to their address based preferences or global preferences.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
3 years, 9 months
Re: Installing mailman 3
by Rafael Mora
The confirmation email says:
Hello from example.com!
Where can I change example.com to mydomain.com ????
Thanks
El mié., 2 ago. 2017 a las 11:50, Abhilash Raj (<raj.abhilash1(a)gmail.com>)
escribió:
> When you set DEBUG=False, Django doesn't serve static files because of
> which you see only text and no styles.
>
>
> http://docs.mailman3.org/en/latest/pre-installation-guide.html#django-stati…
>
> If you do set DEBUG=False, you need to serve the static pages somehow.
>
> Alternatively in you case, you can remove the part of the `settings.py`
> which changes the Emailbackend when `DEBUG=False` so that you don't have
> to worry about serving static files and still send out emails.
>
> On Wed, Aug 2, 2017, at 09:46 AM, Rafael Mora wrote:
> > For testing purpose I turned back to false the DEBUG var and everything
> > started working fine with HyperKitty
> >
> > I don't understand... this is the trace when I click Login from Postorius
> > to HyperKitty
> >
> > [02/Aug/2017 16:43:42] "GET /postorius/lists/ HTTP/1.1" 200 3645
> > [02/Aug/2017 16:43:48] "GET /accounts/login/?next=/postorius/lists/
> > HTTP/1.1" 200 10950
> > [02/Aug/2017 16:43:49] "GET /static/CACHE/css/hyperkitty.2f591b4e31fe.css
> > HTTP/1.1" 200 156657
> >
> >
> > What should I check?
> >
> >
> >
> >
> >
> >
> >
> >
> > El mié., 2 ago. 2017 a las 10:56, Mark Sapiro (<mark(a)msapiro.net>)
> > escribió:
> >
> > > On 08/02/2017 07:55 AM, Rafael Mora wrote:
> > > > HyperKitty is looking for some files in /static/CACHE/... but it
> doesn't
> > > > find them:
> > > >
> > > > [02/Aug/2017 14:53:38] "GET /static/CACHE/css/b3547a2ab51b.css
> HTTP/1.1"
> > > > 404 107
> > > > [02/Aug/2017 14:53:38] "GET /static/CACHE/css/4c17bb8058aa.css
> HTTP/1.1"
> > > > 404 107
> > > > [02/Aug/2017 14:53:38] "GET /static/CACHE/css/2fa1cba00450.css
> HTTP/1.1"
> > > > 404 107
> > > > [02/Aug/2017 14:53:38] "GET /static/CACHE/js/4ce1260ef558.js
> HTTP/1.1"
> > > 404
> > > > 105
> > > > [02/Aug/2017 14:53:39] "GET /static/CACHE/js/4ce1260ef558.js
> HTTP/1.1"
> > > 404
> > > > 105
> > > >
> > > >
> > > > Should I run any command to activate the CACHE dir?
> > >
> > >
> > > You need to ensure you have a working sass compiler. As I said at
> > > <
> > >
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
> > > >,
> > > See the third bullet under
> > > <http://docs.list.org/en/latest/prodsetup.html#dependencies>.
> > >
> > > Then you need to run commands like
> > >
> > > django-admin collectstatic --clear
> > > django-admin compress
> > >
> > >
> > > --
> > > 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
> > > 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/
>
>
> --
> thanks,
> Abhilash Raj
> _______________________________________________
> 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
9 years
Re: Held messages: Long time waiating for response of the Mailman API
by Stephan Krinetzki
Stephen J. Turnbull wrote:
> Krinetzki, Stephan writes:
> > Hi everyone,
> > any news here? We are running with Pyton 3.6 - maybe a Python
> > Upgrade can speed Mailman up?
> > It would help if you provide the original description.
> I see you're running Apache + uswgi. uwsgi has been pretty finicky,
> and most of the developers use gunicorn as the WSGI host. I suggest
> you ask on the uswgi channels as well. (I don't think that's a
> *better* place to ask, just a relevant place.)
Then we should maybe move to gunicorn, if this is the better way (or at least better supported way)
> You wrote:
> > If we try to approve them via Postorius, the message is delivered
> > to the list immediately, but the success message in Postorius takes
> > a long time - on average the process hangs for three minutes until
> > the message is no longer displayed.
> > You jump to the conclusion that the REST API is slow, but there's zero
> evidence to localize to the REST API. If your browser isn't running
> on the same host as the webserver it could even be some kind of
> network timeout (reverse DNS?) completely unrelated to Mailman
> (unlikely, but can't be ruled out with the information provided).
>
> What is in the various logs? Mailman core, Django, your backend
> database, the webserver, the WSGI hosts all may be writing to
> logs, especially if there's some kind of time out or other error
> condition.
After we enabled the "slow query log", we got in the postgresql database the following output:
2022-01-25 12:49:41.538 CET [16126] LOG: unexpected EOF on client connection with an open transaction
2022-01-25 15:34:36.047 CET [16864] LOG: duration: 30760.028 ms statement: DELETE FROM pendedkeyvalue WHERE pendedkeyvalue.id = XXX
2022-01-25 15:34:36.047 CET [3900] LOG: duration: 9372.471 ms statement: DELETE FROM pendedkeyvalue WHERE pendedkeyvalue.id = XXX
2022-01-25 16:42:07.243 CET [3900] LOG: unexpected EOF on client connection with an open transaction
Pretty sounds like a database problem?
The other logs are silent after we set the following values in the gunicorn.cfg in the mailman home:
[gunicorn]
# All the options that can be put here are available at
# http://docs.gunicorn.org/en/stable/settings.html#settings
# No of seconds to wait before killing the worker processes.
graceful_timeout = 30
# Timeout for the requests.
timeout = 360
sometimes the log (mailmansuite.log) show us this error
ERROR 2022-01-25 18:55:55,037 2599 django.request Service Unavailable: /postorius/lists/games.lists.rwth-aachen.de/held_messages
ERROR 2022-01-25 18:58:24,325 2588 postorius Mailman REST API not available
Traceback (most recent call last):
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse
response.begin()
File "/usr/lib64/python3.6/http/client.py", line 307, in begin
version, status, reason = self._read_status()
File "/usr/lib64/python3.6/http/client.py", line 276, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 638, in urlopen
_stacktrace=sys.exc_info()[2])
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/util/retry.py", line 367, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/packages/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib64/python3.6/http/client.py", line 1346, in getresponse
response.begin()
File "/usr/lib64/python3.6/http/client.py", line 307, in begin
version, status, reason = self._read_status()
File "/usr/lib64/python3.6/http/client.py", line 276, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailmanclient/restbase/connection.py", line 145, in call
response = request(**params, auth=self.auth)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/requests/api.py", line 60, in request
return session.request(method=method, url=url, **kwargs)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/requests/adapters.py", line 498, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/postorius/auth/decorators.py", line 63, in wrapper
return fn(*args, **kwargs)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/postorius/views/list.py", line 698, in list_moderation
_perform_action(message_ids, mailing_list.accept_message)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/postorius/views/list.py", line 685, in _perform_action
action(message_id)
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailmanclient/restobjects/mailinglist.py", line 364, in accept_message
return self.moderate_message(request_id, 'accept')
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailmanclient/restobjects/mailinglist.py", line 334, in moderate_message
path, data, 'POST')
File "/opt/mailman/mailman-venv/lib64/python3.6/site-packages/mailmanclient/restbase/connection.py", line 169, in call
'Could not connect to Mailman API: ', repr(e))
mailmanclient.restbase.connection.MailmanConnectionError: ('Could not connect to Mailman API: ', "ConnectionError(ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response',)),)")
* The venv is in /opt/mailman/mailman-venv
* The settings are in /opt/mailman/mailman-venv/mailman-suite/mailman-suite_project
content of mailman.cfg:
# AUTOMATICALLY GENERATED BY MAILMAN ON 2016-09-12 14:35:56
#
# This is your GNU Mailman 3 configuration file. You can edit this file to
# configure Mailman to your needs, and Mailman will never overwrite it.
# Additional configuration information is (for now) available in the
# schema.cfg file <http://tinyurl.com/cm5rtqe> and the base mailman.cfg file
# <http://tinyurl.com/dx9b8eg>.
#
# For example, uncomment the following lines to run Mailman in developer mode.
#
# [devmode]
# enabled: yes
# recipient: your.address(a)your.domain
[mailman]
site_owner: mailman(a)lists.example.com
layout: here
pending_request_life: 3d
#layout: fhs
#[general]
#hostname = 'lists.example.com'
# The default language for this server.
default_language: de
[paths.here]
var_dir: /opt/mailman/var
log_dir: /var/log/mailman/mailman-logs
[database]
class: mailman.database.postgresql.PostgreSQLDatabase
url: postgres://mailman:<PASS>@127.0.0.1/mailman
debug: no
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /opt/mailman/mailman-suite/mailman-suite_project/mailman-hyperkitty.cfg
#[archiver.mail_archive]
#enable: yes
#[plugin.example]
#class: example.hooks.ExamplePlugin
#enabled: yes
#[archiver.prototype]
#enable: yes
[webservice]
# The hostname at which admin web service resources are exposed.
hostname: localhost
# The port at which the admin web service resources are exposed.
port: 8000
# Whether or not requests to the web service are secured through SSL.
use_https: no
# Whether or not to show tracebacks in an HTTP response for a request that
# raised an exception.
show_tracebacks: yes
# The API version number for the current (highest) API.
api_version: 3.1
# The administrative username.
admin_user: mailmanapi
# The administrative password.
admin_pass: <PASS>
workers: 4
configuration: /opt/mailman/gunicorn.cfg
#[language.master]
[language.de]
description: German
#charset: iso-8859-1
charset: utf-8
enabled: yes
[language.en]
description: English
charset: utf-8
enabled: yes
[mta]
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
lmtp_host: 127.0.0.1
lmtp_port: 8024
smtp_host: 127.0.0.1
smtp_port: 25
configuration: /opt/mailman/mailman-venv/lib/python3.6/site-packages/mailman/config/postfix.cfg
verp_probes: yes
[logging.root]
level: debug
path: mailman.log
[logging.archiver]
level: warn
path: archiver.log
[logging.bounce]
path: bounce.log
level: warn
[logging.config]
level: debug
path: mailman.log
[logging.database]
level: warn
path: database.log
[logging.debug]
path: debug.log
level: debug
[logging.error]
level: debug
path: error.log
[logging.fromusenet]
level: warn
path: mailman.log
[logging.http]
level: warn
path: httpd.log
[logging.locks]
level: warn
path: locks.log
[logging.mischief]
level: warn
path: mailman.log
[logging.plugins]
path: mailman.log
level: warn
[logging.runner]
level: debug
path: runner.log
[logging.smtp]
path: smtp.log
level: debug
[logging.subscribe]
path: subscribe.log
level: warn
[logging.vette]
path: vette.log
level: warn
# Some list posts and mail to the -owner address may contain DomainKey or
# DomainKeys Identified Mail (DKIM) signature headers <http://www.dkim.org/>.
# Various list transformations to the message such as adding a list header or
# footer or scrubbing attachments or even reply-to munging can break these
# signatures. It is generally felt that these signatures have value, even if
# broken and even if the outgoing message is resigned. However, some sites
# may wish to remove these headers by setting this to 'yes'.
remove_dkim_headers: yes
[bounces]
# How often should the bounce runner process queued detected bounces?
register_bounces_every: 15m
contenten of settings.py
# -*- coding: utf-8 -*-
# Copyright (C) 1998-2016 by the Free Software Foundation, Inc.
#
# This file is part of Mailman Suite.
#
# Mailman Suite is free sofware: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# Mailman Suite is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
# You should have received a copy of the GNU General Public License along
# with Mailman Suite. If not, see <http://www.gnu.org/licenses/>.
"""
Django Settings for Mailman Suite (hyperkitty + postorius)
For more information on this file, see
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'hdeu37xh3291kf'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
ADMINS = (
('Mailman Admin', 'mailman(a)lists.example.com'))
SITE_ID = 1
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.8/ref/settings/#allowed-hosts
ALLOWED_HOSTS = [
"lists.example.com", "example.com", "localhost", "127.0.0.1", "XXX.XXX.XXX.XXX", "YYY.YYY.YYY.YYY" # Archiving API from Mailman, keep it.
# "lists.your-domain.org",
# Add here all production URLs you may have.
]
# Mailman API credentials
MAILMAN_REST_API_URL = 'http://localhost:8000'
MAILMAN_REST_API_USER = 'mailmanapi'
MAILMAN_REST_API_PASS = '<PASS>'
MAILMAN_ARCHIVER_KEY = '<ARCHIVER_KEY>'
MAILMAN_ARCHIVER_FROM = ('XXX.XXX.XXX.XXX', 'localhost', '127.0.0.1', '::1')
# Application definition
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',
'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',
## 'allauth.socialaccount.providers.facebook',
#'allauth.socialaccount.providers.twitter',
#'allauth.socialaccount.providers.stackexchange',
)
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',
)
ROOT_URLCONF = 'urls'
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',
],
},
},
]
WSGI_APPLICATION = 'wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
#'default': {
# Use 'sqlite3', 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
#'ENGINE': 'django.db.backends.sqlite3',
# DB name or path to database file if using sqlite3.
#'NAME': os.path.join(BASE_DIR, 'mailmansuite.db'),
## The following settings are not used with sqlite3:
#'USER': 'mailmansuite',
#'PASSWORD': 'mmpass',
# HOST: empty for localhost through domain sockets or '127.0.0.1' for
# localhost through TCP.
#'HOST': '',
# PORT: set to empty string for default.
#'PORT': '',
#}
# Example for PostgreSQL (recommanded for production):
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mailman',
'USER': 'mailman',
'PASSWORD': '<PASS>',
'HOST': 'localhost',
}
}
# Maintain type of autogenerated keys going forward
# https://docs.djangoproject.com/en/3.2/releases/3.2/#customizing-type-of-aut…
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
# If you're behind a proxy, use the X-Forwarded-Host header
# See https://docs.djangoproject.com/en/1.8/ref/settings/#use-x-forwarded-host
# USE_X_FORWARDED_HOST = True
# And if your proxy does your SSL encoding for you, set SECURE_PROXY_SSL_HEADER
# https://docs.djangoproject.com/en/1.8/ref/settings/#secure-proxy-ssl-header
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_SCHEME', 'https')
# Other security settings
# SECURE_SSL_REDIRECT = True
# If you set SECURE_SSL_REDIRECT to True, make sure the SECURE_REDIRECT_EXEMPT
# contains at least this line:
# SECURE_REDIRECT_EXEMPT = [
# "archives/api/mailman/.*", # Request from Mailman.
# ]
# SESSION_COOKIE_SECURE = True
# SECURE_CONTENT_TYPE_NOSNIFF = True
# SECURE_BROWSER_XSS_FILTER = True
# CSRF_COOKIE_SECURE = True
# CSRF_COOKIE_HTTPONLY = True
# X_FRAME_OPTIONS = 'DENY'
# Password validation
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME':
'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
#LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'de-de'
#TIME_ZONE = 'UTC'
TIME_ZONE = 'Europe/Berlin'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
# BASE_DIR + '/static/',
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
'compressor.finders.CompressorFinder',
)
# Django 1.6+ defaults to a JSON serializer, but it won't work with
# django-openid, see
# https://bugs.launchpad.net/django-openid-auth/+bug/1252826
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
LOGIN_URL = 'account_login'
LOGIN_REDIRECT_URL = 'list_index'
LOGOUT_URL = 'account_logout'
# If you enable internal authentication, this is the address that the emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#default-from-email
# DEFAULT_FROM_EMAIL = "mailing-lists(a)you-domain.org"
DEFAULT_FROM_EMAIL = 'mailman(a)mailman.example.com'
# If you enable email reporting for error messages, this is where those emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-SERVER_EMAIL
# SERVER_EMAIL = 'root(a)your-domain.org'
SERVER_EMAIL = 'mailman(a)mailman.example.com'
# Change this when you have a real email backend
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 25
# Compatibility with Bootstrap 3
from django.contrib.messages import constants as messages # flake8: noqa
MESSAGE_TAGS = {
messages.ERROR: 'danger'
}
#
# Social auth
#
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
# Django Allauth
ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
# You probably want https in production, but this is a dev setup file
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
ACCOUNT_UNIQUE_EMAIL = True
#SOCIALACCOUNT_PROVIDERS = {
# 'openid': {
# 'SERVERS': [
# dict(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',
# },
#}
#
# Gravatar
# https://github.com/twaddington/django-gravatar
#
# Gravatar base url.
# GRAVATAR_URL = 'http://cdn.libravatar.org/'
# Gravatar base secure https url.
# GRAVATAR_SECURE_URL = 'https://seccdn.libravatar.org/'
# Gravatar size in pixels.
# GRAVATAR_DEFAULT_SIZE = '80'
# An image url or one of the following: 'mm', 'identicon', 'monsterid',
# 'wavatar', 'retro'.
# GRAVATAR_DEFAULT_IMAGE = 'mm'
# One of the following: 'g', 'pg', 'r', 'x'.
# GRAVATAR_DEFAULT_RATING = 'g'
# True to use https by default, False for plain http.
# GRAVATAR_DEFAULT_SECURE = True
#
# django-compressor
# https://pypi.python.org/pypi/django_compressor
#
COMPRESS_PRECOMPILERS = (
('text/less', 'lessc {infile} {outfile}'),
('text/x-scss', 'sassc -t compressed {infile} {outfile}'),
('text/x-sass', 'sassc -t compressed {infile} {outfile}'),
)
# On a production setup, setting COMPRESS_OFFLINE to True will bring a
# significant performance improvement, as CSS files will not need to be
# recompiled on each requests. It means running an additional "compress"
# management command after each code upgrade.
# http://django-compressor.readthedocs.io/en/latest/usage/#offline-compression
# COMPRESS_OFFLINE = True
# Needed for debug mode
# INTERNAL_IPS = ('127.0.0.1',)
#
# Full-text search engine
#
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, "fulltext_index"),
# You can also use the Xapian engine, it's faster and more accurate,
# but requires another library.
# http://django-haystack.readthedocs.io/en/v2.4.1/installing_search_engines.h…
# Example configuration for Xapian:
#'ENGINE': 'xapian_backend.XapianEngine'
},
}
#
# Asynchronous tasks
#
Q_CLUSTER = {
'timeout': 300,
'save_limit': 100,
'orm': 'default',
'retry': 360,
}
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'INFO',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'file':{
'level': 'WARN',
#'class': 'logging.handlers.RotatingFileHandler',
'class': 'logging.handlers.WatchedFileHandler',
'filename': os.path.join(BASE_DIR, 'logs', 'mailmansuite.log'),
'formatter': 'verbose',
},
'console': {
'class': 'logging.StreamHandler',
'formatter': 'simple',
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins', 'file'],
'level': 'DEBUG',
'propagate': True,
},
'django': {
'handlers': ['file'],
'level': 'INFO',
'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'
},
},
#'root': {
# 'handlers': ['file'],
# 'level': 'INFO',
#},
}
# Using the cache infrastructure can significantly improve performance on a
# production setup. This is an example with a local Memcached server.
#CACHES = {
# 'default': {
# 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
# 'LOCATION': '127.0.0.1:11211',
# }
#}
# When DEBUG is True, don't actually send emails to the SMTP server, just store
# them in a directory. This way you won't accidentally spam your mailing-lists
# while you're fiddling with the code.
#if DEBUG == False:
# EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
# EMAIL_FILE_PATH = os.path.join(BASE_DIR, 'emails')
#
# HyperKitty-specific
#
# Only display mailing-lists from the same virtual host as the webserver
FILTER_VHOST = False
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.example.com'
try:
from settings_local import *
except ImportError:
pass
> Are all the relevant components running on the same host? Are
> there other web services running under Apache and/or WSGI?
Nope, the virtual machine is dedicated to Mailman3. Mailman3 as venv, uwsgi as Webservice, Apache as Webserver, Postfix as Mailserver and PostgreSQL 10 als Database, all on the same host
> What are the relevant configurations (Apache, uswgi, gunicorn,
> Mailman, Postorius, Django, database, DNS A/AAAA/CNAME)? This
> would be anything like port numbers and host names or IP
> addresses, user names and passwords (we don't need to know these,
> but you should provide obfuscated versions so we can check syntax,
> and of course you should check for typos).
>
> Steve
Should be provided on the top of the mail.
At moment i think its a slow database. Because of the slow database, the Mailman API is slow and so on. We are trying now to solve the database part with postgresqltuner - maybe we will see more details then.
Stephan
4 years, 6 months