
Re: Weird response to postings after subscriptions and accounts
by Mark Sapiro
On 9/16/19 9:22 PM, Paul Arenson wrote:
> In my test of the two forms of signup, I am getting these unexpected results. Is it my settings or is something weird within the program itself?
>
> 1) https://list.tokyoprogressive.org/postorius/lists/discuss.list.tokyoprogres…
>
> 2) Choose "You can also subscribe without creating an account. If you wish to do so, please use the form below"
>
> 3) Then I have to approve it. They get "Welcome to the "Discuss" mailing list! To post to this list, send your email to: discuss(a)list.tokyoprogressive.org
You have to approve it or the user has to confirm her email address?
Maybe you have to approve it because the lists Subscription Policy is
Moderate.
> 4) But I have to approve it.I assume this is because they do not yet have a real account. And they should be listed as a NON MEMBER?
No. They will be a member, they just will not have a Django account that
they can log in to.
> 5) But even when they sign up here: https://list.tokyoprogressive.org/accounts/signup/?next=%2Fpostorius%2Flist… they get an email from my provider (NOT MY LIST????) as follows:
>
> "Hello from mailman3.emwd.com! You're receiving this e-mail because user iCloud has given yours as an e-mail address to connect their account.
> To confirm this is correct, go to https://list.tokyoprogressive.org/accounts/confirm-email/MTE3:1iA44k:E7w7xh… Thank you from mailman3.emwd.com! mailman3.emwd.com"
Because when you create a Django account, you have to confirm your email
address.
> 6) And this is where it gets weird. If they send from their email program and get the welcome (Welcome to the "Discuss" mailing list!
> To post to this list, send your email to: discuss(a)list.tokyoprogressive.org You can unsubscribe or make adjustments to your options via email by
> sending a message to....... I then get a notice:
>
> "Your mail to 'discuss(a)list.tokyoprogressive.org' with the subject test notice Is being held until the list moderator can review it for approval. The message is being held because: The message is not from a list member"
What is Message Acceptance -> Default action to take when a member posts
to the list ?
You get the notice or the user gets the notice?
> 7) While if they send FROM THE interface it goes through.
>
> 8) What I am confused about.
>
> Signing up for an account should make them a member, right? Subscribing should make them a non member, no?
Signing up for an account is just signing up for a Django account. You
can sign up for an account and log in and then subscribe to the list.
Subscribing makes one a member whether or not you subscribe from a
logged in account or subscribe without creating an account.
> But here it seems that both make them a non member.
If an address which is not a member posts to the list, that address
becomes a non-member. This is the only way other than being explicitly
added by an admin that an address becomes a non-member.
> And worse, someone with an account sending from the Interface has their message get through while the same person sending from an email program has me get a notice that a non member is trying to post.
If by sending from the interface, you mean posting via hyperkitty, the
user must have an account and be logged in to do that.
Your "same person" may have multiple entities within Mailman, possibly
subtly different email addresses, one of which is a member and one of
which isn't.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
5 years, 10 months

