Puncte:0

Cum se filtrează și se livrează un mesaj în Procmail

drapel in

Rescriu subiectul pentru anumite e-mailuri primite, în funcție de câmpul TO::

:0fhw
* ! ^TO_user@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subiect:\/.+
| /usr/local/bin/formail -I"Subiect: [SPAM]$MATCH"

Codul de mai sus (din întrebarea mea anterioară procmail rescrie linia de subiect dacă utilizatorul destinatar e-mailului nu reuşeşte testul de potrivire) funcționează perfect - dacă primesc e-mail de la altceva decât [email protected], subiectul este rescris ca [SPAM] (subiect original)

Dar aș dori să fac mai multe condiționale ca acesta - blocul de lucru, de mai sus, va fi cel final, dar înainte de asta, aș dori să rescriu linia de subiect dacă TO se potrivește cu o altă adresă.

Așa că am adăugat acest bloc chiar deasupra lui:

:0fh
* ^TO_special@domain\.com
* ^Subiect:\/.+
| /usr/local/bin/formail -I"Subiect: [SPECIAL]$MATCH"
$DEFAULT

... și asta funcționează - e-mailurile trimise la „[email protected]” primesc subiectul rescris.

Problema este că Procmail nu se oprește - se mută pe Următorul blochează și îl rescrie din nou. Deci e-mailuri trimise către [email protected] să-și rescrie subiectul ca:

[SPAM] [SPECIAL] Subiect original bla bla

De ce asta? De ce nu $DEFAULT acțiunea de la sfârșitul primului bloc determină Procmail să oprească procesarea pentru acea bucată de e-mail?

Cum pot potrivi noul bloc și Stop procesați acea bucată de e-mail și terminați cu ea?

Puncte:2
drapel ar

The $DEFAULT la sfârșit este o eroare de sintaxă. Nu puteți specifica mai multe acțiuni pentru aceeași rețetă.

Ceea ce poți face este să-l împărți în două rețete; sau, în acest caz, combinați pur și simplu rescrierea și livrarea.

:0:
* ^TO_special@domain\.com
* ^Subiect:\/.+
| /usr/local/bin/formail -I"Subiect: [SPECIAL]$MATCH" >>$DEFAULT

Aceasta nu mai are fh semnalează pentru că vrem să transmitem întregul mesaj (nu doar anteturile, care h face) și vrem să livrăm, nu să captăm rezultatele conductei înapoi în Procmail (care f face).

Aceasta presupune că $DEFAULT este un fișier, nu un director; și astfel adăugăm și o secundă : pentru a specifica blocarea.

Dacă doriți să specificați două acțiuni într-un singur set de condiții, puteți utiliza acolade cu mai multe rețete în interiorul lor. Fiecare rețetă poate avea zero sau mai multe condiții, dar o singură acțiune.

:0
* ^TO_special@domain\.com
* ^Subiect:\/.+
{
    :0fhw
    | formail -I"Subiect: [SPECIAL]$MATCH"

    :0:
    $DEFAULT
}

dar în acest caz este o complicație inutilă.

(Ar fi, poate, de asemenea, mai idiomatic să mutați ^ Subiect: condiție la formail rețetă în care îi aparține în mod logic, dar aceasta este oricum doar o tangentă.)

De asemenea, tangenţial, poate asiguraţi-vă că dvs CALE este corect chiar la începutul dvs .procmailrc astfel încât să puteți evita să scrieți calea completă către utilități externe, cum ar fi formail.

tripleee avatar
drapel ar
Vă rugăm să observați o scurtă actualizare cu blocarea chiar acum. Și mulțumesc pentru acceptare.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.