53. pepsi-stage-vacation

Mail beantworten, die eintrifft, während der Empfänger abwesend ist.

53.1. Rolle

pepsi-stage-vacation ist der Abwesenheitsbeantworter. Ist der Umschlagempfänger an dem Tag abwesend, an dem die Stage läuft, sendet sie die Abwesenheitsnotiz dieses Empfängers an den Absender und markiert das Subject: der weitergeleiteten Kopie. Die Nachricht selbst geht immer zu NEXT_STAGE weiter: Die Stage fügt eine Antwort hinzu; sie hält Mail nie zurück, verwirft sie nie und erzeugt nie einen Bounce. Referenz: pepsi-stage-vacation(1).

53.2. Wessen Abwesenheit

Die Stage liest ihre Optionen über die Überschreibungsschicht je Adresse, sodass es die des Umschlagempfängers sind. Das ist es, was eine einzige Stage beide Fälle bedienen lässt, die diese Funktion abdecken muss:

[stage-<name>] in pepsi.conf     the operator's default: normally nobody away
  < config_override 'global'       a national holiday, for everybody
  < config_override 'domain:<d>'   a holiday for one served domain
  < config_override 'address:<a>'  a leave the operator enters for someone
  < pepsi.settings[<a>]            the account owner's own leave dates

Die Kette ist keine Erfindung dieser Stage — Konfiguration beschreibt sie, und jede Stage bekommt sie —, aber dies ist die Stage, die sie ganz ausnutzt. Operatoren tragen einen Feiertag mit pepsi-config ein, den Urlaub eines Benutzers mit pepsi-settings; vacation in den EDITABLE_STAGES von pepsi-stage-edit-settings aufzuführen erlaubt Kontoinhabern, ihre eigenen Datumsangaben per E-Mail zu setzen.

Ein Datensatz, der noch mehrere Empfänger trägt, die sich eine Konfiguration teilen (zwei Aliase einer Person, oder alle während eines Feiertags), wird in einen Empfänger je Datensatz aufgeteilt, bevor irgendeine Notiz gebaut wird: Jede Notiz kommt von einer Adresse, und jede Ratenbegrenzung gilt für eine Adresse.

53.3. Wann eine Notiz gesendet wird

Der heutige Tag — in der Zeitzone des Servers, aufgelöst zur Laufzeit der Stage — fällt in einen der VACATION_RANGES (ganze Tage, Grenzen eingeschlossen; 2026-08-01: ist ein offener Urlaub), und die Nachricht ist eine, die zu beantworten angemessen ist. Der vollständige RFC-3834-Regelsatz steht in der Handbuchseite; die Kurzfassung ist, dass Pepsi weder Bounces noch Mailinglisten-Mail beantwortet, nichts mit Auto-Submitted: oder Precedence: bulk Markiertes, keine Dienstabsender wie MAILER-DAEMON oder <list>-request, keine Zustellberichte, keine Mail, die eine vorgelagerte Stage als Spam markiert hat, keine Mail, die der Empfänger sich selbst geschickt hat, und keine Mail, die den Empfänger nicht in To:/Cc: nennt. Obendrein wird ein Korrespondent höchstens einmal je SUPPRESS_DAYS (Standardwert 7) beantwortet.

Ein Abwesenheitsbeantworter ist die eine Komponente, die je empfangener Nachricht eine Nachricht erzeugt, weshalb ihn vier Dinge zugleich begrenzen: der Null-Umschlagabsender der Notiz (nichts kann darauf antworten), das Auto-Submitted: auto-replied, das sie trägt, die Ratenbegrenzung je Korrespondent (ein Beantworter, der beides ignoriert, kostet immer noch eine Nachricht pro Woche) und das UNIQUE-Warteschlangentoken, das eine wiederholte Stage keine zweite Kopie senden lässt.

53.4. Die Nachricht

