स्क्रिप्ट में आने वाले सभी ईमेल को पाइप करने के लिए पोस्टफिक्स को कैसे कॉन्फ़िगर करें?


24

पोस्टफ़िक्स का उपयोग करते हुए, मैं किसी भी पते (सभी जो स्थानीय उपयोगकर्ताओं को मैप नहीं करता है) सहित सभी आने वाले मेल को एक स्क्रिप्ट पर पाइप करना होगा। मैंने इसमें कॉन्फ़िगर करने का प्रयास किया mailbox_commandहै /etc/postfix/main.cf:

mailbox_command = /path/to/myscript.py

यह बहुत अच्छा काम करता है यदि उपयोगकर्ता स्थानीय उपयोगकर्ता है, लेकिन यह "अज्ञात" उपयोगकर्ताओं के लिए विफल है, जिनके पास उपनाम नहीं हैं। मैंने luser_relayएक स्थानीय उपयोगकर्ता से सेटिंग करने की कोशिश की , लेकिन यह प्री-एम्पर्ट्स mailbox_command, और इसलिए कमांड रन नहीं करता है। मैंने सेटिंग local_recipient_maps=(रिक्त स्ट्रिंग) की कोशिश की , लेकिन संदेश अभी भी बाउंस (अज्ञात उपयोगकर्ता) है।

क्या कोई जादू का निमंत्रण है जिसका उपयोग मैं सभी ज्ञात और अज्ञात उपयोगकर्ताओं को स्क्रिप्ट पर जाने के लिए कर सकता हूं?

पूर्ण /etc/postfix/main.cfअनुसरण करता है - यह mailbox_commandपंक्ति के अपवाद के साथ डिफ़ॉल्ट Ubuntu 10.04 है :

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = ... snip ...
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = sassafras, ... snip ...,localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

mailbox_command = /path/to/my/script.py

स्क्रिप्ट के बाद, फिर क्या? ऐसा लगता है कि वायरस स्कैनर और स्पैम फ़िल्टर किस तरह की चीज़ करते हैं, हो सकता है कि आप उनमें से किसी एक को कॉन्फ़िगर करने के लिए एक गाइड पा सकते हैं और अपनी स्क्रिप्ट के लिए इसके कॉन्फ़िगरेशन का उपयोग कर सकते हैं?
डेरफक

संदेश एक वेब अनुप्रयोग पर जाते हैं। इसलिए स्क्रिप्ट के बाद: एक डेटाबेस, अन्य प्रोसेसिंग, अन्य सामान, लेकिन सामान्य मेल सामान नहीं। महत्वपूर्ण प्रश्न अज्ञात उपयोगकर्ताओं को बाउंस न करने के लिए मिल रहा है - यह सामान्य वायरस / स्पैम परिदृश्य के बाहर है, जहां आप अन-टैप किए गए उपयोगकर्ताओं को बाउंस करेंगे।
2067 पर user67641

@ user67641 हाय क्या मुझे अपनी स्क्रिप्ट में मेल को पोस्टफ़िक्स में इंजेक्ट करने की ज़रूरत है या
मास्टर.कफ़

जवाबों:


32

ठीक है, मैं सिर्फ यह काम कर रहा था - हालांकि बालों की तुलना में मैंने सोचा था कि यह होगा। मैंने maildir_commandहिस्सा गिरा दिया , और साथ चला गया transport_maps। 5 काम करने के लिए महत्वपूर्ण है:

  1. उपनामों को संभालने के लिए एक db फ़ाइल सेट करें (और एक कैच-सभी उपनाम जोड़ें)
  2. विशेष हैंडलर के प्रश्न में डोमेन के लिए 'ट्रांसपोर्ट' को मैप करने के लिए एक db फाइल सेट करें।
  3. DBB फ़ाइलों को बर्कले db प्रारूप में संकलित करें जो पोस्टफिक्स चाहता है।
  4. /etc/postfix/master.cfस्क्रिप्ट को पाइप मेल करने के लिए हैंडलर सेट करें ।
  5. के /etc/postfix/main.cfलिए ट्रांसपोर्ट डीबी transport_mapsऔर उर्फ ​​डीबी का उपयोग करने के लिए सेट करें virtual_alias-maps

