
Template path
by Seth Seeger
Hello everyone,
I’m running Mailman from Docker containers, without much customization. (Postorius 1.3.3, Core 3.3.1, API 3.1, Python 3.8.5). I’ve created a list:user:notice:welcome template, and when I try to confirm a subscription, I get an error.
I followed previous emails on this list which told me to set POSTORIUS_TEMPLATE_BASE_URL in /opt/mailman/web/settings_local.py, but that doesn’t seem to make any difference. (I set it to a different value and the error message didn’t change. I also tried setting it in /opt/mailman/core/settings_local.py to no effect. After each change, I restarted mailman-web and mailman-core containers.)
From within mailman-web and mailman-core containers, I can reach “mailman-web:8000”.
In the webpage, I see: Mailman REST API not available. Please start Mailman core.
In /opt/mailman/core/var/logs/mailman.log, I get:
[17/Sep/2020:16:23:29 +0000] "GET /3.1/lists/xxx.example.com HTTP/1.1" 200 416 "-" "GNU Mailman REST client v3.3.1"
Sep 17 16:23:35 2020 (48) deque:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 426, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 421, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.8/http/client.py", line 1347, in getresponse
response.begin()
File "/usr/lib/python3.8/http/client.py", line 307, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.8/http/client.py", line 268, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.8/socket.py", line 669, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 724, in urlopen
retries = retries.increment(
File "/usr/lib/python3.8/site-packages/urllib3/util/retry.py", line 403, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/lib/python3.8/site-packages/urllib3/packages/six.py", line 735, in reraise
raise value
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 670, in urlopen
httplib_response = self._make_request(
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 428, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 335, in _raise_timeout
raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/mailman/app/workflow.py", line 69, in __next__
return step()
File "/usr/lib/python3.8/site-packages/mailman/app/subscriptions.py", line 332, in _step_do_subscription
self.member = self.mlist.subscribe(
File "/usr/lib/python3.8/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.8/site-packages/mailman/model/mailinglist.py", line 505, in subscribe
notify(SubscriptionEvent(
File "/usr/lib/python3.8/site-packages/zope/event/__init__.py", line 32, in notify
subscriber(event)
File "/usr/lib/python3.8/site-packages/mailman/app/membership.py", line 176, in handle_SubscriptionEvent
send_welcome_message(mlist, member, member.preferred_language)
File "/usr/lib/python3.8/site-packages/mailman/app/notifications.py", line 51, in send_welcome_message
welcome_message = wrap(getUtility(ITemplateLoader).get(
File "/usr/lib/python3.8/site-packages/mailman/model/template.py", line 188, in get
contents = getUtility(ITemplateManager).get(
File "/usr/lib/python3.8/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.8/site-packages/mailman/model/template.py", line 110, in get
contents = protocols.get(actual_uri, **auth)
File "/usr/lib/python3.8/site-packages/mailman/utilities/protocols.py", line 38, in get
response = requests.get(url, timeout=REQUEST_TIMEOUT, **kws)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/adapters.py", line 529, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
[2020-09-17 16:23:35 +0000] [48] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 426, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 421, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.8/http/client.py", line 1347, in getresponse
response.begin()
File "/usr/lib/python3.8/http/client.py", line 307, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.8/http/client.py", line 268, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.8/socket.py", line 669, in readinto
return self._sock.recv_into(b)
socket.timeout: timed out
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/requests/adapters.py", line 439, in send
resp = conn.urlopen(
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 724, in urlopen
retries = retries.increment(
File "/usr/lib/python3.8/site-packages/urllib3/util/retry.py", line 403, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/lib/python3.8/site-packages/urllib3/packages/six.py", line 735, in reraise
raise value
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 670, in urlopen
httplib_response = self._make_request(
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 428, in _make_request
self._raise_timeout(err=e, url=url, timeout_value=read_timeout)
File "/usr/lib/python3.8/site-packages/urllib3/connectionpool.py", line 335, in _raise_timeout
raise ReadTimeoutError(
urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 135, in handle
self.handle_request(listener, req, client, addr)
File "/usr/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 191, in handle_request
six.reraise(*sys.exc_info())
File "/usr/lib/python3.8/site-packages/gunicorn/six.py", line 625, in reraise
raise value
File "/usr/lib/python3.8/site-packages/gunicorn/workers/sync.py", line 176, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/usr/lib/python3.8/site-packages/mailman/database/transaction.py", line 50, in wrapper
rtn = function(*args, **kws)
File "/usr/lib/python3.8/site-packages/mailman/rest/wsgiapp.py", line 193, in __call__
return super().__call__(environ, start_response)
File "/usr/lib/python3.8/site-packages/falcon/api.py", line 269, in __call__
responder(req, resp, **params)
File "/usr/lib/python3.8/site-packages/mailman/rest/sub_moderation.py", line 88, in on_post
self._registrar.confirm(self._token)
File "/usr/lib/python3.8/site-packages/mailman/app/subscriptions.py", line 559, in confirm
list(workflow)
File "/usr/lib/python3.8/site-packages/mailman/app/workflow.py", line 69, in __next__
return step()
File "/usr/lib/python3.8/site-packages/mailman/app/subscriptions.py", line 332, in _step_do_subscription
self.member = self.mlist.subscribe(
File "/usr/lib/python3.8/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.8/site-packages/mailman/model/mailinglist.py", line 505, in subscribe
notify(SubscriptionEvent(
File "/usr/lib/python3.8/site-packages/zope/event/__init__.py", line 32, in notify
subscriber(event)
File "/usr/lib/python3.8/site-packages/mailman/app/membership.py", line 176, in handle_SubscriptionEvent
send_welcome_message(mlist, member, member.preferred_language)
File "/usr/lib/python3.8/site-packages/mailman/app/notifications.py", line 51, in send_welcome_message
welcome_message = wrap(getUtility(ITemplateLoader).get(
File "/usr/lib/python3.8/site-packages/mailman/model/template.py", line 188, in get
contents = getUtility(ITemplateManager).get(
File "/usr/lib/python3.8/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/lib/python3.8/site-packages/mailman/model/template.py", line 110, in get
contents = protocols.get(actual_uri, **auth)
File "/usr/lib/python3.8/site-packages/mailman/utilities/protocols.py", line 38, in get
response = requests.get(url, timeout=REQUEST_TIMEOUT, **kws)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 76, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 530, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.8/site-packages/requests/sessions.py", line 643, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.8/site-packages/requests/adapters.py", line 529, in send
raise ReadTimeout(e, request=request)
requests.exceptions.ReadTimeout: HTTPConnectionPool(host='mailman-web', port=8000): Read timed out. (read timeout=5)
What’s the next step to get templates working?
Thank you,
Seth
4 years, 11 months

Re: Member Issue Discovered
by Brian Carpenter
On 11/4/20 12:04 PM, Stephen J. Turnbull wrote:
> Brian Carpenter writes:
>
> > If you mean if they don't have a Django user account, they can't
> > unsubscribe?
>
> The Django user account is more or less a proxy for the underlying
> Mailman User object, which is what we're concerned with here because
> that's where the data you want deleted is stored.
>
> > I think that is true if they are wanting to unsubscribe via
> > the web interface. But sending an email to
> > listname-unsubscribe@listdomain allows them to unsubscribe without such
> > user authentication. Isn't that correct?
>
> They don't need a Django password or social auth, but they'll still
> have to do the OTK dance. I don't see a reason to distinguish the
> methods of authentication. They all reduce to the OTK dance to prove
> ownership of a mailbox, then optional *delegation* to a password in
> Django or social auth via Gmail etc.
Please speak in simple terms. I am pretty sure my questions were
straightforward but I have a sneaky suspicion you convoluted the issue
with these replies. I feel like my questions were not answered.
>
> I understand that your users don't understand this or care to. Thing
> is, some of *our* users care about the features that this architecture
> enables.
I think everyone should care that data should be removed when there is
an expectation that it is being removed.
>
> > My intent in our changes is to give the list owner and member
> > exactly what they expect: when they explicitly remove a
> > subscription and/or user profile, that they expect their data to be
> > totally removed.
>
> That's fine, and you're welcome to implement that in Affinity. In
> fact, as I understand it, you have already done so. *I'm* not saying
> *nobody* should implement that.
>
> I'm saying that *Mailman* shouldn't, because a lot of subscribers to
> Mailman lists won't like it. The whole point of Mailman 3 is to cater
> to users who want powerful control over their subscriptions. For
> Mailman (Postorius), prompting the user "If you delete this
> subscription, you will have no subscriptions linked to this account.
> Would you like to delete the account as well?" (as I have proposed
> three times now) is the right way to go. This can be implemented via
> email with a second OTK.
Since the account is a django account, I don't see why unsubscribing
from a list has anything to do with that account except removing the
user's prefer settings for a list that they are no longer subscribed to.
For me I made this issue about those list members who unsubscribe from a
single list AND does not have a django user account. This discussion has
expanded to all kinds of scenarios.
Those who are the power users are not in play here. I am sure they
intend to to keep their subscriptions active and their django account
open. I am talking about those who want to leave a list or wants to
remove their django user account permanently.
>
> > I can easily picture a scenario where an older list has a number of
> > list members move to on to other things in life
>
> And I can picture a scenario where they take a summer break and
> reactivate a decade later. I would be *pissed off* if my data got
> deleted in that scenario. (Yes, I've done that in the five year
> variant, if not the full decade.)
Why would you be mad? Am I missing something here? The data that is
being kept are a few fields of data (email address, username, password,
real-name, and some list preferences). Why would anyone expect to have
such inactive accounts kept perpetually? Regardless, I am not talking
about removing accounts/subscriptions without a user's permission. I am
talking about when a user either does it themselves or asks a List Owner
to do so.
>
> > and even abandon their email accounts totally.
>
> Which is a totally different scenario. I deny your "imperative" in
> the former case; inactivity from the point of view of a list owner is
> (usually) not abandonment. I question it in the latter, because
> "abandon" is an inference drawn from lack of activity or bounces,
> either of which could be inadvertant (respectively the "summer break"
> scenario, and separation from an employer).
I worded that poorly. But remember if an email address that no longer
exists (because a list member never unsubscribed from a list and closed
their email provider account anyways) is removed due to bounces (as it
should), that user data still exists. I think that is not good and such
a scenario happens a lot.
>
> > In those cases it is imperative that those list addresses are
> > removed either via bounce processing or list owner intervention and
> > that no legacy data on such members remain.
>
> But how do you propose to identify "legacy data"? In Mailman 3,
> members are *people*, not addresses. Do you really want it to be the
> case that if Albert signs up with albert(a)example.com, and later gets
> fired by example.com, then all his subscriptions get bounce-cancelled,
> and his User profile gets irreversibly trashed? Or some large email
> provider hosting lots of posters decides to suddenly implement some
> spam protection that causes a ton of bounces (as DMARC p=reject did in
> 2014) and hundreds of users have their accounts trashed?
It worked for Mailman 2 right? What happened in those cases? They just
got resubscribed again. As you said, unsubscribing doesn't impact a
django account anyways. So I don't understand your point here. Again I
am talking about the scenario where a user is requesting to be removed
or does the removal themselves and expects their data to be removed.
> You just can't know without asking Albert what he wants done in his
> case and you can be quite sure you're doing the wrong thing in the
> DMARC-like case. In either case, resubscribing is a click per list if
> his data is retained (and Albert needs an OTK confirmation of another
> address). It's an annoying session of duplicating his configuration
> (including passwords and social auth links) if not, and probably some
> months of discovering that a configuration that built up over years
> wasn't accurately reproduced for some lists.
Apples and oranges here. For public lists and a user who does not have a
Affinity/Django account, it is just a click per list. For those who have
a django/Affinity account, well there account should still be there
since they never asked for it to be removed or did not remove it themselves.
Personally I think I am going to implement some sort of backup
generation tool for an Affinity account holder where they can download
their profile/list settings in a json or equivalent format before
account deletion. Then if they wish to create their account, they can
rebuild their profile from that backup.
>
> List owners, of course, can do what they want with their lists. If
> they want to add automation for their subscribers that simplify the
> lives of people who have simple needs, that's not something Mailman
> can, should, or will try to stop. That's *why* I support efforts like
> Affinity, Empathy, and Harmony.
>
> Steve
I personally intend to get into the "power-user" market. That is the #1
reason for creating my UIs. I have that flexibility.
--
Brian Carpenter
Harmonylists.com
Emwd.com
4 years, 9 months

Re: using SSH/TLS with external MTA
by Odhiambo Washington
On Sun, Jul 28, 2024 at 4:42 PM Roland Giesler via Mailman-users <
mailman-users(a)mailman3.org> wrote:
>
> On 2024/07/28 15:26, Roland Giesler via Mailman-users wrote:
> > On 2024/07/28 00:39, Mark Sapiro wrote:
> >> On 7/27/24 15:16, Roland Giesler via Mailman-users wrote:
> >>>
> >>> The server runs power-mailinabox, which uses Postfix indeed. All my
> >>> mail, and quite a few others' mail is sent from the using SMTP-Auth
> >>> on port 465. Actually, this message is sent via that server too.
> >>> So it's clear to me that MM3 is not authenticating for some reason.
> >>
> >> What do you see in Mailman's smtp.log and in the mail.log on the mail
> >> server?
> >
> > The smtp log is in syslog...
>
> I also see this in /var/log/mailman3/web/mailman-web.log
>
> *** Starting uWSGI 2.0.20-debian (64bit) on [Sun Jul 28 15:27:48 2024] ***
> compiled with version: 11.2.0 on 21 March 2022 11:00:44
> os: Linux-5.15.108-1-pve #1 SMP PVE 5.15.108-2 (2023-07-20T10:06Z)
> nodename: mailman
> machine: x86_64
> clock source: unix
> pcre jit disabled
> detected number of CPU cores: 1
> current working directory: /
> detected binary path: /usr/bin/uwsgi-core
> setgid() to 33
> setuid() to 33
> chdir() to /usr/share/mailman3-web
> your processes number limit is 513922
> your memory page size is 4096 bytes
> detected max file descriptor number: 1024
> lock engine: pthread robust mutexes
> thunder lock: disabled (you can enable it with --thunder-lock)
> uwsgi socket 0 bound to UNIX address /run/mailman3-web/uwsgi.sock fd 4
> Python version: 3.10.12 (main, Mar 22 2024, 16:50:05) [GCC 11.4.0]
> Python main interpreter initialized at 0x561ce813d1d0
> python threads support enabled
> your server socket listen backlog is limited to 100 connections
> your mercy for graceful operations on workers is 60 seconds
> mapped 166752 bytes (162 KB) for 2 cores
> *** Operational MODE: threaded ***
> /usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
> and timeout are misconfigured. Set retry larger than timeout,
> failure to do so will cause the tasks to be retriggered before
> completion.
> See
> https://django-q.readthedocs.io/en/latest/configure.html#retry for
> details.
> warn(
> WSGI app 0 (mountpoint='') ready in 5 seconds on interpreter
> 0x561ce813d1d0 pid: 113 (default app)
> *** uWSGI is running in multiple interpreter mode ***
> spawned uWSGI master process (pid: 113)
> spawned uWSGI worker 1 (pid: 339, cores: 2)
> [uwsgi-daemons] spawning "python3 manage.py qcluster" (uid: 33 gid: 33)
> /usr/lib/python3/dist-packages/django_q/conf.py:139: UserWarning: Retry
> and timeout are misconfigured. Set retry larger than timeout,
> failure to do so will cause the tasks to be retriggered before
> completion.
> See
> https://django-q.readthedocs.io/en/latest/configure.html#retry for
> details.
> warn(
> System check identified some issues:
>
> WARNINGS:
> django_mailman3.MailDomain: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> DjangoMailman3Config.default_auto_field attribute to point to a subclass
> of AutoField, e.g. 'django.db.models.BigAutoField'.
> django_mailman3.Profile: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> DjangoMailman3Config.default_auto_field attribute to point to a subclass
> of AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Attachment: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Email: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Favorite: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.LastView: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.MailingList: (models.W042) Auto-created primary key used when
> not defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Profile: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Tag: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Tagging: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Thread: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.ThreadCategory: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> hyperkitty.Vote: (models.W042) Auto-created primary key used when not
> defining a primary key type, by default 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> HyperKittyConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> postorius.EmailTemplate: (models.W042) Auto-created primary key used
> when not defining a primary key type, by default
> 'django.db.models.AutoField'.
> HINT: Configure the DEFAULT_AUTO_FIELD setting or the
> PostoriusConfig.default_auto_field attribute to point to a subclass of
> AutoField, e.g. 'django.db.models.BigAutoField'.
> 15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet starting.
> 15:27:55 [Q] INFO Process-1 guarding cluster low-vermont-harry-fillet
> 15:27:55 [Q] INFO Q Cluster low-vermont-harry-fillet running.
> 15:27:55 [Q] INFO Process-1:3 pushing tasks at 386
> 15:27:55 [Q] INFO Process-1:2 monitoring at 385
> 15:27:55 [Q] INFO Process-1:1 ready for work at 384
>
# Asynchronous tasks
# https://django-q.readthedocs.io/en/latest/configure.html
Q_CLUSTER = {
'name': 'mailman3-web',
'workers': 8,
'retry': 360,
'timeout': 300,
'save_limit': 100,
'orm': 'default',
}
# Maintain type of autogenerated keys going forward
#
https://docs.djangoproject.com/en/3.2/releases/3.2/#customizing-type-of-aut…
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
--
Best regards,
Odhiambo WASHINGTON,
Nairobi,KE
+254 7 3200 0004/+254 7 2274 3223
In an Internet failure case, the #1 suspect is a constant: DNS.
"Oh, the cruft.", egrep -v '^$|^.*#' ¯\_(ツ)_/¯ :-)
[How to ask smart questions:
http://www.catb.org/~esr/faqs/smart-questions.html]
1 year, 1 month

Re: Post installation issues (recipients refused) with Exim4 in a virtual host environment
by Kyriakos Terzopoulos
Please also find below the mailman conf command:
(venv) mailman@hestia:~/venv/bin$ ./mailman conf
[ARC] authserv_id:
[ARC] dkim: yes
[ARC] dmarc: yes
[ARC] domain:
[ARC] enabled: no
[ARC] privkey:
[ARC] selector:
[ARC] sig_headers: From, Sender, Reply-To, Subject, Date, Message-ID, To,
Cc, MIME-Version, Content-Type, Content-Transfer-Encoding, Content-ID,
Content-Description, Resent-Date, Resent-From, Resent-Sender, Resent-To,
Resent-Cc, Resent-Message-ID, In-Reply-To, References, List-Id, List-Help,
List-Unsubscribe, List-Subscribe, List-Post, List-Owner, List-Archive
[ARC] trusted_authserv_ids:
[antispam] header_checks:
[antispam] jump_chain: hold
[archiver.hyperkitty] class: mailman_hyperkitty.Archiver
[archiver.hyperkitty] clobber_date: maybe
[archiver.hyperkitty] clobber_skew: 1d
[archiver.hyperkitty] configuration: /etc/mailman3/mailman-hyperkitty.cfg
[archiver.hyperkitty] enable: yes
[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: yes
[bounces] register_bounces_every: 15m
[database] class: mailman.database.postgresql.PostgreSQLDatabase
[database] debug: no
[database] url: postgresql://mailman:XXXXXXXXXX@localhost/mailman
[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: utf-8
[language.ast] description: Asturian
[language.ast] enabled: yes
[language.bg] charset: utf-8
[language.bg] description: Bulgarian
[language.bg] enabled: yes
[language.ca] charset: utf-8
[language.ca] description: Catalan
[language.ca] enabled: yes
[language.cs] charset: utf-8
[language.cs] description: Czech
[language.cs] enabled: yes
[language.da] charset: utf-8
[language.da] description: Danish
[language.da] enabled: yes
[language.de] charset: utf-8
[language.de] description: German
[language.de] enabled: yes
[language.el] charset: utf-8
[language.el] description: Greek
[language.el] enabled: yes
[language.en] charset: us-ascii
[language.en] description: English (USA)
[language.en] enabled: yes
[language.es] charset: utf-8
[language.es] description: Spanish
[language.es] enabled: yes
[language.et] charset: utf-8
[language.et] description: Estonian
[language.et] enabled: yes
[language.eu] charset: utf-8
[language.eu] description: Euskara
[language.eu] enabled: yes
[language.fi] charset: utf-8
[language.fi] description: Finnish
[language.fi] enabled: yes
[language.fr] charset: utf-8
[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: utf-8
[language.hr] description: Croatian
[language.hr] enabled: yes
[language.hu] charset: utf-8
[language.hu] description: Hungarian
[language.hu] enabled: yes
[language.ia] charset: utf-8
[language.ia] description: Interlingua
[language.ia] enabled: yes
[language.it] charset: utf-8
[language.it] description: Italian
[language.it] enabled: yes
[language.ja] charset: utf-8
[language.ja] description: Japanese
[language.ja] enabled: yes
[language.ko] charset: utf-8
[language.ko] description: Korean
[language.ko] enabled: yes
[language.lt] charset: utf-8
[language.lt] description: Lithuanian
[language.lt] enabled: yes
[language.nl] charset: utf-8
[language.nl] description: Dutch
[language.nl] enabled: yes
[language.no] charset: utf-8
[language.no] description: Norwegian
[language.no] enabled: yes
[language.pl] charset: utf-8
[language.pl] description: Polish
[language.pl] enabled: yes
[language.pt] charset: utf-8
[language.pt] description: Portuguese
[language.pt] enabled: yes
[language.pt_BR] charset: utf-8
[language.pt_BR] description: Portuguese (Brazil)
[language.pt_BR] enabled: yes
[language.ro] charset: utf-8
[language.ro] description: Romanian
[language.ro] enabled: yes
[language.ru] charset: utf-8
[language.ru] description: Russian
[language.ru] enabled: yes
[language.sk] charset: utf-8
[language.sk] description: Slovak
[language.sk] enabled: yes
[language.sl] charset: utf-8
[language.sl] description: Slovenian
[language.sl] enabled: yes
[language.sr] charset: utf-8
[language.sr] description: Serbian
[language.sr] enabled: yes
[language.sv] charset: utf-8
[language.sv] description: Swedish
[language.sv] enabled: yes
[language.tr] charset: utf-8
[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: %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)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.task] datefmt: %b %d %H:%M:%S %Y
[logging.task] format: %(asctime)s (%(process)d) %(message)s
[logging.task] level: info
[logging.task] path: mailman.log
[logging.task] 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] anonymous_list_keep_headers: ^x-mailman- ^x-content-filtered-by:
^x-topics:
^x-ack: ^x-beenthere: ^x-list-administrivia: ^x-spam-
[mailman] cache_life: 7d
[mailman] check_max_size_on_filtered_message: no
[mailman] default_language: en
[mailman] email_commands_max_lines: 10
[mailman] filter_report: no
[mailman] filtered_messages_are_preservable: no
[mailman] hold_digest: no
[mailman] html_to_plain_text_command: /usr/bin/lynx -dump $filename
[mailman] layout: local
[mailman] listname_chars: [-_.0-9a-z]
[mailman] masthead_threshold: 4
[mailman] moderator_request_life: 180d
[mailman] noreply_address: noreply
[mailman] pending_request_life: 3d
[mailman] post_hook:
[mailman] pre_hook:
[mailman] run_tasks_every: 1h
[mailman] sender_headers: from from_ reply-to sender
[mailman] site_owner: kterzopoulos(a)XXXXXX.com
[mta] configuration: python:mailman.config.exim4
[mta] delivery_retry_period: 5d
[mta] incoming: mailman.mta.exim4.LMTP
[mta] lmtp_host: localhost
[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: mail.myproject.eu
[mta] smtp_pass:
[mta] smtp_port: 25
[mta] smtp_secure_mode: smtp
[mta] smtp_user:
[mta] smtp_verify_cert: yes
[mta] smtp_verify_hostname: yes
[mta] verp_confirm_format: $address+$cookie
[mta] verp_confirm_regexp: ^(.*<)?(?P<addr>[^+]+?)\+(?P<cookie>[^@]+)@.*$
[mta] verp_confirmations: yes
[mta] verp_delimiter: +
[mta] verp_delivery_interval: 1
[mta] verp_format: ${bounces}+${local}=${domain}
[mta] verp_personalized_deliveries: yes
[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] gatenews_every: 5m
[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
[paths.dev] archive_dir: $var_dir/archives
[paths.dev] bin_dir: $argv
[paths.dev] cache_dir: $var_dir/cache
[paths.dev] data_dir: $var_dir/data
[paths.dev] etc_dir: $var_dir/etc
[paths.dev] ext_dir: $var_dir/ext
[paths.dev] list_data_dir: $var_dir/lists
[paths.dev] lock_dir: $var_dir/locks
[paths.dev] lock_file: $lock_dir/master.lck
[paths.dev] log_dir: $var_dir/logs
[paths.dev] messages_dir: $var_dir/messages
[paths.dev] pid_file: $var_dir/master.pid
[paths.dev] queue_dir: $var_dir/queue
[paths.dev] template_dir: $var_dir/templates
[paths.dev] var_dir: $cfg_file/../..
[paths.fhs] archive_dir: $var_dir/archives
[paths.fhs] bin_dir: /sbin
[paths.fhs] cache_dir: $var_dir/cache
[paths.fhs] data_dir: $var_dir/data
[paths.fhs] etc_dir: /etc
[paths.fhs] ext_dir: /etc/mailman.d
[paths.fhs] list_data_dir: $var_dir/lists
[paths.fhs] lock_dir: /var/lock/mailman
[paths.fhs] lock_file: $lock_dir/master.lck
[paths.fhs] log_dir: /var/log/mailman
[paths.fhs] messages_dir: $var_dir/messages
[paths.fhs] pid_file: /var/run/mailman/master.pid
[paths.fhs] queue_dir: /var/spool/mailman
[paths.fhs] template_dir: $var_dir/templates
[paths.fhs] var_dir: /var/lib/mailman
[paths.here] archive_dir: $var_dir/archives
[paths.here] bin_dir: $argv
[paths.here] cache_dir: $var_dir/cache
[paths.here] data_dir: $var_dir/data
[paths.here] etc_dir: $var_dir/etc
[paths.here] ext_dir: $var_dir/ext
[paths.here] list_data_dir: $var_dir/lists
[paths.here] lock_dir: $var_dir/locks
[paths.here] lock_file: $lock_dir/master.lck
[paths.here] log_dir: $var_dir/logs
[paths.here] messages_dir: $var_dir/messages
[paths.here] pid_file: $var_dir/master.pid
[paths.here] queue_dir: $var_dir/queue
[paths.here] template_dir: $var_dir/templates
[paths.here] var_dir: $cwd/var
[paths.local] archive_dir: $var_dir/archives
[paths.local] bin_dir: $argv
[paths.local] cache_dir: $var_dir/cache
[paths.local] data_dir: $var_dir/data
[paths.local] etc_dir: $var_dir/etc
[paths.local] ext_dir: $var_dir/ext
[paths.local] list_data_dir: $var_dir/lists
[paths.local] lock_dir: $var_dir/locks
[paths.local] lock_file: $lock_dir/master.lck
[paths.local] log_dir: $var_dir/logs
[paths.local] messages_dir: $var_dir/messages
[paths.local] pid_file: $var_dir/master.pid
[paths.local] queue_dir: $var_dir/queue
[paths.local] template_dir: $var_dir/templates
[paths.local] var_dir: /opt/mailman/venv
[plugin.master] class:
[plugin.master] component_package:
[plugin.master] configuration:
[plugin.master] enabled: no
[runner.archive] class: mailman.runners.archive.ArchiveRunner
[runner.archive] instances: 1
[runner.archive] max_restarts: 10
[runner.archive] path: $QUEUE_DIR/$name
[runner.archive] sleep_time: 1s
[runner.archive] start: yes
[runner.bad] class: mailman.runners.fake.BadRunner
[runner.bad] instances: 1
[runner.bad] max_restarts: 10
[runner.bad] path: $QUEUE_DIR/$name
[runner.bad] sleep_time: 1s
[runner.bad] start: no
[runner.bounces] class: mailman.runners.bounce.BounceRunner
[runner.bounces] instances: 1
[runner.bounces] max_restarts: 10
[runner.bounces] path: $QUEUE_DIR/$name
[runner.bounces] sleep_time: 2m
[runner.bounces] start: yes
[runner.command] class: mailman.runners.command.CommandRunner
[runner.command] instances: 1
[runner.command] max_restarts: 10
[runner.command] path: $QUEUE_DIR/$name
[runner.command] sleep_time: 1s
[runner.command] start: yes
[runner.digest] class: mailman.runners.digest.DigestRunner
[runner.digest] instances: 1
[runner.digest] max_restarts: 10
[runner.digest] path: $QUEUE_DIR/$name
[runner.digest] sleep_time: 1s
[runner.digest] start: yes
[runner.in] class: mailman.runners.incoming.IncomingRunner
[runner.in] instances: 1
[runner.in] max_restarts: 10
[runner.in] path: $QUEUE_DIR/$name
[runner.in] sleep_time: 1s
[runner.in] start: yes
[runner.lmtp] class: mailman.runners.lmtp.LMTPRunner
[runner.lmtp] instances: 1
[runner.lmtp] max_restarts: 10
[runner.lmtp] path:
[runner.lmtp] sleep_time: 1s
[runner.lmtp] start: yes
[runner.nntp] class: mailman.runners.nntp.NNTPRunner
[runner.nntp] instances: 1
[runner.nntp] max_restarts: 10
[runner.nntp] path: $QUEUE_DIR/$name
[runner.nntp] sleep_time: 1s
[runner.nntp] start: yes
[runner.out] class: mailman.runners.outgoing.OutgoingRunner
[runner.out] instances: 1
[runner.out] max_restarts: 10
[runner.out] path: $QUEUE_DIR/$name
[runner.out] sleep_time: 1s
[runner.out] start: yes
[runner.pipeline] class: mailman.runners.pipeline.PipelineRunner
[runner.pipeline] instances: 1
[runner.pipeline] max_restarts: 10
[runner.pipeline] path: $QUEUE_DIR/$name
[runner.pipeline] sleep_time: 1s
[runner.pipeline] start: yes
[runner.rest] class: mailman.runners.rest.RESTRunner
[runner.rest] instances: 1
[runner.rest] max_restarts: 10
[runner.rest] path:
[runner.rest] sleep_time: 1s
[runner.rest] start: yes
[runner.retry] class: mailman.runners.retry.RetryRunner
[runner.retry] instances: 1
[runner.retry] max_restarts: 10
[runner.retry] path: $QUEUE_DIR/$name
[runner.retry] sleep_time: 15m
[runner.retry] start: yes
[runner.shunt] class: mailman.runners.fake.ShuntRunner
[runner.shunt] instances: 1
[runner.shunt] max_restarts: 10
[runner.shunt] path: $QUEUE_DIR/$name
[runner.shunt] sleep_time: 1s
[runner.shunt] start: no
[runner.task] class: mailman.runners.task.TaskRunner
[runner.task] instances: 1
[runner.task] max_restarts: 10
[runner.task] path:
[runner.task] sleep_time: 1m
[runner.task] start: yes
[runner.virgin] class: mailman.runners.virgin.VirginRunner
[runner.virgin] instances: 1
[runner.virgin] max_restarts: 10
[runner.virgin] path: $QUEUE_DIR/$name
[runner.virgin] sleep_time: 1s
[runner.virgin] start: yes
[shell] banner: Welcome to the GNU Mailman shell
Use commit() to commit changes.
Use abort() to discard changes since the last commit.
Exit with ctrl+D does an implicit commit() but exit() does not.
[shell] history_file: $var_dir/history.py
[shell] prompt: >>>
[shell] use_ipython: no
[styles] default: legacy-default
[webservice] admin_pass: restpass
[webservice] admin_user: restadmin
[webservice] api_version: 3.1
[webservice] configuration: python:mailman.config.gunicorn
[webservice] hostname: localhost
[webservice] port: 8001
[webservice] show_tracebacks: yes
[webservice] use_https: no
[webservice] workers: 2
*Kyriakos Terzopoulos
*Web developer / e-learning expert
*Tel:*+30 211 213 9858
*Mobile:* +30 694 526 4512
* E-mail: *kyriakos.terzopoulos(a)gmail.com
* Skype:* kyriakos.terzopoulos
Find me on Facebook <http://www.facebook.com/cirrus3d>
Follow me on Twitter <http://twitter.com/#%21/cirrus3d>
On Wed, 11 Oct 2023 at 12:37, Kyriakos Terzopoulos <
kyriakos.terzopoulos(a)gmail.com> wrote:
> Hi,
>
> I have the following in my mailman log
>
> [11/Oct/2023:12:31:39 +0300] "GET /3.1/lists/
> testlist(a)myproject.eu/held/count HTTP/1.1" 200 73 "-" "GNU Mailman REST
> client v3.3.5"
> [11/Oct/2023:12:31:43 +0300] "GET /3.1/lists/testlist.myproject.eu
> HTTP/1.1" 200 425 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:43 +0300] "GET /3.1/lists/testlist(a)myproject.eu/config
> HTTP/1.1" 200 3111 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:43 +0300] "GET /3.1/lists/
> testlist.myproject.eu/archivers HTTP/1.1" 200 100 "-" "GNU Mailman REST
> client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/testlist.myproject.eu
> HTTP/1.1" 200 425 "-" "GNU Mailman REST client v3.3.5"
> Oct 11 12:31:51 2023 (1534165) deque: do_confirm_verify
> Traceback (most recent call last):
> File
> "/opt/mailman/venv/lib/python3.10/site-packages/mailman/app/workflow.py",
> line 69, in __next__
> return step()
> File
> "/opt/mailman/venv/lib/python3.10/site-packages/mailman/app/subscriptions.py",
> line 382, in _step_send_confirmation
> raise StopIteration
> StopIteration
> [11/Oct/2023:12:31:51 +0300] "POST /3.1/members HTTP/1.1" 202 143 "-" "GNU
> Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/testlist.myproject.eu
> HTTP/1.1" 200 425 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/testlist(a)myproject.eu/config
> HTTP/1.1" 200 3111 "-" "GNU Mailman REST client v3.3.5"
> [11/Oct/2023:12:31:51 +0300] "GET /3.1/lists/
> testlist.myproject.eu/archivers HTTP/1.1" 200 100 "-" "GNU Mailman REST
> client v3.3.5"
>
> *Kyriakos Terzopoulos
> *Web developer / e-learning expert
>
> *Tel:*+30 211 213 9858
>
> *Mobile:* +30 694 526 4512
>
> * E-mail: *kyriakos.terzopoulos(a)gmail.com
> * Skype:* kyriakos.terzopoulos
> Find me on Facebook <http://www.facebook.com/cirrus3d>
> Follow me on Twitter <http://twitter.com/#%21/cirrus3d>
>
>
>
> On Wed, 11 Oct 2023 at 11:54, Odhiambo Washington <odhiambo(a)gmail.com>
> wrote:
>
>> On Wed, Oct 11, 2023 at 11:15 AM Kyriakos Terzopoulos <
>> kyriakos.terzopoulos(a)gmail.com> wrote:
>>
>> > Hi,
>> >
>> > I have set up (I believe successfully) and configured the following in a
>> > Virtualhost environment (with HestiaCP):
>> >
>> > - A record for lists.mydomain.com
>> > - Venv
>> > - Mailman core
>> > - Mailman web (run migrate, collectstatic, compress, compilemessages)
>> > Postorius
>> > - gunicorn, hyperkitty
>> > - Nginx
>> > - SMTP exim4 conf
>> >
>> > I can see Posrorius and I have logged in and created my first mailing
>> list:
>> >
>> > [image: Screenshot 2023-10-11 at 10.57.31 AM.png]
>> >
>> > My issue is that even though I have subscribed to my list as you can see
>> > above, I am not receiving the confirmation email. I get a "recipients
>> > refused" error. The smtp log for mailman is as follows:
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> recipients
>> refused:
>> > {'
>> > kyriakos.terzopoulos(a)gmail.com': (550, b'Verification failed for
>> > <testlist-bounces+kyriakos.terzopoulos=gmail.com(a)myproject.eu
>> > >\nUnrouteable
>> > address\nSender verify failed')}
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> smtp to
>> > testlist(a)myproject.eu for 1 recips, completed in 0.26796579360961914
>> > seconds
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> post to
>> > testlist(a)myproject.eu from
>> > testlist-confirm+c9b20c5290bec43147a7e96a6b8cd825daf913d7(a)myproject.eu,
>> > 1667 bytes, 1 failures
>> >
>> > Oct 11 10:41:20 2023 (1533666)
>> > <169701007904.1534165.14569329382406660776@localhost> delivery to
>> > kyriakos.terzopoulos(a)gmail.com failed with code 550, b'Verification
>> failed
>> > for <testlist-bounces+kyriakos.terzopoulos=gmail.com(a)myproject.eu
>> > >\nUnrouteable
>> > address\nSender verify failed'
>> >
>> > I have used the configuration for exim that is here
>> > <
>> >
>> https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/docs/mta.h…
>> > >
>> > and
>> > I have also tested with the alternative approach that is documented in
>> >
>>
>> What do you have in the Exim's mainlog?
>>
>>
>> --
>> 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]
>> _______________________________________________
>> 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 kyriakos.terzopoulos(a)gmail.com
>>
>
1 year, 10 months

issue with Hyperkitty
by Ali Alnubani
Hi,
I'm migrating from mailman 2.1.15, I did the following:
* Installed packages
* Created database
* ./manage.py migrate
* mailman create dev(a)example.com<mailto:dev@example.com>
* ./manage.py hyperkitty_import -l dev(a)example.com /usr/local/mailman2/archives/private/dev.mbox/dev.mbox (the archive includes 69 emails).
* ./manage.py update_index_one_list dev(a)example.com
I'm seeing the following trace when I go to http://example.com/hyperkitty/list/dev@example.com/2018/5/:
```
ERROR 2018-08-07 13:54:23,897 19997 django.request Internal Server Error: /hyperkitty/list/dev(a)example.com/2018/5/
Traceback (most recent call last):
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/core/handlers/base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/core/handlers/base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "venv_path/lib/python3.5/site-packages/HyperKitty-1.2.0-py3.5.egg/hyperkitty/lib/view_helpers.py", line 134, in inner
return func(request, *args, **kwargs)
File "venv_path/lib/python3.5/site-packages/HyperKitty-1.2.0-py3.5.egg/hyperkitty/views/mlist.py", line 94, in archives
return _thread_list(request, mlist, threads, extra_context=extra_context)
File "venv_path/lib/python3.5/site-packages/HyperKitty-1.2.0-py3.5.egg/hyperkitty/views/mlist.py", line 123, in _thread_list
return render(request, template_name, context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/shortcuts.py", line 36, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 171, in render
return self._render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/library.py", line 234, in render
return t.render(new_context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 173, in render
return self._render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/defaulttags.py", line 209, in render
nodelist.append(node.render_annotated(context))
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/defaulttags.py", line 309, in render
return nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/library.py", line 192, in render
output = self.func(*resolved_args, **resolved_kwargs)
File "venv_path/lib/python3.5/site-packages/django_mailman3-1.2.0-py3.5.egg/django_mailman3/templatetags/pagination.py", line 36, in add_to_query_string
return conditional_escape(qs.urlencode())
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/http/request.py", line 524, in urlencode
for v in list_
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/http/request.py", line 524, in <genexpr>
for v in list_
AttributeError: 'int' object has no attribute 'encode'
ERROR 2018-08-07 13:54:23,897 19997 django.request Internal Server Error: /hyperkitty/list/dev(a)example.com/2018/5/
Traceback (most recent call last):
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/core/handlers/base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/core/handlers/base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "venv_path/lib/python3.5/site-packages/HyperKitty-1.2.0-py3.5.egg/hyperkitty/lib/view_helpers.py", line 134, in inner
return func(request, *args, **kwargs)
File "venv_path/lib/python3.5/site-packages/HyperKitty-1.2.0-py3.5.egg/hyperkitty/views/mlist.py", line 94, in archives
return _thread_list(request, mlist, threads, extra_context=extra_context)
File "venv_path/lib/python3.5/site-packages/HyperKitty-1.2.0-py3.5.egg/hyperkitty/views/mlist.py", line 123, in _thread_list
return render(request, template_name, context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/shortcuts.py", line 36, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 171, in render
return self._render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/library.py", line 234, in render
return t.render(new_context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 173, in render
return self._render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/defaulttags.py", line 209, in render
nodelist.append(node.render_annotated(context))
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/defaulttags.py", line 309, in render
return nodelist.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 937, in render
bit = node.render_annotated(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/base.py", line 904, in render_annotated
return self.render(context)
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/template/library.py", line 192, in render
output = self.func(*resolved_args, **resolved_kwargs)
File "venv_path/lib/python3.5/site-packages/django_mailman3-1.2.0-py3.5.egg/django_mailman3/templatetags/pagination.py", line 36, in add_to_query_string
return conditional_escape(qs.urlencode())
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/http/request.py", line 524, in urlencode
for v in list_
File "venv_path/lib/python3.5/site-packages/Django-2.1-py3.5.egg/django/http/request.py", line 524, in <genexpr>
for v in list_
AttributeError: 'int' object has no attribute 'encode'
ERROR 2018-08-07 13:54:25,721 19997 django.server "GET /hyperkitty/list/dev(a)example.com/2018/5/ HTTP/1.1" 500 317983
```
Environment:
```
alembic==1.0.0
arrow==0.12.1
click==6.7
Django==2.1
django-haystack==2.8.1
django-mailman3==1.2.0
django-q==0.9.4
djangorestframework==3.8.2
httplib2==0.11.3
HyperKitty==1.2.0
mailman==3.2.0
mailman-hyperkitty==1.1.1
mailmanclient==3.2.0
Mako==1.0.7
postorius==1.2.0
psycopg2-binary==2.7.5
python-dateutil==2.7.3
requests==2.19.1
requests-oauthlib==1.0.0
SQLAlchemy==1.2.10
urllib3==1.23
uWSGI==2.0.17.1
Whoosh==2.7.4
```
Some of the archives are listed fine tho.
The same trace reproduced with 2 different imported archives.
I'm on Debian stretch and using python 3.5.3.
Can you help please?
Thanks,
Ali
7 years

Re: config incoming email in my domain cpanel
by Rafael Mora
El jue., 3 ago. 2017 a las 16:25, tlhackque via Mailman-users (<
mailman-users(a)mailman3.org>) escribió:
> On 03-Aug-17 17:14, Rafael Mora wrote:
> >
> >
> > El jue., 3 ago. 2017 a las 16:07, tlhackque via Mailman-users
> > (<mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>>)
> > escribió:
> >
> > You've said you're working with labbrands.com <http://labbrands.com
> >.
> >
> > labbrands.com <http://labbrands.com> has address
> 192.185.51.89
> > mail.labbrands.com <http://mail.labbrands.com> has address
> > 192.185.51.89
> > www.labbrands.com <http://www.labbrands.com> is an alias for
> > labbrands.com <http://labbrands.com>.
> >
> > telnet proves that Exim is running on that IP address. Either you're
> > running it, or hostgator is redirecting the SMTP ports.
> >
> > You added:
> > lists.labbrands.com <http://lists.labbrands.com> has address
> > 190.145.27.66
> >
> > Presumably that's a different machine.
> >
> > So that now needs an MX record, and a firewall routing.
> >
> >
> > I added the MX record on our hostgator hosting like this:
> > image.png
> >
> > Is it correct???
> >
> No. And sending images to the mailing list doesn't get you help.
>
> You set up lists.labbrands.com as a secondary server, not an independent
> mail domain. This will cause you serious grief.
>
Ok I will remove that MX record on my hostgator hosting. Thank for your
help.
>
> You need to get some help from a more suitable list. Setting this up is
> not mailman-specific, and getting it right is more than a quick note.
>
> Try the Postfix documentation & mailing lists.
>
> >
> >
> > And the SPF
> > records ... and spam and virus filters, and all the other stuff
> > you need
> > to setup an independent, public-facing smtp server.
> >
> > But at least you won't have to relay.
> >
> > Good luck.
> >
> > On 03-Aug-17 16:55, Rafael Mora wrote:
> > > El jue., 3 ago. 2017 a las 15:49, tlhackque via Mailman-users (<
> > > mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>>)
> > escribió:
> > >
> > >> I think you're confused.
> > >>
> > >> You already have mail.labbrands.com <http://mail.labbrands.com>
> > set up as the MX record for
> > >> labbrands.com <http://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 <http://mail.labbrands.com> 25
> > >> Trying 192.185.51.89...
> > >> Connected to mail.labbrands.com <http://mail.labbrands.com>
> > (192.185.51.89).
> > >> Escape character is '^]'.
> > >> help
> > >> 220-gator4137.hostgator.com
> > <http://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 <http://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 <mailto:mark@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 <mailto:mark@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 <mailto:mark@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 <mailto:mailman-users@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 <mailto:mailman-users@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 <mailto:mailman-users@mailman3.org>
> >
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >
> > --
> >
> > Atentamente / Best Regards
> >
> > Ing. Rafael Mora
> >
>
> --
> 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: config incoming email in my domain cpanel
by Rafael Mora
Hello!
Just to let you know, the problem with the email reception was that I was
thinking that the email was coming from my hostgator panel, but I was
wrong, it's coming from Google (as I use gmail) so that was the problem, I
have to open the port 25 to any computer not just my hostgator server..
Have a great day. Bye.
On Thu, Aug 3, 2017, 16:25 tlhackque via Mailman-users <
mailman-users(a)mailman3.org> wrote:
> On 03-Aug-17 17:14, Rafael Mora wrote:
> >
> >
> > El jue., 3 ago. 2017 a las 16:07, tlhackque via Mailman-users
> > (<mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>>)
> > escribió:
> >
> > You've said you're working with labbrands.com <http://labbrands.com
> >.
> >
> > labbrands.com <http://labbrands.com> has address
> 192.185.51.89
> > mail.labbrands.com <http://mail.labbrands.com> has address
> > 192.185.51.89
> > www.labbrands.com <http://www.labbrands.com> is an alias for
> > labbrands.com <http://labbrands.com>.
> >
> > telnet proves that Exim is running on that IP address. Either you're
> > running it, or hostgator is redirecting the SMTP ports.
> >
> > You added:
> > lists.labbrands.com <http://lists.labbrands.com> has address
> > 190.145.27.66
> >
> > Presumably that's a different machine.
> >
> > So that now needs an MX record, and a firewall routing.
> >
> >
> > I added the MX record on our hostgator hosting like this:
> > image.png
> >
> > Is it correct???
> >
> No. And sending images to the mailing list doesn't get you help.
>
> You set up lists.labbrands.com as a secondary server, not an independent
> mail domain. This will cause you serious grief.
>
> You need to get some help from a more suitable list. Setting this up is
> not mailman-specific, and getting it right is more than a quick note.
>
> Try the Postfix documentation & mailing lists.
>
> >
> >
> > And the SPF
> > records ... and spam and virus filters, and all the other stuff
> > you need
> > to setup an independent, public-facing smtp server.
> >
> > But at least you won't have to relay.
> >
> > Good luck.
> >
> > On 03-Aug-17 16:55, Rafael Mora wrote:
> > > El jue., 3 ago. 2017 a las 15:49, tlhackque via Mailman-users (<
> > > mailman-users(a)mailman3.org <mailto:mailman-users@mailman3.org>>)
> > escribió:
> > >
> > >> I think you're confused.
> > >>
> > >> You already have mail.labbrands.com <http://mail.labbrands.com>
> > set up as the MX record for
> > >> labbrands.com <http://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 <http://mail.labbrands.com> 25
> > >> Trying 192.185.51.89...
> > >> Connected to mail.labbrands.com <http://mail.labbrands.com>
> > (192.185.51.89).
> > >> Escape character is '^]'.
> > >> help
> > >> 220-gator4137.hostgator.com
> > <http://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 <http://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 <mailto:mark@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 <mailto:mark@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 <mailto:mark@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 <mailto:mailman-users@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 <mailto:mailman-users@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 <mailto:mailman-users@mailman3.org>
> >
> https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
> >
> > --
> >
> > Atentamente / Best Regards
> >
> > Ing. Rafael Mora
> >
>
> --
> 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: REST API notes
by tlhackque
On 28-Jun-17 23:19, Barry Warsaw wrote:
> On Jun 28, 2017, at 01:47 AM, tlhackque--- via Mailman-users wrote:
>
>> As a beginner with the REST API, I found it necessary to read code and
>> experiment to figure out how to get things done.
> Thanks for the feedback. Other than the work supporting Postorius and
> HyperKitty, I think you've done some of the more extensive exploration of the
> REST API, so your comments here (and greatly appreciated bug reports) are
> quite valuable, and I think will help us make the REST API both more usable
> and more discoverable.
I didn't plan to become so involved, but that's what happens when one
tries to use something
new - perhaps for a slightly unexpected purpose.
> It's important to point out some history of the REST API.
I understand/expected that there was history; there is still art and
evolution in software design.
I hope the tone doesn't come across as critical; I only mean to report
what I found so you see it
from outside the development bubble.
> based traversal, I was able to port the extensive existing REST implementation
> to the new underlying library fairly easily.
>
> All this to say that some of the problems you describe are due to historical
> accident. And that's served us well(-ish) while we only had to support
> mailmanclient and P/HK. But as the REST API is used in more places, those
> deficiencies are becoming more glaring. I think if we ever make progress on
> Lemme (our authenticating REST proxy), we'll likely encounter the same
> problems. But at this point, it's infeasible to completely reimplement the
> REST machinery.
I don't think it needs to be re-implemented. There are some some fairly
simple things that could address the challenges I've found. I'll try to
add some notes to/add new bug reports as I have a chance. (But I'm
really trying to make progress on my project, of which this is a small
part...)
>
> Much of that is because these are doctests, i.e. testable documentation. It's
> a tradeoff between making them useful as docs but also testable without too
> much clutter. It's very much oriented toward Python because that makes
> testability easier. It would be good to have documentation for pure HTTP/JSON
> consumers, but it would be imperative for that also to be testable so we're
> sure it remains accurate, aside from any requirements to keep the docs in
> sync. Suggestions and contributions would be very much welcome here.
If the APIs are supposed to be equivalent, I'd try to define a
consistent mapping between the http (S!) API and the internal Python
API. Since the implementation is pretty consistent, that shouldn't be
too painful.
If that can be done, then the same tests can verify the Python API and
prove that the HTTP functions are equivalent.
The other thing to consider is some tests that are higher level and can
become documentation examples.
E.g.
Starting with an empty installation, create a list with an owner and a
subscriber. Which would be in order, every API call necessary to
implement this, and then verify (with GETs) that all the objects exist
with the right properties.
Currently that takes me about 220 lines of source (Perl, includes blank
and closing '}' lines, but still...)
Not counting loops, I think there are 10 places where I call the API for
what is expected to be an 'atomic' create of a list.
>> The REST API has a hybrid interface: Requests are made with
>> application/x-www-form-urlencoded POST, PUT, PATCH and delete http requests.
>> Requests are also accepted as parameter strings.
>>
>> The responses are JSON. (This is rather surprising - one would expect JSON
>> requests - and I hope someday they'll be accepted, as the split complicates
>> clients. I suspect this evolved to simplify the initial Web GUI client
>> (Postorious), but it precludes using standard JSON-in/JSON-out client
>> libraries.)
> Absolutely. I want to support JSON-in/JSON-out. Again, the current mismatch
> is due to historical implementation decisions, but there's nothing in
> principle preventing us from accepting JSON in, afaict. We'd have to continue
> to accept both, for backward compatibility reasons.
I noted somewhere that this should be easy to implement. I expect that
you get an associative array ("dict"?) with the webform parameters.
Decoding JSON also ususally provides an associative array. The
parameters have the same name. So you should be able to address this at
your API entry point, e.g. if the inbound request is Content-Type:
application/json, decode as JSON; if x-www-forms-urlencode, decode as
today. Then you have the same parameters, and they go downstream for
decoding in the array - again as today.
I haven't looked at the code (not being a Python person), but I'd be
surprised if this was not feasible.
>> Error responses are often misidentified as content-type: application/json,
>> but actually contain a text/plain error message. This isn't universally
>> true; for example the 401 response actually IS JSON. A client has to guess
>> and handle decoding exceptions.
> That's clearly a bug. The Content-Type should always be accurate. It would
> be a new feature to also support JSON error responses.
Except that for some responses, you already do...
>
>> The API presents resources hierarchically, rooted at '/'. The top level
>> resources include /users, /lists. /addresses, /domains, /system
>>
>> The next level is a resource id.
> Kind of. It all depends on what the top-level resource is returned. This
> makes sense when you think about the object based traversal machinery.
>
> Each path component points internally to an object, and the subsequent path
> component is handled by that object. If that returns another object, then the
> next remaining path component is consumed by *that* object. And so on until
> we reach the end of the path. Then the object at the leaf responds to the
> HTTP command, and each object knows how to represent itself as JSON, and it
> knows its canonical location within the resource tree (there can be multiple
> paths to any particular object, but there's always one canonical location).
That's a better description from inside. I was trying to summarize what
it looks like to someone trying to use the API....
>
>> There is a an id which is stable for the lifetime of an object, and a current
>> name (which can be changed). For example, a list has a name like
>> mylist(a)example.com, and a list_id of mylist.example.com. But if you change
>> the list name, it becomes mynewname(a)example.net, while the list_id remains
>> mylist.example.com.
> Lists are weird in that they have two identifiers. One is the posting
> address, what we internally (and slightly incorrectly) call the "fully
> qualified list name". I don't particularly like that nomenclature anymore,
> but we live with it.
We all have similar artifacts in any non-trivial code...
> A posting address can change, e.g. if you rename or rehome a list.
>
> The (RFC 2919) List-ID is assigned when the mailing list is created and it's
> immutable. Section 4 discourages changing the List-ID and Mailman takes that
> as a requirement. Rename a list or rehome it to a different domain on the
> same server and the List-ID will never change.
Yes.
> Again for historical reasons, many APIs both internal and external used the
> posting address to identify the list, but this is wrong exactly because that
> can change. I've slowly been converting APIs to accept both the posting
> address and the List-ID when identifying the mailing list. New APIs generally
> accept only the List-ID. Bottom line, it's best to use the List-ID.
I noticed that, and indeed go to some pains to fetch the list_id for
chained operations.
>> Lists are associated with "domains", which are the "domain part" of the
>> list's address. That is, the part after the @. This is sometimes referred
>> to as the "mail host", but there need not be a real host.
> Yep, again historical nomenclature.
I understand the history. But I was very, very confused by the overlaid
uses. Even in the GUI, I couldn't decide what I should enter. (And I'm
fairly familiar with e-mail RFCs and history...perhaps that's my
problem.) Documentation needs improvement. Feel free to use (or
improve) my words.
>
>> A domain has to be created before you can create a list with an address in
>> that domain.
> Some APIs (e.g. `mailman create` CLI) will create the domain automatically if
> it doesn't already exist, and unless you disable that explicitly.
I was writing exclusively about the REST API. I couldn't create a list
without the domain, so I create the domain unconditionally (and ignore
the 'it exists' error); that's cheaper than query+create. "Create if
not exists" would be a useful API extension, since clients would see a
success code either way. (200 OK for exists, 201 Created for new).
>
>> Resources are created with a POST to their top-level resource. To create a
>> domain, post to /domains with mail_host => the domain, and (optionally)
>> description => a description for the GUI. The response isn't JSON as one
>> would expect. In fact, it's an empty application/json response with a 201
>> status.
>>
>> To create a list, one POSTs to /lists. This post takes a restricted set of
>> parameters; in the case of a list, just its fqdn_listname, (and an optional
>> style - which isn't well defined). The response isn't JSON as one would
>> expect. The Location header of the response contains a URL of the new list.
> What else would you expect? From my reading of books like RESTful Web
> Services (admittedly a long while ago), that's exactly the proper response to
> an appending POST. Return a 201 with a Location header to the new resource
> and empty content.
I didn't read the book - but I have talked to a number of services that
claim to provide a RESTful API.
Of course, REST is a style, not a specification, so mileage varies...
I would expect the new resource address to be in the JSON body of the
response. I don't mind the Location header (if you imagine the response
to be a 301, it kind of makes sense). But a client (well, at least
mine) wants a consistent place to look for the result of an operation.
That would be the HTTP Status + JSON reply.
This is inconsistent - and with JSON REST client libraries, it turns out
to be more difficult to get at the headers.
(I patched the one that I use...)
My 3 cents: if an interface is JSON, it should be usable entirely as
JSON. JSON in, all JSON out.... This simplifies life for a client:
Get a response, decode the JSON - and everything is in the decoded JSON
(usually an array or associative array in whatever language). Not some
in the JSON, some in the Response headers (and some in the HTTP status -
which usually is replicated in the response JSON), and some plaintext in
the response body.
>
>> To configure the list, you have to follow up with a PUT or PATCH to that URL
>> + /config This is where you can set the description, posting policy, etc.
>> It's unrealistic to do a PUT; even if you're cloning another list, there's no
>> programatic way to determine which attributes are writable. PATCH what you
>> know...
> Mailing list resources are somewhat unique in that they probably have the most
> properties of any resource/object in the system. That's not surprising if you
> think about it, but it does make PUTing to a mailing list more or less
> impractical. That's certainly not true of other, smaller resources though,
> and of course, you still want symmetry there (plus, implementation-wise, it's
> almost a no brainer to support both PUT and PATCH).
The problem is that from a client, there is no way to know which
attributes are writable, and which are immutable. So get (template),
modify, put (new) doesn't work.
There should be a way to find out what attributes are writable. Or the
API could ignore writes to immutable attributes, and return "success"
(or in a JSON reply, "partial succes") to the client....
>> Members are associated with e-mail addresses - which belong to Users.
> Users can have multiple addresses, addresses can be linked to only one user,
> but may be unlinked, and members associate "subscribers" to mailing lists,
> where a subscriber is either a user-with-preferred-address, or an address.
I saw that. I didn't look into the unlinking part, as (oddly enough)
I'm only trying to do a restricted subset of the possible operations.
All I need to do is create & configure a list (with a couple of members)
on-the fly. (Oh, and post an announcement of the fact on a related
list.) The tricky part is that it's all done without human intervention.
>> You create a user by posting to /users with email => the email address, and
>> optionally display_name => the name string. (A user can also be implicitly
>> created by subscribing an e-mail address, but that gets confusing.) The
>> e-mail address is the primary email address for the user. More later.
>> Again, you get a Location header in the response, which you can use to PATCH
>> /preferences to set delivery_status, etc. .These preferences are part of a
>> hierarchy - many have a system default, a list default, the user default, and
>> a subscription to that list value. You can find the User associated with a
>> list by a GET of /addresses/address(a)example.net.
> Technically, the returned user isn't necessarily associated with a list. It
> *may* be subscribed to the list, but that relationship is represented by a
> member.
I understood that.
>
>> This GET returns two URLs: user => the user owning this address, and
>> self_link => the address object.
> *All* resources in the REST API have a self_link, and while that may seem
> redundant, it's not. As mentioned above, you can take various paths through
> the resource tree to get to a particular resource, but regardless of that,
> every resource has exactly one canonical location. That location is
> represented by the self_link.
Yes.
>> Note also that there are both an email and original_email attribute. The
>> latter preserves case. The former is used internally by Mailman as a
>> resource key, etc. (Though exactly what happens if John(a)example.net and
>> john(a)example.net both subscribe is unclear.)
> They can't. Mailman is case-preserving case-insensitive for email addresses.
> Technically speaking, john(a)example.com and JOHN(a)example.com can be different
> mailboxes, but that never happens in practice anymore, and Mailman has always
> explicitly treated them as the same address. This goes back to the earliest
> days of Mailman.
I still run into systems that demand exact case for delivery. I agree
that two different humans assigned to such a mailbox would go (or
already are) crazy. But I have seen John using john and JOHN as two
different identities. I havesuggested using '+' subaddressing instead.
Then again, 70% of of the e-mail address validators that people come up
with reject clark+kent(a)example.net because of the '+'...
I am curious as to whether anything breaks if I subscribe to a mailman
list with a plus address, but it's low on my list...
>> Once a list is configured, you can add members. This requires the list_id -
>> which you don't (officially) have. So you do a GET on the list resource, to
>> get the list_id. Then you can subscribe a member with list_id => (the list
>> id), subscriber => email address. Optionally you can
>> pre_verify/confirm/approve the member and/or add a display_name.. POST to
>> /members. Again, you get a Location header back. You can't specify
>> everything you might like. as a creation attribute. So you may have to PATCH
>> the member to, for example, set the moderation_status.
> This is true, but it also kind of makes sense if you grok the way preferences
> work, i.e. hierarchically as you describe above. TBH, I don't particularly
> like the way preferences are modeled either internally or through the REST
> API, but I haven't been able to come up with anything better.
>
>> You may also need to PATCH the member /preferences if you want to set
>> list-level delivery status, etc.
> All true. In each of those cases, you may be talking to a different
> preference resource.
>
>> Consider adding at least an owner when creating a list.
> I think that would be a useful addition to the REST API for list creation.
>
>> One challenge is that almost everything requires multiple REST operations to
>> set up. But REST (by definition) is stateless. So the best you can do is
>> order operations & hope.
> I don't understand this. REST is stateless, but not all HTTP operations are
> idempotent. POST certainly isn't, by definition, so if you use it to create a
> new resource under a collection, you clearly cannot modify that resource
> through PUT or PATCH until the resource is created, which only happens when
> POST succeeds.
I've written up an issue on this with some more detail/thoughts and will
post (er, no pun intended) it shortly.
The short form is that (as noted below), I want a list to atomically
create a list - either it exists (configured the way I need it to be),
or it doesn't exist. That's not possible. So I create a domain, create
a user, configure the user, create a list, configure the list, add the
user - but at any point in the middle, a message could arrive for the
non-quite-configured list. This isn't good...
>
>> The mailman client examples refer to transactions (e.g in users.rst, there is
>> 'transaction.commit(); - but REST can't hold state. It does appear that the
>> server uses DB transactions to ensure that any given REST operation is ACID,
>> but the composite operations (e.g. create a list and set it's config) can not
>> be Atomic. This is an architectural flaw in the API.
> I think what you're getting at is that some POSTs to create new resources do
> not accept the same parameters as the subsequent PUT or PATCH on the newly
> created resource. I think that may be true, but it's not universally so.
> E.g. POST on /domain creates a new domain, returning the location of the new
> resource. You can provide both a description and an owner, and you can also
> provide a mail_host. But mail_host is immutable, and PATCH or PUT support
> changing all mutable attributes on the domain.
>
> That should be the general rule; if an attribute on a resource is mutable, you
> should be able to PATCH and PUT it, *and* you should be able to specify all
> mutable attributes, plus some immutable ones on the POST that creates the
> resource.
Yes. I can't specify everything about an object on many posts - list
creation the the most glaring example.
Also, things linked to the object - e.g. if I create a member, I have
to: POST (create the member); PATCH (set moderation_action;
PATCH(preferences) to set
(delivery_status,hid_address,receive_list_copy,receive_own_postings).
That's three REST calls for what should be one - ATOMIC transaction.
Plus, this is separate from the list creation, so there's a window
between creating the list (even if it were atomic - which it isn't) and
the time its required members are subscribed.
> GET should return all attributes, mutable or immutable. This rule
> may not be strictly adhered to for all resources and collections, but I would
> consider that a bug, not an architectural flaw.
>
> AFAIK, this is all working as any well-defined web service should work.
>> Symbolic names (which are required) for attributes are in the
>> src/mailman/interfaces/(class).py.
> Please note that the interfaces under this package are for the *internal* API,
> which often, but not always, is exposed in the REST API. These two APIs serve
> different purposes so they cannot be a one-to-one mapping, and there are many
> resources in the REST API that don't correspond directly to internal objects,
> and there are many internal objects that are not exposed to the REST API.
There was no other place I could find that defined attribute values for
enumerated items. E.g.
delivery_status => 'by_user' - interfaces is where I found how to spell
'by_user'.
Maybe I missed something more obvious.
>> What you can get/set comes from src/mailman/rest/(class).py.
> Yes, so clients of the REST API are served by objects in this package.
> Plugins and other internal operations are served by the objects that implement
> interfaces in the src/mailman/interfaces package. This is a strict separation
> of concerns, and it mirrors other 'external facing' interfaces, of which the
> command line is another example.
I keep struggling with wanting to understand the external model of the
API without having to understand the internal implementation. When the
API is formally documented, I encourage you to de-emphasize the internal
model and concentrate on the external interfaces in client terms...
> Hope that helps.
Yes, thanks.
> -Barry
>
8 years, 2 months

Re: New messages not being archived
by Philip Colmer
I'm having exactly the same problem as Sarah. I've built the server using the virtualenv instructions (https://docs.mailman3.org/en/latest/install/virtualenv.html) but archiving of messages is not working.
/opt/mailman/mm/var/archives/hyperkitty/spool contains a number of "pck" files.
/opt/mailman/mm/var/logs/mailman.log contains entries like this:
Sep 03 09:38:17 2021 (3011) Exception in "hyperkitty" archiver
Traceback (most recent call last):
File "/opt/mailman/venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 699, in urlopen
httplib_response = self._make_request(
File "/opt/mailman/venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 445, in _make_request
six.raise_from(e, None)
File "<string>", line 3, in raise_from
File "/opt/mailman/venv/lib/python3.8/site-packages/urllib3/connectionpool.py", line 440, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.8/http/client.py", line 1344, in getresponse
response.begin()
File "/usr/lib/python3.8/http/client.py", line 307, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.8/http/client.py", line 276, in _read_status
raise RemoteDisconnected("Remote end closed connection without"
http.client.RemoteDisconnected: Remote end closed connection without response
curl http://127.0.0.1:8000/archives/ reports:
curl: (52) Empty reply from server
https://example.com/archives/api/mailman/urls reports:
Access is forbidden
Please check the IP addresses assigned to MAILMAN_ARCHIVER_FROM in the settings file.
/opt/mailman/mm/urls.py doesn't exist on my machine. I've found the following files called urls.py beneath /opt/mailman:
790264 4 -rw-rw-r-- 1 mailman mailman 138 Aug 16 09:23 ./venv/lib/python3.8/site-packages/falcon/bench/dj/dj/urls.py
538719 4 -rw-rw-r-- 1 mailman mailman 615 Aug 16 09:52 ./venv/lib/python3.8/site-packages/rest_framework/urls.py
539156 4 -rw-rw-r-- 1 mailman mailman 1052 Aug 16 09:52 ./venv/lib/python3.8/site-packages/rest_framework/utils/urls.py
1050019 8 -rw-rw-r-- 1 mailman mailman 7222 Aug 16 09:52 ./venv/lib/python3.8/site-packages/postorius/urls.py
797890 8 -rw-rw-r-- 1 mailman mailman 7783 Aug 16 09:52 ./venv/lib/python3.8/site-packages/hyperkitty/urls.py
1298485 4 -rw-rw-r-- 1 mailman mailman 3246 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django/core/checks/urls.py
1051696 4 -rw-rw-r-- 1 mailman mailman 1310 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django/contrib/admindocs/urls.py
1052065 4 -rw-rw-r-- 1 mailman mailman 498 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django/contrib/staticfiles/urls.py
1052096 4 -rw-rw-r-- 1 mailman mailman 179 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django/contrib/flatpages/urls.py
1052339 4 -rw-rw-r-- 1 mailman mailman 1054 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django/contrib/auth/urls.py
785525 4 -rw-rw-r-- 1 mailman mailman 1481 Aug 16 09:23 ./venv/lib/python3.8/site-packages/pip/_internal/utils/urls.py
1050826 4 -rw-rw-r-- 1 mailman mailman 1289 Aug 16 09:52 ./venv/lib/python3.8/site-packages/mailman_web/urls.py
539863 4 -rw-rw-r-- 1 mailman mailman 752 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/urls.py
539871 4 -rw-rw-r-- 1 mailman mailman 1404 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/account/urls.py
539927 4 -rw-rw-r-- 1 mailman mailman 414 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/urls.py
539944 4 -rw-rw-r-- 1 mailman mailman 162 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/zoom/urls.py
539956 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/nextcloud/urls.py
539968 4 -rw-rw-r-- 1 mailman mailman 174 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/dataporten/urls.py
539982 4 -rw-rw-r-- 1 mailman mailman 134 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/persona/urls.py
539999 4 -rw-rw-r-- 1 mailman mailman 174 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/salesforce/urls.py
540011 4 -rw-rw-r-- 1 mailman mailman 170 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/basecamp/urls.py
540023 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/feedly/urls.py
540035 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/baidu/urls.py
540047 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/naver/urls.py
540061 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/stripe/urls.py
540073 4 -rw-rw-r-- 1 mailman mailman 209 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/vimeo_oauth2/urls.py
540087 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/figma/urls.py
540099 4 -rw-rw-r-- 1 mailman mailman 233 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/keycloak/urls.py
540111 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/yandex/urls.py
540123 4 -rw-rw-r-- 1 mailman mailman 162 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/ynab/urls.py
540135 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/asana/urls.py
540149 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/azure/urls.py
540163 4 -rw-rw-r-- 1 mailman mailman 169 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/linkedin/urls.py
540175 4 -rw-rw-r-- 1 mailman mailman 209 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/draugiem/urls.py
540187 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/dwolla/urls.py
540201 4 -rw-rw-r-- 1 mailman mailman 527 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/oauth/urls.py
540213 4 -rw-rw-r-- 1 mailman mailman 224 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/auth0/urls.py
540225 4 -rw-rw-r-- 1 mailman mailman 165 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/flickr/urls.py
540237 4 -rw-rw-r-- 1 mailman mailman 206 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/discord/urls.py
540249 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/amazon/urls.py
540261 4 -rw-rw-r-- 1 mailman mailman 224 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/jupyterhub/urls.py
540273 4 -rw-rw-r-- 1 mailman mailman 174 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/stocktwits/urls.py
540285 4 -rw-rw-r-- 1 mailman mailman 201 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/openid/urls.py
540311 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/angellist/urls.py
540323 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/pinterest/urls.py
540335 4 -rw-rw-r-- 1 mailman mailman 398 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/apple/urls.py
540351 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/yahoo/urls.py
540365 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/twitch/urls.py
540377 4 -rw-rw-r-- 1 mailman mailman 200 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/agave/urls.py
540389 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/strava/urls.py
540401 4 -rw-rw-r-- 1 mailman mailman 163 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/vimeo/urls.py
540413 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/douban/urls.py
540425 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/weibo/urls.py
540437 4 -rw-rw-r-- 1 mailman mailman 529 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/oauth2/urls.py
540449 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/disqus/urls.py
540461 4 -rw-rw-r-- 1 mailman mailman 162 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/daum/urls.py
540475 4 -rw-rw-r-- 1 mailman mailman 203 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/globus/urls.py
540487 4 -rw-rw-r-- 1 mailman mailman 171 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/box/urls.py
540499 4 -rw-rw-r-- 1 mailman mailman 180 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/odnoklassniki/urls.py
540511 4 -rw-rw-r-- 1 mailman mailman 168 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/shopify/urls.py
540523 4 -rw-rw-r-- 1 mailman mailman 209 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/steam/urls.py
540535 4 -rw-rw-r-- 1 mailman mailman 201 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/patreon/urls.py
540549 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/mailru/urls.py
540561 4 -rw-rw-r-- 1 mailman mailman 137 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/telegram/urls.py
540571 4 -rw-rw-r-- 1 mailman mailman 179 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/fivehundredpx/urls.py
540585 4 -rw-rw-r-- 1 mailman mailman 169 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/evernote/urls.py
540597 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/kakao/urls.py
540611 4 -rw-rw-r-- 1 mailman mailman 162 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/cern/urls.py
540623 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/reddit/urls.py
540635 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/orcid/urls.py
540647 4 -rw-rw-r-- 1 mailman mailman 160 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/edx/urls.py
540659 4 -rw-rw-r-- 1 mailman mailman 165 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/tumblr/urls.py
540671 4 -rw-rw-r-- 1 mailman mailman 170 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/doximity/urls.py
540683 4 -rw-rw-r-- 1 mailman mailman 170 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/frontier/urls.py
540695 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/instagram/urls.py
540707 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/hubic/urls.py
540719 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/weixin/urls.py
540733 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/google/urls.py
540745 4 -rw-rw-r-- 1 mailman mailman 168 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/untappd/urls.py
540759 4 -rw-rw-r-- 1 mailman mailman 217 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/eventbrite/urls.py
540771 4 -rw-rw-r-- 1 mailman mailman 174 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/foursquare/urls.py
540786 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/meetup/urls.py
540800 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/authentiq/urls.py
540812 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/battlenet/urls.py
540828 4 -rw-rw-r-- 1 mailman mailman 227 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/gitlab/urls.py
540840 4 -rw-rw-r-- 1 mailman mailman 224 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/netiq/urls.py
540852 4 -rw-rw-r-- 1 mailman mailman 168 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/cilogon/urls.py
540864 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/robinhood/urls.py
540876 4 -rw-rw-r-- 1 mailman mailman 170 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/coinbase/urls.py
540888 4 -rw-rw-r-- 1 mailman mailman 171 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/bitbucket/urls.py
540900 4 -rw-rw-r-- 1 mailman mailman 360 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/facebook/urls.py
540925 4 -rw-rw-r-- 1 mailman mailman 174 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/soundcloud/urls.py
540937 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/eveonline/urls.py
540949 4 -rw-rw-r-- 1 mailman mailman 234 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/amazon_cognito/urls.py
540963 4 -rw-rw-r-- 1 mailman mailman 162 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/line/urls.py
540977 4 -rw-rw-r-- 1 mailman mailman 184 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/fxa/urls.py
540991 4 -rw-rw-r-- 1 mailman mailman 182 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/linkedin_oauth2/urls.py
541003 4 -rw-rw-r-- 1 mailman mailman 180 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/trainingpeaks/urls.py
541015 4 -rw-rw-r-- 1 mailman mailman 176 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/windowslive/urls.py
541027 4 -rw-rw-r-- 1 mailman mailman 180 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/stackexchange/urls.py
541039 4 -rw-rw-r-- 1 mailman mailman 182 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/microsoft/urls.py
541053 4 -rw-rw-r-- 1 mailman mailman 186 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/quickbooks/urls.py
541067 4 -rw-rw-r-- 1 mailman mailman 179 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/openstreetmap/urls.py
541079 4 -rw-rw-r-- 1 mailman mailman 214 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/mailchimp/urls.py
541091 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/bitly/urls.py
541103 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/paypal/urls.py
541115 4 -rw-rw-r-- 1 mailman mailman 167 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/twitter/urls.py
541127 4 -rw-rw-r-- 1 mailman mailman 183 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/bitbucket_oauth2/urls.py
541139 4 -rw-rw-r-- 1 mailman mailman 179 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/spotify/urls.py
541151 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/exist/urls.py
541163 4 -rw-rw-r-- 1 mailman mailman 178 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/digitalocean/urls.py
541175 4 -rw-rw-r-- 1 mailman mailman 186 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/twentythreeandme/urls.py
541187 4 -rw-rw-r-- 1 mailman mailman 179 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/dropbox/urls.py
541199 4 -rw-rw-r-- 1 mailman mailman 162 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/okta/urls.py
541211 4 -rw-rw-r-- 1 mailman mailman 172 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/sharefile/urls.py
541223 4 -rw-rw-r-- 1 mailman mailman 164 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/slack/urls.py
541237 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/edmodo/urls.py
541249 4 -rw-rw-r-- 1 mailman mailman 191 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/feishu/urls.py
541263 4 -rw-rw-r-- 1 mailman mailman 166 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/github/urls.py
541275 4 -rw-rw-r-- 1 mailman mailman 161 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/xing/urls.py
541287 4 -rw-rw-r-- 1 mailman mailman 165 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/trello/urls.py
541299 4 -rw-rw-r-- 1 mailman mailman 158 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/vk/urls.py
541311 4 -rw-rw-r-- 1 mailman mailman 162 Aug 16 09:52 ./venv/lib/python3.8/site-packages/allauth/socialaccount/providers/zoho/urls.py
538780 4 -rw-rw-r-- 1 mailman mailman 1121 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django_mailman3/urls.py
539115 4 -rw-rw-r-- 1 mailman mailman 1076 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django_mailman3/lib/auth/fedora/urls.py
536453 4 -rw-rw-r-- 1 mailman mailman 156 Aug 16 09:52 ./venv/lib/python3.8/site-packages/haystack/urls.py
537504 4 -rwxrwxr-x 1 mailman mailman 132 Aug 16 09:52 ./venv/lib/python3.8/site-packages/django_q/tests/urls.py
3 years, 11 months