
Re: mailman import21
by Brian Carpenter
On 10/11/20 11:06 AM, Mark Sapiro wrote:
> On 10/11/20 7:41 AM, Brian Carpenter wrote:
>> Does the import21 script also import custom templates?
> No.
>
>
>> Are these custom
>> templates contained in the config.pck file?
> No. They are in the same MM 2.1 directory as the config.pck, but in a
> sub-directory for the language code, i.e. lists/LISTNAME/LC/
>
>
>> Are there any known issues
>> with the importing of mm2 templates into a mm3 environment?
>
> The replacements are different. i.e., things like %(email)s and
> %(listname)s become $user_email and $short_listname.
>
> Also, there are some MM 2.1 templates that have no MM 3 equivalent.
> Also, things like message and digest headers and footers that are MM 2.1
> list attributes that are templates in MM 3, although import21 tries to
> handle those.
So are how these templates showing up on my Mailman 3 servers? They show
up in /opt/mailman/mm/var/templates/lists/listname/en/. I have a client
whose old footer template from Mailman 2 still showing up in list
messages. He then created a custom footer template via Affinity (same
thing happen in Postorius) and both custom footers were being included
in list messages.
--
Brian Carpenter
Harmonylists.com
Emwd.com
4 years, 9 months

MAILMAN_ARCHIVER_KEY - 401 error
by Torsten R.
Hi together,
I just updated one of my servers to Debian 11 and that also introduced mailman3 to the system as I was running mailman 2.1 for years before on that server.
It took me a while to configure everything but I am convinced that I now have everything done properly.
I am able to access the web interface of mailman3 (postorius) and also the archive (hyperkitty).
I configured exim to deal with messages send to the lists.
But when I try to send a message (as a member of a list) to a list I always get a 401 in mailman.log and the message that I should check if I provided MAILMAN_ARCHIVER_KEY and if it is correct.
So far, I can say that the key is the same in mailman-web.py (with single quotes) and mailman-hyperkitty.cfg (without quotes).
in mailman-web.py I have:
MAILMAN_ARCHIVER_KEY = 'somesecretkeywithlotsofcharacters'
and in mailman-hyperkitty I have this:
api_key: somesecretkeywithlotsofcharacters
I have some messages in $var_dir/archives/hyperkitty/spool but mailman qfile <messagefile> doesn't show anything that would catch my eye.
So, maybe I need another pair of eyes that could take a look at my configs or someone that is turning me in the right direction and might give some hints where to look and what to check.
Thanks,
Torsten
3 years, 3 months

Re: Hyperkitty displaying example.com
by Jeff
You probably need to adjust the SITE_ID in your settings.py file. Your current SITE_ID is probably 1 and you just need to make it 2.
> On Sep 21, 2022, at 8:58 PM, Mark Dale via Mailman-users <mailman-users(a)mailman3.org> wrote:
>
> Hi
>
> On a new installation I'm seeing "example.com" displayed at the top of
> the HyperKitty pages.
>
> I was expecting to see "lists.mydomainname.com", so I think I've missed
> something somewhere.
>
> Also, when a user signs up, the confirmation email reads as:
>
> //////////////////////////
>
> SUBJECT: [example.com] Please Confirm Your E-mail Address
> FROM: postorius(a)lists.mydomainname.com
>
> BODY:
> Hello from example.com!
>
> You're receiving this e-mail because user yogibear has given your e-
> mail address to register an account on example.com.
>
> To confirm this is correct, go to
> https://lists.mydomainname.com/mailman3/accounts/confirm-email/NQ:1obAI3:Yw…
>
> Thank you for using example.com!
> example.com
>
> //////////////////////////
>
> Any clues greatly appreciated.
>
> Thanks,
> Mark
>
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
2 years, 10 months

