Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

A bounce in one organization suppresses the recipient for every organization

Open
#320 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Active
Tech stack
python
Domain
backend

Research direction

Start by reading services/email/msa/models.py, especially SuppressionQuerySet.is_suppressed, then trace the only writer in services/email/msa/tasks.py at record_bounce. Determine the intended organization scope, expiry, and owner-visible behavior for cross-organization bounces; done means those decisions are recorded and covered by the relevant behavior tests.

Written by the indexing model from the issue text.

Description

bug real

A bounce in one organization suppresses the recipient for every organization. One tenant can block a shared recipient address for all tenants for 30 days.

SuppressionQuerySet.is_suppressed treats a bounce entry from any organization as suppressing for 30 days, regardless of which organization is sending:

models.Q(org=org)
| models.Q(reason=self.model.Reason.BOUNCE, created_at__gte=bounce_cutoff)

A single permanent 5xx for a shared recipient address therefore blocks that address relay-wide for every other tenant. Examples of such a 5xx are a policy refusal, a spam block, or a full mailbox at the receiving host. The block also hits tenants that have a healthy relationship with the recipient. The suppression entry carries no indication of which tenant produced it. There is no owner-visible reason beyond the word "bounce".

Evidence:

  • services/email/msa/models.py: SuppressionQuerySet.is_suppressed
  • services/email/msa/tasks.py: record_bounce, the only writer of bounce entries

Decisions to make:

  • Must a cross-organization bounce suppress at all?
  • Must it expire faster than an organization's own bounce?
  • How does an organization learn that a recipient it never mailed is suppressed for it?

Found during the sandbox-credentials change (#259). This fault is older than that change.

Dominant language
Python
Stars
4
Forks
0
Avg merge
2h 40m
Merged PRs (30d)
163

Getting set up

  • Ships a Dockerfile or Docker Compose file
  • Has a pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from codingjoe/relay

All issues in codingjoe/relay

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.