Der Notiztext ist eine Mustache-Vorlage, die in einer INI-Option statt in einer TEMPLATE_DIR-Datei liegt, denn dies ist die Nachricht, die Benutzer selbst schreiben, und die Einstellungsschicht trägt Optionen, keine Dateien. Je Kandidatensprache bevorzugt die Stage MESSAGE_<LANG> im eigenen Abschnitt der Stage (der eigene Text des Benutzers) und fällt auf <LANG> in DEFAULT_MESSAGE_SECTION zurück — standardmäßig [pepsi-vacation-default-message], das mit zehn Sprachen in ${DATADIR}/config.d ausgeliefert wird, sodass ein funktionierender Standardwert existiert, bevor irgendjemand etwas konfiguriert.

Die Sprache wird aus state.language gewählt (geschrieben von pepsi-stage-detect-language) und fällt auf DEFAULT_LANGUAGE zurück. Die Felder sind {{SENDER_NAME}}, {{VACATION_START}}, {{VACATION_END}} und {{EMERGENCY_CONTACT}}; die letzten beiden sind abwesend statt leer, wenn sie nicht zutreffen, sodass eine Vorlage verzweigen kann. Da eine INI-Option eine Zeile ist, werden zwei Leerzeichen zu einem Zeilenumbruch (vier zu einem Absatzumbruch).

53.5. Platzierung

Nach pepsi-stage-detect-language (wegen der Sprache), nach pepsi-stage-check-whitelist und pepsi-stage-anti-spam (damit Spam und unbezahlte Mail keine Antwort nach sich ziehen) und nach pepsi-stage-aliases, falls Aliase im Einsatz sind (die Konfiguration ist auf den Umschlagempfänger geschlüsselt, der dann die eigene Adresse des Benutzers sein muss).

Das Subject: umzuschreiben macht die DKIM-Signatur des Urhebers und Pepsis eigene ARC-Nachrichtensignatur ungültig, die es beide abdecken — harmlos auf einem Zweig, der in lokaler Zustellung endet, was die obige Platzierung ist und diejenige, auf die sich pepsi-stage-decrypt bereits verlässt. Setzen Sie auf einem Zweig, der die Nachricht weiterleitet, VACATION_TAG = none.

53.6. Konfiguration

[stage-<name>]: PROGRAM = pepsi-stage-vacation, NEXT_STAGE (verpflichtend), RESPONSE_STAGE (verpflichtend — wohin die Notiz injiziert wird, um signiert und weitergeleitet zu werden), VACATION_RANGES, DEFAULT_LANGUAGE, DEFAULT_MESSAGE_SECTION, EMERGENCY_CONTACT, VACATION_TAG, SUPPRESS_DAYS, REQUIRE_ADDRESSED_TO und SUBJECT_PREFIX. pepsi-setup lehnt einen fehlerhaften Datumsbereich, ein nicht auflösbares NEXT_STAGE/RESPONSE_STAGE und eine Konfiguration ohne Nachricht für DEFAULT_LANGUAGE ab. Siehe pepsi-stage-vacation(1) und Konfiguration.

53.7. State

  • Eingaben: state.language (für die Sprache der Notiz), state.local_origin (eine lokal eingelieferte Nachricht wird nie beantwortet), state.spam.

  • Ausgaben: state.vacation hält fest, dass eine Notiz hinausging, für wen, für welchen Zeitraum und in welcher Sprache — sodass pepsi-stage-if darauf verzweigen kann und pepsi-queue es anzeigt. Sonst wird nichts in state berührt, und state.dsn bleibt erhalten.

  • Übergänge: immer weiterschalten zu NEXT_STAGE; eine separate Null-Absender-Notiz wird bei RESPONSE_STAGE injiziert.

53.8. Datenbank

pepsi.vacation_reply (ein Datensatz je beantwortetem Korrespondenten) und vacation_should_reply(), das das Recht zu antworten in einer einzigen Anweisung beansprucht und festhält, sodass nicht zwei Worker denselben Korrespondenten beantworten können. Gealterte Datensätze werden nebenbei entfernt; es gibt keine Aufgabe einzuplanen.

53.9. Siehe auch

pepsi-stage-detect-language, pepsi-stage-edit-settings, pepsi-settings, pepsi-config, Unterstützte Funktionen, pepsi-stage-vacation(1).