Re: Mailman not able to process "big" requests
by Jonas Felber
Thank you for your support, I got informed that we are now able to send out emails again. The problem was that the crashes we got while mass subscribing led to database corruptions.
(From what I know, the problem was on our side, as we kubernetes did not properly restore some files after restarting so the database got corrupted (apparently we are running now a cleanup script on each restart))
There are still some problems, but I just wanted to send out a quick update.
Thanks for your support,
Jonas
Jonas Felber <jonas.felber(a)vis.ethz.ch>
Aktuar & CTF Präsident
VIS - Verein der Informatik Studierenden an der ETH Zürich
CAB E 31, Universitätstr. 6, ETH Zentrum, CH-8092 Zürich
https://www.vis.ethz.ch
> On 24 Apr 2018, at 17:21, Darren Smith <silas.crutherton(a)gmail.com> wrote:
>
> Our installation at https://lists.rootsweb.ancestry.com has around 33,000
> lists and somewhere around 1.5 million members. We have lists with 5,000+
> members.
>
> Note that I haven't tried any mass subscriptions. When we upgraded from
> mailman 2 to mailman 3, we used the old .pck files and ran the import on
> each of the lists. It did take about 6 weeks to do the full import all
> 33,000 lists. I'm not joking.
>
> As for sending messages - there isn't any problem sending that many
> messages out, but then we are also not trying to subscribe list members at
> the time. We are, though, in the process of importing the old archives from
> our old mailman 2 system. This doesn't seem to affect the rest of the
> system.
>
> We have seen some inefficiencies in the new system, such as the front page
> of postorius - loading all of the information for 200 lists (if the user
> set the "lists per page" to 200) was bringing down the system. We have our
> own metadata system to be able to search for lists by state/region/surname
> (ours is a genealogy mailing list system), so we had to replace the front
> page with our own "find a list" functionality.
>
> The other main problem was the page where a user can see what lists they
> subscribe to. That page was also a denial of service if the user had
> several hundred lists they are subscribed to. And for a genealogy mailing
> list system, this is common.
>
> We have actually ended up creating our own API layer (only accessible on
> the local machine) and make certain calls to it for the most painful of the
> issues. One of these days (when we get a moment to breathe) we are going to
> post some of our changes to the project so that we can ditch our own API
> and just use the internal REST API.
>
> To be fair, the inefficiencies are not necessarily with mailman or the rest
> API itself - but with Postorius making hundreds of calls to load a single
> page. Though if the API supported loading multiple lists at once instead of
> having to load them serially, that might help as well.
>
> So while we have not seen any timeout issues on the call to mass subscribe
> users, we HAVE found several other calls that are effectively a denial of
> service and have gotten around them ourselves, with plans to contribute to
> the project in the near future.
>
> -Darren
>
>
>> On Tue, Apr 24, 2018 at 8:47 AM, Mark Sapiro <mark(a)msapiro.net> wrote:
>>
>>> On 04/24/2018 12:36 AM, Abhilash Raj wrote:
>>> On Mon, Apr 23, 2018, at 10:41 PM, Jonas Felber wrote:
>>
>>>> We also have a problem with sending out emails to "large" (>50) groups,
>>>> as they seem to not getting sent out at all. Do you have any idea what
>>>> the problem here could be?
>>>
>>> Which MTA are you using? What do you see in mailman's logs and MTA's
>> logs?
>>>
>>> I haven't seen this kind of problem before with Mailman 3. This very
>> list is hosted using Mailman 3 and I believe has more than 50 subscribers.
>>
>>
>> Nor have I seen this issue. This list currently has 158 non-digest
>> members. There are several @python.org Mailman 3 lists with over 100
>> non-digest members including the active yt-users(a)python.org list with
>> 301 members, and I have gotten no reports of an issue like this.
>>
>> Also, there are over 600 lists at <https://lists.fedoraproject.org/>,
>> and I don't think this is an issue there either.
>>
>> --
>> 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/
>>
> _______________________________________________
> Mailman-users mailing list
> mailman-users(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
8 years, 5 months
Re: Message shows up individually but not in the thread
by Mark Sapiro
On 11/04/2017 01:19 AM, Marvin Gülker wrote:
> Am 03. November 2017 um 12:35 Uhr -0700 schrieb Mark Sapiro <mark(a)msapiro.net>:
>> Are you running all of Django's periodic tasks?
>
> They are running. This is the excerpt from /etc/crontab:
...
> Obviously, mailman-suite is installed at /home/mailman/mailman-suite and
> owned by user 'mailman', with the actual Django project in the
> subdirectory 'mailman-suite_project', just as cloned from the Git
> repository. The only difference from the official guide here is that I
> took the liberty to place Mailman into two virtualenvs (a Python2 one
> for the Django project, and a Python3 one for Mailman-Core*).
>
> There are no errors reported with this in /var/log/cron.log. And before
> you ask, the task queue is running as well. The uWSGI config has this:
>
> # Setup the django_q related worker processes.
> attach-daemon = ./manage.py qcluster
>
> And the qcluster process shows both up in the process list and is
> happily logging away in the uWSGI log.
There is a possibly related issues at
<https://gitlab.com/mailman/hyperkitty/issues/151> and some older ones
at <https://gitlab.com/mailman/hyperkitty/issues/131> and
<https://gitlab.com/mailman/hyperkitty/issues/149>.
I'm sorry I can't offer more help than that at this point.
> * It'd be great if the mailman-suite was moved to Python 3 at some
> point. That way one wouldn't need two separate virtualenvs.
We're working on moving Postorius and HyperKitty to MM 3.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
8 years, 10 months
Re: digest summary heavily cluttered with hrml code
by Mark Sapiro
On 10/15/20 11:13 AM, Mohsen Masoudfar wrote:
> Hi Mark,
>
> Thanks again for your help!
>
> Yes, I meant "Today's Topic".
The "Today's Topics" list is a plain text listing of the Subject: and
sender of the messages in the digest. It is identical in both the plain
text and MIME format digests.
In what way is it cluttered with HTML. Please post an example.
> I checked the link you sent, but could not see the solution to the issue.
If the issue is HTML in the `Today's Topics:` list, then it is not
<https://gitlab.com/mailman/mailman/-/issues/473>. If the HTML is in the
messages themselves, then it is
<https://gitlab.com/mailman/mailman/-/issues/473>, and that is currently
not fixed and the workaround is to set Delivery mode to MIME digests.
> You mentioned:
> " They are in order of priority, list based, address based and global"
>
> Is this in descending or ascending priority? If I set it at list level, does it overwrite the member setting (address based?? )?
It's descending order, I.e. list overrides address overrides global.
> I set them along with "Delivery mode" at the member level and saved it, but when I get back to it, it still shows "Regular" and other fields like:
> acknowledge_posts, delivery_status, hide_address, receive_list_copy, receive_own_postings
> are empty, even though I set them and saved.
What Postorius version is this? Is this user a member with more than one
role - e.g. more than one of member, nonmember, owner or moderator.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years, 11 months
Re: Apache+mod_wsgi issue
by Odhiambo Washington
On Mon, Dec 26, 2022 at 5:07 PM Eggert Ehmke <eggert(a)eehmke.de> wrote:
> Ok,
>
> I hope this is readable. I just copíed the content of some files into the
> pastebin, don't know if it is possible to post tar.gz there.
> https://pastebin.ubuntu.com/p/mmRJJwKDc3/
>
> Just tell me if this works for you, and when something is missing.
> Most of the settings are copied from some other sites and just adjusted
> for my
> needs.
> Good luck!
So it seems your WSGIDaemonProcess is defined somewhere outside the VHOST,
right? Or it wasn't necessary?
And what does your urls.py look like?
My setup is PUBLIC for everyone so I will not hide the domain name :-)
In my setup, MM3 is installed in /opt/mailman/mm/. and mod_wsgi is enabled
in Apache.
I am running uwsgi on a TCP socket, not unix socket.
The whole of my *VHOST:*
<CUT>
WSGIDaemonProcess mailman-web display-name=mailman-web
maximum-requests=1000 umask=0002 user=mailman group=mailman
python-path=/opt/mailman/mm:/opt/mailman/mm/venv/lib/python3.9/site-packages:/opt/mailman/mm/venv/lib/python3.9
python-home=/opt/mailman/mm/venv home=/opt/mailman/mm/var
WSGIRestrictSignal Off
<VirtualHost *:443>
ServerName mm3-lists.kictanet.or.ke
SSLEngine on
SSLCertificateFile "/usr/local/etc/letsencrypt/live/
mm3-lists.kictanet.or.ke/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/
mm3-lists.kictanet.or.ke/privkey.pem"
SSLCertificateChainFile "/usr/local/etc/letsencrypt/live/
mm3-lists.kictanet.or.ke/chain.pem"
CustomLog /var/log/mm3-lists-access.log combined
ErrorLog /var/log/mm3-lists-error.log
LogLevel info
Alias /favicon.ico /opt/mailman/mm/static/hyperkitty/img/favicon.ico
Alias /static "/opt/mailman/mm/static"
<Directory "/opt/mailman/mm/static">
Require all granted
</Directory>
WSGIScriptAlias / /opt/mailman/mm/wsgi.py
<Directory "/opt/mailman/mm/">
<Files wsgi.py>
Order deny,allow
Allow from all
Require all granted
</Files>
WSGIProcessGroup mailman-web
</Directory>
</VirtualHost>
</CUT>
*2. uwsgi.ini:*
<CUT>
[uwsgi]
http-socket = 127.0.0.1:8000
pidfile = /opt/mailman/mm/var/uwsgi.pid
chdir = /opt/mailman/mm/
virtualenv = /opt/mailman/mm/venv/
module=mailman_web.wsgi:application
env =PYTHONPATH=/opt/mailman/mm/
env =DJANGO_SETTINGS_MODULE=settings
master = true
process = 2
threads = 2
attach-daemon = /opt/mailman/mm/venv/bin/mailman-web qcluster
req-logger = file:/opt/mailman/mm/var/logs/uwsgi.log
logger = qcluster file:/opt/mailman/mm/var/logs/uwsgi-qcluster.log
log-route = qcluster uwsgi-daemons
logger = cron file://opt/mailman/mm/var/logs/uwsgi-cron.log
log-route = cron uwsgi-cron
logger = file:/opt/mailman/mm/var/logs/uwsgi-error.log
uid = mailman
gid = mailman
</CUT>
*3. uwsgi - *Running supervised (supervisord):
<CUT>
[program:uwsgi]
directory=/opt/mailman/mm/
environment=PYTHONPATH=/opt/mailman/mm/
command=/usr/bin/su -m mailman -c '/opt/mailman/mm/venv/bin/uwsgi --ini
/opt/mailman/mm/uwsgi.ini' 2>&1 | logger -t uwsgi
autostart=true
autorestart=true
user=mailman
group=mailman
stopasgroup=true
killasgroup=true
</CUT>
*4. urls.py*:
<CUT>
from django.conf.urls import include
from django.urls import re_path
from django.contrib import admin
from django.urls import reverse_lazy
from django.views.generic import RedirectView
from django_mailman3.views.profile import delete_account, user_profile
urlpatterns = [
re_path(r'^$', RedirectView.as_view(
url=reverse_lazy('list_index'),
permanent=True)),
re_path(r'^postorius/', include('postorius.urls')),
re_path(r'^hyperkitty/', include('hyperkitty.urls')),
re_path(r'^user-profile/delete$', delete_account,
name='mm_user_account_delete'),
re_path(r'^user-profile/$', user_profile, name='mm_user_profile'),
re_path(r'^accounts/', include('allauth.urls')),
re_path(r'^admin/', admin.site.urls),
re_path(r'^mm/', include('postorius.urls')),
re_path(r'^archives/', include('hyperkitty.urls')),
]
</CUT>
And that's pretty much what I am using on my FreeBSD server.
PS: Possible to bottom-post instead of top-posting? :)
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
3 years, 8 months
Re: No path configuration found: paths.master
by Abhilash Raj
On Thu, Oct 26, 2017, at 10:34 PM, Pierre Abbat wrote:
> I installed postorius and hyperkitty with pip and ran into another
> problem. I
> ran "mailman info" and got "No path configuration found: paths.master".
>
> I have three files named mailman.cfg:
> /etc/mailman.cfg
> /usr/local/lib/python3.5/dist-packages/mailman/config/mailman.cfg
> /var/etc/mailman.cfg
> The one in /etc contains the following:
> [mailman]
> layout: master
> The one in /var/etc is completely commented out.
>
> If I move the one in /etc/ out of the way and run "mailman info" again, I
> get
> this:
> GNU Mailman 3.1.0 (Between The Wheels)
> Python 3.5.2 (default, Sep 14 2017, 22:51:06)
> [GCC 5.4.0 20160609]
> config file: None
> db url: sqlite:////etc/var/data/mailman.db
> devmode: DISABLED
> REST root url: http://localhost:8001/3.1/
> REST credentials: restadmin:restpass
>
> It said "config file: /var/etc/mailman.cfg" before. What changed?
OK, this might be completely my mistake. I am very sorry about this.
'master' is usually only specified in schema and can't be used as valid
value for 'layout'. I completely forgot this and updated the
documentation to use 'master'.
Please replace 'master' with 'local' and things should work.
So, the config would look something like this:
[mailman]
layout: local
I will go ahead and update the documentation right away.
Hope this helps!
> Pierre
> --
> La sal en el mar es más que en la sangre.
> Le sel dans la mer est plus que dans le sang.
> _______________________________________________
> Mailman-users mailing list
> mailman-users(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
--
Abhilash Raj
maxking(a)asynchronous.in
8 years, 10 months
Re: What's the difference between (purpose of) reject and ignore
by Andy Smith
Hello,
On Sun, Jun 26, 2022 at 12:37:05PM -0000, denis.bitouze(a)univ-littoral.fr wrote:
> AFAICS, it is not documented since, at Postorius → Settings → Message Acceptance → Default action to take when a (non-)member posts to the list, I only read: “Discard: this simply discards the message, with no notice sent to the post's author”. So no mention that this would set it to (silently) discard all future mails from them.
Well that is because that isn't what that part does. As it says,
that part is the "Default action to take when a member/non-member
posts to the list". So that's where you set what you want to happen
when ANY non-member posts. This is what will happen any time any
non-member posts.
By contrast, when you set an action on a particular held message, it
is asking you want you want to do with posts from THAT INDIVIDUAL
ADDRESS for the future.
So hopefully you can see that these things are different. One is a
whole-list property that applies to posts from classes of posters
(members, non-members). The other is per-poster property as a
reaction to as held message from them.
> Just to be sure: for this feature, is it necessary to click on the
> subject and to choose in the drop-down list “Discard (no
> notification)”, or is it enough, on the .../held_messages page, to
> select the messages and click on “Discard”?
Doing it from the held messages page will be a one-time thing; it is
only by clicking on the individual message that you can choose an action
for future messages from that address.
Cheers,
Andy
4 years, 2 months
[MM3-users]Re: Request for assistance for fresh install of Mailman 3.0.3 and Python 3.4
by Mark Sapiro
On 05/28/2016 09:51 AM, Rubén Rivero Capriles wrote:
>
> In order to avoid compatibility issues, I reinstalled CentOs 7. Firewalld, Apache and BIND are operational. I also installed Python 3.4 at http://www.codeghar.com/blog/install-latest-python-on-centos-7.html; however I understand that Python 2.7 is still available and am confused about usage of each version.
Mailman 3 consists of several pieces. There is a core engine which is
Python 3. The core does the basic email list management and exposes many
options and settings via a RESTful API.
There is also mailman.client which provides Python bindings for the REST
API. This is Python 2.
We also provide a web management UI, Postorius and an archiver,
HyperKitty. These are Django applications and all of this is Python 2.
There are other pieces as well.
> I downloaded the tarball for mailman 3.0.3. I will greatly appreciate if you quickly let me know how to install it. I do not wish to use mailman bundler.
This is only the core. You can install it with
python3 setup.py install
either in a python 3 virtualenv or not, but this will only give you the
core.
I suggest you see the docs at <http://docs.list.org/en/latest/>, and if
you don't want to use bundler, see
<https://wiki.list.org/DEV/SetupDevEnvironment>, although bundler is the
recommended way to set up a working, non-development Mailman suite.
In short, the core requires Python 3.4, most of the rest of the suite
requires Python 2.7 because of dependencies not yet ported to Python 3.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
10 years, 3 months
FW: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/
by Christian Stalberg
What is causing this error please?
-----Original Message-----
From: noreply(a)lists.ccalternatives.org <noreply(a)lists.ccalternatives.org>
Sent: Sunday, December 5, 2021 10:46 PM
To:
Subject: [Django] ERROR (EXTERNAL IP): Internal Server Error: /archives/
Internal Server Error: /archives/
Report at /archives/
Internal Server Error: /archives/
Request Method: GET
Request URL: https://lists.ccalternatives.org/archives/?sort=active%22'!
Django Version: 3.0.11
Python Executable: /opt/mailman/mm/venv/bin/python Python Version: 3.7.3 Python Path: ['/opt/mailman/mm', '/opt/mailman/mm/', '/opt/mailman/mm/bin', '/usr/lib/python37.zip', '/usr/lib/python3.7', '/usr/lib/python3.7/lib-dynload', '/opt/mailman/mm/venv/lib/python3.7/site-packages']
Server time: Sun, 5 Dec 2021 22:46:20 -0800 Installed Applications:
('hyperkitty',
'postorius',
'django_mailman3',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware')
Request information:
USER: AnonymousUser
GET:
sort = 'active"\'!'
POST: No POST data
FILES: No FILES data
COOKIES: No cookie data
META:
HTTP_ACCEPT_ENCODING = 'identity'
HTTP_CONNECTION = 'close'
HTTP_HOST = '127.0.0.1:8000'
HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0'
HTTP_X_FORWARDED_FOR = '185.220.101.143'
HTTP_X_FORWARDED_HOST = 'lists.ccalternatives.org'
HTTP_X_FORWARDED_PROTO = 'https'
HTTP_X_FORWARDED_SERVER = 'lists.ccalternatives.org'
PATH_INFO = '/archives/'
QUERY_STRING = "sort=active%22'!"
RAW_URI = "/archives/?sort=active%22'!"
REMOTE_ADDR = '127.0.0.1'
REMOTE_PORT = '36502'
REQUEST_METHOD = 'GET'
SCRIPT_NAME = ''
SERVER_NAME = '127.0.0.1'
SERVER_PORT = '8000'
SERVER_PROTOCOL = 'HTTP/1.0'
SERVER_SOFTWARE = 'gunicorn/20.0.4'
gunicorn.socket = <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 8000), raddr=('127.0.0.1', 36502)> wsgi.errors = <gunicorn.http.wsgi.WSGIErrorsWrapper object at 0x7f0365963780> wsgi.file_wrapper = ''
wsgi.input = <gunicorn.http.body.Body object at 0x7f0365963e80> wsgi.input_terminated = True wsgi.multiprocess = True wsgi.multithread = False wsgi.run_once = False wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'
Settings:
Using settings module settings
ABSOLUTE_URL_OVERRIDES = {}
ACCOUNT_AUTHENTICATION_METHOD = 'username_email'
ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = 'mandatory'
ACCOUNT_UNIQUE_EMAIL = True
ADMINS = "(('Mailman Admin', 'csa(a)web-analysts.net'),)"
ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'lists.ccalternatives.org', '192.46.218.224', 'zarathustra.ccalternatives.org', '192.168.0.1'] APPEND_SLASH = True AUTHENTICATION_BACKENDS = "('django.contrib.auth.backends.ModelBackend', 'allauth.account.auth_backends.AuthenticationBackend')"
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_USER_MODEL = 'auth.User'
BASE_DIR = '/opt/mailman/mm'
BROWSERID_AUDIENCES = ['http://localhost', 'http://localhost:8000', 'http://127.0.0.1:8000', 'http://lists.ccalternatives.org', 'https://localhost', 'https://localhost:8000', 'https://127.0.0.1:8000', 'https://lists.ccalternatives.org']
CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache', 'LOCATION': '127.0.0.1:11211'}} CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'} COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'js': ['compressor.filters.jsmin.JSMinFilter'], 'css': ['compressor.filters.css_default.CssAbsoluteFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f036b678bf8> COMPRESS_MINT_DELAY = 30 COMPRESS_MTIME_DELAY = 10 COMPRESS_OFFLINE = True COMPRESS_OFFLINE_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = "(('text/x-scss', 'sass -t compressed {infile} {outfile}'), ('text/x-sass', 'sass -t compressed {infile} {outfile}'))"
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/opt/mailman/mm/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'} COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = False
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = False
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = False
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'mailman', 'USER': 'mailman', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'OPTIONS': {}, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'NAME': None, 'MIRROR': None}}} DATABASE_ROUTERS = [] DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000 DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%Y-%m-%d', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%Y', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M', '%m/%d/%y'] DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y'] DEBUG = False DEBUG_PROPAGATE_EXCEPTIONS = False DECIMAL_SEPARATOR = '.'
DEFAULT_CHARSET = 'utf-8'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply(a)lists.ccalternatives.org'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_TABLESPACE = ''
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_CONFIRMATION_FROM = 'postmaster(a)lists.ccalternatives.org'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Django] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
FILE_CHARSET = 'utf-8'
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FILTER_VHOST = False
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
HAYSTACK_CONNECTIONS = {'default': {'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine', 'PATH': '/opt/mailman/mm/fulltext_index'}}
HYPERKITTY_DISABLE_SINGLETON_TASKS = True IGNORABLE_404_URLS = [] INSTALLED_APPS = "('hyperkitty', 'postorius', 'django_mailman3', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'django_gravatar', 'compressor', 'haystack', 'django_extensions', 'django_q', 'allauth', 'allauth.account', 'allauth.socialaccount')"
INTERNAL_IPS = []
LANGUAGES = [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('th', 'Thai'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')] LANGUAGES_BIDI = ['he', 'ar', 'fa', 'ur'] LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = None
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = False
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = False
LOCALE_PATHS = []
LOGGING = {'version': 1, 'disable_existing_loggers': False, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler'}, 'file': {'level': 'INFO', 'class': 'logging.handlers.WatchedFileHandler', 'filename': '/opt/mailman/mm/logs/mailmansuite.log', 'formatter': 'verbose'}, 'console': {'class': 'logging.StreamHandler', 'formatter': 'simple'}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'file'], 'level': 'ERROR', 'propagate': True}, 'django': {'handlers': ['file'], 'level': 'ERROR', 'propagate': True}, 'hyperkitty': {'handlers': ['file'], 'level': 'DEBUG', 'propagate': True}, 'postorius': {'handlers': ['console', 'file'], 'level': 'INFO'}}, 'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'}, 'simple': {'format': '%(levelname)s %(message)s'}}} LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = 'list_index'
LOGIN_URL = 'account_login'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = 'account_logout'
MAILMAN_ARCHIVER_FROM = "('127.0.0.1', '::1', '::ffff:127.0.0.1', '192.46.218.224')"
MAILMAN_ARCHIVER_KEY = '********************'
MAILMAN_REST_API_PASS = '********************'
MAILMAN_REST_API_URL = '********************'
MAILMAN_REST_API_USER = '********************'
MANAGERS = []
MEDIA_ROOT = ''
MEDIA_URL = ''
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
MESSAGE_TAGS = {40: 'danger'}
MIDDLEWARE = "('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django_mailman3.middleware.TimezoneMiddleware', 'postorius.middleware.PostoriusMiddleware')"
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
NUMBER_GROUPING = 0
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.ccalternatives.org'
PREPEND_WWW = False
Q_CLUSTER = {'timeout': 300, 'save_limit': 100, 'orm': 'default'} ROOT_URLCONF = 'urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_SECONDS = 0
SECURE_PROXY_SSL_HEADER = "('HTTP_X_FORWARDED_PROTO', 'https')"
SECURE_REDIRECT_EXEMPT = []
SECURE_REFERRER_POLICY = None
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = False
SERVER_EMAIL = 'noreply(a)lists.ccalternatives.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = False
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
SETTINGS_MODULE = 'settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = []
SITE_ID = 3
SOCIALACCOUNT_PROVIDERS = {'google': {'SCOPE': ['profile', 'email'], 'AUTH_PARAMS': {'access_type': 'online'}}, 'gitlab': {'SCOPE': ['read_user']}} STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/opt/mailman/mm/static'
STATIC_URL = '/static/'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': {'context_processors': ['django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.template.context_processors.csrf', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'django_mailman3.context_processors.common', 'hyperkitty.context_processors.common', 'postorius.context_processors.postorius']}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M'] TIME_ZONE = 'America/Los_Angeles'
USE_I18N = True
USE_L10N = True
USE_SSL = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = True
USE_X_FORWARDED_PORT = False
WSGI_APPLICATION = 'wsgi.application'
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
4 years, 9 months
Re: Modify approval email
by Odhiambo Washington
On Fri, Sep 15, 2023 at 5:33 PM Stephen J. Turnbull <
turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
> pau.baiges(a)csuc.cat writes:
>
> > Is there a way to modify the email that is sent by default to list
> > owners when a non-list member sends email to the list?
>
> Yes. As list owner (or site admin) in Postorius go to Templates, and
> click on "New Template". Select list:admin:action:post from the
> drop-down menu to the right of "Name". Copy the current message
> (site-packages/mailman/templates/en/list:admin:action:post.txt is the
> original, but do not edit this -- it will be overwritten on upgrades)
> to the text box and edit to taste. Unfortunately there is no "web
> site" variable but typically that is the same for all lists, so adding
>
> https://your.host.here/mailman3/lists/$list_id/held_messages
>
> in some appropriate place probably does what you want.
>
> There is no way to indicate that this is a link because these messages
> are plain text. However, most mail clients will turn a URL into a
> link. If your moderators are not so lucky, try wrapping it with
>
> <URL:https://your.host.here/mailman3/lists/$list_id/held_messages>
>
> or even the usual HTML:
>
> <a href="https://your.host.here/mailman3/lists/$list_id/held_messages">
> Moderation Page
> </a>
>
> One of those may help.
>
Also, you can take a look at this documentation:
https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/…
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
3 years
Re: Can login at /admin, but cannot login at the account/login page.
by Mark Sapiro
On 8/14/21 9:34 PM, Stephen J. Turnbull wrote:
> I'm sorry, I'm in a "second vaccination" fog at the moment (mending
> but concentration lasts only about 10 minutes), so I'll answer what I
> know offhand since Abhilash is busy and Mark is probably offline for
> vacation by now.
Not quite, but very soon.
> pabsta(a)gmail.com writes:
>
> > However, if logout and attempt to login from the postorius website,
> > I get a « 502 bad gateway » error after roughly 30 seconds. The
> > logs in Systemctl for gunicorn register a "DIGEST-MD5 common mech
> > free" error message
>
> I would guess this is also just a connection drop because it doesn't
> receive the expected response within timeout.
I'm sure that's right.
> > and the nginx error logs just show a connection drop:
> >
> > 2021/08/12 18:11:09 [error] 26026#26026: *31 upstream prematurely closed connbection while reading response header from upstream, client: [ip redacted], server:
> > [domain redacted], request: "POST /accounts/login/ HTTP/2.0", upstream: "http://127.0.0.1:8006/accounts/login/", host: "[domain redacted]", referrer: "https://[domain redacted]/accounts/login/?next=/mailman3/lists/"
> a >
I see in the above `upstream: "http://127.0.0.1:8006/accounts/login/",`
but in your settings
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
I suspect you may be getting a redirect from http to https which is
losing POST data and you need to change
proxy_pass http://127.0.0.1:8006;
in your nginx configuration to
proxy_pass https://127.0.0.1:8006;
or set
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "http"
--
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