
My project is doing testing of our mailing lists and came across what appears to be a bug. I believe it's not but she insists that it is. So before I do a bunch of research I wanted to post my steps to reproduce and ask for input. I'm including the full (redacted) mailing list config at the bottom of this post for reference.
- I have a closed mailing list, acme-closed@foo.com
- That mailing list has multiple subscribers, including user-1. I confirmed this by shelling into our server and running
mailman members acme-closed@foo.com --role=any
on the OS command line. This showed all of the subscribers, including user-1. - I sent an mail FROM user-1 TO acme-closed, and it was received. And by that I mean I received an email TO acme-closed, FROM user-1. I also received the same email emails sent to the other subscribers since I use a catch all address for local testing.
- In our system I closed user-1's account (which removes that user from the mailing list). I confirmed this by running the
mailman members
command and noting that user-1 was no longer a subscriber. - I sent another mail FROM user-1 TO acme-closed, and received two emails. One showed what appears to be a successful send to the mailing list. It showed acme-closed as the TO address, and user-1 as the sender. But I also received a second email TO user-1 FROM acme-closed whose body reads "Your message to the Acme-closed mailing-list was rejected for the following reasons: The message is not from a list member. The original message as received by Mailman is attached."
So my PM is insistent that the first email is proof that there's a bug. "No e-mail sent from an e-mail address for a closed account should be sent to the mailing list." I on the other hand am arguing that the second email is proof that the email _wasn't_ actually sent to the list, and was instead a sort of bounceback to the user, However it's tough to argue with her logic because I agree the first email seems to have been incorrectly sent.
Can you help me understand why the first email was sent, and if there's a way to prove with certainty that Mailman is behaving correctly?
accept_these_nonmembers: []
acceptablealias: []
admin_immed_notify: True
admin_notify_mchanges: True
administrators: [5 <Members>]
administrivia: True
advertised: False
allow_list_posts: True
anonymous_list: False
archive_policy: ArchivePolicy.private
archive_rendering_mode: ArchiveRenderingMode.text
autorespond_owner: ResponseAction.none
autorespond_postings: ResponseAction.none
autorespond_requests: ResponseAction.none
autoresponse_grace_period: 90 days, 0:00:00
autoresponse_owner_text:
autoresponse_postings_text:
autoresponse_request_text:
bounce_info_stale_after: 7 days, 0:00:00
bounce_matching_headers:
bounce_notify_owner_on_bounce_increment: False
bounce_notify_owner_on_disable: True
bounce_notify_owner_on_removal: True
bounce_score_threshold: 5
bounce_you_are_disabled_warnings: 3
bounce_you_are_disabled_warnings_interval: 7 days, 0:00:00
bounces_address: acme-closed-bounces@foo.com
collapse_alternatives: True
convert_html_to_plaintext: False
created_at: 2025-07-18 17:22:54.921936
data_path: /var/mailman/lists/acme-closed.@foo.com
default_member_action: Action.accept
default_nonmember_action: Action.reject
description: closed
digest_is_default: False
digest_last_sent_at: None
digest_members: []
digest_send_periodic: True
digest_size_threshold: 30.0
digest_volume_frequency: DigestFrequency.monthly
digests_enabled: True
discard_these_nonmembers: []
display_name: Acme-closed
dmarc_addresses: []
dmarc_mitigate_action: DMARCMitigateAction.munge_from
dmarc_mitigate_unconditionally: False
dmarc_moderation_notice:
dmarc_wrapped_message_text:
domain: <Domain @foo.com>
emergency: False
encode_ascii_prefixes: False
filter_action: FilterAction.discard
filter_content: False
filter_extensions: []
filter_types: []
first_strip_reply_to: None
forward_auto_discards: True
forward_unrecognized_bounces_to: UnrecognizedBounceDisposition.discard
fqdn_listname: acme-closed@foo.com
gateway_to_mail: False
gateway_to_news: False
hold_these_nonmembers: []
id: 2
include_rfc2369_headers: True
info:
join_address: acme-closed-join@foo.com
last_digest_recipients: []
last_post_at: 2025-07-18 17:26:28.155475
leave_address: acme-closed-leave@foo.com
linked_newsgroup:
list_id: acme-closed.@foo.com
list_name: acme-closed
mail_host: @foo.com
max_days_to_hold: 0
max_message_size: 20000
max_num_recipients: 0
member_moderation_notice:
member_roster_visibility: RosterVisibility.moderators
members: [6 members]
metadata: MetaData()
moderator_password: None
moderators: [5 Members]
newsgroup_moderation: NewsgroupModeration.none
next_digest_number: 1
next_request_id: 1
nntp_prefix_subject_too: True
no_reply_address: noreply@foo.com
nonmember_rejection_notice:
nonmembers: [2 Members]
obscure_addresses: True
owner_address: acme-closed-owner@foo.com
owner_chain: default-owner-chain
owner_pipeline: default-owner-pipeline
owners: []
pass_extensions: []
pass_types: []
personalize: Personalization.none
post_id: 2
posting_address: acme-closed@foo.com
posting_chain: default-posting-chain
posting_pipeline: default-posting-pipeline
preferred_language: <Language [en] English (USA)>
process_bounces: False
regular_members: [6 Members]
reject_these_nonmembers: []
reply_goes_to_list: ReplyToMunging.no_munging
reply_to_address: None
request_address: acme-closed-request@foo.com
require_explicit_destination: True
respond_to_post_requests: False
scrub_nondigest: False
send_goodbye_message: False
send_welcome_message: False
subject_prefix: [Acme-closed]
subscribe_address: acme-closed-subscribe@foo.com
subscribers: 13 Members]
subscription_policy: SubscriptionPolicy.moderate
topics: []
topics_bodylines_limit: 5
topics_enabled: False
unsubscribe_address: acme-closed-unsubscribe@foo.com
unsubscription_policy: SubscriptionPolicy.confirm
usenet_watermark: None
volume: 1