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

Re: Custom templates (was: Re: Re: nginx configuration on a multitasking server)
by Mark Sapiro
On 1/14/22 6:11 PM, David Newman wrote:
> On 1/14/22 4:54 PM, Mark Sapiro wrote:
>>
>> It should work. I suspect you need to go to the list's Settings ->
>> Automatic Responses and set `Admin immed notify` to Yes.
>
>
> It's enabled. I think this triggers notifications only for new
> subscription requests, not pending ones.
Yes. That will send a single notification at the time of the request
using the `list:admin:action:subscribe.txt` template. Notices of pending
requests are sent by the `mailman notify` command using the
`list:admin:notice:pending.txt` template.
...
>> You can test `mailman notify` at any time by running it by hand.
>
>
> Thanks. This still isn't working as intended. I took these steps:
>
> 1. Created the file
> '/opt/mailman/mm/var/templates/lists/test.lists.domain.tld/en/list:admin:action:pending.txt'
The template name is `list:admin:notice:pending.txt`, not
`list:admin:action:pending.txt`. Thats why it didn't work.
...
> 2. Restarted the mailman3 and mailmanweb services
You only needed to restart Mailman core.
...
> What I'm trying to do here is replicate a feature from MM2.1, where
> pending notifications had URLs embedded in the message. That's not
> available out of the box in MM3, and if there's a place for feature
> requests I'd be glad to ask that this be made the default.
The place for feature requests for Mailman core (which this is) is
https://gitlab.com/mailman/mailman/-/issues, however, this is not
straightforward as Mailman core doesn't know if you even have Postorius
or some other web management UI installed or what the URL to access it
might be. Thus it's not just a simple matter of editing templates. It
would also require a configuration setting for the base URL for the web
admin UI and changes in logic to provide an appropriate replacement
depending on whether or not the base URL was configured.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
3 years, 6 months

Re: Notifying owners of membership changes but not moderators
by Perry Kollmorgen
Thanks Mark.
So, I have python scripts which do the adding of nonmembers and moderators.
For the nonmember script I needed to add something so that the nonmembers can send, i.e the moderaction_action = 'defer'
This is my code for nonmembers:
mailing_list.add_role('nonmember', nonmember.email, display_name=nonmember.display_name)
list_member = mailing_list.get_nonmember(nonmember.email)
list_member.moderation_action = 'defer'
list_member.save()
For the code for moderators it currently only adds them:
mailing_list.add_moderator(moderator.email, display_name=moderator.display_name)
Would I need to add something similar which sets a delivery_status for the moderator added ?
Cheers,
Perry
________________________________
From: Mark Sapiro <mark(a)msapiro.net>
Sent: Wednesday, 27 November 2024 2:16 PM
To: mailman-users(a)mailman3.org <mailman-users(a)mailman3.org>
Subject: [MM3-users] Re: Notifying owners of membership changes but not moderators
On 11/26/24 4:54 PM, Perry Kollmorgen wrote:
>
> Is there any way to have these only for Owners ?
No. Essentially all admin notices are sent to LISTNAME-owner@DOMAIN and
that in turn resends to owners and moderators. There are no controls to
restrict this to only owners and not moderators, however it doesn't send
to those with delivery disabled, so you could do something like this in
`mailman shell`
```
$ mailman shell -l LIST_ID
Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
The variable 'm' is the LIST_ID mailing list
>>> for moderator in m.moderators.members:
... moderator.preferences.delivery_status = DeliveryStatus.by_moderator
...
>>> commit()
```
This will not affect the delivery status of the user's role as list member.
This is not available in Postorius and also, the moderator can't set the
delivery_status for their moderator role either, only for their member role.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
_______________________________________________
Mailman-users mailing list -- mailman-users(a)mailman3.org
To unsubscribe send an email to mailman-users-leave(a)mailman3.org
https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
Archived at: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
This message sent to pcjkollmorgen(a)hotmail.com
8 months, 1 week

