কোনও স্ক্রিপ্টে সমস্ত আগত ইমেল পাইপ করতে পোস্টফিক্সটি কীভাবে কনফিগার করবেন?


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লাইনটি ব্যতীত এটি ডিফল্ট উবুন্টু 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

স্ক্রিপ্টের পরে কী হবে? এটি ভাইরাস স্ক্যানার এবং স্প্যাম ফিল্টারগুলির মতো কাজ করে বলে মনে হচ্ছে, সম্ভবত আপনি সেগুলির মধ্যে একটির কনফিগার করার জন্য কোনও গাইড খুঁজে পেতে পারেন এবং এটির স্ক্রিপ্টের জন্য এর কনফিগারেশনটি ব্যবহার করতে পারেন?
ডায়ালফেকে

বার্তা একটি ওয়েব অ্যাপ্লিকেশন যান। সুতরাং স্ক্রিপ্টের পরে: একটি ডাটাবেস, অন্যান্য প্রসেসিং, অন্যান্য স্টাফ, তবে সাধারণ মেল সামগ্রী নয়। মূল প্রশ্নটি অজানা ব্যবহারকারীদের বাউন্স না করার জন্য পাচ্ছে - এটি সাধারণ ভাইরাস / স্প্যামের দৃশ্যের বাইরে, যেখানে আপনি আনম্যাপড ব্যবহারকারীদের বাউন্স করবেন।
ব্যবহারকারী 67641

@ ইউজার 67641 হাই, আমাকে কী আমার স্ক্রিপ্টে পোস্টফিক্সে বা মাস্টার.cf- এ আরও কিছু লাইন যুক্ত করে ইনজেল
লাগানো

উত্তর:


32

ঠিক আছে, আমি এই কাজটি পেয়েছি - যদিও আমি ভাবিনি তার চেয়ে চুল বেশি। আমি maildir_commandঅংশটি ফেলে দিয়েছিলাম , এবং সাথে ছিলাম transport_maps। মূল বিষয়টি হল 5 টি কাজ:

  1. এলিয়াসগুলি হ্যান্ডেল করতে একটি ডিবি ফাইল সেট আপ করুন (এবং একটি ক্যাচ-সমস্ত নাম যুক্ত করুন)
  2. একটি বিশেষ হ্যান্ডলারের প্রশ্নে ডোমেনের জন্য 'পরিবহণ' ম্যাপ করতে একটি ডিবি ফাইল সেট আপ করুন।
  3. পোস্টফিক্স যে বার্কলে ডিবি ফর্ম্যাটে চায় ডিবি ফাইলগুলি সংকলন করুন।
  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

(২) /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}

(5) ইন /etc/postfix/main.cf:

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

এবং ... যেতে ভাল! Sheesh।


1
অত্যন্ত দরকারী উত্তর
মার্ভোতেসি

1
ভার্চুয়াল ওরফে মানচিত্রের প্রয়োজন নেই। আপনি একই জিনিসটি সম্পন্ন করতে পারেন relay_domains(যে ক্ষেত্রে ট্রান্সপোর্ট ফাইলটি প্রকৃত প্রতি: ঠিকানার ভিত্তিতে ফিল্টার করতে পারে)।
ব্রিলিয়ানড

আমি দেখেছি যে আপনার সঙ্গে রুট একটি স্ক্রিপ্ট সব ভার্চুয়াল মেইল করতে পারেন 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.cf। দেখুন postfix.org/transport.5.html এবং postfix.org/VIRTUAL_README.html
ক্লো

(4) একক লাইনে থাকা উচিত, তা কি ঠিক? এছাড়াও এটি একটি প্রয়োজন হয় না postfix restartবা reloadবা ভালো কিছু? শেষ কথা: পোস্টফিক্সে আগত মেলগুলি দেখতে কোনও লগ ফাইল আছে?
বসজ

@ বাসজ, লগ ফাইলটি /var/log/mail.log
ফাইডেল

4

আমি এই জাতীয় কিছু ব্যবহার করেছি কেবলমাত্র নির্দিষ্ট ব্যবহারকারীর মেলবক্সের জন্য। যা প্রয়োজন তা হ'ল সেই ব্যবহারকারীর নামটি পাইপের সাথে নামকরণ এবং উপাধিতে একটি প্রক্রিয়া:

পং: "| /usr/local/bin/gotit.pl"

এটি "pong@mymailserver.com" এর জন্য ট্র্যাফিক পাঠানো পার্ল স্ক্রিপ্টে প্রক্রিয়াকরণের জন্য লিখেছিলাম।

getit.pl (উদাহরণস্বরূপ, ক্রেপি প্রোগ্রামিং দক্ষতার জন্য আমাকে ধরবেন না =)। এক্সচেঞ্জ একটি সময় মতো ফাইলে ইমেল প্রক্রিয়াকরণ করছে তা যাচাই করার জন্য আমাদের এক্সচেঞ্জ সার্ভারে (যেখানে এটি কোনও ভিবি কোডের মাধ্যমে স্বয়ংক্রিয়ভাবে জবাব দেওয়া হয়েছিল) ইমেল প্রক্রিয়াকরণের কাজ ছিল। যদি তা না হয়, মেল সার্ভারটি আমাদের পেজারের জন্য একটি সতর্কতা ইমেল প্রেরণ করবে এবং একটি লক ফাইল লিখবে যাতে আমরা ক্রমাগত স্প্যাম না হয়ে যাই।

#! /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;
    }
}

হ্যাঁ, এবং কেবলমাত্র @ mydomain.tld কে পংতে পুনঃনির্দেশ করুন এবং মাইডোমেন.টल्डের জন্য সমস্ত আগত প্রধান পাইপ করা হবে।
জার হাই

এবং আমরা যারা একাধিক ভার্চুয়াল ডোমেন ব্যবহার করছি তাদের এটি পং @ লোকালহোস্টে পুনর্নির্দেশ করতে ভুলবেন না যাতে এটি ডিফল্ট ডোমেন নামটির সাথে উপনামটি সংযুক্ত না করে
থাইরাইটস্ফট

0

স্ক্রিপ্টগুলির মাধ্যমে মেল প্রক্রিয়া করার Mailboxজন্য আধুনিক 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মানগুলির তালিকায় মেইল.আপনার ডোমেন-নাম যুক্ত করুন
  • পরিশেষে
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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.