Re: Please help - Held message is crashing mailman.
by Mark Sapiro
On 4/5/19 10:27 PM, Alex King via Mailman-users wrote:
> Hi,
>
> I've used mailman a lot in the past, and decided to install mailman3 in
> a recent install. I'm unimpressed so far, it seems buggy.
>
> Running on Ubuntu 18.04.2 LTS from packages, mailman3 3.1.1-9,
> mailman3-web 0+20170523-14, python-django-postorius 1.1.2-3.
>
> After a few messages, I now can't go to the "Held Messages" in
> postorius, I get a 500 error.
>
> I tried to interact on the command line, but could not work out how.
> Reading
> https://mailman.readthedocs.io/en/latest/src/mailman/docs/install.html
> and
> https://mailman.readthedocs.io/en/latest/src/mailman/commands/docs/shell.ht…,
> I tried:
>
> # mailman shell
> Welcome to the GNU Mailman shell
>
>>>> command = cli('mailman.commands.cli_withlist.shell')
> Traceback (most recent call last):
> File "/usr/lib/python3.6/code.py", line 91, in runcode
> exec(code, self.locals)
> File "<console>", line 1, in <module>
> NameError: name 'cli' is not defined
>
> I did a lot of reading of the manual and googled, but I have no idea
> where the cli object is supposed to come from.....? The documentation
> is confusing.
The line
command = cli('mailman.commands.cli_withlist.shell')
in
<https://mailman.readthedocs.io/en/latest/src/mailman/commands/docs/shell.ht…>
is dependent upon some behind the scenes setup to make the doctests
work. Granted this is confusing, but basically all that does is set
things up for the doctests to run the 'mailman shell' command. It is not
intended to be run from within 'mailman shell'.
> Anyway, after some trial and error, i found:
>
> # mailman shell
> Welcome to the GNU Mailman shell
>>>> list_manager = getUtility(IListManager)
>>>> m=list_manager.get("committee(a)[redacted].org")
>>>> from mailman.interfaces.requests import IListRequests
>>>> requests = IListRequests(m)
>>>> [x for x in requests.held_requests][0].id
> 8
>>>> requests.get_request(8)
> Traceback (most recent call last):
> File "/usr/lib/python3.6/code.py", line 91, in runcode
> exec(code, self.locals)
> File "<console>", line 1, in <module>
> File "/usr/lib/python3/dist-packages/mailman/database/transaction.py",
> line 85, in wrapper
> return function(args[0], config.db.store, *args[1:], **kws)
> File "/usr/lib/python3/dist-packages/mailman/model/requests.py", line
> 120, in get_request
> result.data_hash, expunge=False)
> File "/usr/lib/python3/dist-packages/mailman/database/transaction.py",
> line 85, in wrapper
> return function(args[0], config.db.store, *args[1:], **kws)
> File "/usr/lib/python3/dist-packages/mailman/model/pending.py", line
> 138, in confirm
> value = json.loads(keyvalue.value)
> File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
> return _default_decoder.decode(s)
> File "/usr/lib/python3.6/json/decoder.py", line 339, in decode
> obj, end = self.raw_decode(s, idx=_w(s, 0).end())
> File "/usr/lib/python3.6/json/decoder.py", line 355, in raw_decode
> obj, end = self.scan_once(s, idx)
> json.decoder.JSONDecodeError: Unterminated string starting at: line 1
> column 1 (char 0)
>
> It seems something was written out to disk that can't be read in for
> some reason (assuming a json object on disk?)
This is <https://gitlab.com/mailman/mailman/issues/385> which should be
fixed by <https://gitlab.com/mailman/mailman/merge_requests/333>. The
fix in in Mailman core version 3.2.0
> How do I debug this further? How do I find the json being decoded? Any
> help would be appreciated. (I found mailman2 just worked, I was happy
> with that.)
The issue is in storing a pickled representation of the json encoding of
'rule_misses'. This gets very long if you have lots of header filters,
and with at least the mysql backend gets truncated in the database which
causes the Unterminated string error.
I'm not sure what your options are for upgrading. The current Debian
packages are all >= 3.2.0 [1], but Ubuntu doesn't get 3.2.0 until cosmic
(18.10) [2].
[1] https://packages.debian.org/search?keywords=mailman3
[2] https://packages.ubuntu.com/search?keywords=mailman3
> (My colleague posted a bug about this I believe but I don't have the
> link to that.)
I haven't seen it.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
6 years, 3 months

