Score:0

วิธีกรองและส่งข้อความใน Procmail

ธง in

ฉันเขียนหัวเรื่องใหม่สำหรับจดหมายขาเข้าบางฉบับโดยขึ้นอยู่กับฟิลด์ TO:

:0fhw
* ! ^TO_user@domain\.com\>
* ^TO_[^<>@ ]+@โดเมน\.com\>
* ^หัวเรื่อง:\/.+
| /usr/local/bin/formail -I"เรื่อง: [SPAM]$MATCH"

รหัสด้านบน (จากคำถามก่อนหน้าของฉัน procmail เขียนหัวเรื่องใหม่หากผู้ใช้ผู้รับอีเมลไม่ผ่านการทดสอบการจับคู่) ทำงานได้อย่างสมบูรณ์ - หากฉันได้รับอีเมลจากสิ่งอื่นที่ไม่ใช่ [email protected] บรรทัดหัวเรื่องจะถูกเขียนใหม่เป็น [SPAM] (หัวเรื่องเดิม)

แต่ฉันต้องการทำหลายเงื่อนไขเช่นนี้ - บล็อกการทำงานด้านบนจะเป็นอันสุดท้าย แต่ก่อนหน้านั้น ฉันต้องการเขียนบรรทัดหัวเรื่องใหม่หาก TO ตรงกับที่อยู่อื่น

ดังนั้นฉันจึงเพิ่มบล็อกนี้ไว้ด้านบน:

:0fh
* ^TO_special@domain\.com
* ^หัวเรื่อง:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH"
$ค่าเริ่มต้น

... และใช้งานได้ - อีเมลที่ส่งถึง '[email protected]' จะเขียนหัวเรื่องใหม่

ปัญหาคือ Procmail ไม่หยุด - มันจะย้ายไปยัง ต่อไป บล็อกและเขียนใหม่อีกครั้ง เลยส่งอีเมล์ไปที่ พิเศษ@domain.com เขียนหัวเรื่องใหม่เป็น:

[สแปม] [พิเศษ] หัวเรื่องเดิม บลา บลา

ทำไมถึงเป็นเช่นนี้? ทำไมไม่ $ค่าเริ่มต้น การดำเนินการในตอนท้ายของบล็อกแรกทำให้ Procmail หยุดการประมวลผลสำหรับอีเมลส่วนนั้นหรือไม่

ฉันจะจับคู่บล็อกใหม่และ หยุด กำลังประมวลผลจดหมายชิ้นนั้นและเพิ่งทำเสร็จ?

Score:2
ธง ar

เดอะ $ค่าเริ่มต้น ในตอนท้ายเป็นข้อผิดพลาดทางไวยากรณ์ คุณไม่สามารถระบุการดำเนินการหลายรายการในสูตรอาหารเดียวกันได้

สิ่งที่คุณทำได้คือแบ่งออกเป็นสองสูตร หรือในกรณีนี้ ให้รวมการเขียนใหม่และการส่งมอบเข้าด้วยกัน

:0:
* ^TO_special@domain\.com
* ^หัวเรื่อง:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH" >>$DEFAULT

นี้ไม่มีอีกต่อไป แฟล็กเนื่องจากเราต้องการผลักดันข้อความทั้งหมดผ่าน (ไม่ใช่เฉพาะส่วนหัว ซึ่ง ชม. ไม่) และเราต้องการส่งมอบ ไม่ใช่บันทึกผลลัพธ์ของไปป์ไลน์กลับเข้าไปใน Procmail (ซึ่ง ทำ).

นี้สันนิษฐานว่า $ค่าเริ่มต้น เป็นไฟล์ไม่ใช่ไดเร็กทอรี ดังนั้นเราจึงเพิ่มวินาทีด้วย : เพื่อระบุการล็อค

หากคุณต้องการระบุการกระทำสองอย่างภายใต้เงื่อนไขชุดเดียว คุณสามารถใช้เครื่องหมายปีกกาที่มีสูตรอาหารหลายสูตรอยู่ภายใน สูตรอาหารแต่ละสูตรสามารถมีเงื่อนไขเป็นศูนย์หรือมากกว่าแต่มีเพียงหนึ่งการกระทำเท่านั้น

:0
* ^TO_special@domain\.com
* ^หัวเรื่อง:\/.+
{
    :0fhw
    | formail -I"เรื่อง: [พิเศษ]$MATCH"

    :0:
    $ค่าเริ่มต้น
}

แต่ในกรณีนี้ นั่นเป็นความยุ่งยากที่ไม่จำเป็น

(มันอาจจะเป็นสำนวนมากกว่าที่จะย้าย ^หัวเรื่อง: เงื่อนไขการ ฟอร์เมลล์ สูตรที่มันมีเหตุผล แต่นี่เป็นเพียงการสัมผัสกัน แต่อย่างใด)

นอกจากนี้ สัมผัสกัน, บางทีให้แน่ใจว่าคุณ เส้นทาง ถูกต้องตั้งแต่เริ่มต้นของคุณ .procmailrc ดังนั้นคุณจึงสามารถหลีกเลี่ยงการสะกดเส้นทางแบบเต็มไปยังโปรแกรมอรรถประโยชน์ภายนอก เช่น ฟอร์เมลล์.

tripleee avatar
ar flag
โปรดสังเกตการอัปเดตสั้น ๆ wrt locking ในขณะนี้ และขอบคุณสำหรับการยอมรับ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา