นี่คือคำสั่ง gurgitate-mail ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS
โครงการ:
ชื่อ
gurgitate-mail - ตัวกรองเมลที่ใช้งานง่าย
เรื่องย่อ
gourgitate-mail
DESCRIPTION
"gurgitate-mail" เป็นโปรแกรมที่อ่านจดหมายของคุณและกรองตาม
.gurgitate-rules.rb ไฟล์ในโฮมไดเร็กทอรีของคุณ ไฟล์การกำหนดค่าใช้ไวยากรณ์ Ruby
และค่อนข้างคล่องตัว
โดยทั่วไปจะเรียกผ่าน your .ซึ่งไปข้างหน้า ไฟล์:
"|/path/to/gurgitate-mail"
หรือผ่านของคุณ .procmailrc ไฟล์:
: 0:
- /path/to/gurgitate-mail
หรือหากคุณเป็นผู้ดูแลระบบที่ไซต์ของคุณ หรือผู้ดูแลระบบของคุณเป็นมิตร คุณสามารถ
ใช้ gurgitate-mail เป็นตัวแทนจัดส่งในพื้นที่ สำหรับ postfix ให้ใส่
mailbox_command=/opt/bin/gurgitate-mail
in /etc/postfix/main.cf. หากคุณใช้ MTA อื่น และกำหนดค่า gurgitate-mail เป็น a
ตัวแทนจัดส่งในพื้นที่ กรุณาบอกฉัน! ฉันต้องการรวมสิ่งนี้ไว้ในเอกสารประกอบ
การกำหนดค่า ไฟล์
มีไฟล์การกำหนดค่าสามไฟล์ที่ใช้โดย gurgitate-mail: ไฟล์สองไฟล์ทั่วทั้งระบบและไฟล์
ประการที่สามคือไฟล์กฎผู้ใช้
ไฟล์การกำหนดค่าทั้งระบบทั้งสองไฟล์คือ /etc/gurgitate-กฎ และ
/etc/gurgitate-rules-default. สิ่งเหล่านี้ได้รับการประมวลผลก่อนและหลังกฎของผู้ใช้
ตามลำดับ
/etc/gurgitate-กฎ ใช้เพื่อจัดการกับความต้องการการกรองทั้งระบบ: การตั้งค่าเริ่มต้น
สไตล์กล่องจดหมายเป็น Maildir แทนที่จะเป็น MBox เริ่มต้น การตั้งค่าไดเรกทอรีสปูล สิ่งของ
เช่นนั้น.
ไฟล์คอนฟิกูเรชันผู้ใช้ is $HOME/.gurgitate-กฎ (หรืออีกทางหนึ่ง
$HOME/.gurgitate-rules.rb. ทั้งงาน) คุณใส่กฎของคุณเองที่นี่ หากผู้ใช้
ไฟล์การกำหนดค่าไม่พบ "การส่งคืน" ระหว่างการประมวลผล จากนั้นไฟล์เพิ่มเติม
กฎที่มีอยู่ใน /etc/gurgitate-rules-default กำลังดำเนินการ ถ้านั่นยังไม่กลับมา
จากนั้นข้อความเมลจะถูกบันทึกลงในตำแหน่งสปูลเมลเริ่มต้น
หากใช้ตัวเลือก "-f" บนบรรทัดคำสั่ง ไฟล์ที่ระบุจะถูกใช้และ
กฎเริ่มต้นจะไม่ สามารถใช้ตัวเลือก "-f" ได้มากกว่าหนึ่งครั้ง:
gurgitate-mail -f ทดสอบกฎ -f เพิ่มเติมกฎ
การกำหนดค่า พารามิเตอร์
มีพารามิเตอร์หลายอย่างที่คุณสามารถตั้งค่าให้เปลี่ยนวิธีการส่งเมล์
ประพฤติ คุณตั้งค่าพารามิเตอร์ config โดยพูดว่า:
ส่งอีเมล์ "/usr/sbin/sendmail"
ซึ่งตั้งค่าพารามิเตอร์ "sendmail" เป็น "/usr/sbin/sendmail".
คือจดหมาย
ไดเร็กทอรีที่คุณต้องการใส่โฟลเดอร์เมลเข้าไป ค่าเริ่มต้นนี้เป็น $HOME/Mail
ไฟล์บันทึก
ที่ที่คุณไป gurgitate-mail ของข้อความบันทึกที่จะไป ตำแหน่งมาตรฐานสำหรับ
นี่คือ $HOME/.gurgitate.log
ส่งอีเมล์
เส้นทางแบบเต็มไปยังโปรแกรม sendmail ที่ใช้ในการส่งจดหมาย เป็นโปรแกรมอะไรก็ได้
ที่ใช้เป็นพารามิเตอร์ของรายการที่อยู่ในการส่งจดหมายและนั่นใช้เวลา
ข้อความเมลบนอินพุตมาตรฐาน
โฮมไดร์
เส้นทางแบบเต็มของโฮมไดเร็กทอรีของคุณ ค่าเริ่มต้นนี้เป็นค่าเริ่มต้นสำหรับบ้านที่แท้จริงของคุณ
ไดเร็กทอรีคือ
สปูลไดร์
พาธที่สปูลเมลของระบบไปถึง ค่าเริ่มต้นนี้เป็น "/var/spool/mail".
ในระบบ Maildir ควรตั้งค่านี้เหมือนกับ "homedir"
สปูลไฟล์
คอมโพเนนต์ไฟล์สปูลเมลของพาธเต็มของสปูลเมลของคุณ นี่คือโดยทั่วไป
ชื่อผู้ใช้ของคุณ ผู้ใช้ Maildir ควรตั้งค่านี้เป็น "Maildir"
สไตล์โฟลเดอร์
รูปแบบของโฟลเดอร์ที่คุณต้องการ อาจเป็น (ในขณะนี้) ทั้ง MBox หรือ Maildir
FILTER กฎ
กฎการกรองคือชุดคำสั่ง Ruby โดยมีเมธอดและตัวแปรดังต่อไปนี้
ที่มี:
ตัวแปร
จาก ซึ่งมีที่อยู่ "จาก" ของซองจดหมายของข้อความอีเมล (โปรดทราบว่าสิ่งนี้
ไม่จำเป็นต้องเหมือนกับเนื้อหาของส่วนหัว "จาก:")
ส่วนหัว
นี่คือวัตถุที่มีส่วนหัวของข้อความ มีหลายวิธี
ที่มาพร้อมกับวัตถุนี้:
เนื้อความ ซึ่งประกอบด้วยเนื้อความของข้อความอีเมล ณ ตอนนี้ยังไม่มีอะไรจริงๆ
ที่น่าสนใจซึ่งคุณสามารถทำได้ด้วยสิ่งนี้ นอกเหนือจากการมอบหมายให้; คุณสามารถเขียนใหม่
เนื้อหาของข้อความอีเมลด้วยวิธีนี้ การจัดการกับเอกสารแนบมีการวางแผนสำหรับ a
การเปิดตัว "gurgitate-mail" ในอนาคต
คือจดหมาย
ไดเร็กทอรีที่มีโฟลเดอร์ที่ใช้โดยวิธีการ "บันทึก" เมื่อคุณระบุ
โฟลเดอร์เป็น "=โฟลเดอร์" (เช่น Elm) ค่าเริ่มต้นคือ "$HOME/Mail"
โฮมไดร์
โฮมไดเร็กทอรีของคุณ อ่านเท่านั้น.
ไฟล์บันทึก
ตำแหน่งของล็อกไฟล์ "gurgitate-mail" หากตั้งค่าเป็น "ไม่มี" แสดงว่าไม่มีการบันทึก
เสร็จแล้ว. ค่าเริ่มต้นเป็น "$HOME/.gurgitate.log"
ส่งอีเมล์
ตำแหน่งของโปรแกรม "sendmail" ใช้โดยวิธี "ส่งต่อ" ค่าเริ่มต้นเป็น
"/usr/lib/sendmail".
สปูลไฟล์
ตำแหน่งของสปูลเมล อ่านเท่านั้น.
วิธีการ
ตรงกัน (ชื่อ, regex)
ส่งคืน "จริง" หากส่วนหัว "ชื่อ" ตรงกับนิพจน์ทั่วไป "regex" ถ้า
"name" คืออาร์เรย์ของชื่อส่วนหัว จากนั้นจะคืนค่าเป็น จริง หากอย่างน้อยหนึ่ง
ส่วนหัวตรงกัน มีประโยชน์สำหรับการทดสอบว่าทั้งส่วนหัว "ถึง:" และ "สำเนาถึง:" ตรงกันหรือไม่
from ส่งกลับที่อยู่ "จาก" ของซองจดหมายของข้อความอีเมล โปรดทราบว่านี่คือสิ่งเดียวกัน
เป็น "จาก" ที่เปลือยเปล่า
เพื่อส่งคืน HeaderBag (ชนิดของอาร์เรย์) ที่มีเนื้อหาของ "To" และ "Cc"
ส่วนหัว
to_s ตามแบบแผนของ Ruby ส่งคืนส่วนหัวทั้งหมดเป็นอ็อบเจ็กต์ "String"
ประหยัด(กล่องจดหมาย)
สิ่งนี้จะบันทึกข้อความไปยังเมลบ็อกซ์ คุณสามารถระบุเมลบ็อกซ์เป็นคำด้วย =
ลงชื่อเข้าใช้ด้านหน้า ซึ่งในกรณีนี้จะใส่ลงใน "maildir" หากคุณไม่ได้ใช้
=ชื่อ รูปแบบ จากนั้นคุณต้องระบุชื่อพาธแบบสัมบูรณ์ ถ้าเขียนไม่ได้
ข้อความไปยังไฟล์ที่คุณร้องขอ จะพยายามเขียนไปยัง "spoolfile"
ไปข้างหน้า(ที่อยู่)
สิ่งนี้จะส่งต่อข้อความอีเมลไปยังที่อยู่อีเมลอื่น
ท่อ(โปรแกรม)
นี้ท่อข้อความผ่าน "โปรแกรม" "pipe" ส่งคืนรหัสทางออกของ
โปรแกรมที่ส่งข้อความผ่าน
ตัวกรอง (โปรแกรม)
สิ่งนี้จะส่งข้อความผ่าน "โปรแกรม" และส่งคืนวัตถุ Gurgitate ใหม่
ที่มีเมลที่ถูกกรอง (สิ่งนี้สะดวกสำหรับตัวกรองภายนอกที่แก้ไขอีเมล
เช่น SpamAssassin ซึ่งเพิ่มส่วนหัวคะแนนสแปม)
คุณยังสามารถพูด
ตัวกรอง (โปรแกรม) do
#รหัสที่นี่
ปลาย
และให้ผลวัตถุ Gurgitate ที่สร้างขึ้นใหม่ไปยังบล็อก
ส่วนหัว
ส่งคืนส่วนหัวเป็นวัตถุของตนเอง วัตถุนี้มีวิธีการของตัวเอง:
ส่วนหัว[*ชื่อหัวเรื่อง]
ส่งคืน HeaderBag (คลาสย่อยของอาร์เรย์) ที่มีส่วนหัวที่คุณถาม
สำหรับ. จากนั้นคุณสามารถใช้ตัวดำเนินการ =~ กับผลลัพธ์นี้เพื่อให้ตรงกับ RHS regex
พร้อมทุกอย่างใน HeaderBag
คุณสามารถเปลี่ยนค่าของส่วนหัวด้วย "headers[name]=newvalue"
headers.match (ชื่อ regex)
จับคู่ส่วนหัวที่มีชื่อ "name" กับ regex นี่ก็เหมือนกับ
ส่วนหัว[ชื่อ] =~ /regex/.
headers.matches (ชื่อ regex)
จับคู่ส่วนหัวที่มีชื่อ "ชื่อ" กับ regex นี่ก็เหมือนกัน
เป็น headers[*names] =~ /regex/.
headers.จาก
ส่งคืนซองจดหมายจาก คุณสามารถเปลี่ยนแปลงสิ่งนี้ได้ด้วย "headers.from=newaddress"
เกินไป
กลับ
สิ่งนี้จะบอก "gurgitate-mail" ให้หยุดการประมวลผลข้อความอีเมล ถ้าไม่ใช้
"ส่งคืน" จากนั้น "gurgitate-mail" จะดำเนินการกับเมลเดิมอีกครั้งด้วย
กฎถัดไป หากไม่มีคำว่า "คืน" ต่อท้าย gurgitate-rules.rbแล้ว
"gurgitate-mail" จะบันทึกข้อความอีเมลในสปูลเมลปกติ
เข้าสู่ระบบ(ข้อความ)
สิ่งนี้จะเขียนข้อความบันทึกไปยังไฟล์บันทึก
SIMPLE ตัวอย่าง
ต่อไปนี้คือตัวอย่างบางส่วนของกฎ "gurgitate-mail" พร้อมคำอธิบาย:
ถ้าจาก =~ /ebay.com/ ให้บันทึก ("=ebay"); กลับ; จบ
อีเมลใดๆ จาก eBay (การแจ้งเตือนการสิ้นสุดการประมูลอัตโนมัติ เช่น และเสนอราคาสูงกว่า
ประกาศ) ลงในโฟลเดอร์ "ebay"
ถ้าจาก =~ /ราก@/ จากนั้นบันทึก ("= root"); กลับ; จบ
อีเมลจากรูท (ที่โฮสต์ใดก็ได้) จะถูกจัดเก็บในโฟลเดอร์พิเศษ มีประโยชน์สำหรับผู้ดูแลระบบ
ตรวจสอบอีเมล crontab
ถ้า headers.matches(["To","Cc"],"webmaster@") แล้ว
บันทึก("=เว็บมาสเตอร์")
กลับ
ปลาย
อีเมลใดๆ ที่มีบรรทัดถึง: หรือ Cc: ของ "sysadmin" จะถูกบันทึกลงในโฟลเดอร์ "sysadmin" มีประโยชน์
สำหรับผู้ที่มีหลายบัญชีที่เปลี่ยนเส้นทางไปยังที่อยู่ของตน
ถ้า headers["Subject"] =~ /\[SPAM\]/ แล้ว
บันทึก("=สแปม")
กลับ
ปลาย
นี่เป็นรูปแบบที่แตกต่างกันสำหรับรูปแบบการจับคู่กับส่วนหัว นอกจากนี้คุณยังสามารถจับคู่
ส่วนหัวหลายรายการในวงเล็บเหลี่ยม
if headers["Subject","Keywords"] =~ /a bad word/ แล้ว
save("=สบถ")
กลับ
ปลาย
ค้นหาคำว่า "a bad word" ในหัวข้อ Subject และ Keywords และถ้ามี ให้บันทึก
อีเมลในโฟลเดอร์ "สาบาน"
ถ้า headers.matches(["To","Cc"],"[ป้องกันอีเมล]") แล้ว
pipe("|rcvstore +รายการส่งเมล")
กลับ
ปลาย
อีเมลใดๆ ที่ส่งไปยังรายชื่อส่งเมลจะถูกส่งผ่าน "rcvstore" เพื่อจัดเก็บไว้ในโฟลเดอร์ MH
ที่
headers.matches(["To","Cc"],/regex/)
สำนวนเกิดขึ้นบ่อยจนมีการจดชวเลข:
ถ้าจะ =~ /[ป้องกันอีเมล]/ แล้ว
pipe("|rcvstore +รายการส่งเมล")
กลับ
ปลาย
ไพพ์เมลไปยังรายชื่อส่งเมลผ่าน "rcvstore"
ADVANCED ตัวอย่าง
ต่อไปนี้คือตัวอย่างที่ฉลาดกว่าเล็กน้อยเพื่อให้คุณทราบว่าคุณสามารถทำอะไรได้บ้าง
"gurgitate-mail". สมมติว่าคุณมีอีเมลไวท์ลิสต์ในไฟล์ชื่อ
$HOME/.เพื่อนเพื่อให้คุณสามารถระบุได้ว่าอีเมลบางฉบับมีแนวโน้มที่จะเป็นสแปมหรือไม่
จากนั้นหากมีคนในไวท์ลิสต์ของคุณส่งอีเมลถึงคุณ คุณก็จะบันทึกอีเมลนั้นลงใน
โฟลเดอร์ "กล่องจดหมาย":
เพื่อน=homedir+"/.friends"
ถ้า FileTest.exists?(เพื่อน) และ FileTest.readable?(เพื่อน) แล้ว
File.new(friends).each ทำ |friend|
ถ้าจาก =~ friend.chomp แล้ว
บันทึก "จดหมายจากเพื่อน" +friend.chomp
บันทึก("=กล่องจดหมาย")
กลับ
ปลาย
ปลาย
ปลาย
โอเค ถ้ามีคนส่งอีเมลถึงคุณ และมันส่งถึงคุณโดยเฉพาะ (และ gurgitate-
เมลยังจับมันในรูปแบบอื่นไม่ได้แล้ว) งั้นก็อาจเป็นสแปมหรือไม่ก็ใส่มัน
ลงในโฟลเดอร์ "สีเทา":
my_addresses= [ /me@example\.com/i,
/me@example\.org/i
/me@example\.net/i]; # ฉันมีที่อยู่อีเมลสามแห่ง
my_addresses.each ทำ |addr|
ถ้า headers.matches(["To","Cc"],addr) แล้ว
save("=อาจไม่ใช่สแปม")
กลับ
ปลาย
ปลาย
และหลังจากนั้นหากไม่ได้มาจากคนรู้จักและไม่ได้ส่งไปยังอีเมลของคุณ
ที่อยู่อย่างใดอย่างหนึ่งก็อาจจะบันทึกว่ามันเป็นสแปม:
บันทึก("=สแปม")
กลับ
สิ่งนี้สามารถปรับปรุงได้โดยใช้ตัวกรองแบบเบย์ ตัวอย่างเช่น Eric Raymond's
โปรแกรม bogofilter (http://bogofilter.sourceforge.net) สามารถฝึกได้โดยอัตโนมัติและ
ใช้กับความแตกต่างของสีขาว/เทา/ดำ จากตัวอย่างข้างต้น ฉันจะ
ปรับโดยเพิ่มการโทรไปที่ bogofilter:
เพื่อน=homedir+"/.friends"
ถ้า FileTest.exists?(เพื่อน) และ FileTest.readable?(เพื่อน) แล้ว
File.new(friends).each ทำ |friend|
ถ้าจาก =~ friend.chomp แล้ว
บันทึก "จดหมายจากเพื่อน" +friend.chomp
ไปป์("bogofilter -h") # <-- LINE ADDED HERE
บันทึก("=กล่องจดหมาย")
กลับ
ปลาย
ปลาย
ปลาย
"bogofilter -h" ฝึก bogofilter ว่าเมลจากบุคคลที่อยู่ในบัญชีขาวไม่ควรเป็น
ถือว่าเป็นสแปม โอเค ที่ส่วนท้ายของ .gurgitate-rules ให้เปลี่ยน
บันทึก("=สแปม")
กลับ
ไปยัง
บันทึก("=สแปม")
ท่อ("bogofilter -s")
กลับ
ฝึก "bogofilter" ว่าสิ่งที่ไม่ผ่านตัวกรองที่เหลือควรเป็น
ถือว่าเป็นสแปม ตอนนี้สำหรับบิตที่น่าสนใจ: เปลี่ยนบิตระหว่างสิ่งเหล่านี้เพื่อใช้
"bogofilter" เพื่อตัดสินใจว่าอีเมลจะถือว่าเป็นสแปมหรือไม่:
my_addresses= [ /me@example\.com/i,
/me@example\.org/i
/me@example\.net/i]; # ฉันมีที่อยู่อีเมลสามแห่ง
my_addresses.each ทำ |addr|
ถ้า headers.matches(["To","Cc"],addr) แล้ว
if pipe("bogofilter")==1
แล้วก็
log("bogofilter สงสัยว่าอาจไม่ใช่สแปม")
save("=อาจไม่ใช่สแปม")
อื่น
log("bogofilter คิดว่าน่าจะเป็นสแปม")
บันทึก("=สแปม")
ปลาย
กลับ
ปลาย
ปลาย
"bogofilter" มีรหัสทางออก "1" หากคิดว่าข้อความนั้นไม่ใช่สแปม และ "0" หากเป็น
คิดว่าข้อความนั้นเป็นสแปม
หวังว่านี่จะทำให้คุณได้ไอเดียเกี่ยวกับสิ่งต่าง ๆ ที่คุณสามารถใช้ได้
"bogofilter" สำหรับ
ใช้ gurgitate-mail ออนไลน์โดยใช้บริการ onworks.net