Re: Create a mailman-web admin user
by Roland Giesler
On 2024/07/30 17:10, Odhiambo Washington via Mailman-users wrote:
> On Tue, Jul 30, 2024 at 4:55 PM Roland Giesler via Mailman-users <
> mailman-users(a)mailman3.org> wrote:
>
>> On 2024/07/30 15:48, Roland Giesler via Mailman-users wrote:
>>> However, which user in the mailman user mentioned?
>>>
>>> I tried to do this as root, but login in as an admin doesn't give me
>>> any option to create new lists in postorius. What am I missing /
>>> doing wrong?
>>>
>> I seem to have solved the riddle. The "mailman-web createsuperuser"
>> command suggest the the mailman user is www-data, which I accepted. That
>> worked and I can now create a new list from Postorius.
>>
> Actually, it wasn't a riddle.
> You looked at documentation meant for the virtualenv
> <https://docs.mailman3.org/en/latest/install/virtualenv.html>installation
> method while your installation seems to be done from your OS package
> distribution.
> The OS package installation is fraught with pain. The virtualenv method is
> the officially recommended.
I use Linux LXC containers mostly in Proxmox, so adding another layer by
using docker or something else to mean seems like another layer of
complication.
The documentation is obviously good enough for people that know how
already, but need to look up a detail here or, but for a first time
mailman user it is a bit of a nightmare. Once I have chewed my way
through all the traps and tunnels, I intend to do something about this.
I can't contribute to code here, but I can make it easier for the next
person coming along.
>
>
>
3 months, 4 weeks
MM2.1 -> MM3.3 migration. To hold or not hold
by mark@suburbia.org.au
Hi,
I've spent the past week slowly migrating from MM2.1 to MM3.3. One of the lists migrated was set to hold all user posts for moderation, as the list isn't a discussion list but a newsletter sent out on occasion to user/members. I am seeing unexpected behaviour post-migration.
The list settings have automatically (and appropriately) been set to hold mails when I go to Settings -> Message Acceptance -> "Default action to take when a non-member posts to the list" -- it says `Hold for moderation`
The migrated members when viewed all have a Moderation Action of `Hold for moderation`, which is also expected.
When I add new members through Mass operations -> Mass subscribe, the new members have a Moderation Action of `None`.
I've looked through the archives of this list, and from what I can tell:
According to https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
> None does not mean no moderation. None means use the list default
> as opposed to one of the specific actions defined
The thread at https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/… seems to also repeat the above, that `none` means the configured setting for the list.
However, I've just done a test of a newly added user (a test email account for me), seen that the Moderation Action is `None`, but when I posted to the list from the address, it was not held for moderation, and went through.
Am I missing something with the expected functionality?
If it helps;
Mailman Core Version GNU Mailman 3.3.8 (Tom Sawyer)
Mailman Core API Version 3.1
Mailman Core Python Version 3.11.2 (main, Sep 14 2024, 03:00:30) [GCC 12.2.0]
Postorius Version 1.3.8
Cheers,
Mark
1 week, 4 days
Re: Easiest way to install a new mailman3 deployment?
by Brian Carpenter
On 12/31/20 8:13 PM, ieso(a)johnwillson.com wrote:
> So I've been trying for the last two weeks to get a new mailman3 server running on a virtualized server (any server), and I'm turning to this list after having failed many times and running out of holiday time.
>
> I started trying a non-docker installation on Ubuntu 18.04 (https://docs.google.com/document/d/1xIcSsoNFp2nHi7r4eQys00s9a0k2sHhu1V5Plan…) , which got me the closest. Except I had a problem with inbound email only being triggered when it came from certain accounts. But that clearly wasn't good enough for production, so after many attempts to figure out where it was failing, I decided to turn to docker as a solution that should be cleaner.
>
> A few attempts at doing a docker installation on digitalocean.com failed, which I realized might be due to it not routing private IP addresses, so I moved to AWS after checking that their VPC policy would fit mailman's docker requirements. I found a great but slightly outdated guide on how to do this (https://xiaoxing.us/2018/01/01/deploy-mailman-3-on-aws-using-docker/). By this point I knew enough to correct a number of places where the environment had changed since the procedure was written, but postorius still failed at the curl test.
>
> The challenge for me has been the difficulty to know how to troubleshoot the different different systems and network infrastructure that are used to keep mailman3 humming. I've tried about 7 different installation walkthroughs (there are no recent ones on Youtube by the way, in case anyone wants to seize that opportunity!), and the good guides provide ways to check each stage to try to help you a bit on that front.
>
> Nonetheless, I feel stuck and thought I'd ask the simple question... for a completely basic, barebones new installation, what's the easiest way to get a mailman3 installation up-and running? (e.g. Which server provider? Which operating system and version? Docker or otherwise?)
>
> Any pointers highly appreciated. Google Groups is clearly on its way out, as it no longer allows for people to easily join groups by sending an email or clicking a link, so that should be a big opportunity for mailman3 to step up and help give those mailing list migrants a new home... which is what we're looking for. We're just not quite as smart as you guys. ;-)
> _______________________________________________
> 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/
If you are looking for commercial assistance, please visit our Mailman 3
hosting site at https://mailmanhost.com (Harmony Lists). Feel free to
contact me off list if you have any questions.
For us, we chose Debian 10, Postfix, Nginx, and PostgreSQL as the server
environment for Mailman 3. We used PIP via a Python virtual environment
to install Mailman 3 from source. The Debian packages I believe have
older versions of Mailman 3/Postorius/Hyperkitty which is why we went
with source. I have a walk-through that is a work in project at:
https://wiki.list.org/DOC/Howto_Install_Mailman3_On_Debian10
I am available to hire to install Mailman 3 for you if you want to run
your own server.
With Harmony Lists, we went a step further with Mailman 3 and created
our own custom interfaces: Affinity (admin) and Empathy (forum/archive).
However they are only available to our own Mailman 3 clients.
Have a Happy New Year.
--
Brian Carpenter
Harmonylists.com
Emwd.com
3 years, 10 months
Re: How to change the language in mailman3
by Mark Sapiro
On 7/20/20 5:19 PM, Massimo Zappalà wrote:
> Hi everyone,
> Debian buster run on my server.
> I installed the apt install mailman3-full package and configured it. Everything works fine.
> I'm trying to change the language (mailman3, postorius and hyperkitty) from English to Italian, but it's not clear what I'm missing.
> These are the files that I modified to try to set the Italian language:
>
> /etc/mailman3/mailman.cfg
> default_language: it
> ---------------------------------------------------------------
> /etc/mailman3/mailman-web.py
> LANGUAGE_CODE = 'it-IT'
> TIME_ZONE = 'Europe/Rome'
> USE_I18N = True
> USE_L10N = True
> USE_TZ = True
> ---------------------------------------------------------------
Assuming this is the Debian packages Django settings file for mailman,
it probably contains something like
try:
from settings_local import *
except ImportError:
pass
at the end. You should put your local changes in the
/etc/mailman3/settings_local.py file.
> /usr/lib/python3/dist-packages/django/conf/global_settings.py
> TIME_ZONE = 'Europe/Rome'
> USE_TZ = True
> LANGUAGE_CODE = 'it-IT'
> ---------------------------------------------------------------
This probably isn't needed as it should be overridden by the above.
> With this command, I set the Italian language to the list. It takes the setting, but it doesn't work
> sudo mailman shell -l test(a)pratico.work
>>>> m.preferred_language='it'
>>>> commit()
>>>> CTRL-D
>
> Can anyone tell me what I'm missing?
The source distribution for Mailman core does not contain the compiled
message catalogs, and Debian's package probably doesn't either.
Find the mailman/messages/it/LC_MESSAGES directory, cd to that directory
and give the command
msgfmt mailman.po -o mailman.mo
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
4 years, 4 months
Re: moving lists to another server
by Odhiambo Washington
On Sat, Nov 18, 2023 at 12:41 PM Stephen J. Turnbull <
turnbull.stephen.fw(a)u.tsukuba.ac.jp> wrote:
> Stephen J. Turnbull writes:
>
> > 2. There are similar issues for mailman-web (especially host names).
> > I have not thought about them at all, so I'll leave that for the
> > interested reader. ;-)
>
> Mark's right about this. I think Postorius and other configs will
> take care of themselves except for the users' tables which can be
> handled as Mark suggests, and the HyperKitty archives themselves are
> most easily handled by exporting to mbox and importing into the new
> site.
>
This one is noted.
> > 7. Apply any changes made in 6 to your configs, and read the foreign
> > dumps into your system, and you should be ready to go for the
> > distribution part. Not sure about host and webserver
> > configuration for mailman-web, though.
>
> I just remembered one thing (among many, I'm sure): you probably need
> to create directories under $var_dir/lists for each foreign list. I'm
> pretty sure this is done by the "mailman create" function, not on the
> fly. The source for "mailman create" would be another good place to
> look for tasks you (or your script) need to perform and changes needed
> to database values in the SQL dump scripts.
>
I am holding on for more input after my previous response. Then I can
consider this if I must go this route.
--
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]
1 year
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'
2 years, 11 months
Re: Timeout error on anonymous subscribe
by Gerald Vogt
On 23.10.24 21:35, Mark Sapiro wrote:
> On 10/22/24 23:07, Gerald Vogt wrote:
>>
>> For testing I have set
>>
>> POSTORIUS_TEMPLATE_BASE_URL = 'https://lists.example.org'
>>
>> to the URL of our main domain, however, if I test an anonymous
>> subscribe through the list info page I still get the timeout error
>
> This will have no effect unless you delete and recreate the template in
> Postorius because simple changing the setting won't change the `uri` in
> the template table.
O.K. Did that. Now the uri in mailman.template is
https://lists.example.org/mailman3/api/templates/list/community.lists.examp…
However, it doesn't change the timeout issue, except now the error is
HTTPSConnectionPool(host='lists.example.org', port=443): Read timed out.
(read timeout=5)
instead of localhost:8000.
>> I can access http://localhost:8000/mailman3/api/templates/list/
>> community.lists.example.com/list:user:action:subscribe with curl and
>> immediately get the response.
>
> Can you do that as the Mailman user?, e.g.
> ```
> sudo -u mailman curl http://localhost:8000/mailman3/api/templates/list/
> community.lists.example.com/list:user:action:subscribe
> ```
> assuming the Mailman user is `mailman`.
I don't quite understand the relevance of the user accessing the
localhost tcp port. Any local user can do that.
I can access the template content with
curl
http://localhost:8000/mailman3/api/templates/list/community.lists.example.c…
as well as
curl
http://lists.example.org/mailman3/api/templates/list/community.lists.exampl…
as any user on the mailman server.
And I can use the latter to access the template from anywhere as it's a
public server.
In any case, curl immediately returns the content. There is no delay.
Thanks,
Gerald
1 month
Re: New year releases!
by Odhiambo Washington
On two of my test VMs, I ran:
pip install --upgrade --upgrade-strategy eager abc ebd cde .... #
Everything went fine.
On Sat, Mar 18, 2023 at 8:15 PM Jeff <mm3(a)steele.com> wrote:
> I finally got around to doing this upgrade. I followed the instructions at:
>
> https://docs.mailman3.org/en/latest/upgrade-3.2.html
>
> Everything seemed to go fine but, mailman3 failed to start because
> “_BindParamClause” could not be found in sqlalchemy.sql.expression. It
> looks like alembic-1.6.2 is not completely compatible with
> SQLAlchemy-2.0.6. I fixed the problem by hacking sqla_compat.py in
> alembic-1.6.2, but should Mailman start requiring a newer version of
> alembic?
>
>
>
>
> > On Jan 4, 2023, at 4:59 AM, Abhilash Raj <maxking(a)asynchronous.in>
> wrote:
> >
> > Hello Everyone,
> >
> > Happy new year!
> >
> > I am pleased to announce several new releases for GNU Mailman project.
> >
> > 1. Mailman Core 3.3.8 [1]
> > 2. Postorius 1.3.8 [2]
> > 3. Hyperkitty 1.3.7 [3]
> > 4. Mailmanclient 3.3.5 [4]
> > 5. Django-mailman3 1.3.9 [5]
> > 6. Mailman-hyperkitty 1.2.1 [6]
> >
> > All the releases are published to PyPI and you can find links to all the
> PyPI projects:
> >
> > https://docs.mailman3.org/en/latest/
> >
> > A full list of change logs are available below:
> >
> > [1]:
> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/NEWS.…
> > [2]:
> https://docs.mailman3.org/projects/postorius/en/latest/news.html#news-1-3-8
> > [3]:
> https://docs.mailman3.org/projects/hyperkitty/en/latest/news.html#news-1-3-7
> > [4]:
> https://docs.mailman3.org/projects/mailmanclient/en/latest/src/mailmanclien…
> > [5]: https://gitlab.com/mailman/django-mailman3/-/blob/master/README.rst
> > [6]:
> https://gitlab.com/mailman/mailman-hyperkitty/-/blob/master/README.rst
> >
> > Finally, the minimum Python version required is 3.7, and all the
> components now support Python 3.7 to 3.11.
> >
> > Thanks to all the contributors for making this release possible!
> >
> > If you find any issues, you can report them at the respective bug
> tracker for the projects. The links to issue trackers are available
> > here: https://docs.mailman3.org/en/latest/
> >
> > Installation documentation is available at
> >
> > https://docs.mailman3.org/en/latest/install/install.html
> >
> > and if you are upgrading an existing virtualenv install you can refer
> >
> > https://docs.mailman3.org/en/latest/upgrade-3.2.html
> >
> >
> > --
> > thanks,
> > Abhilash Raj (maxking)
> > _______________________________________________
> > Mailman-users mailing list -- mailman-users(a)mailman3.org
> > To unsubscribe send an email to mailman-users-leave(a)mailman3.org
> > https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> > Archived at:
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/message…
> >
> > This message sent to mm3(a)steele.com
>
>
> ___________________________________________
> Mailman's content filtering has removed the
> following MIME parts from this message.
>
> Content-Type: image/vnd.microsoft.icon
> Name: favicon.ico
>
> Replaced multipart/alternative part with first alternative.
> _______________________________________________
> 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 odhiambo(a)gmail.com
>
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
1 year, 8 months
Re: REST API http://.../3.1/users/../preferred_address returns 404 for GET and POST
by Mark Sapiro
On 4/13/23 13:21, Eric Vyncke wrote:
> Humm after some more investigations, it seems that my mailman3 installation via debian packages is completely mixed up :-( This would explain the issue if the REST API is using 3.2.2 code and postorius is expecting 3.3.5...
>
> drwxr-xr-x 29 root root 4096 Nov 18 2021 /usr/lib/python3/dist-packages/mailman
> drwxr-xr-x 2 root root 4096 Nov 18 2021 /usr/lib/python3/dist-packages/mailman-3.2.2.egg-info
> drwxr-xr-x 8 root root 4096 Nov 18 2021 /usr/lib/python3/dist-packages/mailmanclient
> drwxr-xr-x 2 root root 4096 Nov 18 2021 /usr/lib/python3/dist-packages/mailmanclient-3.2.2.egg-info
> drwxr-xr-x 4 root root 4096 Apr 13 14:29 /usr/lib/python3/dist-packages/mailman_hyperkitty
> drwxr-xr-x 2 root root 4096 Apr 13 14:28 /usr/lib/python3/dist-packages/mailman_hyperkitty-1.1.0.egg-info
> drwxr-sr-x 30 root staff 4096 Apr 13 09:32 /usr/local/lib/python3.8/dist-packages/mailman
> drwxr-sr-x 2 root staff 4096 Nov 18 2021 /usr/local/lib/python3.8/dist-packages/mailman-3.3.5.dist-info
> drwxr-sr-x 9 root staff 4096 Nov 18 2021 /usr/local/lib/python3.8/dist-packages/mailmanclient
> drwxr-sr-x 2 root staff 4096 Nov 18 2021 /usr/local/lib/python3.8/dist-packages/mailmanclient-3.3.3.dist-info
> drwxr-sr-x 4 root staff 4096 Apr 12 20:47 /usr/local/lib/python3.8/dist-packages/mailman_web
> drwxr-sr-x 2 root staff 4096 Nov 18 2021 /usr/local/lib/python3.8/dist-packages/mailman_web-0.0.5.dist-info
Yes, that would be the problem if the Python running Mailman core was
using libraries in /usr/lib/python3/dist-packages/ and the Python
running Django was using libraries in
/usr/local/lib/python3.8/dist-packages/. The ability to get/set
preferred_address via REST was added to Mailman core 3.3.0 and is not in
3.2.2.
--
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
Re: Different Mail Domain Cause Key Error
by Brian Carpenter
On 4/21/20 4:04 PM, Mark Sapiro wrote:
> This is not the error. The KeyError ... 'file' exception is a Django
> logging exception. It is not the underlying error. There should be more
> in the log indicating what the real problem is.
Ok. The first thing however is did I miss a step?
Here is the complete error that is sent to me via email as superuser:
Internal Server Error:/mailman3/lists/
KeyError at/mailman3/lists/
'file'
Traceback:
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/postorius/views/list.py" in list_index
755. paginator_class=MailmanPaginator)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/lib/paginator.py" in paginate
71. objects = paginator.page(page_num)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/lib/paginator.py" in page
46. number = self.validate_number(number)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/paginator.py" in validate_number
48. if number > self.num_pages:
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/utils/functional.py" in __get__
80. res = instance.__dict__[self.name] = self.func(instance)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/paginator.py" in num_pages
97. if self.count == 0 and not self.allow_empty_first_page:
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/utils/functional.py" in __get__
80. res = instance.__dict__[self.name] = self.func(instance)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django_mailman3/lib/paginator.py" in count
56. return self.function(count=0, page=1).total_size
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/postorius/views/list.py" in _get_list_page
751. advertised=advertised, mail_host=mail_host, count=count, page=page)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/client.py" in get_list_page
181. return Page(self._connection, url, MailingList, count, page)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/page.py" in __init__
37. self._create_page()
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/page.py" in _create_page
62. response, content = self._connection.call(self._build_url())
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/mailmanclient/restbase/connection.py" in call
112. error_msg, response, None)
*During handling of the above exception (HTTP Error 404: {"title": "404
Not Found"}), another exception occurred:*
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
34. response = get_response(request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/postorius/middleware.py" in __call__
42. return self.get_response(request)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
36. response = response_for_exception(request, exc)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/core/handlers/exception.py" in response_for_exception
95. exc_info=sys.exc_info(),
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/utils/log.py" in log_response
228. exc_info=exc_info,
File "/usr/lib/python3.7/logging/__init__.py" in error
1412. self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python3.7/logging/__init__.py" in _log
1519. self.handle(record)
File "/usr/lib/python3.7/logging/__init__.py" in handle
1529. self.callHandlers(record)
File "/usr/lib/python3.7/logging/__init__.py" in callHandlers
1591. hdlr.handle(record)
File "/usr/lib/python3.7/logging/__init__.py" in handle
905. self.emit(record)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/utils/log.py" in emit
119. reporter = ExceptionReporter(request, is_email=True, *exc_info)
File "/opt/mailman/mm/venv/lib/python3.7/site-packages/django/views/debug.py" in __init__
254. self.template_info = getattr(self.exc_value, 'template_debug', None)
File "/usr/lib/python3.7/tempfile.py" in __getattr__
614. file = self.__dict__['file']
Exception Type: KeyError at/mailman3/lists/
Exception Value: 'file'
Request information:
USER: AnonymousUser
--
Please let me know if you need further assistance.
Thank you for your business. We appreciate our clients.
Brian Carpenter
EMWD.com
--
EMWD's Knowledgebase:
https://clientarea.emwd.com/index.php/knowledgebase
EMWD's Community Forums
http://discourse.emwd.com/
4 years, 7 months