2009-02-17 7 views
10

मेरे पास procmail के साथ एक सामान्य सामान्य आवश्यकता है लेकिन मैं किसी भी तरह से परिणाम प्राप्त करने में असमर्थ हूं। मैं इस सामग्री के साथ procmailrc फ़ाइल है:एक कस्टम पायथन स्क्रिप्ट चलाने के लिए procmail चाहते हैं, हर बार एक नया मेल दिखाता है

:0 
* ^To.*@myhost 
| /usr/bin/python /work/scripts/privilege_emails_forward.py 

जिसमें अपने कस्टम अजगर स्क्रिप्ट (privilege_emails_forward.py) ईमेल वर्तमान में प्राप्त के माध्यम से स्कैनिंग की जाएगी और मेल सामग्री पर कुछ कार्य कर। लेकिन मैं पहले शॉट पर स्क्रिप्ट को निष्पादित करने में असमर्थ हूं (मेल सामग्री के माध्यम से अकेले स्कैनिंग करने दें)।

  • क्या यह नया मेल आने पर बाहरी प्रोग्राम (पायथन) का आह्वान करने का सही तरीका है?
  • और मेरे पायथन प्रोग्राम (विशेषाधिकार_emails_forward.py) मेल को इनपुट के रूप में कैसे प्राप्त करेगा? मेरा मतलब sys.argv या stdin ????

उत्तर

11

कि ठीक है, बस के बाद :0 (:0 fw) fw डाल दिया। आपके पायथन प्रोग्राम को stdin पर मेल प्राप्त होगा। आपको stdout पर संभावित रूप से परिवर्तित मेल को 'गूंज' करना होगा।

fw का अर्थ है:

  • f एक फिल्टर के रूप पाइप पर विचार करें।
  • w फ़िल्टर या प्रोग्राम को समाप्त करने के लिए प्रतीक्षा करें और इसके निकास को जांचें (आमतौर पर अनदेखा); अगर फ़िल्टर असफल है, तो पाठ फ़िल्टर नहीं किया जाएगा।

मेरा स्पैम चेकर (बोगोफिल्टर) बस इसी तरह काम करता है। यह हेडर जोड़ता है और बाद में प्रोमेल-नियम इन शीर्षकों के आधार पर कुछ करते हैं।

+0

मैंने भी कोशिश की। लेकिन फिर भी यह काम नहीं करता है मुझे नहीं पता क्यों :(यहां मेरी procmailrc स्क्रिप्ट है: : 0 fw * ^To.*@myhost |/usr/bin/python /work/scripts/privilege_emails_forward.py –

+0

VERBOSE आज़माएं = हाँ और अपनी procmail लॉग फ़ाइल में एक नज़र डालें। शायद आप त्रुटि को खोज सकते हैं! –

+0

जोहान्स! इस टिप्पणी के बाद से टेक्स्ट फ़ील्ड procmail लॉग आउटपुट मुद्रित करने के लिए पर्याप्त नहीं है, मैंने आउटपुट को एक उत्तर के रूप में दिया है। कृपया एक नज़र डालें इस पर –

5

log excerpt स्पष्ट रूप से बताता है कि आपकी स्क्रिप्ट निष्पादित की गई है, भले ही यह वांछित प्रभाव न दिखाए। मैं निष्पादन विफल होने पर procmail को एक त्रुटि लॉग करने की उम्मीद करता हूं।

वैसे भी, सुनिश्चित करें कि उपयोगकर्ता (uid) कि procmail के साथ निष्पादित किया गया है, आपकी स्क्रिप्ट निष्पादित करने के लिए सही अनुमतियां हैं। तार procmail में स्क्रिप्ट केवल यदि आप परीक्षण कुछ इस तरह के साथ सफल रहा (सही uid साथ 'procmail' डालें):

 
# sudo -u procmail /bin/sh -c '/bin/cat /work/scripts/mail.txt | /usr/bin/python /work/scripts/privilege_emails_forward.py' 

अपने sudo विन्यास के आधार पर आप रूट के रूप में इस चलाने के लिए होगा। ओह, और सुनिश्चित करें कि आप पूर्ण फ़ाइल पथ का उपयोग करें।

+0

बहुत बढ़िया पेपरिका! मैंने वेबमेल के साथ प्रतिलिपि बनाई गई स्क्रिप्ट को चलाने की कोशिश की (cur किराया उपयोगकर्ता), मेरी लिपि निष्पादित की गई। लेकिन जब मुझे एक मेल प्राप्त होता है (इसे किसी से भी हो), तो मेरा procmail procmailrc सही चलाता है? तो स्क्रिप्ट चलाने के लिए सही उपयोगकर्ता कौन होगा? –

+0

पापिका! स्पष्ट रूप से समझाने के लिए, मेरी कस्टम पायथन लिपि में पर्याप्त अनुमतियां मिली हैं (777), फिर भी जब मैं मेल –

+1

प्राप्त करता हूं तो यह स्वचालित रूप से निष्पादित नहीं हो रहा है यह पता लगाने के लिए कि आपकी प्रोसेमेल स्क्रिप्ट किस उपयोगकर्ता को चलाती है, स्क्रिप्ट की लाइन को अपने procmailrc में इस के साथ बदलें: '|/usr/bin/id -un>/tmp/procmailuser 'डॉन' सामने पाइप प्रतीक भूल जाओ! इसके बाद, 'cat/tmp/procmailuser' को उपयोगकर्ता को प्रकट करना चाहिए। – paprika