(1) /etc/postfix/virtual_aliasesकैच-ऑल अलाइज़ जोड़ने के लिए बनाएं - localuserमौजूदा स्थानीय उपयोगकर्ता होने की आवश्यकता है:

@mydomain.tld   localuser@mydomain.tld

(2) /etc/postfix/transportट्रांसपोर्ट मैपिंग जोड़ने के लिए बनाएं । "mytransportname" आप जो चाहें कर सकते हैं; नीचे इसका उपयोग किया गया है master.cf:

mydomain.tld    mytransportname:

(3) फिर, दोनों transportऔर virtual_aliasesजरूरत बर्कले डाटाबेस फाइलों में संकलित की:

$ sudo postmap /etc/postfix/virtual_aliases
$ sudo postmap /etc/postfix/transport

(4) परिवहन को इसमें जोड़ें /etc/postfix/master.cf:

mytransportname   unix  -       n       n       -       -       pipe
  flags=FR user=localuser argv=/path/to/my/script.py
  ${nexthop} ${user}

(५) में /etc/postfix/main.cf:

  ...
  transport_maps = hash:/etc/postfix/transport
  virtual_alias_maps = hash:/etc/postfix/virtual_aliases

और ... जाने के लिए अच्छा है! शीश।


1
अत्यंत उपयोगी उत्तर
मर्वोट्सि

1
वर्चुअल उर्फ ​​मैप्स की जरूरत नहीं है। आप उसी चीज़ को पूरा कर सकते हैं relay_domains(जिस स्थिति में ट्रांसपोर्ट फ़ाइल वास्तविक To: पते के आधार पर फ़िल्टर कर सकती है)।
ब्रिलियन्ड

मैंने पाया आप के साथ मार्ग एक स्क्रिप्ट के लिए सभी आभासी मेल कर सकते हैं virtual_transport = mailcaptcha:में main.cfऔर mailcaptcha unix - n n - - pipe flags=FR user=vmail argv=/usr/bin/perl /usr/local/mail-captcha/verify.pl ${sender} ${recipient}में master.cfPostfix.org/transport.5.html और postfix.org/VIRTUAL_README.html देखें ।
च्लोए

(4) एक सिंगल लाइन में होना चाहिए, क्या यह सही है? इसके अलावा यह एक आवश्यकता नहीं है postfix restartया reloadया कुछ इस तरह? अंतिम बात: पोस्टफिक्स में आए मेल्स को देखने के लिए एक लॉग फाइल है?
बसज

@ बस्ज, लॉग फाइल है /var/log/mail.log
fiedl

4

एकमात्र बार जब मैंने इस तरह का कुछ उपयोग किया है, तो यह एक विशिष्ट उपयोगकर्ता के मेलबॉक्स के लिए था। उपनाम और पाइप में उपयोगकर्ता की प्रक्रिया के लिए यह सब आवश्यक था:

पोंग: "| /rr/local/bin/gotit.pl"

यह "pong@mymailserver.com" के लिए भेजा गया ट्रैफ़िक है जिसे मैंने इसे संसाधित करने के लिए लिखा है।

gotit.pl (एक उदाहरण के रूप में, भद्दा प्रोग्रामिंग Skillz = के लिए मुझ पर मत उठाओ)। यह काम एक ईमेल को संसाधित करना था जिसे मैंने अपने एक्सचेंज सर्वर को भेजा था (जहां यह कुछ वीबी कोड के माध्यम से ऑटो-उत्तर दिया गया था) यह सत्यापित करने के लिए कि एक्सचेंज समय पर ईमेल संसाधित कर रहा था। यदि नहीं, तो मेल सर्वर हमारे पेजर्स को एक अलर्ट ईमेल भेजेगा और एक लॉक फाइल लिखेगा ताकि हमें लगातार स्पैम न मिले।