Re: Implicit Destination Meaning
by Mark Sapiro
On 2/8/21 6:41 PM, Brian Carpenter wrote:
> I just migrated a MM2 list to MM3. The client had no problem sending
> posts to his list with MM2. However when he posted to his MM3 list, it
> showed up in the moderation queue:
>
> ============
> Your mail to 'dogs(a)lists.redacted.org' with the subject
>
> mailing list changes
>
> Is being held until the list moderator can review it for approval.
>
> The message is being held because:
>
> Message has implicit destination
>
> Either the message will get posted to the list, or you will receive
> notification of the moderator's decision.
> ===========
>
> Is there a List Setting somewhere that needs to be adjusted to allow
> this sender to post without moderation?
There are a few things going on here. First, the list setting is
require_explicit_destination. This is in Postorius under Settings ->
Message Acceptance. If this is False or No, the implicit destination
rule will never hit, but clearly it is Yes/True and should have been
imported from the 2.1 list so it was probably True there too.
When True, it means the list posting address or an acceptable alias must
be explicitly addressed (in To:, Cc:, Resent-To: or Resent-Cc: of the
post. An acceptable alias is a literal address or pattern matching
addresses. These are also in Settings -> Message Acceptance and should
have been imported from MM 2.1.
For example, if the list's posting address is list(a)example.com, but you
can also post to list(a)lists.example.com, list(a)lists.example.com should
be in acceptable aliases.
The most likely explanation here is that the post is being sent to a
subdomain which is not the list's canonical posting address or vice
versa. The reason this worked in MM 2.1 but not in MM 3 is in MM 2.1 if
the list name matched, the check passed even if the domains didn't, but
that is not the case in MM 3. The solution is to add the 'other'
addresses to Acceptable aliases.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
4 years, 5 months

Re: Migrating mailman3 to latest ubuntu lts
by Helio Loureiro
Hi,
Not a very good response.
(venv) mailman@new-server ~ (v3.3.9) [0|1]> mailman-web check postorius
Traceback (most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/apps/registry.py",
line 158, in get_app_config
return self.app_configs[app_label]
KeyError: 'postorius'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
sys.exit(main())
File
"/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
line 90, in main
execute_from_command_line(sys.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 446, in execute_from_command_line
utility.execute()
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 402, in run_from_argv
self.execute(*args, **cmd_options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 448, in execute
output = self.handle(*args, **options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/check.py",
line 56, in handle
app_configs = [apps.get_app_config(app_label) for app_label in
app_labels]
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/check.py",
line 56, in <listcomp>
app_configs = [apps.get_app_config(app_label) for app_label in
app_labels]
File
"/local/mailman/venv/lib/python3.10/site-packages/django/apps/registry.py",
line 165, in get_app_config
raise LookupError(message)
LookupError: No installed app with label 'postorius'.
(venv) mailman@new-server ~ (v3.3.9) [0|1]> mailman-web check hyperkitty
Traceback (most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/apps/registry.py",
line 158, in get_app_config
return self.app_configs[app_label]
KeyError: 'hyperkitty'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/local/mailman/venv/bin/mailman-web", line 8, in <module>
sys.exit(main())
File
"/local/mailman/venv/lib/python3.10/site-packages/mailman_web/manage.py",
line 90, in main
execute_from_command_line(sys.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 446, in execute_from_command_line
utility.execute()
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/__init__.py",
line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 402, in run_from_argv
self.execute(*args, **cmd_options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/base.py",
line 448, in execute
output = self.handle(*args, **options)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/check.py",
line 56, in handle
app_configs = [apps.get_app_config(app_label) for app_label in
app_labels]
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/check.py",
line 56, in <listcomp>
app_configs = [apps.get_app_config(app_label) for app_label in
app_labels]
File
"/local/mailman/venv/lib/python3.10/site-packages/django/apps/registry.py",
line 165, in get_app_config
raise LookupError(message)
LookupError: No installed app with label 'hyperkitty'.
(venv) mailman@new-server ~ (v3.3.9) [0|1]> mailman-web migrate -h
usage: mailman-web migrate [-h] [--noinput] [--database DATABASE] [--fake]
[--fake-initial] [--plan] [--run-syncdb] [--check] [--prune] [--version]
[-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback]
[--no-color] [--force-color] [--skip-checks]
[app_label] [migration_name]
Updates database schema. Manages both apps with migrations and those
without.
positional arguments:
app_label App label of an application to synchronize the
state.
migration_name Database state will be brought to the state after
that migration. Use the name "zero" to unapply all migrations.
options:
-h, --help show this help message and exit
--noinput, --no-input
Tells Django to NOT prompt the user for input of
any kind.
--database DATABASE Nominates a database to synchronize. Defaults to
the "default" database.
--fake Mark migrations as run without actually running
them.
--fake-initial Detect if tables already exist and fake-apply
initial migrations if so. Make sure that the current database schema
matches your initial migration before using this flag. Django will only
check for an existing
table name.
--plan Shows a list of the migration actions that will be
performed.
--run-syncdb Creates tables for apps without migrations.
--check Exits with a non-zero status if unapplied
migrations exist.
--prune Delete nonexistent migrations from the
django_migrations table.
--version Show program's version number and exit.
-v {0,1,2,3}, --verbosity {0,1,2,3}
Verbosity level; 0=minimal output, 1=normal output,
2=verbose output, 3=very verbose output
--settings SETTINGS The Python path to a settings module, e.g.
"myproject.settings.main". If this isn't provided, the
DJANGO_SETTINGS_MODULE environment variable will be used.
--pythonpath PYTHONPATH
A directory to add to the Python path, e.g.
"/home/djangoprojects/myproject".
--traceback Raise on CommandError exceptions.
--no-color Don't colorize the command output.
--force-color Force colorization of the command output.
--skip-checks Skip system checks.
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Sun, 17 Dec 2023 at 04:15, Stephen J. Turnbull <
turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
> Helio Loureiro writes:
>
> > Well... not that good. Now it is mailman3-web that doesn't work.
> >
> > (venv) mailman@new-machine ~ (v3.3.9)> mailman-web check
> > System check identified no issues (0 silenced).
> > (venv) mailman@new-machine ~ (v3.3.9)> mailman-web check migrate
> > Traceback (most recent call last):
> [omitted]
> > LookupError: No installed app with label 'migrate'.
> >
> > Any idea why migrate isn't working and saying it is installed?
>
> Management commands aren't applications, so they wouldn't be valid
> arguments to "mailman-web check" in any case.
> Try "mailman-web check postorius" or "mailman-web check hyperkitty" to
> see how the application argument works. You should get the report
> "System check identified no issues (0 silenced)." as above.
>
> Then try "mailman-web migrate -h".
> If that returns help output, the migrate command is installed and can
> be run (the help string is part of the migrate module, not part of
> mailman-web itself).
>
> Why do you think "mailman-web migrate" isn't working? Most likely
> "migrate" is working as designed, but it is doing nothing because
> something about the way you transported the database originally caused
> mailman-web to think its database schema is up-to-date even though it
> is not (as happened with the mailman database).
>
> Unfortunately this database is managed by Django, not by Alembic, and
> I don't know offhand how to discover and tell Django the actual schema
> version and then ask it to run any new migrations.
>
> Steve
>
>
>
1 year, 7 months

Re: Hyperkitty performance problem
by Mark Sapiro
On 12/28/24 05:19, monochromec via Mailman-users wrote:
> Following the root cause analysis which Tobias started all those weeks ago we (the admin team behind the installation) are still struggling with the following phenomenon: messages on average take more than 24 hours to be processed, more precisely, the average lifetime of a pickled message object in `/var/lib/mailman3/queue/pipeline` clocks in at around 26 hours).
This issue is with Mailman core's pipeline runner. See
https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/8-mil…
for an overview of message handling and queues in Mailman core.
It seems that the pipeline runner(s) are taking an inordinately long
time to process a message through the pipeline of handlers causing the
pipeline queue to become backlogged.
> Couple of stats of the installation: standard installation from Bookworm OS repos, Hyperkitty as archiver and Postorius as web frontend as explained above, running Python 3.11.2 from the standard systemd service as packaged with the Bookworm deb file. All backends (Core + Hyperkitty) are supported by Postgres version 15+248. The MTA is a standard Postfix installation, again from OS packages.
The primary support for Debian packages is Debian. See
https://wiki.list.org/x/12812344
> The underlying VM has 7 cores with just under 24 GB of main memory. This production instance is handling less than 130 mailing list (MLs) with an average of less than 10 postings per day per ML. CPU core utilisation hovers around 50% with the lion share allocated to the four pipeline runners as part of the MM configuration.
This is an average of less than 1 message per minute. Processing a
message through the pipeline should take nowhere near a minute. Possibly
there is an issue in the rfc_2369.py handler. This handler communicates
with HyperKitty via mailman_hyperkitty to obtain values for the
List-Archive: and Archived-At: headers added to the message. Possibly
there is some configuration issue with mailman_hyperkitty that causes
these queries to take a long time and possibly eventually time out.
Are there any `Connection to HyperKitty failed:`, `HyperKitty failure on
...` or `Invalid response from HyperKitty` type messages in mailman.log?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
7 months, 1 week

Re: Welcome Message
by Abhilash Raj
On Wed, Apr 17, 2019, at 1:41 PM, brian(a)emwd.com wrote:
> Abhilash Raj wrote:
> > If the URL for template is wrong, or Postorius is down for whatever reason,
> > the subscription will fail with the error that you saw before.
>
> Explain URL for template. You mean "POSTORIUS_TEMPLATE_BASE_URL"? That
> is not wrong. I am confident of that. It is back to
> "http://mailman-web:8000". I can successfully ping mailman-web:8000
> from bash.
POSTORIUS_TEMPLATE_BASE_URL is used to create the template urls, yes.
>
> > > I logged out of Postorious and subscribed using the
> > > subscribe form on
> > > the info page and the change to the welcome template showed up. So it
> > > looks like being logged in as admin while trying to subscribe someone
> > > was what was causing the problem. Is that a bug I discovered?
> > I suspect stopping-restarting and re-creating the template (idk, if you
> > really did that) might have something to do with it. I am not sure if this
> > is a bug unless you can reliably reproduce this.
>
> This error is absolutely reproducible. It even impacts other list
> admins who are trying to use a custom welcome message and subscribing a
> member while logged into Postorious. Everything else is working fine on
> this server and I followed your directions precisely when I set this
> server up. Please help.
Can you reply here with the output of this query on your server:
$ curl --user restadmin:restpass -L http://172.19.199.2:8001/3.1/lists/mailman-users.mailman3.org/uris
Please replace "restadmin:restpass" with the username password of the rest
api, if you have customized it. It not leave it as it because that it the default.
Also, replace "mailman-users.mailman3.org" with the the List-ID of your mailing
list. (replace @ with .) in your posting address.
If you don't have curl, choose whatever http client you have.
>
> Thanks,
> Brian
> _______________________________________________
> 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)
6 years, 3 months

Re: Hyperkitty on Debian 12
by Michael Oberrauch
On Tue, 2024-03-26 at 08:06 +0100, Markus Grandpré wrote:
> Dear Mr Sapiro,
>
> thank you very much for your help. The required command is:
>
> # mailman-web hyperkitty_import \
> -l mailman21-migration-test-04(a)mailman.uni-konstanz.de \
> /var/mailman21/testlist.mbox
>
> Due to the following warnings, I still have to customize Hyperkitty:
>
> django_mailman3.MailDomain: (models.W042) Auto-created primary key
> used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> DjangoMailman3Config.default_auto_field attribute to point to a
> subclass
> of AutoField, e.g. 'django.db.models.BigAutoField'.
> ...
>
> Can you give me another hint? As Linux admin I installed the packages
> mailman and mailman-web that were offered to me under Debian 12.
> Although during the installation of the packages user "list" was
> created, I cannot use it:
>
> # su - list
> This account is currently not available
>
> As with Mailman 2.1, I will probably have to continue working with
> Mailman3 as root. Too bad that there is no documentation for Debian
> admins like me, who don't want to dive too deep into the python
> framework. Or have I overlooked something?
>
> Best regards,
> Markus
>
>
Hi Markus,
we are also running MM3 on Debian 12 from Package Repositories.
First of all, you should not try to directly switch user (su) to the
lists user, it's generally intended to executes commands as that user,
if necessary; either using `runuser`, `sudo`, or `su -c`.
However, the prepackaged scripts `mailman-wrapper` and `mailman-web`
already do this and therefore you ca run those as root without
permission problems.
On Debian there are two relevant users for MM3: the list user runs
mailman core, whereas the www-data user runs Postorius and Hyperkitty.
So you have to make shure, that the www-data user can access the .mbox
files while importing.
Hope that helps.
Cheers,
Michael
--
Michael Oberrauch (er/ihm)
Computerreferent
Fachschaft Mathematik/Physik/Informatik/Chemie
Studentische Vertretung
Technische Universität München
Boltzmannstraße 3
85748 Garching
eMail: oberrauch(a)fs.tum.de
Tel: (+49) 089 289 18545
Fax: (+49) 089 289 18546
https://mpic.fs.tum.de
1 year, 4 months

Error after upgrading mailman3
by Gelpi Andrea
Hi,
in my installation the command
mailman notify
does not exist.
Checking the debian packages I noticed the I could upgrade mailman form
3.2.1 to 3.2.2; mailman-web form 20180916-8 to 20180916-10;
python3-django-hyperkitty from 1.2.2 to 1.3.2
I did it with apt-get install
After that when I try to go to a postorius page the error
Mailman REST API not available. Please start Mailman core
in mailman log I found:
May 4 15:13:08 posta mailman3[10259]: Cannot import runner module:
mailman.runners.rest.RESTRunner
May 4 15:13:08 posta mailman3[10259]: Traceback (most recent call last):
May 4 15:13:08 posta mailman3[10259]: File
"/usr/lib/python3/dist-packages/mailman/bin/runner.py", line 55, in
make_runner
May 4 15:13:08 posta mailman3[10259]: runner_class =
find_name(class_path)
May 4 15:13:08 posta mailman3[10259]: File
"/usr/lib/python3/dist-packages/mailman/utilities/modules.py", line 52,
in find_name
May 4 15:13:08 posta mailman3[10259]: module =
import_module(module_path)
May 4 15:13:08 posta mailman3[10259]: File
"/usr/lib/python3.7/importlib/__init__.py", line 127, in import_module
May 4 15:13:08 posta mailman3[10259]: return
_bootstrap._gcd_import(name[level:], package, level)
May 4 15:13:08 posta mailman3[10259]: File "<frozen
importlib._bootstrap>", line 1006, in _gcd_import
May 4 15:13:08 posta mailman3[10259]: File "<frozen
importlib._bootstrap>", line 983, in _find_and_load
May 4 15:13:08 posta mailman3[10259]: File "<frozen
importlib._bootstrap>", line 967, in _find_and_load_unlocked
May 4 15:13:08 posta mailman3[10259]: File "<frozen
importlib._bootstrap>", line 677, in _load_unlocked
May 4 15:13:08 posta mailman3[10259]: File "<frozen
importlib._bootstrap_external>", line 728, in exec_module
May 4 15:13:08 posta mailman3[10259]: File "<frozen
importlib._bootstrap>", line 219, in _call_with_frames_removed
May 4 15:13:08 posta mailman3[10259]: File
"/usr/lib/python3/dist-packages/mailman/runners/rest.py", line 27, in
<module>
May 4 15:13:08 posta mailman3[10259]: from mailman.rest.wsgiapp
import make_server
May 4 15:13:08 posta mailman3[10259]: File
"/usr/lib/python3/dist-packages/mailman/rest/wsgiapp.py", line 25, in
<module>
May 4 15:13:08 posta mailman3[10259]: from falcon.routing import
map_http_methods, set_default_responders
May 4 15:13:08 posta mailman3[10259]: ImportError: cannot import name
'map_http_methods' from 'falcon.routing'
(/usr/lib/python3/dist-packages/falcon/routing/__init__.py)
I think there is a dependency error somewhere.
Is there a way to solve it?
Thank You
--
Gelpi ing. Andrea
--------------------------------------------------------------
It took the computing power of three C-64s to fly to the Moon.
It takes a 486 to run Windows 95. Something is wrong here.
--------------------------------------------------------------
5 years, 3 months

Re: An archive/read-only list on a full setup?
by Mark Sapiro
On 4/11/23 09:36, Andreas Schamanek wrote:
>
> I have a working full installation of mailman3, postorius and hyperkitty
> (on Debian 11). Now I wanted to host the archive of a remote list, and I
> am wondering how to do this properly.
>
> After I found no documentation and no posting I simply created a list in
> mailman3 with only 1 dummy member. The list address is subscribed to the
> actual remote list. So, messages arrive and are archived. But that's not
> optimal because hyperkitty thinks it's a normal list where it should be
> read-only and do not allow subscriptions etc.
>
> What's the proper way to set up a hyperkitty-only list?
There really isn't one as HyperKitty is intended to archive Mailman
lists, however, it is possible to have a list in HyperKitty without a
corresponding Mailman list. Thus, in your case you could just remove the
Mailman 3 list you created and leave the HyperKitty list.
Then you have an issue with posts, so you can keep sending the posts to
be archived to the prior list address, but arrange for the incoming MTA
to pipe mail to that address to a process. That process would do the
following.
Add a Unix From_ line at the beginning of the message and write the
result to a temp file.
Invoke a command like
django-admin hyperkitty_import --no-sync-mailman --since 1990-01-01 \
-l list(a)example.com /path/to/the/tempfile
where list(a)example.com is the actual HyperKitty list.
This will archive the message. The addition of a Unix From_ line is to
make the message file look like a mbox.
Since there is no Mailman list, attempts to post or reply directly from
HyperKitty will fail, although such attempts using email software will
probably succeed in archiving the mail, and mail directly to that list
address will be archived, but such messages won't go to the remote list.
This may not be any better than what you're currently doing.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
2 years, 3 months