Re: Postorius confirmation mails shown in uwsgi-error.log but not sent
by Ralph Seichter
* Mark Sapiro:
> What is the complete log message from uwsgi-error.log?
I'll attach a typical log file to this message. It shows startup
messages followed by a recorded confirmation email. User name and
domain are obfuscated, but other than that the log is unchanged.
-Ralph
*** Starting uWSGI 2.0.18 (64bit) on [Sat Mar 28 20:55:36 2020] ***
compiled with version: 9.3.0 on 26 March 2020 13:58:28
os: Linux-5.5.13-gentoo #1 SMP Thu Mar 26 10:24:38 CET 2020
nodename: wedjat
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 8
current working directory: /var/lib/mailman
detected binary path: /var/lib/mailman/venv/bin/uwsgi
chdir() to /var/lib/mailman/suite/
your processes number limit is 256427
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 TCP address 127.0.0.1:8002 fd 8
Python version: 3.8.2 (default, Feb 26 2020, 08:14:41) [GCC 9.2.0]
Python main interpreter initialized at 0x56443febc210
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 ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x56443febc210 pid: 21912 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 21912)
spawned uWSGI worker 1 (pid: 21916, cores: 2)
19:55:38 [Q] INFO Q Cluster pizza-illinois-golf-magnesium starting.
19:55:38 [Q] INFO Process-1:1 ready for work at 21921
19:55:38 [Q] INFO Process-1:2 ready for work at 21922
19:55:38 [Q] INFO Process-1:3 ready for work at 21923
19:55:38 [Q] INFO Process-1:4 ready for work at 21924
19:55:38 [Q] INFO Process-1:5 ready for work at 21925
19:55:38 [Q] INFO Process-1:6 ready for work at 21926
19:55:38 [Q] INFO Process-1:7 ready for work at 21927
19:55:38 [Q] INFO Process-1:8 ready for work at 21928
19:55:38 [Q] INFO Process-1:9 monitoring at 21929
19:55:38 [Q] INFO Process-1 guarding cluster pizza-illinois-golf-magnesium
19:55:38 [Q] INFO Process-1:10 pushing tasks at 21930
19:55:38 [Q] INFO Q Cluster pizza-illinois-golf-magnesium running.
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [lists.domain.tld] Please Confirm Your E-mail Address
From: postmaster(a)domain.tld
To: OBFUSCATED(a)gmail.com
Date: Sat, 28 Mar 2020 20:08:15 -0000
Message-ID: <158542609570.21916.15168402908994348907(a)wedjat.domain.tld>
Hello from lists.domain.tld!
You're receiving this e-mail because user OBFUSCATED has given yours as an e-mail address to connect their account.
To confirm this is correct, go to https://lists.domain.tld/accounts/confirm-email/Mg:1jIHkd:x8NSjzCkP5ifX6V39…
Thank you from lists.domain.tld!
lists.domain.tld
-------------------------------------------------------------------------------
6 years, 1 month
Re: [Mailman-Users] Mailman 3 Ready?
by Stephen J. Turnbull
Allan Hansen writes:
> What is the best, easiest, guaranteed-to-work way to get this
> Mailman 3 up and running (OS, add-ons, options, etc.). When I tried
> myself, I saw a lot of options that I really did not really care to
> have because I did not know the consequences of each. I’m an
> application programmer, not a systems programmer.
It's email, there are no guarantees. I hate to say that, but that's
the way it is.
In particular, I'm concerned about the "iRedMail" integration, which
may be a complete wildcard from my point of view. With respect to the
relevant iRedMail components, I can say that Mailman 3 is perfectly
happy with Postfix as MTA (it's the recommended configuration,
although I use Exim4 for historical reasons), and I've been satisfied
with a small-scale set of lists (about 10 active ones, with at most 20
subscribers total) using Apache+mod_swgi to host Postorius and
HyperKitty. The problem would be if your friend (is that the Frank in
the CC? hi, Frank!) really really wants to manage Mailman 3 through
iRedAdmin -- that will get messy I suspect, and pragmatically
speaking, we can't support it, we don't have the cycles. So he'd be
on his own, especially since the iRedMail folks have their own bespoke
mailing list manager. I would recommend avoiding iRedAdmin
integration, and just using Postorius since the subscribers and
non-site-admin moderators (if any) will need to use Postorius anyway.
Ignoring the iRedAdmin issue, the absolute simplest is
1. Install any Linux distribution with a Docker package.
2. Install the distribution's Docker package.
3. Download and install Mailman Project's Mailman 3 container.
4. Upgrade the container manually (ie, download and reinstall) as
appropriate.
For reference, what I would recommend to my friends, who would give me
hands-on access in emergencies:
1. Install the Debian distribution. (What I use.)
2. Pin the Mailman 3 packages to "experimental". The idea would be
to get Mailman 3 upgrades as fast as possible, even at the risk of
packaging issues. (My experience with default-to-experimental
system for several years was that this happened at most once a
year, and the three or four cases all got fixed within days.)
3. Install the Mailman 3 packages.
4. Adjust any dependencies that need non-"stable" versions.
5. Upgrade via apt or whatever occasionally.
6. When Mailman 3 is working well, downgrade the pins to a more
stable level.
Since you do have such a friend, there's probably a similar process
that works for his distribution-of-choice.
> The problem is that my MacOS users are getting tripped up by the
> mangling, as it is hidden by the mail clients. I have instructed
> them to remove previous recipients regularly from the list of such,
> if they contain the ‘via list’ string. But they don’t read my
> emails, and we see many embarrassing email ssent to the lists that
> are meant for one-on-one communication.
I guess we could provide a setting where reply-to goes *only* to
author, instead of to author *and* list as we currently recommend.
But that is going to make you (or list owners) the focus of user ire
because their intended replies to list go only to author. What do you
think?
tl;dr The rest is me blowing off steam. :-)
> The fact that the mangling will continue is a disappointment.
It's a disappointment to the sane people at the IETF, too, including
the rep from Yahoo!, who's a very smart lady (I may be biased, she
gave me a kitten once. ;-) Yahoo! is violating the original concept
(DMARC "p=reject" was supposed to be used *only* for "transactional"
mail, i.e., direct private communication between a business and its
clients), but I see her point: when you've had a hundred million or so
address books hacked and sold to spammers, and the spammers are
sending literally millions of "recommendation from a friend" spams per
hour for days on end, you use the tools to hand.
> I’m inclined to tell all my AOL and Yahoo users and others in the same
> boat to find another email service.
I know the feeling. I'm lucky in that respect: the Ministry of
Education prohibits use of yahoo mailboxes at Japanese universities.
(Which is a WTF of a different kind: yahoo.co.jp is a franchise, not
controlled by yahoo.com, and doesn't use p=reject at least at the time
MoE issued that policy.)
Mail is just hard. It was designed for a "friendly network of users",
not for today's rather hostile open Internet, and even if they had
envisioned this in the 70s when the message format and SMTP mail
transmission protocol were designed, the fundamental problem is that
pretty much everyone has a genuine need, even if only occasional, to
receive messages from untrusted and even unknown senders.
6 years, 5 months
Can't Start Mailman3 Core on Fresh Install
by Stephen J. Turnbull
Mail Person writes:
> Hi Everyone. I'm installing Mailman3 on a Ubunu 18.03 server using
> MySQL as the backend. After installing using the mailman3-full
> package and configuring it, I'm getting the following error when
> trying to start the mailman3 service:
> Jul 21 04:28:44 eps mailman3[81963]:
> sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError)
> (1045, "Access denied for user 'mailman3'@'127.0.0.1' (using
> password: YES)")
I would guess that the password doesn't match. This can happen
because some configuration is done with Python modules (.py files, the
configuration is Python code) where strings are *delimited* by quote
marks (which are not part of the value) and some (.cfg files) are
.ini-style, where all values are read as strings, and so quote marks
become part of the value.
The web database (mostly user information) and the mailing list
database are separate (because not all Mailman installations use
Postorius and HyperKitty). Are you sure you have the right user and
password for the mailing list database configured in mailman.cfg?
Other reasons would be in this reference:
> Jul 21 04:28:44 eps mailman3[81963]: (Background on this error at:
> http://sqlalche.me/e/e3q8)
> I'm not sure why the access issue is happening. Mailman3-web is
> running fine and I can see the site at mailman3/postorius/lists
> (but it says Page Not Found).
"Page not found" is probably a consequence of the same access error.
You can probably see it in the database logs.
3 years, 9 months
Re: Response for Admins only
by Stephen J Turnbull
2023-05-08 14:18 に Michael Schaarschmidt さんは書きました:
> I’m an administrator of a MM3 with a lot of lists, which are
generated and maintained through
> the rest api. For testing reasons I am looking for a way to send a
test mail with a ping to a list
> in MM3 from a mail address of an administrator to get a pong from the
MM3 - or even better
>- get a response with the status of the list like number of
recipients, number of mails waiting
> for moderation, etc.
> Does exist a solution for such a purpose?
No. Parsing email robustly is really hard, and for many installations
there would be the problem of dealing with authentication. That's why
we created the REST API for administration. We will not be creating
admin-oriented email interfaces, although we will continue to maintain
the user-oriented subscribe/unsubscribe/owner/request mailboxes, as
well as the bounces mailbox for internal use.
Any information about Mailman configuration, membership, or status that
is available through the web interface (Postorius) is available through
the REST API. The only exceptions are related to web authentication,
for
which Postorius (and HyperKitty) maintain a small auxiliary database of
users. Unfortunately there isn't an enumeration of endpoints available
from the REST API itself, so you'll have to look at the code in
mailman/src/mailman/rest to find the endpoints you want.
--
University of Tsukuba Faculty of Policy and Planning
Sciences
Tennodai 1-1-1, Tsukuba 305-8573 JAPAN tel/fax:
+81-29-853-5091
turnbull(a)sk.tsukuba.ac.jp
https://turnbull.sk.tsukuba.ac.jp/
3 years
Re: What's the difference between (purpose of) reject and ignore
by Mark Sapiro
On 6/25/22 13:22, denis.bitouze(a)univ-littoral.fr wrote:
> Mark Sapiro wrote:
>
>> They seem so to me, but in any case, if you look at Postorius ->
>> Settings -> Message Acceptance -> Default action to take when a
>> (non-)member posts to the list, they are described there in much more
>> detail.
>
> OK: not easy to figure out. A tooltip on the corresponding buttons would
> be helpful.
Agreed. See https://gitlab.com/mailman/postorius/-/issues/551
>>> BTW, no clue about an automatic banishment of emails from discarded
>>> messages?
>>
>> In the pop-up dialog from clicking the subject of a held post you can
>> set the sender's moderation status when discarding the post.
>
> Sorry but I can only see:
>
> - “--- Set member moderation ---” (non selectable, I guess)
> - “Hold for moderation”
> - “Reject (with notification)”
> - “Discard (no notification)”
> - “Accept immediately (bypass other rules)”
> - “Default processing”
>
> and cannot see how I can at the same time “Discard (no notification)”
> and “Banish the email of the post's sender”.
If you select “Discard (no notification)” from that dropdown and then
click Discard, the current message will be discarded and future messages
from that sender will be automatically discarded. Is that not what you want?
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
3 years, 10 months
Re: Welcome message issue
by Mark Sapiro
On 10/22/24 13:34, Mohsen Masoudfar wrote:
> Good afternoon
> I have an issue with welcome message.
>
> A list owner is requesting to update the welcome message for only one of their lists. They are requesting to change the default text and insert additional URLs pointing to sites related to their list.
> I know there is a URI field that you may include a web page. But this doesn't work and gets ignored.
If you are referring to the `uri` field in the template table this
should work if the `name` is `list:user:notice:welcome` and the
`context` is the list_id of the target list.
> - is there a mailman cli option to update the default template for a single list?
There is no specific cli option. A site admin can address this by
creating a custom template at Mailman's
var/templates/lists/LIST_ID/LC/list:user:notice:welcome.txt where
LIST_ID is the desired lists ID and LC is the preferred language.
The list owner can create a custom list:user:notice:welcome template via
Postorius.
>
> I couldn't find it in WUI.
Do you mean GUI? If so, since at least Postorius 1.2.0 there has been a
`Templates` choice in the second level nav in the lists view.
> I reviewed all parameters and variables of the list and couldn't find one that might be related to it.
>
> We are running an old version of Mailman 3.
--
Mark Sapiro <mark(a)msapiro.net> The highway is for gamblers,
San Francisco Bay Area, California better use your sense - B. Dylan
1 year, 6 months
Re: Struggle on upgrading mailman3-web to new version - Not Found: /mailman//
by Eggert Ehmke
This makes it even stranger. Removing the trailing / did not help in my case,
but replacing the mailman3 for mailman in the ProxyPass line did.
Would be really nice to solve this problem at the root.
Am Montag, 25. Oktober 2021, 18:09:21 CEST schrieb Mark Sapiro:
> On 10/25/21 1:45 AM, Stefan Bauer wrote:
> > Dear Users,
> >
> > I recently upraded mailman3 from Ubuntu 18 to 20. After accessing the
> > web-interface via
> >
> > https://my.mailinglistserver.local/mailman3/postorius/lists/
> >
> > I receive
> >
> > Not Found: /mailman//postorius/lists/
> > [pid: 1346851|app: 0|req: 4/4] 10.254.253.12 () {70 vars in 1369 bytes}
> > [Mon Oct 25 10:39:59 2021] GET /mailman3/postorius/lists/ => generated
> > 2821
> > bytes in 12 msecs (HTTP/1.1 404) 5 headers in 155 bytes (1 switches on
> > core
> > 1)
> >
> > Where does the wrong path come from (mailman vs. mailman3)
>
> See the thread at
> https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/U
> SXUYZYB5KIXT37APMCOAUZLKBRPARTL/
>
> ...
>
> > <IfModule mod_proxy_uwsgi.c>
> > ProxyPass /mailman3/favicon.ico !
> > ProxyPass /mailman3/static !
> > ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost/
> > </IfModule>
>
> Others have found that removing the trailing slash from
>
> ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost/
>
> to make it
>
> ProxyPass /mailman3 unix:/run/mailman3-web/uwsgi.sock|uwsgi://localhost
>
> fixes the issue.
4 years, 6 months
I have issue where it does not send emails on to people in the list I create.
by john_warland@hotmail.com
Hello,
I am quite new to Mailman3 and have been trying to get a working local test setup on a single VM (Centos07)
I have issue where if I send an email to the list. it does not send emails on to the people subscribed to that list.
Note the steps below were put together from memory after a few days of repeatably trying different things so there will be some inaccuracies
I have mailman running on same local box as postfix, postorius and hyperkitty.
I have root as the superuser in Postorius and have tried the following:
In unix shell created new user 'developer'
In unix shell created new user 'tester'
In shell send an email from developer user to tester:
echo 'Hello' | mailx -s 'Hello Subject line' tester(a)sandbox.mytest.com
Confirmed user tester received email in cat /home/tester/Maildir/new/ folder:
Return-Path: <developer(a)cloud7.sandbox.mytest.com>
X-Original-To: tester(a)cloud7.sandbox.mytest.com
Delivered-To: tester(a)cloud7.sandbox.mytest.com
Received: by cloud7.sandbox.mytest.com (Postfix, from userid 1000)
In Postorius web frontend:
Signed up as root
Received confirmation email in /root/Maildir/new/ folder so cut and pasted the Url in the email to activate account.
Created new list called testlist(a)sandbox.mytest.com
Logged out
Signed up as tester
Received confirmation email in /home/tester/Maildir/new/ folder so cut and pasted the Url to activate account.
Subscribed tester to the testlist.
Next in unix shell su as developer and send an email to testlist(a)sandbox.mytest.com
The root user gets the following email
Content-Transfer-Encoding: 7bit
Subject: Your message to testlist(a)cloud7.sandbox.mytest.com awaits moderator approval
From: testlist-bounces(a)cloud7.sandbox.mytest.com
To: developer(a)cloud7.sandbox.mytest.com
Message-ID: <158824480291.3035.17408340520496115243(a)localhost.localdomain>
Date: Thu, 30 Apr 2020 11:06:42 +0000
Precedence: bulk
X-Mailman-Version: 3.3.0
Your mail to 'testlist(a)cloud7.sandbox.mytest.com' with the subject
hello there 2
Is being held until the list moderator can review it for approval.
The message is being held because:
The message is not from a list member
Either the message will get posted to the list, or you will receive notification of the moderator's decision.
Once I have gone back into Postorius as root and approved the message, root user gets a second email:
Return-Path: <testlist-bounces(a)cloud7.sandbox.mytest.com>
X-Original-To: root(a)cloud7.sandbox.mytest.com
Delivered-To: root(a)cloud7.sandbox.mytest.com
Received: from localhost.localdomain (localhost [IPv6:::1])
by cloud7.sandbox.mytest.com (Postfix) with ESMTP id E056A84CE4
for <root(a)cloud7.sandbox.mytest.com>; Thu, 30 Apr 2020 11:09:10 +0000 (UTC)
Received: by cloud7.sandbox.mytest.com (Postfix, from userid 1000)
id 8F1B684CE4; Thu, 30 Apr 2020 11:06:41 +0000 (UTC)
Date: Thu, 30 Apr 2020 11:06:41 +0000
To: testlist(a)cloud7.sandbox.mytest.com
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Message-Id: <20200430110641.8F1B684CE4(a)sandbox.mytest.com>
From: developer(a)cloud7.sandbox.mytest.com
X-MailFrom: developer(a)cloud7.sandbox.mytest.com
X-Mailman-Rule-Hits: nonmember-moderation
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation
Message-ID-Hash: FAPTJKJRZG2ELSOSBRBIDOBWXP3Y5QAY
X-Message-ID-Hash: FAPTJKJRZG2ELSOSBRBIDOBWXP3Y5QAY
X-Mailman-Approved-At: Thu, 30 Apr 2020 11:09:10 +0000
X-Mailman-Version: 3.3.0
Precedence: list
Subject: [Testlist] hello there 2
List-Id: A test list <testlist.sandbox.mytest.com>
List-Help: <mailto:testlist-request@sandbox.mytest.com?subject=help>
List-Post: <mailto:testlist@sandbox.mytest.com>
List-Subscribe: <mailto:testlist-join@sandbox.mytest.com>
List-Unsubscribe: <mailto:testlist-leave@sandbox.mytest.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
A test email 2
_______________________________________________
Testlist mailing list -- testlist(a)sandbox.mytest.com
To unsubscribe send an email to testlist-leave(a)sandbox.mytest.com
At no point does the email appear in the tester(a)sandbox.mytest.com Maildir
Configs as follows..
==================================================================================================
/etc/postfix/main.cf:
==================================================================================================
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = cloud7.sandbox.mytest.com
mydomain = sandbox.mytest.com
myorigin = $mydomain
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost,
mail.$mydomain, www.$mydomain, ftp.$mydomain, sandbox.mytest.com
unknown_local_recipient_reject_code = 550
# Next line Obfuscated
mynetworks = 192.***.***.0/24, 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
recipient_delimiter = +
home_mailbox = Maildir/
debug_peer_level = 2
debug_peer_list = sandbox.mytest.com
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.10.1/samples
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
disable_dns_lookups = yes
owner_request_special = no
transport_maps = hash:/var/lib/mailman/data/postfix_lmtp
# Setting to nothing fixes 'Recepient address rejected: User unknown in local recipient table
local_recipient_maps =
relay_domains = hash:/var/lib/mailman/data/postfix_domains
==================================================================================================
/etc/mailman.cfg
==================================================================================================
[devmode]
enabled: yes
recipient: root(a)sandbox.mytest.com
[mailman]
# local = Recommended as installing mailman from source. Folder structure in /var/tmp/mailman
# fhs = /var/bin, /var/log, etc..
layout: fhs
[logging.database]
level: info
[mta]
# This config is for when mailman and the MTA (Postfix) are on the same host
incoming: mailman.mta.postfix.LMTP
outgoing: mailman.mta.deliver.deliver
lmtp_host: 127.0.0.1
lmtp_port: 8024
smtp_host: localhost
smtp_port: 25
configuration: python:mailman.config.postfix
[webservice]
hostname: localhost
port: 8001
use_https: no
admin_user: restadmin
admin_pass: restpass
api_version: 3.1
==================================================================================================
/etc/mailman-suite-1.0.0/mailman-suite_project/settings.py
==================================================================================================
In this file the main changes were:
DEBUG=True
SERVER_EMAIL = 'root(a)localhost.local'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Commented out three lines of code:
# if DEBUG == True:
# EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
# EMAIL_FILE_PATH = os.path.join(BASE_DIR, 'emails')
Complete file:
"""
Django Settings for Mailman Suite (hyperkitty + postorius)
For more information on this file, see
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'change-this-on-your-production-server'
# SECURITY WARNING: don't run with debug turned on in production!
# Have to keep it True atm as the css styles screw up when set to False
DEBUG = True
ADMINS = (
('Mailman Suite Admin', 'root@localhost'),
)
SITE_ID = 1
# Hosts/domain names that are valid for this site; required if DEBUG is False
# See https://docs.djangoproject.com/en/1.8/ref/settings/#allowed-hosts
ALLOWED_HOSTS = [
"localhost", # Archiving API from Mailman, keep it.
"MAILMAN_SERVER_ADDRESS", <--- I inject IP Address here
# Add here all production URLs you may have.
]
# Mailman API credentials
MAILMAN_REST_API_URL = 'http://localhost:8001'
MAILMAN_REST_API_USER = 'restadmin'
MAILMAN_REST_API_PASS = 'restpass'
MAILMAN_ARCHIVER_KEY = 'SecretArchiverAPIKey'
MAILMAN_ARCHIVER_FROM = ('127.0.0.1', '::1')
# Application definition
INSTALLED_APPS = (
'hyperkitty',
'postorius',
'django_mailman3',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'django_gravatar',
'compressor',
'haystack',
'django_extensions',
'django_q',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_mailman3.lib.auth.fedora',
'allauth.socialaccount.providers.openid',
'allauth.socialaccount.providers.github',
'allauth.socialaccount.providers.gitlab',
'allauth.socialaccount.providers.google',
# 'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.twitter',
'allauth.socialaccount.providers.stackexchange',
)
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django_mailman3.middleware.TimezoneMiddleware',
'postorius.middleware.PostoriusMiddleware',
)
ROOT_URLCONF = 'urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.template.context_processors.csrf',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django_mailman3.context_processors.common',
'hyperkitty.context_processors.common',
'postorius.context_processors.postorius',
],
},
},
]
WSGI_APPLICATION = 'wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
'default': {
# Use 'sqlite3', 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'ENGINE': 'django.db.backends.sqlite3',
# DB name or path to database file if using sqlite3.
'NAME': os.path.join(BASE_DIR, 'mailmansuite.db'),
# The following settings are not used with sqlite3:
'USER': 'mailmansuite',
'PASSWORD': 'mmpass',
# HOST: empty for localhost through domain sockets or '127.0.0.1' for
# localhost through TCP.
'HOST': '',
# PORT: set to empty string for default.
'PORT': '',
}
# Example for PostgreSQL (recommanded for production):
#'default': {
# 'ENGINE': 'django.db.backends.postgresql_psycopg2',
# 'NAME': 'database_name',
# 'USER': 'database_user',
# 'PASSWORD': 'database_password',
# 'HOST': 'localhost',
#}
}
# If you're behind a proxy, use the X-Forwarded-Host header
# See https://docs.djangoproject.com/en/1.8/ref/settings/#use-x-forwarded-host
# USE_X_FORWARDED_HOST = True
# And if your proxy does your SSL encoding for you, set SECURE_PROXY_SSL_HEADER
# https://docs.djangoproject.com/en/1.8/ref/settings/#secure-proxy-ssl-header
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_SCHEME', 'https')
# Other security settings
# SECURE_SSL_REDIRECT = True
# If you set SECURE_SSL_REDIRECT to True, make sure the SECURE_REDIRECT_EXEMPT
# contains at least this line:
# SECURE_REDIRECT_EXEMPT = [
# "archives/api/mailman/.*", # Request from Mailman.
# ]
# SESSION_COOKIE_SECURE = True
# SECURE_CONTENT_TYPE_NOSNIFF = True
# SECURE_BROWSER_XSS_FILTER = True
# CSRF_COOKIE_SECURE = True
# CSRF_COOKIE_HTTPONLY = True
# X_FRAME_OPTIONS = 'DENY'
# Password validation
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME':
'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME':
'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/var/www/example.com/static/"
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# URL prefix for static files.
# Example: "http://example.com/static/", "http://static.example.com/"
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
# BASE_DIR + '/static/',
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
'compressor.finders.CompressorFinder',
)
# Django 1.6+ defaults to a JSON serializer, but it won't work with
# django-openid, see
# https://bugs.launchpad.net/django-openid-auth/+bug/1252826
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
LOGIN_URL = 'account_login'
LOGIN_REDIRECT_URL = 'list_index'
LOGOUT_URL = 'account_logout'
# If you enable internal authentication, this is the address that the emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#default-from-email
# DEFAULT_FROM_EMAIL = "mailing-lists(a)you-domain.org"
DEFAULT_FROM_EMAIL = 'postorius(a)localhost.local'
# If you enable email reporting for error messages, this is where those emails
# will appear to be coming from. Make sure you set a valid domain name,
# otherwise the emails may get rejected.
# https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-SERVER_EMAIL
# SERVER_EMAIL = 'root(a)your-domain.org'
SERVER_EMAIL = 'root(a)localhost.local'
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# Compatibility with Bootstrap 3
from django.contrib.messages import constants as messages # flake8: noqa
MESSAGE_TAGS = {
messages.ERROR: 'danger'
}
#
# Social auth
#
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
# Django Allauth
ACCOUNT_AUTHENTICATION_METHOD = "username_email"
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_EMAIL_VERIFICATION = "mandatory"
# You probably want https in production, but this is a dev setup file
ACCOUNT_DEFAULT_HTTP_PROTOCOL = "http"
ACCOUNT_UNIQUE_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
'openid': {
'SERVERS': [
dict(id='yahoo',
name='Yahoo',
openid_url='http://me.yahoo.com'),
],
},
'google': {
'SCOPE': ['profile', 'email'],
'AUTH_PARAMS': {'access_type': 'online'},
},
'facebook': {
'METHOD': 'oauth2',
'SCOPE': ['email'],
'FIELDS': [
'email',
'name',
'first_name',
'last_name',
'locale',
'timezone',
],
'VERSION': 'v2.4',
},
}
#
# Gravatar
# https://github.com/twaddington/django-gravatar
#
# Gravatar base url.
# GRAVATAR_URL = 'http://cdn.libravatar.org/'
# Gravatar base secure https url.
# GRAVATAR_SECURE_URL = 'https://seccdn.libravatar.org/'
# Gravatar size in pixels.
# GRAVATAR_DEFAULT_SIZE = '80'
# An image url or one of the following: 'mm', 'identicon', 'monsterid',
# 'wavatar', 'retro'.
# GRAVATAR_DEFAULT_IMAGE = 'mm'
# One of the following: 'g', 'pg', 'r', 'x'.
# GRAVATAR_DEFAULT_RATING = 'g'
# True to use https by default, False for plain http.
# GRAVATAR_DEFAULT_SECURE = True
#
# django-compressor
# https://pypi.python.org/pypi/django_compressor
#
COMPRESS_PRECOMPILERS = (
('text/less', 'lessc {infile} {outfile}'),
('text/x-scss', 'sass -t compressed {infile} {outfile}'),
('text/x-sass', 'sass -t compressed {infile} {outfile}'),
)
# On a production setup, setting COMPRESS_OFFLINE to True will bring a
# significant performance improvement, as CSS files will not need to be
# recompiled on each requests. It means running an additional "compress"
# management command after each code upgrade.
# http://django-compressor.readthedocs.io/en/latest/usage/#offline-compression
# COMPRESS_OFFLINE = True
# Needed for debug mode
# INTERNAL_IPS = ('127.0.0.1',)
#
# Full-text search engine
#
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(BASE_DIR, "fulltext_index"),
# You can also use the Xapian engine, it's faster and more accurate,
# but requires another library.
# http://django-haystack.readthedocs.io/en/v2.4.1/installing_search_engines.h…
# Example configuration for Xapian:
#'ENGINE': 'xapian_backend.XapianEngine'
},
}
#
# Asynchronous tasks
#
Q_CLUSTER = {
'timeout': 300,
'save_limit': 100,
'orm': 'default',
}
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
#'level': 'ERROR',
'level': 'INFO',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'file':{
#'level': 'ERROR',
'level': 'INFO',
#'class': 'logging.handlers.RotatingFileHandler',
'class': 'logging.handlers.WatchedFileHandler',
'filename': os.path.join(BASE_DIR, 'logs', 'mailmansuite.log'),
'formatter': 'verbose',
},
'console': {
'class': 'logging.StreamHandler',
'formatter': 'simple',
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins', 'file'],
#'level': 'ERROR',
'level': 'INFO',
'propagate': True,
},
'django': {
'handlers': ['file'],
#'level': 'ERROR',
'level': 'INFO',
'propagate': True,
},
'hyperkitty': {
'handlers': ['file'],
#'level': 'DEBUG',
'level': 'INFO',
'propagate': True,
},
'postorius': {
'handlers': ['console', 'file'],
#'level': 'ERROR',
'level': 'INFO',
},
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(process)d %(name)s %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'root': {
'handlers': ['file'],
#'level': 'ERROR',
'level': 'INFO',
},
}
# Using the cache infrastructure can significantly improve performance on a
# production setup. This is an example with a local Memcached server.
#CACHES = {
# 'default': {
# 'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
# 'LOCATION': '127.0.0.1:11211',
# }
#}
# When DEBUG is True, don't actually send emails to the SMTP server, just store
# them in a directory. This way you won't accidentally spam your mailing-lists
# while you're fiddling with the code.
# Kept DEBUG=True as it breaks css styling when set to False so commented out this code as temp fix.
#if DEBUG == True:
# EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
# EMAIL_FILE_PATH = os.path.join(BASE_DIR, 'emails')
#
# HyperKitty-specific
#
# Only display mailing-lists from the same virtual host as the webserver
FILTER_VHOST = False
POSTORIUS_TEMPLATE_BASE_URL = 'http://localhost:8000'
try:
from settings_local import *
except ImportError:
pass
6 years
User account issue after importing data from Mailman 2.x server
by dgoldsmith@sans.org
We finally migrated from Mailman 2.x to a Mailman 3.x several months ago. We have had some issues with people who are active list members not being able to login with their user creds and when trying to use the 'Forgot Password' link to reset, being told their user account does not exist. They can submit email to the list and get copied on other list traffic.
I just started looking at a user and a list in both the Postorius and Django admin web UIs and found:
- in Postorius:
- list exists, has 20K plus subscribed members and has 3 list owners
- user exists and is subscribed to this list
- in Django:
- in HyperKitty section
- in the Mailing lists page, the list exists, no idea about members BUT it has 147 owners (also the same 147 moderators)
- in the Emails page, there are 149K plus entries
- in the Profiles page, there are 147 entries
- in the Accounts->Email addresses page, there are only 155 entries
- in the AUTHENTICATION AND AUTHORIZATION->Users page, there are 147 entries
Should Mailman 3.x have created user accounts for everyone when importing the data from the old server?
To correct the issue on a case by case basis, can I as a server admin do something via the web UI or CLI or do we need to remove the email address from the list and ask the person to create a new account using that address and to resubscribe to the specific list or other?
Thanks,
David Goldsmith
1 year, 6 months
Messages not being archived
by Mark Dale
Hi
I've just installed Mailman 3 using the Debian 11 package.
Mailman-Version: 3.3.3
HyperKitty version 1.3.4
Postorius Version 1.3.4
The first list that I've added is receiving and sending mail okay, however the messages are not being archived.
The logs report a HyperKitty error. I've copy-pasted that in at the end of this email.
I've checked the following:
==============================
/etc/mailman3/mailman.cfg contains:
[archiver.hyperkitty]
class: mailman_hyperkitty.Archiver
enable: yes
configuration: /etc/mailman3/mailman-hyperkitty.cfg
=============================
The list has archiving configured on in Postorius.
- Archive policy: Private archives
- Active archivers: hyperkitty
=============================
/etc/mailman3/mailman-hyperkitty.cfg has:
[general]
base_url: https://lists.mydomain.com/mailman3/archives
#base_url: https://lists.mydomain.com/mailman3/hyperkitty/
api_key: aaaaaaaaaaaaaaaaaaaaaa
=============================
/usr/share/mailman3-web/settings_local.py contains:
ALLOWED_HOSTS = [
"localhost",
'*'
]
MAILMAN_ARCHIVER_KEY = 'aaaaaaaaaaaaaaaaaaaaaa'
=============================
The headers of the emails received from the list show blanks for Archived-At and List-Archive:
X-Mailman-Version: 3.3.3
Precedence: list
Archived-At: <>
List-Archive: <>
=============================
/var/log/mailman3/mailman.log
The errors in the log contain messages (that I'm clueless about) regarding HyperKitty.
Sep 20 01:05:54 2022 (1293) HyperKitty failure on https://lists.mydomain.com/mailman3/archives/api/mailman/archive
Sep 20 01:05:54 2022 (1293) Exception in the HyperKitty archiver: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
...
<title>503 Service Unavailable</title>
...
Sep 20 01:05:54 2022 (1293) Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/mailman_hyperkitty/__init__.py", line 154, in _archive_message
url = self._send_message(mlist, msg)
File "/usr/lib/python3/dist-packages/mailman_hyperkitty/__init__.py", line 210, in _send_message
raise ValueError(result.text)
...
=============================
If anyone can point me in the right direction to get the archive happening, that'd be grand.
Cheers,
Mark
3 years, 7 months