mail.py reiht Mails in mail_ausgang ein (Migration 0009), eine Versandschleife im Dienst liefert sie per SMTP mit Anmeldung ein und wiederholt bei Fehlern. Voreinstellung ist Trockenlauf; das Passwort kommt als systemd-Credential. Dazu scripts/testmail.py und Tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
"""
|
|
Testmail über die Ausgangstabelle verschicken - prüft Konfiguration,
|
|
Zugangsdaten und Zustellbarkeit (SPF/DKIM/DMARC in den Kopfzeilen der
|
|
empfangenen Mail ansehen). Beispiel:
|
|
|
|
KUNDENPLATTFORM_DATABASE_URL=... KUNDENPLATTFORM_MAIL_MODUS=smtp ... \\
|
|
.venv/bin/python scripts/testmail.py --an jemand@example.org
|
|
|
|
Ohne KUNDENPLATTFORM_MAIL_MODUS=smtp läuft das als Trockenlauf.
|
|
"""
|
|
|
|
import argparse
|
|
import os
|
|
import sys
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
|
import mail # noqa: E402
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--an", required=True, help="Empfängeradresse")
|
|
args = parser.parse_args()
|
|
|
|
if not os.environ.get("KUNDENPLATTFORM_DATABASE_URL"):
|
|
sys.exit("KUNDENPLATTFORM_DATABASE_URL ist nicht gesetzt.")
|
|
|
|
try:
|
|
mail_id = mail.einreihen(
|
|
args.an,
|
|
"[Tuxflotte] Testmail",
|
|
"Dies ist eine Testmail der Tuxflotte-Kundenplattform.\n"
|
|
"Wenn sie ankommt, funktioniert der Mailversand.\n",
|
|
zweck="testmail",
|
|
)
|
|
except ValueError as fehler:
|
|
sys.exit(str(fehler))
|
|
|
|
# Läuft der Dienst, kann seine Versandschleife die Mail zuerst greifen -
|
|
# der Status unten stimmt in beiden Fällen.
|
|
mail.ausgang_abarbeiten()
|
|
status = mail.mail_status(mail_id)
|
|
|
|
print(f"Status: {status['status']} (Versuche: {status['versuche']})")
|
|
if status["letzter_fehler"]:
|
|
print(f"Fehler: {status['letzter_fehler']}")
|
|
if status["status"] == "wartet":
|
|
print("Die Mail bleibt in der Ausgangstabelle und wird von der Versandschleife erneut versucht.")
|
|
|
|
sys.exit(0 if status["status"] in ("gesendet", "trockenlauf") else 1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|