#! /usr/bin/perl -w
use vars qw ( $mung $sent $tvalue $remainder $delta $fout );
$mung = time;
while (<STDIN>) {
    ($sent, $tvalue, $remainder ) = split /: /, $_, 3;
    $tvalue =~ s/(\D+)//g;
    chomp($tvalue);
    $delta = $mung-$tvalue;
    if ( $sent =~ "Sent" ) {
        $fout = "/var/spool/mailcheck/$tvalue";
        next unless ( -e $fout );
        open (TMP, "> $fout") or die "Couldn't open output file: $!\n";
        print TMP "Received in: $delta seconds.\n";
                close TMP;
        last;
    }
}

हाँ, और पोंग को myirectain.tld को पुनर्निर्देशित करें और mydomain.tld के लिए आने वाले सभी मुख्य पाइप किए जाएंगे।
ज़ार है

और हम में से कई आभासी डोमेन का उपयोग करने के लिए, इसे @ लोकहॉस्ट @ पांग पर पुनर्निर्देशित करना न भूलें ताकि यह डिफ़ॉल्ट डोमेन नाम को उपनाम के साथ संलग्न न करे
therightstuff

0

मैंने Mailboxसभी मेलों को प्राप्त करने के लिए एक पुरानी शैली "फ्लैट फाइल" का उपयोग किया है (और फिर इसे हर कुछ घंटों में prune करें यदि यह बड़ा है), आधुनिक maildir/फ़ोल्डरों का उपयोग करने के बजाय , स्क्रिप्ट के माध्यम से मेल को संसाधित करने के लिए। आप फ़ाइल पर लॉगोटेट भी चला सकते हैं, मुझे लगता है कि इसे प्रबंधनीय रखने के लिए।

इस तरह आप एक स्थानीय उपयोगकर्ता के रूप में सभी मेल को एक मेलबॉक्स में कॉपी कर सकते हैं।


0

बहुत सारे सिरदर्द के बाद, मैंने इस समाधान को विभिन्न स्रोतों के एक जोड़े के आधार पर एक साथ रखा , जिसके परिणामस्वरूप बहुत कम प्रयास किए गए, महत्वपूर्ण कदमों के virtual_alias_domainsसाथ-साथ कॉन्फ़िगर कर रहे थे virtual_alias_mapsऔर यह सुनिश्चित कर रहे थे कि वर्चुअल मैपिंग my-alias@localhostसिर्फ इसके बजाय थी my-alias। मेरे उदाहरण में कमांड उपनाम एक वेबसाइट एपीआई एंडपॉइंट पर ईमेल को पाइप करने के लिए है, लेकिन यह आसानी से किसी और चीज में पाइप कर सकता है।

यहां आपको वे कदम उठाने होंगे जो आपको लेने होंगे:

  • अपने डोमेन के लिए अपना ए और एमएक्स रिकॉर्ड सेट करें, सर्वर के आईपी को इंगित करने वाला एक रिकॉर्ड @ जो आपको होस्टनाम @ और मूल्य के साथ एमएक्स पर ईमेल प्राप्त करने जा रहा है। 10 mail.your-domain-name
  • sudo apt-get install postfix
  • "इंटरनेट साइट" चुनें और अपना डोमेन-नाम दर्ज करें (पूरी तरह से योग्य)
  • sudo vi /etc/postfix/main.cf
  • mydestinationमूल्यों की सूची में mail.your-domain-name जोड़ें
  • संलग्न
virtual_alias_domains = hash:/etc/postfix/virtual_domains
virtual_alias_maps = hash:/etc/postfix/virtual

फ़ाइल के अंत में

  • sudo apt-get vi /etc/aliases
curl_email: "|curl --data-binary @- http://your-domain-name/email"
  • sudo newaliases
  • sudo apt-get vi /etc/postfix/virtual_domains
example.net   #domain
example.com   #domain
your-domain-name   #domain

(# कंडोम के मैदान चेतावनी को दबाते हैं)

  • sudo postmap /etc/postfix/virtual_domains
  • sudo apt-get vi /etc/postfix/virtual
info@your-domain-name bob@gmail.com
everyone@your-domain-name bob@gmail.com jim@gmail.com
email_processor@your-domain-name curl_email@localhost
@your-domain-name catchall@whereveryouwant.com
ted@example.net jane@outlook.com
  • sudo postmap /etc/postfix/virtual
  • sudo /etc/init.d/postfix reload
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.