זהו הפקודה gurgitate-mail שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו בחינם כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
gurgitate-mail - מסנן דואר קל לשימוש
תַקצִיר
gurgitate-mail
תיאור
"gurgitate-mail" היא תוכנה שקוראת את הדואר שלך ומסננת אותו לפי
.gurgitate-rules.rb קובץ בספריית הבית שלך. קובץ התצורה משתמש בתחביר Ruby
ולכן הוא גמיש למדי.
זה מופעל בדרך כלל דרך שלך .קָדִימָה קובץ:
"|/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 בתור א
סוכן משלוחים מקומי, בבקשה ספר לי איך! אני רוצה לכלול את זה בתיעוד.
תְצוּרָה קבצים
ישנם שלושה קובצי תצורה המשמשים את gurgitate-mail: שניים הם כלל המערכת, וה-
שלישית, הוא קובץ חוקי המשתמש.
שני קובצי התצורה כלל המערכת הם /etc/gurgitate-rules ו
/etc/gurgitate-rules-default. אלה מעובדים לפני ואחרי כללי המשתמש,
בהתאמה.
/etc/gurgitate-rules משמש לטיפול בצרכי סינון כלל-מערכתיים: הגדרת ברירת המחדל
סגנון תיבת הדואר ל-Maildir ולא ל-MBox ברירת המחדל, הגדרת ספריית ה-spool, דברים
כמו זה.
קובץ תצורת המשתמש הוא $HOME/.gurgitate-rules (או לחילופין,
$HOME/.gurgitate-rules.rb. או עבודה). אתה שם את החוקים שלך כאן. אם המשתמש
קובץ התצורה אינו נתקל ב"החזרה" במהלך העיבוד, ולאחר מכן את הנוסף
כללים הכלולים ב /etc/gurgitate-rules-default רצים. אם גם זה לא יחזור,
לאחר מכן הודעות דואר נשמרות במיקום ברירת המחדל של סליל דואר.
אם נעשה שימוש באפשרות "-f" בשורת הפקודה, הקובץ שצוין ישמש ו
כללי ברירת המחדל לא. ניתן להשתמש באפשרות "-f" יותר מפעם אחת:
gurgitate-mail -f test-rules -f additional-regels
תְצוּרָה פרמטרים
ישנם מספר פרמטרים שאתה יכול להגדיר כדי לשנות את האופן שבו דואר gurgitate
מתנהג. אתה מגדיר פרמטר תצורה בכך שאתה אומר, למשל:
שלח מייל "/usr/sbin/sendmail"
מה שמגדיר את הפרמטר "sendmail" ל-"/usr/sbin/sendmail".
maildir
הספרייה שאליה ברצונך להכניס תיקיות דואר. ברירת המחדל היא $HOME/Mail.
קובץ לוג
לאן הלכת הודעות היומן של gurgitate-mail ללכת אליהן. המיקום הסטנדרטי עבור
זהו $HOME/.gurgitate.log
שלח מייל
הנתיב המלא לתוכנית sendmail, המשמש להעברת דואר. זו יכולה להיות כל תוכנית
שלוקח כפרמטרים את רשימת הכתובות שאליהן יש לשלוח דואר, וזה לוקח
הודעת דואר בקלט רגיל.
homedir
הנתיב המלא של ספריית הבית שלך. זה כברירת מחדל לכל הבית האמיתי שלך
ספרייה היא.
spooldir
הנתיב שאליו עוברים סליל הדואר של המערכת. ברירת המחדל היא "/var/spool/mail".
במערכת Maildir, זה צריך להיות מוגדר כמו "homedir".
spoolfile
רכיב קובץ סליל הדואר של הנתיב המלא של סליל הדואר שלך. זה בדרך כלל
שם המשתמש שלך. משתמשי Maildir צריכים להגדיר זאת ל-"Maildir".
סגנון תיקייה
סגנון התיקיות שאתה מעדיף. זה יכול להיות (כרגע) או MBox או Maildir.
סנן RULES
כללי הסינון הם סדרה של הצהרות רובי, עם השיטות והמשתנים הבאים
זמין:
משתנים
מאת זה מכיל את כתובת המעטפה "מאת" של הודעת הדואר האלקטרוני. (שימו לב שזה
לא בהכרח זהה לתוכן של הכותרת "מאת:")
כותרות
זהו אובייקט המכיל את כותרות ההודעה. ישנן מספר שיטות
שמגיעים עם החפץ הזה:
body זה מכיל את גוף הודעת הדואר האלקטרוני. נכון לעכשיו, אין באמת כלום
מעניין שאתה יכול לעשות עם זה, מלבד להקצות לזה; אתה יכול לשכתב
גוף הודעת דוא"ל בדרך זו. התמודדות עם קבצים מצורפים מתוכננת עבור א
שחרור עתידי של "gurgitate-mail".
maildir
הספרייה המכילה את התיקיות, בשימוש בשיטת "שמור" כאשר אתה מציין
תיקיה בתור "=תיקייה" (כמו אלם). ברירת המחדל היא "$HOME/Mail".
homedir
ספריית הבית שלך. לקריאה בלבד.
קובץ לוג
המיקום של קובץ היומן "gurgitate-mail". אם מוגדר ל"אפס", אז אין רישום
בוצע. ברירת המחדל היא "$HOME/.gurgitate.log".
שלח מייל
המיקום של תוכנית "sendmail". בשימוש בשיטת "קדימה". ברירת מחדל ל
"/usr/lib/sendmail".
spoolfile
המיקום של סליל הדואר. לקריאה בלבד.
שיטות
תואמים (שם(ים), ביטוי רגיל)
מחזירה "true" אם הכותרת "name" תואמת לביטוי הרגולרי "regex". אם
"שם" הוא מערך של שמות כותרות, ואז הוא מחזיר true אם לפחות אחד מה
התאמות כותרות. שימושי לבדיקה אם הכותרות "To:" ו-"Cc:" תואמות.
from מחזירה את כתובת המעטפה "מאת" של הודעת הדואר האלקטרוני. שימו לב שזה אותו דבר
כ"מ" החשוף.
to מחזירה HeaderBag (מעין מערך) עם התוכן של ה-"To" וה-"Cc"
כותרות.
to_s לפי מוסכמות רובי, מחזיר את כל הכותרות כאובייקט "מחרוזת".
להציל(תיבת דואר)
זה שומר את ההודעה בתיבת דואר. אתה יכול לציין את תיבת הדואר כמילה עם =
לחתום לפניו, ובמקרה זה הוא מכניס אותו ל-"maildir". אם אתה לא משתמש ב
=שם פורמט, אז אתה צריך לציין שם נתיב מוחלט. אם זה לא יכול לכתוב את
הודעה לקובץ שאתה מבקש ממנו, הוא ינסה לכתוב אותו ל-"spoolfile".
קדימה (כתובת)
זה מעביר את הודעת האימייל לכתובת דוא"ל אחרת.
צינור (תוכנית)
זה מעביר את ההודעה דרך "תוכנית". "pipe" מחזיר את קוד היציאה של
תוכנית שדרכה הועברה ההודעה.
מסנן (תוכנית)
זה מעביר את ההודעה דרך "תוכנית" ומחזיר אובייקט Gurgitate חדש
המכיל את הדואר המסונן. (זה שימושי עבור מסננים חיצוניים שמשנים דוא"ל
כמו, למשל, SpamAssassin, שמוסיף כותרת של ציון ספאם.)
אתה יכול גם לומר
מסנן (תוכנית) לעשות
# קוד כאן
סוף
וזה מניב את האובייקט Gurgitate החדש שנוצר לבלוק.
כותרות
זה מחזיר את הכותרות כאובייקט משלהם. לאובייקט זה יש שיטות משלו:
headers[*headernames]
זה מחזיר HeaderBag (תת מחלקה של מערך) המכיל את הכותרות שביקשת
ל. לאחר מכן תוכל להשתמש באופרטור =~ בתוצאה זו כדי להתאים את הביטוי הרגולרי של RHS
עם הכל ב-HeaderBag.
אתה יכול לשנות ערך של כותרת באמצעות "headers[name]=newvalue".
headers.match(name,regex)
מתאים את הכותרת עם השם "שם" מול הביטוי הרגולרי. זה אותו דבר כמו
headers[name] =~ /regex/.
headers.matches(names,regex)
התאמה בין הכותרות לשמות "שמות" מול הביטוי הרגולרי. זה אותו דבר
ככותרות [*שמות] =~ /regex/.
headers.from
מחזירה את המעטפה. אתה יכול לשנות זאת באמצעות "headers.from=newaddress"
מדי.
לַחֲזוֹר
זה אומר ל-"gurgitate-mail" להפסיק לעבד את הודעת האימייל. אם אתה לא משתמש
"חזור", ואז "gurgitate-mail" ימשיך לעבד את אותו דואר שוב עם
הכלל הבא. אם אין "החזרה" בסוף gurgitate-rules.rb, לאחר מכן
"gurgitate-mail" ישמור את הודעת האימייל בסליל הדואר הרגיל.
היכנס(הודעה)
זה כותב הודעת יומן לקובץ היומן.
פשוט דוגמאות
הנה כמה דוגמאות לכללי "gurgitate-mail", עם הסברים:
if from =~ /ebay.com/ then save("=ebay"); לַחֲזוֹר; סוֹף
כל אימייל מ-eBay (הודעות אוטומטיות על סיום המכרז, למשל, והצעת מחיר מוגברת
notices) מתוייק בתיקייה "ebay".
אם מ =~ / שורש@/ ואז save("=root"); לַחֲזוֹר; סוֹף
כל אימייל מהשורש (בכל מארח) מתוייק בתיקייה מיוחדת. שימושי למנהלי מערכת
ניטור דוא"ל crontab.
if headers.matches(["To","Cc"],"webmaster@") אז
save("=מנהל האתר")
לַחֲזוֹר
סוף
כל אימייל עם שורת To: או Cc: של "sysadmin" נשמר בתיקייה "sysadmin". מוֹעִיל
עבור אנשים עם מספר חשבונות תפקידים שהופנו לכתובתם.
if headers["Subject"] =~ /\[SPAM\]/ אז
save("=דואר זבל")
לַחֲזוֹר
סוף
זהו תחביר שונה להתאמת דפוסים מול כותרות. אפשר גם להתאים
כותרות מרובות בסוגריים מרובעים.
if headers["Subject","Keywords"] =~ /מילה רעה/ אז
save("=נשבע")
לַחֲזוֹר
סוף
מחפש "מילה רעה" בכותרות הנושא ומילות המפתח, ואם היא קיימת, חוסך
המייל בתיקיית "קללות".
if headers.matches(["To","Cc"],"[מוגן בדוא"ל]") לאחר מכן
pipe("|rcvstore +רשימת דואר")
לַחֲזוֹר
סוף
כל אימייל לרשימת תפוצה מועבר דרך "rcvstore" כדי לאחסן אותו בתיקיית MH.
כי
headers.matches(["To","Cc"],/regex/)
ניב קורה לעתים קרובות מספיק כדי שיש קיצור לכך:
אם ל =~ /[מוגן בדוא"ל]/ לאחר מכן
pipe("|rcvstore +רשימת דואר")
לַחֲזוֹר
סוף
מעביר את הדואר לרשימת התפוצה דרך "rcvstore".
מתקדם דוגמאות
הנה כמה דוגמאות קצת יותר חכמות כדי לתת לך מושג עם מה אתה יכול לעשות
"gurgitate-mail". נניח שיש לך רשימת היתרים של דוא"ל בקובץ שנקרא
$HOME/.חברים, כך שתוכל לקבוע אם דוא"ל מסוים עשוי להיות ספאם או לא.
אז אם מישהו ברשימת ההיתרים שלך שולח לך דוא"ל, אתה שומר את זה באופן אוטומטי
תיקיית "תיבת הדואר הנכנס":
friends=homedir+"/.friends"
אם FileTest.exists?(friends) and FileTest.readable?(friends) אז
File.new(friends).each do |friend|
אם מ =~ friend.chomp אז
יומן "דואר מחבר "+friend.chomp
save("=inbox")
לַחֲזוֹר
סוף
סוף
סוף
אוקיי, אם מישהו שולח לך דוא"ל, והוא פונה ספציפית אליך (וגם-
דואר לא תפס את זה כבר בצורה אחרת), אז ייתכן שהוא או לא ספאם: שים את זה
לתוך תיקייה "אפורה":
my_addresses= [ /me@example\.com/i,
/me@example\.org/i,
/me@example\.net/i]; # יש לי שלוש כתובות דוא"ל
my_addresses.each do |addr|
if headers.matches(["To","Cc"],addr) then
save("=אפשר-לא-ספאם")
לַחֲזוֹר
סוף
סוף
ואחרי זה, אם זה לא ממישהו שאתה מכיר, וזה לא ממוען למייל שלך
כתובת אחת, אז זה כנראה שמור כדי להניח שזה דואר זבל:
save("=דואר זבל")
לַחֲזוֹר
עם זאת, ניתן לשפר זאת על ידי שימוש במסנן בייסיאני; למשל, של אריק ריימונד
תוכנית בוגופילטר (http://bogofilter.sourceforge.net) ניתן לאמן באופן אוטומטי ו
בשימוש בעזרת ההבחנות הלבנות/אפורות/שחורות. אם ניקח את הדוגמה למעלה, אני אעשה זאת
התאם אותו על ידי הוספת קריאות ל-bogofilter:
friends=homedir+"/.friends"
אם FileTest.exists?(friends) and FileTest.readable?(friends) אז
File.new(friends).each do |friend|
אם מ =~ friend.chomp אז
יומן "דואר מחבר "+friend.chomp
pipe("bogofilter -h") # <-- LINE ADDED HERE
save("=inbox")
לַחֲזוֹר
סוף
סוף
סוף
"bogofilter -h" מאמן את bogofilter שדואר מאנשים ברשימת ההיתרים לא אמור להיות
נחשב כספאם. בסדר, בסוף חוקי ה-.gurgitate, שנה
save("=דואר זבל")
לַחֲזוֹר
ל
save("=דואר זבל")
pipe("bogofilter -s")
לַחֲזוֹר
זה מכשיר "בוגופילטר" שכל מה שלא עובר את שאר המסנן צריך להיות
נחשב כספאם. עכשיו לקטע המעניין: שנה את הביט בין אלה לשימוש
"bogofilter" כדי להחליט אם אימייל ייחשב כספאם או לא:
my_addresses= [ /me@example\.com/i,
/me@example\.org/i,
/me@example\.net/i]; # יש לי שלוש כתובות דוא"ל
my_addresses.each do |addr|
if headers.matches(["To","Cc"],addr) then
if pipe("bogofilter")==1
אז
log("בוגופילטר חושד שזה לא ספאם")
save("=אפשר-לא-ספאם")
אחר
log("בוגופילטר חושב שזה כנראה ספאם")
save("=דואר זבל")
סוף
לַחֲזוֹר
סוף
סוף
ל-"bogofilter" יש קוד יציאה של "1" אם הוא חושב שההודעה אינה ספאם, ו-"0" אם הוא
חושב שההודעה היא ספאם.
אני מקווה שזה אמור לתת לך מושג על סוגי הדברים שבהם אתה יכול להשתמש
"בוגופילטר" עבור.
השתמש ב-gurgitate-mail באינטרנט באמצעות שירותי onworks.net