Re: My list has been switched from public to private archives, but they are still visible
by Abhilash Raj
On Thu, Sep 19, 2019, at 3:31 AM, Paul Arenson wrote:
> Can anyone help with this?
>
> I set my list to private archives today. Up until then, it was pubic.
> And yet, if you go to the list page, you will see that if you click
> archives (top left), you can see them. (Filled with a bunch of tests
> posts for now)
This change takes a bit of time to sync up Hyperkitty. THere is a daily
cron job which syncs this information from Mailman Core.
I have made a change which should fix this problem and the process would
become synchronous.
You can run `python manage.py runjobs --daily` command to force sync
that information.
>
> https://list.tokyoprogressive.org/postorius/lists/discuss.list.tokyoprogres…
>
> Am I misunderstanding what a private archive is?
Not really, your expectation is right.
>
> Is something wrong with my setup (which is hosted)?
>
> Thank you.
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
thanks,
Abhilash Raj (maxking)
5 years, 10 months

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

Re: MM3 Postfix FROM header issue
by Mark Sapiro
On 12/17/23 12:17 PM, eboltz(a)lhtservices.com wrote:
> Mark,
>
> Thanks for the assistance thus far.
>
> When I create a new Domain within Postorius. If I set the Mail Host to 'example.com' and the Alias Domain to 'lists.example.com', create a new list such as 'staff_test', it'll default to the 'example.com' domain (which is the real domain). Then when I subscribe, I'll get an email from 'staff_test(a)example.com', when I want it to be from 'staff_test(a)lists.example.com' instead, also if I reply back to the 'staff_test(a)example.com' then I"ll get a bounce-back that it doesn't exist, but if I send to 'staff_test(a)lists.example.com' it'll go to the newly created list. I'd like all defaults to be '@lists.example.com', if that makes sense.
You want to create the list with Mail Host lists.example.com and no
Alias domain.
Then in Postfix you want no virtual_alias_maps setting. The rest of what
you show for postconf -n at
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
is good.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
1 year, 7 months

Apache Configuration for Subdomain
by Stephen J. Turnbull
Mail Person writes:
> I'm trying to move my mailman3 web interface from
> example.com/mailman3 to just lists.example.com like this site. I am
> not having luck with the apache configuration. I've tried below but
> I just get a 403:
Apache typically runs as www-data or some such user, while Mailman
resources are typically owned by mailman, lists, or list (depending on
distribution and administrator whim). Does the webserver have the
appropriate permissions to access /var/lib/mailman3/web/static?
Perhaps when uwsgi forks it changes effective uid, in which case it
needs to have access.
Mark may have better ideas.
>
> <VirtualHost *:80>
>
> ServerAdmin admin(a)example.com
> ServerName lists.example.com
> ServerAlias www.lists.example.com
>
>
> <Directory "/var/lib/mailman3/web/static">
> Require all granted
> </Directory>
>
> <IfModule mod_proxy_uwsgi.c>
> ProxyPass /favicon.ico !
> ProxyPass /static !
> ProxyPass / unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost
> </IfModule>
>
> </VirtualHost>
>
>
> Alias /favicon.ico /var/lib/mailman3/web/static/postorius/img/favicon.ico
> Alias /static /var/lib/mailman3/web/static
> _______________________________________________
> 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/
>
>
3 years

Re: How to delete an archive
by Abhilash Raj
On Wed, Sep 4, 2019, at 6:06 PM, Andrew Bernard wrote:
> I deleted a list but I want to delete the archive as well.
>
> How do you do that?
I know this is a big pain point for many people, but this doesn't work right now on MySQL, which is why I haven't been able to commit my fix for this yet :(
>
> Also, I had a list called Test. I deleted it. I made a new list called
> Testing, with a different email address, bu the archive points to the
> test list. This seems to be messed up. Why? I am sorry to say I have
> had continuous trouble with many aspects of Hyperkitty from the
> beginning several months ago. I know that is not helpful, but I am
> starting to wonder about all this.
Deleting a list doesn't delete the archives. This the default behavior and perhaps the user interface can be improved by optionally allowing deletion of archives.
I created: https://gitlab.com/mailman/postorius/issues/382
>
> Andrew
> _______________________________________________
> Mailman-users mailing list -- mailman-users(a)mailman3.org
> To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
thanks,
Abhilash Raj (maxking)
5 years, 10 months

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