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

D1.2ca Send the remaining datamailer mail through the package mail app and retire the datamailer client

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

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Refactor
Clarity
Mostly clear
Activity status
Active
Tech stack
django, python
Domain
backend

Research direction

First confirm D1.2b is done in docs/plan/STATUS.md, then read docs/plan/phase-1.md section D1.2ca, AGENTS.md, _docs/PROCESS.md, and _docs/specs/. Trace the named email_templates/, community_base.mail.send, preference page and MAIL_PREFERENCE_RESOLVER entry points; verify with the listed grep, manage.py checks, lint/type checks, and affected Django suites that no product path contacts datamailer.

Written by the indexing model from the issue text.

Description

Plan issue D1.2ca, phase 1 of the community-base unification plan.

Spec: docs/plan/phase-1.md, section D1.2ca, in DataTalksClub/community-base. Status is tracked in docs/plan/STATUS.md there, which stays the source of truth.

Depends on: D1.2b. Do not start until every one of them is done in STATUS.md.

Currently blocked in STATUS.md: website#372 branch issue-372 gates green; dev deploy blocked on a fully green main CI run (website#345: the corpus-bound django test clusters are fixed, merged as website fc534fcf; the Playwright lane remains in flight); worker self-check IAM grant merged as aws-infra 3acefe43 but not yet effective: the protected development apply is blocked on the sandbox-account trust-policy bootstrap (aws-infra#56)

Process

This repository's AGENTS.md and _docs/PROCESS.md govern this work, with _docs/specs/ as the product authority. The plan says what to build and how to verify it; the site process says how work is done here.

Spec

Repository: DataTalksClub/website. Depends on: D1.2b. Split from the combined retirement issue for one-landing scoping.

Steps

  1. Commit the remaining datamailer purposes as templates in email_templates/ (homework
    submission confirmation, homework score notification, project score notification, peer
    review assignment) and send them through community_base.mail.send with replay-safe keys
    derived from the business objects the datamailer idempotency keys used.
  2. Replace the remote datamailer preference store: the three category opt-outs become fields
    on the site user, the account email-preferences page reads and writes them, and the site
    MAIL_PREFERENCE_RESOLVER suppresses on an explicit opt-out (unset and userless sends
    stay allowed; Relay-side global unsubscribe still applies). Provide a command that imports
    opt-outs from a datamailer preferences export; the production import is an operator step
    before the D1.3 freeze.
  3. Delete course_management/datamailer*, course_management/datamailer_templates/,
    course_management/email_templates.py, the course_management/datamailer_outbox_*
    modules, the datamailer campaign/status/audit/sync management commands, the studio
    datamailer views and their URL entries, the datamailer send-audits API view and the
    datamailer webhook route. Studio email pages come from the package.

Verification

  • grep -rln datamailer --include=*.py . | grep -v migrations lists only email_app/ and
    data/ remnants.
  • manage.py check, makemigrations --check --dry-run, ruff check/format, mypy; the
    affected Django suites pass.

Done when

  • no product code path contacts the datamailer; every send goes through the package
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Getting set up

  • Ships a Dockerfile or Docker Compose file
  • No 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 DataTalksClub/website

All issues in DataTalksClub/website

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.