Re: Bulk changes to delivery mode and moderation action
by David Newman
On 1/7/22 12:06 PM, Mark Sapiro wrote:
> On 1/7/22 11:06 AM, David Newman wrote:
>>
>> 1. In Users/Members, moderation action for the newly resubscribed
>> users shows as "None". Is there a method, either in the UI or the
>> command line, to change this to "Default processing" for all users?
>
>
> I assume you don't want to set `Default action to take when a member
> posts to the list` to Default Processing because you want new member
> posts to be held. This is a good practice. To set all members to default
> processing in mailman shell
..
OK, thanks
>> 2. Although Delivery Mode shows as "Regular" for all users in
>> Users/Members list, clicking on a member's name shows all options such
>> as delivery status, delivery mode, etc., as undefined.
>
>
> They show as undefined, but if you look at your own settings by
> selecting `Mailman settings` from the dropdown under your username at
> the upper right in Postorius, you will see you have Global Mailman
> preferences, Address-based preferences and List-based preferences. If a
> list based preference is unset for a list, it falls back to the address
> based preference for the address and if that's unset, to the global
> preference.
>
> When you as an admin look at a user, you only see the user's list based
> preferences.
Thanks. This makes sense, but something's wrong with this particular list.
I was able to change preferences using the shell commands you kindly
provided. All list member now have regular delivery and default moderation.
However, there's no evidence test messages to the list are going out.
(Nondelivery was the reason I was mucking around in the admin panel in
the first place.)
The Postfix log shows delivery to the list address.
MM3's smtp.log shows the usual handshake.
However, I do not then see messages going out to subscribers in the
Postfix log, and as one of those subscribers I do not receive a copy
even though my preferences are set to receive my own posts.
The admin panel shows 0 messages held for moderation.
Another mailing list in the same domain on the same server delivers mail
to all subscribers OK.
This is surely config problem on my end, but which log(s) and/or admin
panel setting(s) to check?
Thanks again.
dn
>
>> Similar question: How to set subscriber options for all members in one
>> go?
>
>
> Per the above, you only need to set the user's preferences if they don't
> have address based preferences and the preference differs from the
> global (default) preferences.
>
> However, if you want to set the member's list preferences, you could add
> to the beginning of the above:
> ```
> >>> from mailman.interfaces.member import DeliveryMode, DeliveryStatus
> >>> english = getUtility(ILanguageManager).get('en')
> ```
> and to the `for` loop in the above:
> ```
> ... mbr.preferences.acknowledge_posts = False
> ... mbr.preferences.delivery_mode = DeliveryMode.regular
> ... mbr.preferences.delivery_status = DeliveryStatus.enabled
> ... mbr.preferences.hide_address = False
> ... mbr.preferences.preferred_language = english
> ... mbr.preferences.receive_list_copy = False
> ... mbr.preferences.receive_own_postings = True
> ```
> Or whatever you think these settings should be.
>
>> 3. As a subscriber to this list, I received email notification that
>> I'd been unsubscribed. Where is the control for enabling/disabling
>> subscription notifications?
>
>
> Settings -> Automatic Responses
>
>
>> Settings/Member Policy/Un-subscription Policy is set to Confirm, but I
>> don't think that's relevant here since I unsubscribed users as the
>> Django superuser.
>
>
> Correct.
>
3 years, 6 months

Re: New releases
by brylon@oit.rutgers.edu
Hi all --
I'm stuck on this "compress" issue after upgrading and not sure how to remedy?
After upgrading the Mailman components (core, postorius, hyperkitty) on my test server to the latest available in my venv I ran the following:
$ ./bin/django-admin collectstatic --clear --noinput --verbosity 0
and then
$ ./bin/django-admin compress --trace
Compressing... Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/base.py", line 282, in precompile
mod = import_module(mod_name)
File "/opt/mailman/mm/venv/lib64/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'sass -t compressed {infile} {outfile}'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/management/commands/compress.py", line 232, in compress
result = parser.render_node(template, context, node)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/offline/django.py", line 117, in render_node
return node.render(context, forced=True)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/templatetags/compress.py", line 143, in render
return self.render_compressed(context, self.kind, self.mode, forced=forced)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/templatetags/compress.py", line 119, in render_compressed
rendered_output = compressor.output(mode, forced=forced, basename=file_basename)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/css.py", line 46, in output
ret.append(subnode.output(*args, **kwargs))
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/css.py", line 48, in output
return super(CssCompressor, self).output(*args, **kwargs)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/base.py", line 314, in output
output = '\n'.join(self.filter_input(forced))
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/base.py", line 254, in filter_input
for hunk in self.hunks(forced):
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/base.py", line 228, in hunks
precompiled, value = self.precompile(value, **options)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/base.py", line 287, in precompile
return True, filter.input(**kwargs)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/filters/base.py", line 239, in input
return super(CachedCompilerFilter, self).input(**kwargs)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/filters/base.py", line 206, in input
raise FilterError(err)
compressor.exceptions.FilterError: Error: Invalid CSS after "...lor}: #{$value}": expected "{", was ";"
on line 4 of /opt/mailman/mm/venv/lib/python3.6/site-packages/hyperkitty/static/hyperkitty/libs/bootstrap/stylesheets/_root.scss
from line 11 of /opt/mailman/mm/venv/lib/python3.6/site-packages/hyperkitty/static/hyperkitty/libs/bootstrap/stylesheets/bootstrap.scss
from line 4 of /opt/mailman/mm/venv/lib/python3.6/site-packages/hyperkitty/static/hyperkitty/sass/hyperkitty.scss
Use --trace for backtrace.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/mailman/mm/venv/bin/django-admin", line 8, in <module>
sys.exit(execute_from_command_line())
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/management/commands/compress.py", line 277, in handle
self.handle_inner(**options)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/management/commands/compress.py", line 300, in handle_inner
offline_manifest, block_count, results = self.compress(engine, extensions, verbosity, follow_links, log)
File "/opt/mailman/mm/venv/lib/python3.6/site-packages/compressor/management/commands/compress.py", line 235, in compress
"%s" % (template.template_name, smart_text(e)))
django.core.management.base.CommandError: An error occurred during rendering /opt/mailman/mm/venv/lib/python3.6/site-packages/django_mailman3/templates/socialaccount/connections.html: Error: Invalid CSS after "...lor}: #{$value}": expected "{", was ";"
on line 4 of /opt/mailman/mm/venv/lib/python3.6/site-packages/hyperkitty/static/hyperkitty/libs/bootstrap/stylesheets/_root.scss
from line 11 of /opt/mailman/mm/venv/lib/python3.6/site-packages/hyperkitty/static/hyperkitty/libs/bootstrap/stylesheets/bootstrap.scss
from line 4 of /opt/mailman/mm/venv/lib/python3.6/site-packages/hyperkitty/static/hyperkitty/sass/hyperkitty.scss
Use --trace for backtrace.
Any suggestions? The fixes described in this thread don't seem to be working for my case?
4 years, 10 months

Re: Migrating mailman3 to latest ubuntu lts
by Helio Loureiro
Hi,
Indeed it was the configuration. It was placed into
/etc/mailman3/mailman-web.py. After a I changed to
/etc/mailman3/settings.py a few things advanced a little bit more.
I had to figure out how to fix mysqlclient installation since there isn't a
mention about it and the simple "pip install mysqclient" was breaking with
pkg-config issues. But it did work at the end.
Now I can see further messages on mailman3-web than before.
(venv) mailman@new-server ~ (v3.3.9)> mailman-web migrate
System check identified some issues:
WARNINGS:
account.EmailAddress: (models.W036) MariaDB does not support unique
constraints with conditions.
HINT: A constraint won't be created. Silence this warning if you don't care
about it.
account.EmailAddress: (models.W043) MariaDB does not support indexes on
expressions.
HINT: An index won't be created. Silence this warning if you don't care
about it.
Operations to perform:
Apply all migrations: account, admin, auth, contenttypes,
django_mailman3, django_q, hyperkitty, postorius, sessions, sites,
socialaccount
Running migrations:
Applying account.0004_alter_emailaddress_drop_unique_email...Traceback
(most recent call last):
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 257, in query
_mysql.connection.query(self, query)
MySQLdb.OperationalError: (2013, 'Lost connection to MySQL server during
query')
The above exception was the direct cause of the following exception:
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/base.py",
line 96, in wrapped
res = handle_func(*args, **kwargs)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/core/management/commands/migrate.py",
line 349, in handle
post_migrate_state = executor.migrate(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 135, in migrate
state = self._migrate_all_forwards(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 167, in _migrate_all_forwards
state = self.apply_migration(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/executor.py",
line 252, in apply_migration
state = migration.apply(state, schema_editor)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/migration.py",
line 130, in apply
operation.database_forwards(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/migrations/operations/fields.py",
line 235, in database_forwards
schema_editor.alter_field(from_model, from_field, to_field)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 788, in alter_field
self._alter_field(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 858, in _alter_field
self.execute(self._delete_unique_sql(model, constraint_name))
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/base/schema.py",
line 199, in execute
cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 67, in execute
return self._execute_with_wrappers(
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 80, in _execute_with_wrappers
return executor(sql, params, many, context)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 84, in _execute
with self.db.wrap_database_errors:
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/utils.py", line
91, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/utils.py",
line 89, in _execute
return self.cursor.execute(sql, params)
File
"/local/mailman/venv/lib/python3.10/site-packages/django/db/backends/mysql/base.py",
line 75, in execute
return self.cursor.execute(query, args)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
179, in execute
res = self._query(mogrified_query)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/cursors.py", line
330, in _query
db.query(q)
File
"/local/mailman/venv/lib/python3.10/site-packages/MySQLdb/connections.py",
line 257, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server
during query')
Which seems to be complaining with DB credentials. But they're properly
set and it works via mysql command line.
(venv) mailman@new-server ~ (v3.3.9)> mysql -umailman3web -p mailman3web
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input
statement.
MariaDB [mailman3web]> show tables;
+-------------------------------+
| Tables_in_mailman3web |
+-------------------------------+
| account_emailaddress |
| account_emailconfirmation |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_mailman3_maildomain |
| django_mailman3_profile |
| django_migrations |
| django_q_ormq |
| django_q_schedule |
| django_q_task |
| django_session |
| django_site |
| hyperkitty_attachment |
| hyperkitty_email |
| hyperkitty_favorite |
| hyperkitty_lastview |
| hyperkitty_mailinglist |
| hyperkitty_profile |
| hyperkitty_sender |
| hyperkitty_tag |
| hyperkitty_tagging |
| hyperkitty_thread |
| hyperkitty_threadcategory |
| hyperkitty_vote |
| socialaccount_socialaccount |
| socialaccount_socialapp |
| socialaccount_socialapp_sites |
| socialaccount_socialtoken |
+-------------------------------+
34 rows in set (0.000 sec)
On the /etc/mailman3/settings.py:
(venv) mailman@seliius26224 ~ (v3.3.9)> cat /etc/mailman3/settings.py |
grep -v "#" | grep -v '^$'
from mailman_web.settings.base import *
from mailman_web.settings.mailman import *
ADMINS = (
('Mailman Suite Admin', 'root@localhost'),
)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mailman3web',
'USER': 'mailman3web',
'PASSWORD': '*******************',
'HOST': 'localhost',
'PORT': '3306',
}
}
STATIC_ROOT = '/local/mailman/web/static'
COMPRESS_ENABLED = True
LOGGING['handlers']['file']['filename'] =
'/local/mailman/web/logs/mailmanweb.log'
ALLOWED_HOSTS = [
"127.0.0.1",
"*"
]
CSRF_TRUSTED_ORIGINS = [
]
SITE_ID = 1
SECRET_KEY = '****************************************'
DEFAULT_FROM_EMAIL = 'admin(a)mailman.domain.com'
SERVER_EMAIL = 'admin(a)mailman.domain.com'
MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'restadmin'
MAILMAN_REST_API_PASS = '***************************'
MAILMAN_ARCHIVER_KEY = '****************************'
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1', '1.2.3.4')
HAYSTACK_CONNECTIONS = {
'default': {
'PATH': "/opt/mailman/web/xapian_index",
'ENGINE': 'xapian_backend.XapianEngine'
},
}
And /local/mailman/web/logs/mailmanweb.log is empty.
Best Regards,
Helio Loureiro
https://helio.loureiro.eng.br
https://github.com/helioloureiro
https://mastodon.social/@helioloureiro
On Sun, 17 Dec 2023 at 16:35, Mark Sapiro <mark(a)msapiro.net> wrote:
> On 12/16/23 10:12 AM, Helio Loureiro wrote:
> > Hi,
> >
> > Well... not that good. Now it is mailman3-web that doesn't work.
> >
> > mailman@new-machine ~ (v3.3.9)> source venv/bin/activate.fish
> > (venv) mailman@new-machine ~ (v3.3.9)> mailman-web
> >
> > Type 'mailman-web help <subcommand>' for help on a specific subcommand.
> >
> > Available subcommands:
> >
> > [django]
> > check
> > compilemessages
> > createcachetable
> > dbshell
> > diffsettings
> > dumpdata
> > flush
> > inspectdb
> > loaddata
> > makemessages
> > makemigrations
> > migrate
> > optimizemigration
> > runserver
> > sendtestemail
> > shell
> > showmigrations
> > sqlflush
> > sqlmigrate
> > sqlsequencereset
> > squashmigrations
> > startapp
> > startproject
> > test
> > testserver
>
> This response indicates that `mailman-web` is not getting settings.py.
> Have you configured /etc/mailman3/settings.py? See
> <
> https://docs.mailman3.org/en/latest/install/virtualenv.html#initial-configu…
> >.
>
> > (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
>
> You should run `mailman-web migrate` not `mailman-web check migrate`
> plus others. See
> <
> https://docs.mailman3.org/en/latest/install/virtualenv.html#run-database-mi…>
>
> et.seq. but first you need the appropriate settings so `mailman-web`
> returns something like
> ```
> $ mailman-web
>
> Type 'mailman-web help <subcommand>' for help on a specific subcommand.
>
> Available subcommands:
>
> [account]
> account_unsetmultipleprimaryemails
>
> [auth]
> changepassword
> createsuperuser
>
> [compressor]
> compress
> mtime_cache
>
> [contenttypes]
> remove_stale_contenttypes
>
> [django]
> check
> compilemessages
> createcachetable
> dbshell
> diffsettings
> dumpdata
> flush
> inspectdb
> loaddata
> makemessages
> makemigrations
> migrate
> optimizemigration
> sendtestemail
> shell
> showmigrations
> sqlflush
> sqlmigrate
> sqlsequencereset
> squashmigrations
> startapp
> startproject
> test
> testserver
>
> [django_extensions]
> admin_generator
> clean_pyc
> clear_cache
> compile_pyc
> create_command
> create_jobs
> create_template_tags
> delete_squashed_migrations
> describe_form
> drop_test_database
> dumpscript
> export_emails
> find_template
> generate_password
> generate_secret_key
> graph_models
> list_model_info
> list_signals
> mail_debug
> managestate
> merge_model_instances
> notes
> pipchecker
> print_settings
> print_user_for_session
> raise_test_exception
> reset_db
> reset_schema
> runjob
> runjobs
> runprofileserver
> runscript
> runserver_plus
> set_default_site
> set_fake_emails
> set_fake_passwords
> shell_plus
> show_template_tags
> show_urls
> sqlcreate
> sqldiff
> sqldsn
> sync_s3
> syncdata
> unreferenced_files
> update_permissions
> validate_templates
>
> [django_q]
> qcluster
> qinfo
> qmemory
> qmonitor
>
> [haystack]
> build_solr_schema
> clear_index
> haystack_info
> rebuild_index
> update_index
>
> [hyperkitty]
> attachments_to_file
> hyperkitty_import
> hyperkitty_warm_up_cache
> mailman_sync
> update_index_one_list
>
> [postorius]
> mmclient
> reset_passwords
>
> [rest_framework]
> generateschema
>
> [sessions]
> clearsessions
>
> [staticfiles]
> collectstatic
> findstatic
> runserver
> ```
>
>
> --
> 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 helio(a)loureiro.eng.br
>
1 year, 7 months

Re: Database permission problem?
by Bill Oliver
On Tue, 2024-10-15 at 17:13 -0700, Mark Sapiro wrote:
> On 10/15/24 15:24, Bill Oliver wrote:
> >
> > Yeah, I saw that, too. The double db files are created by
> > postmap. I
> > haven't worried about it too much yet, since the permissions are
> > the
> > same. I don't know why postmap does this, but it's next on my
> > list of
> > things to fix.
>
>
> You should not be running postmap manually and never on a *.db file
> in
> any case. Mailman should be creating postfix_domains, postfix_lmtp
> and
> postfix_vmap and calling postmap on those to create the .db files.
>
> > In my main.cf postfix_lmtp is mentioned four times:
> >
> > virtual_mailbox_maps =
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
> >
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_map
> > s.cf
> > #added 20241009 for mailman
> > hash:/opt/mailman/mm/var/data/postfix_lmtp ${dovecot}
> >
> > virtual_alias_maps =
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
> >
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
> >
> > proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_ma
> > ps.c
> > f
> > #added 20241009 for mailman
> > hash:/opt/mailman/mm/var/data/postfix_vmap
> >
> > #Mailman transport stuff
> > transport_maps =
> > hash:/opt/mailman/mm/var/data/postfix_lmtp
> > local_recipient_maps =
> > hash:/opt/mailman/mm/var/data/postfix_lmtp ${dovecot}
>
>
> Are you adding ${dovecot} to the local_recipient_maps and
> virtual_mailbox_maps mailman entries or was that there before?
Thanks. The reason I created them by hand is that they are not being
created automatically it seemed. If I remove them and restart things, I
get the following errors in /var/log/mail.err:
2024-10-15T12:43:31.060478-04:00 mail postfix/smtpd[961837]: error:
open database /opt/mailman/mm/var/data/postfix_domains.db: No such file
or directory
2024-10-15T12:43:31.060874-04:00 mail postfix/smtpd[961837]: error:
open database /opt/mailman/mm/var/data/postfix_lmtp.db: No such file or
directory
2024-10-15T12:43:31.069450-04:00 mail postfix/smtpd[961837]: error:
open database /opt/mailman/mm/var/data/postfix_vmap.db: No such file or
directory
However.... I just looked at the /opt/mailman/mm/var/data directory and
the (single) db files are now there, and that error occurs only once.
So, I probably over-reacted to it.
Unfortunately, I'm back to the permission declined error:
2024-10-15T22:31:31.973125-04:00 mail postfix/virtual[3497]: error:
open database /opt/mailman/mm/var/data/postfix_lmtp.db: Permission
denied
As far as the addition of ${dovecot} goes, I did it myself because of
the instructions at:
https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/mta.h…
Dovecot is having a hard time authenticating mailinglist users. I
figured that problem arose because it can't use any of the mailman .db
files, but I don't know. In any case, a dovecot error message that
happens when a user (who has an account on the local machine) sends
mail to the mailing list includes:
2024-10-15T21:50:45.231465-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): lookup service=dovecot
2024-10-15T21:50:45.234036-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): #1/1 style=1 msg=Password:
2024-10-15T21:50:46.716360-04:00 mail dovecot: auth-worker(5669): conn
unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): pam_authenticate() failed:
Authentication failure (Password mismatch?) (given password: XXXXXXX)
2024-10-15T21:50:46.716497-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
pam(oliver(a)billoblog.com,129.222.252.225): Finished passdb lookup
2024-10-15T21:50:46.716562-04:00 mail dovecot: auth-worker(5669):
Debug: conn unix:auth-worker (pid=3690,uid=111): auth-worker<1>:
Finished: password_mismatch
It should be noted that mail works fine for that user, and this error
arises *only* when mail is sent to the mailinglist address. Dovecot
does not complain if I send mail elsewhere. Mail is received and
delivered to and from this address without a problem.
The other thing I did was add an alias domain when I set up the domain
in postorius, again because it seemed from reading the instructions
that this was advisable on a server with multiple virtual domains.
Thanks.
9 months, 2 weeks

Re: Disable Sign-up per domain
by Mark
On 2025-08-01 01:37, Mark Sapiro wrote:
>> raise self.model.DoesNotExist(
>> django.contrib.sites.models.Site.DoesNotExist: Site matching query
>> does not exist.
> That error will occur when settings.py contains
>
> SITE_ID = 0
>
> and the host in the http request is not one of the hosts in the
> django_site table in the database or in Sites in the Django admin web
> UI.
> Is that possibly the case here?
The SITE_ID and database table check okay. The SITE_ID is supposed to be
"0"? No?
SITE_ID
Test server - settings.py: SITE_ID = 0
Prod server - settings.py: SITE_ID = 0
HTTP_HOST
Test server DB - mailmanweb.django_site table: domain and name fields OK
Prod server DB - mailmanweb.django_site table: domain and name fields
OK
And the hosts are displayed in Sites in the admin UI.
I also checked the ALLOWED_HOSTS in the Test and Prod servers. Both
have:
...
"localhost",
"127.0.0.1",
"<IP4 ADDRESS OF HOST>",
"<MY.DOMAIN.COM>"
"<OTHER.DOMAINNAME.COM>",
...
> Is there a complete traceback preceding the log snippet you report. If
> so, what is it?
The traceback does suggest that the SITE does not exist...
======================= TRACEBACK =====================
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/contrib/sites/models.py",
line 39, in _get_site_by_request
SITE_CACHE[host] = self.get(domain__iexact=host)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/manager.py",
line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 637, in get
raise self.model.DoesNotExist(
django.contrib.sites.models.Site.DoesNotExist: Site matching query does
not exist.
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/core/handlers/exception.py",
line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/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.11/site-packages/postorius/views/list.py",
line 1158, in list_index
return render(
^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/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.11/site-packages/django/template/loader.py",
line 62, in render_to_string
return template.render(context, request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/template/backends/django.py",
line 61, in render
return self.template.render(context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/template/base.py",
line 173, in render
with context.bind_template(self):
File "/usr/lib/python3.11/contextlib.py", line 137, in __enter__
return next(self.gen)
^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/template/context.py",
line 254, in bind_template
updates.update(processor(self.request))
^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/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.11/site-packages/django/contrib/sites/shortcuts.py",
line 16, in get_current_site
return Site.objects.get_current(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/contrib/sites/models.py",
line 61, in get_current
return self._get_site_by_request(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/contrib/sites/models.py",
line 45, in _get_site_by_request
SITE_CACHE[domain] = self.get(domain__iexact=domain)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/manager.py",
line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/opt/mailman/venv/lib/python3.11/site-packages/django/db/models/query.py",
line 637, in get
raise self.model.DoesNotExist(
django.contrib.sites.models.Site.DoesNotExist: Site matching query does
not exist.
ERROR 2025-08-01 05:21:46,176 2030595 django.request Internal Server
Error: /owa/auth/logon.aspx
ERROR 2025-08-01 05:21:46,176 2030595 django.request Internal Server
Error: /owa/auth/logon.aspx
============= END TRACEBACK =================
>> ... -- "whatever is proxying to Django setting the appropriate
>> HTTP_HOST header." -- which I don't understand.
> This is in the configuration of the web server. It should be
> configured to pass the host of the incoming request to the proxy
> target in the HTTP_HOST header. In nginx this is `proxy_set_header
> Host $host;`. In apache it is `ProxyPreserveHost On`, but again the
> change to user_adapter shouldn't affect this.
>
That all looks good for both the Prod and Test servers.
...
location /static/ {
alias /opt/mailman/web/static/;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
...
3 days, 5 hours

Re: config incoming email in my domain cpanel
by Rafael Mora
El jue., 3 ago. 2017 a las 15:49, tlhackque via Mailman-users (<
mailman-users(a)mailman3.org>) escribió:
> I think you're confused.
>
> You already have mail.labbrands.com set up as the MX record for
> labbrands.com. And it has an A record with the same address as your
> webserver.
>
I'm working with the hostgator mailserver, we are not running a local
mailserver.
As suggested I added an A record like this:
[image: image.png]
Is it correct? is it redirecting to my Ip so I can redirect it to my
postfix/mm3 server?
>
> So if you're getting e-mail on that domain, there's another e-mail
> server running on that IP address. You can't have 2 servers on port
> 25. In that case, as has been noted before, you'll need to setup a
> relay in that server, not a firewall redirect. Depending on your MTA,
> you would need to relay to your internal server. And make sure your
> firewall setup allows your MTA to do this.
>
> We can see it's EXIM:
>
> telnet mail.labbrands.com 25
> Trying 192.185.51.89...
> Connected to mail.labbrands.com (192.185.51.89).
> Escape character is '^]'.
> help
> 220-gator4137.hostgator.com ESMTP Exim 4.87 #1 Thu, 03 Aug 2017 15:47:48
> -0500
> 220-We do not authorize the use of this system to transport unsolicited,
> 220 and/or bulk e-mail.
> 214-Commands supported:
> 214 AUTH STARTTLS HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP
> quit
> 221 gator4137.hostgator.com closing connection
> Connection closed by foreign host.
>
> Or, consolidate all your e-mail to one server - which is a lot easier to
> manage unless you have a really big operation. Postfix is probably the
> right choice, but requires more setup.
>
> Although Mailman3 configuration is not well documented (as you've
> discovered), you may want to get help from someone with more general
> network and mail experience. You're now into territory that is, as
> Simon indicated, not Mailman-specific.
>
> On 03-Aug-17 16:28, Rafael Mora wrote:
> > El jue., 3 ago. 2017 a las 15:26, Mark Sapiro (<mark(a)msapiro.net>)
> escribió:
> >
> >> On 08/03/2017 01:22 PM, Rafael Mora wrote:
> >>> El jue., 3 ago. 2017 a las 15:18, Mark Sapiro (<mark(a)msapiro.net>)
> >> escribió:
> >>>> You need to forward port 25 for SMTP mail delivery and if you want the
> >>>> web UI (Postorius and HyperKitty) accessible from the outside, port 80
> >>>> for http and/or port 443 for https
> >>>> <
> >>>>
> >>
> https://www.iana.org/assignments/service-names-port-numbers/service-names-p…
> >>>>> .
> >>> I mean for incoming mail redirected from my hostgator hosting, because
> >> when
> >>> I suscribe an email address MM3 sends a confirmation email, so I have
> to
> >>> reply to be suscribed to the list.
> >>
> >> As I said, for mail delivery you need to forward port 25 to the Mailman
> >> server.
> >>
> > Ok so I'll redirect in my zentyal firewall the port 25 to my local
> centos7
> > with postfix and MM3 with IP 192.168.1.42. Thanks Mark.
> >
> >
> >>
> >> --
> >> Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
> >> San Francisco Bay Area, California better use your sense - B. Dylan
> >> _______________________________________________
> >> Mailman-users mailing list
> >> mailman-users(a)mailman3.org
> >> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >>
>
> --
> This communication may not represent my employer's views,
> if any, on the matters discussed.
>
> _______________________________________________
> Mailman-users mailing list
> mailman-users(a)mailman3.org
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
>
--
Atentamente / Best Regards
Ing. Rafael Mora
8 years

Re: Docker Mailman3 installation frustration
by Abhilash Raj
Hi,
On Wed, Jul 12, 2017, at 02:04 PM, ccsmith(a)cetsi.com wrote:
<snip>
> Running "sudo docker exec -it mailman-web cat
> ../mailman-web-data/logs/mailmanweb.log" shows me:
>
> ERROR 2017-07-12 20:34:25,073 25 django.request Internal Server Error: /accounts/login/
> Traceback (most recent call last):
> File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 39, in inner
> response = get_response(request)
> ... more stuff ...
> File "/usr/local/lib/python2.7/smtplib.py", line 747, in sendmail
> raise SMTPRecipientsRefused(senderrs)
> SMTPRecipientsRefused: {u'pacetechadmin(a)cetsi.com': (451, '4.3.0 <pacetechadmin(a)cetsi.com>: Temporary lookup failure')}
This is mostly because you didn't setup your Django instance to send
emails i.e. SMTP settings. When you try to login/sign up from the web
interface, it needs to verify your email account and fails with 500
error because SMTP being not configured.
> On the Docker host (ubuntuServer2), /var/log/mail.log shows:
> Jul 12 13:48:53 ubuntuServer2 postfix/smtpd[19931]: error: open /opt/mailman/core/var/data/postfix_domains: No such file or directory
> Jul 12 13:48:53 ubuntuServer2 postfix/smtpd[19931]: error: open /opt/mailman/core/var/data/postfix_lmtp: No such file or directory
> Jul 12 13:48:53 ubuntuServer2 postfix/smtpd[19931]: connect from unknown[172.19.199.3]
> Jul 12 13:48:53 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: regexp:/opt/mailman/core/var/data/postfix_domains is unavailable. open /opt/mailman/core/var/data/postfix_domains: No such file or directory
> Jul 12 13:48:53 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: relay_domains: regexp:/opt/mailman/core/var/data/postfix_domains: table lookup problem
> Jul 12 13:48:53 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: relay_domains lookup failure
> Jul 12 13:48:53 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: regexp:/opt/mailman/core/var/data/postfix_domains is unavailable. open /opt/mailman/core/var/data/postfix_domains: No such file or directory
> Jul 12 13:48:53 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: relay_domains: regexp:/opt/mailman/core/var/data/postfix_domains: table lookup problem
> Jul 12 13:48:53 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: relay_domains lookup failure
> Jul 12 13:48:53 ubuntuServer2 postfix/smtpd[19931]: NOQUEUE: reject: RCPT from unknown[172.19.199.3]: 451 4.3.0 <pacetechadmin(a)cetsi.com>: Temporary lookup failure; from=<postorius(a)localhost.local> to=<pacetechadmin(a)cetsi.com> proto=ESMTP helo=<mailman-web>
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19932]: error: open /opt/mailman/core/var/data/postfix_domains: No such file or directory
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19932]: error: open /opt/mailman/core/var/data/postfix_lmtp: No such file or directory
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19932]: connect from unknown[172.19.199.3]
> Jul 12 13:48:54 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: regexp:/opt/mailman/core/var/data/postfix_domains is unavailable. open /opt/mailman/core/var/data/postfix_domains: No such file or directory
> Jul 12 13:48:54 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: relay_domains: regexp:/opt/mailman/core/var/data/postfix_domains: table lookup problem
> Jul 12 13:48:54 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: relay_domains lookup failure
> Jul 12 13:48:54 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: regexp:/opt/mailman/core/var/data/postfix_lmtp is unavailable. open /opt/mailman/core/var/data/postfix_lmtp: No such file or directory
> Jul 12 13:48:54 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: regexp:/opt/mailman/core/var/data/postfix_lmtp lookup error for "root@localhost"
> Jul 12 13:48:54 ubuntuServer2 postfix/trivial-rewrite[19843]: warning: transport_maps lookup failure
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19932]: NOQUEUE: reject: RCPT from unknown[172.19.199.3]: 451 4.3.0 <root@localhost>: Temporary lookup failure; from=<root(a)localhost.local> to=<root@localhost> proto=ESMTP helo=<mailman-web>
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19932]: disconnect from unknown[172.19.199.3] ehlo=1 mail=1 rcpt=0/1 rset=1 quit=1 commands=4/5
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19931]: lost connection after RSET from unknown[172.19.199.3]
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19931]: disconnect from unknown[172.19.199.3] ehlo=1 mail=1 rcpt=0/1 rset=1 commands=3/4
>
> And /var/log/mail.err is filling up with:
> Jul 12 13:48:53 ubuntuServer2 postfix/smtpd[19931]: error: open /opt/mailman/core/var/data/postfix_domains: No such file or directory
> Jul 12 13:48:53 ubuntuServer2 postfix/smtpd[19931]: error: open /opt/mailman/core/var/data/postfix_lmtp: No such file or directory
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19932]: error: open /opt/mailman/core/var/data/postfix_domains: No such file or directory
> Jul 12 13:48:54 ubuntuServer2 postfix/smtpd[19932]: error: open /opt/mailman/core/var/data/postfix_lmtp: No such file or directory
This is, as mentioned in the Issue that Danil linked to, about postfix
complaining about non-existent transport maps.
It will probably make sense to create those files, even empty, when the
containers startup!
Hope that helps!
--
Abhilash Raj
maxking(a)asynchronous.in
8 years

Re: Mailman 3 Status Update Please?
by Barry Warsaw
On Jul 22, 2017, at 06:58, tlhackque via Mailman-users <mailman-users(a)mailman3.org> wrote:
>
> On 21-Jul-17 22:58, Barry Warsaw wrote:
>>
>> One big project that I’d love to see gain more traction is Lemme, our authenticating REST proxy. We just haven’t had much collective resources to spend working on it.
>>
>> https://gitlab.com/mailman/lemme
>
> The architectural problem with a separate proxy that provides separation
> of privilege is that the proxy has to be kept in sync with the core -
This can be true, as is the case for example in mailmanclient. I think that’s different than the lemme case though because mmclient is a language binding to a REST API, so it needs to know the details of the API in order to provide a high-fidelity binding. This could potentially be mitigated if we had a static representation of the API, and there have been discussions of that elsewhere, so let’s not dive too deeply into that discussion here.
Where I think lemme is different is that it would be a more pure HTTP command forwarding proxy with a bit of preprocessing. It wouldn’t need to know the details of the REST API and wouldn’t need to be explicitly kept in sync.
The general approach we hashed out a few Pycons ago is outlined here: https://gitlab.com/mailman/lemme/blob/master/OUTLINE.rst
> In addition, as the recent issues indicate, the REST API already has
> scaling problems - adding a proxy in the path will exacerbate those.
Yes, the proxy will not be very fast, but it’s also targeting a very different audience.
The current REST API, what I call the “administrative” API needs to be fast (and I’m confident we can make improvements to the existing implementation) because it’s there to serve Postorius, HyperKitty, and any other custom, tightly integrated front-ends. It provides full access to the API with no authorization because it trusts those front-ends implicitly, and those front-ends need the ability to perform any necessary action.
Lemme must fundamentally *not* trust its clients. Authentication is only the first part of its paranoia; it must also authorize the authenticated user and determine whether they have permissions to perform the requested action. It’s the authorization part that makes this a “big project” to me.
> Either way, the major work is (or should be) authorization tests in the
> core, with a touch of mapping an authenticated user to her(his)
> capabilities (for a list) in the database. Not a s"big" separate project.
I disagree about the bigness, but I can be convinced with code. :)
The core has no authorization or permission information built-in. It does have a user database, but I’ve always considered that to be tightly focused on the data needed to determine posting permissions, not access to the REST API. We also don’t have a model for how users map to API permissions. We’ve always recommended that the admin API be exposed only on trusted IPs (highly recommending localhost), but a proxy has to be exposed on the public internet for it to be useful. That, and because the admin API is default-open and the proxy must be default-closed, we want to segregate any possible vulnerabilities into an optional component. Not every site will want to allow their list operations to be scriptable.
To me, this all points to a separate proxy, developed as an official subproject. There we can experiment with permission models to find what works best and is the most understandable. We can allow others to experiment as well, and sites can opt into or out of running the proxy, or even the official proxy. Any vulnerabilities in the proxy can be fixed quickly, and rolled out on a different release schedule than Core.
Now, we’re careful, I think the bulk of lemme could be written with an eye toward some future integration with Core, although I would strongly recommend running it as a separate HTTP server than the admin API. That way, we can experiment with and develop lemme at its own pace, and once it stabilizes, we could consider bringing it in as a Core feature.
Cheers,
-Barry
8 years

Re: Hyperkitty
by Massimiliano Paragnani
SOLVED!
I edited /etc/mailman3/mailman3-web.py adding in MAILMAN_ARCHIVER_FROM =
the ip of the server and finally starts to work
Il Ven 27 Gen 2023, 18:52 Massimiliano Paragnani <max.paragnani(a)gmail.com>
ha scritto:
> I set up the mailman3 services and lists, and we can send mail to the
> list successfully. However in the Archive section I couldn't see
> anything.
> My configuration: ubuntu, milman core 3.2.2, postresql, postorius 1.2.4,
> hyperkitty 1.3.2
>
> This is my mailman conf result:
>
> [antispam] header_checks:
> [antispam] jump_chain: hold
> [archiver.mail_archive] class: mailman.archiving.mailarchive.MailArchive
> [archiver.mail_archive] clobber_date: maybe
> [archiver.mail_archive] clobber_skew: 1d
> [archiver.mail_archive] configuration: python:mailman.config.mail_archive
> [archiver.mail_archive] enable: no
> [archiver.mhonarc] class: mailman.archiving.mhonarc.MHonArc
> [archiver.mhonarc] clobber_date: maybe
> [archiver.mhonarc] clobber_skew: 1d
> [archiver.mhonarc] configuration: python:mailman.config.mhonarc
> [archiver.mhonarc] enable: no
> [archiver.prototype] class: mailman.archiving.prototype.Prototype
> [archiver.prototype] clobber_date: maybe
> [archiver.prototype] clobber_skew: 1d
> [archiver.prototype] configuration: changeme
> [archiver.prototype] enable: no
> [bounces] register_bounces_every: 15m
> [database] class: mailman.database.postgresql.PostgreSQLDatabase
> [database] debug: no
> [database] url: postgres://mailman3:--------------@localhost/mailman3
> [devmode] enabled: no
> [devmode] recipient:
> [devmode] testing: no
> [devmode] wait: 60s
> [digests] mime_digest_keep_headers:
> Date From To Cc Subject Message-ID Keywords
> In-Reply-To References Content-Type MIME-Version
> Content-Transfer-Encoding Precedence Reply-To
> Message List-Post
> [digests] plain_digest_keep_headers:
> Message Date From
> Subject To Cc
> Message-ID Keywords
> Content-Type
> [dmarc] cache_lifetime: 7d
> [dmarc] org_domain_data_url:
> https://publicsuffix.org/list/public_suffix_list.dat
> [dmarc] resolver_lifetime: 5s
> [dmarc] resolver_timeout: 3s
> [language.ar] charset: utf-8
> [language.ar] description: Arabic
> [language.ar] enabled: yes
> [language.ast] charset: iso-8859-1
> [language.ast] description: Asturian
> [language.ast] enabled: yes
> [language.ca] charset: utf-8
> [language.ca] description: Catalan
> [language.ca] enabled: yes
> [language.cs] charset: iso-8859-2
> [language.cs] description: Czech
> [language.cs] enabled: yes
> [language.da] charset: iso-8859-1
> [language.da] description: Danish
> [language.da] enabled: yes
> [language.de] charset: utf-8
> [language.de] description: German
> [language.de] enabled: yes
> [language.el] charset: iso-8859-7
> [language.el] description: Greek
> [language.el] enabled: yes
> [language.es] charset: iso-8859-1
> [language.es] description: Spanish
> [language.es] enabled: yes
> [language.et] charset: iso-8859-15
> [language.et] description: Estonian
> [language.et] enabled: yes
> [language.eu] charset: iso-8859-15
> [language.eu] description: Euskara
> [language.eu] enabled: yes
> [language.fi] charset: iso-8859-1
> [language.fi] description: Finnish
> [language.fi] enabled: yes
> [language.fr] charset: iso-8859-1
> [language.fr] description: French
> [language.fr] enabled: yes
> [language.gl] charset: utf-8
> [language.gl] description: Galician
> [language.gl] enabled: yes
> [language.he] charset: utf-8
> [language.he] description: Hebrew
> [language.he] enabled: yes
> [language.hr] charset: iso-8859-2
> [language.hr] description: Croatian
> [language.hr] enabled: yes
> [language.hu] charset: iso-8859-2
> [language.hu] description: Hungarian
> [language.hu] enabled: yes
> [language.ia] charset: iso-8859-15
> [language.ia] description: Interlingua
> [language.ia] enabled: yes
> [language.it] charset: iso-8859-1
> [language.it] description: Italian
> [language.it] enabled: yes
> [language.ja] charset: euc-jp
> [language.ja] description: Japanese
> [language.ja] enabled: yes
> [language.ko] charset: euc-kr
> [language.ko] description: Korean
> [language.ko] enabled: yes
> [language.lt] charset: iso-8859-13
> [language.lt] description: Lithuanian
> [language.lt] enabled: yes
> [language.nl] charset: iso-8859-1
> [language.nl] description: Dutch
> [language.nl] enabled: yes
> [language.no] charset: iso-8859-1
> [language.no] description: Norwegian
> [language.no] enabled: yes
> [language.pl] charset: iso-8859-2
> [language.pl] description: Polish
> [language.pl] enabled: yes
> [language.pt] charset: iso-8859-1
> [language.pt] description: Protuguese
> [language.pt] enabled: yes
> [language.pt_BR] charset: iso-8859-1
> [language.pt_BR] description: Protuguese (Brazil)
> [language.pt_BR] enabled: yes
> [language.ro] charset: iso-8859-2
> [language.ro] description: Romanian
> [language.ro] enabled: yes
> [language.ru] charset: koi8-r
> [language.ru] description: Russian
> [language.ru] enabled: yes
> [language.sk] charset: utf-8
> [language.sk] description: Slovak
> [language.sk] enabled: yes
> [language.sl] charset: iso-8859-2
> [language.sl] description: Slovenian
> [language.sl] enabled: yes
> [language.sr] charset: utf-8
> [language.sr] description: Serbian
> [language.sr] enabled: yes
> [language.sv] charset: iso-8859-1
> [language.sv] description: Swedish
> [language.sv] enabled: yes
> [language.tr] charset: iso-8859-9
> [language.tr] description: Turkish
> [language.tr] enabled: yes
> [language.uk] charset: utf-8
> [language.uk] description: Ukrainian
> [language.uk] enabled: yes
> [language.vi] charset: utf-8
> [language.vi] description: Vietnamese
> [language.vi] enabled: yes
> [language.zh_CN] charset: utf-8
> [language.zh_CN] description: Chinese
> [language.zh_CN] enabled: yes
> [language.zh_TW] charset: utf-8
> [language.zh_TW] description: Chinese (Taiwan)
> [language.zh_TW] enabled: yes
> [logging.archiver] datefmt: %b %d %H:%M:%S %Y
> [logging.archiver] format: %(asctime)s (%(process)d) %(message)s
> [logging.archiver] level: info
> [logging.archiver] path: mailman.log
> [logging.archiver] propagate: no
> [logging.bounce] datefmt: %b %d %H:%M:%S %Y
> [logging.bounce] format: %(asctime)s (%(process)d) %(message)s
> [logging.bounce] level: info
> [logging.bounce] path: bounce.log
> [logging.bounce] propagate: no
> [logging.config] datefmt: %b %d %H:%M:%S %Y
> [logging.config] format: %(asctime)s (%(process)d) %(message)s
> [logging.config] level: info
> [logging.config] path: mailman.log
> [logging.config] propagate: no
> [logging.database] datefmt: %b %d %H:%M:%S %Y
> [logging.database] format: %(asctime)s (%(process)d) %(message)s
> [logging.database] level: warn
> [logging.database] path: mailman.log
> [logging.database] propagate: no
> [logging.debug] datefmt: %b %d %H:%M:%S %Y
> [logging.debug] format: %(asctime)s (%(process)d) %(message)s
> [logging.debug] level: info
> [logging.debug] path: debug.log
> [logging.debug] propagate: no
> [logging.error] datefmt: %b %d %H:%M:%S %Y
> [logging.error] format: %(asctime)s (%(process)d) %(message)s
> [logging.error] level: info
> [logging.error] path: mailman.log
> [logging.error] propagate: no
> [logging.fromusenet] datefmt: %b %d %H:%M:%S %Y
> [logging.fromusenet] format: %(asctime)s (%(process)d) %(message)s
> [logging.fromusenet] level: info
> [logging.fromusenet] path: mailman.log
> [logging.fromusenet] propagate: no
> [logging.http] datefmt: %b %d %H:%M:%S %Y
> [logging.http] format: %(asctime)s (%(process)d) %(message)s
> [logging.http] level: info
> [logging.http] path: mailman.log
> [logging.http] propagate: no
> [logging.locks] datefmt: %b %d %H:%M:%S %Y
> [logging.locks] format: %(asctime)s (%(process)d) %(message)s
> [logging.locks] level: info
> [logging.locks] path: mailman.log
> [logging.locks] propagate: no
> [logging.mischief] datefmt: %b %d %H:%M:%S %Y
> [logging.mischief] format: %(asctime)s (%(process)d) %(message)s
> [logging.mischief] level: info
> [logging.mischief] path: mailman.log
> [logging.mischief] propagate: no
> [logging.plugins] datefmt: %b %d %H:%M:%S %Y
> [logging.plugins] format: %(asctime)s (%(process)d) %(message)s
> [logging.plugins] level: info
> [logging.plugins] path: plugins.log
> [logging.plugins] propagate: no
> [logging.root] datefmt: %b %d %H:%M:%S %Y
> [logging.root] format: %(asctime)s (%(process)d) %(message)s
> [logging.root] level: info
> [logging.root] path: mailman.log
> [logging.root] propagate: no
> [logging.runner] datefmt: %b %d %H:%M:%S %Y
> [logging.runner] format: %(asctime)s (%(process)d) %(message)s
> [logging.runner] level: info
> [logging.runner] path: mailman.log
> [logging.runner] propagate: no
> [logging.smtp] datefmt: %b %d %H:%M:%S %Y
> [logging.smtp] every: $msgid smtp to $listname for $recip recips,
> completed in $time seconds
> [logging.smtp] failure: $msgid delivery to $recip failed with code
> $smtpcode, $smtpmsg
> [logging.smtp] format: %(asctime)s (%(process)d) %(message)s
> [logging.smtp] level: info
> [logging.smtp] path: smtp.log
> [logging.smtp] propagate: no
> [logging.smtp] refused: $msgid post to $listname from $sender, $size
> bytes, $refused failures
> [logging.smtp] success: $msgid post to $listname from $sender, $size bytes
> [logging.subscribe] datefmt: %b %d %H:%M:%S %Y
> [logging.subscribe] format: %(asctime)s (%(process)d) %(message)s
> [logging.subscribe] level: info
> [logging.subscribe] path: mailman.log
> [logging.subscribe] propagate: no
> [logging.vette] datefmt: %b %d %H:%M:%S %Y
> [logging.vette] format: %(asctime)s (%(process)d) %(message)s
> [logging.vette] level: info
> [logging.vette] path: mailman.log
> [logging.vette] propagate: no
> [mailman] cache_life: 7d
> [mailman] default_language: en
> [mailman] email_commands_max_lines: 10
> [mailman] filtered_messages_are_preservable: no
> [mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
> [mailman] layout: debian
> [mailman] listname_chars: [-_.0-9a-z]
> [mailman] noreply_address: noreply
> [mailman] pending_request_life: 3d
> [mailman] post_hook:
> [mailman] pre_hook:
> [mailman] sender_headers: from from_ reply-to sender
> [mailman] site_owner: max.paragnani(a)gmail.com
> [mta] configuration: python:mailman.config.postfix
> [mta] delivery_retry_period: 5d
> [mta] incoming: mailman.mta.postfix.LMTP
> [mta] lmtp_host: 127.0.0.1
> [mta] lmtp_port: 8024
> [mta] max_autoresponses_per_day: 10
> [mta] max_delivery_threads: 0
> [mta] max_recipients: 500
> [mta] max_sessions_per_connection: 0
> [mta] outgoing: mailman.mta.deliver.deliver
> [mta] remove_dkim_headers: no
> [mta] smtp_host: localhost
> [mta] smtp_pass:
> [mta] smtp_port: 25
> [mta] smtp_user:
> [mta] verp_confirm_format: $address+$cookie
> [mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
> [mta] verp_confirmations: no
> [mta] verp_delimiter: +
> [mta] verp_delivery_interval: 0
> [mta] verp_format: ${bounces}+${local}=${domain}
> [mta] verp_personalized_deliveries: no
> [mta] verp_probe_format: $bounces+$token@$domain
> [mta] verp_probe_regexp: ^(?P<bounces>[^+]+?)\+(?P<token>[^@]+)@.*$
> [mta] verp_probes: no
> [mta] verp_regexp:
> ^(?P<bounces>[^+]+?)\+(?P<local>[^=]+)=(?P<domain>[^@]+)@.*$
> [nntp] host:
> [nntp] password:
> [nntp] port:
> [nntp] remove_headers:
> nntp-posting-host nntp-posting-date x-trace
> x-complaints-to xref date-received posted
> posting-version relay-version received
> [nntp] rewrite_duplicate_headers:
> To X-Original-To
> CC X-Original-CC
> Content-Transfer-Encoding X-Original-Content-Transfer-Encoding
> MIME-Version X-MIME-Version
> [nntp] user:
> [passwords] configuration: python:mailman.config.passlib
> [passwords] password_length: 8
> [plugin.master] class:
> [plugin.master] component_package:
> [plugin.master] configuration:
> [plugin.master] enabled: no
> [shell] banner: Welcome to the GNU Mailman shell
> [shell] history_file:
> [shell] prompt: >>>
> [shell] use_ipython: no
> [styles] default: legacy-default
> [webservice] admin_pass: ---------------------------------
> [webservice] admin_user: restadmin
> [webservice] api_version: 3.1
> [webservice] hostname: localhost
> [webservice] port: 8001
> [webservice] show_tracebacks: yes
> [webservice] use_https: no
> _______________________________________________
> 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 max.paragnani(a)gmail.com
>
2 years, 6 months