হোস্টের পোস্টফিক্স সহ ডকারের ধারক থেকে মেল প্রেরণ করুন


18

আমি একটি উবুন্টু 14.04 (লিনাক্স) সার্ভার চালাচ্ছি। আমি সার্ভারে খুব সুন্দরভাবে পোস্টফিক্স এবং ওপেনডিকেআইএম ইনস্টল ও কনফিগার করেছি ; আমি যেমন কমান্ড দিয়ে নিজেকে আর কোনো ইমেল পাঠাতে পারেন echo hi | sendmail root, এবং পোস্টসাফিক্স / opendkim যেমন হেডার যোগ করা হবে Message-Id, Dateএবং DKIM-Signatureআমার ব্যক্তিগত ইমেইল ঠিকানায়, সামনে ইমেইল, এবং সবকিছু কাজ করে মহান।

এখন আমি একটি অ্যাপ্লিকেশন তৈরি করতে চাই যা ডকার পাত্রে চলে এবং একই স্বাচ্ছন্দ্যে ইমেলগুলি প্রেরণ করতে পারে। বিশেষত, আমি পছন্দ মতো শিরোনাম যুক্ত করার বিষয়ে চিন্তা করতে চাই না Message-Idএবং আমি নিজেই ধারকটির ভিতরে খুব বেশি কনফিগারেশন বা সফ্টওয়্যার ইনস্টলেশন করতে চাই না।

এই কাজ করতে সবচেয়ে ভালো উপায় কি?

কনটেইনারটি sendmailহোস্টের উপর বহিরাগতকে চালিত করার কোনও উপায় আছে কি ?

আমি পোর্ট 25-তে এসএমটিপি প্রোটোকল ব্যবহার করে একটি ধারক থেকে পোস্টফিক্সের সাথে সংযোগ স্থাপনের চেষ্টা করেছি, তবে পোস্টফিক্স মনে হয় যে প্রাপ্ত বার্তাগুলি অন্যভাবে আচরণ করে; আমি মনে করি এটি কোনও শিরোলেখ যুক্ত করে নি তাই বার্তাটি স্পষ্টভাবে স্প্যাম হিসাবে প্রত্যাখ্যান করে জিমেইলে (এটি আমার স্প্যাম ফোল্ডারে রাখা যথেষ্ট ভালও ছিল না)।

এখানে মাইলোগ বিষয়বস্তু

Sep 28 23:35:52 dantooine postfix/smtpd[4306]: connect from unknown[172.17.0.95]
Sep 28 23:35:52 dantooine postfix/smtpd[4306]: DD457889B: client=unknown[172.17.0.95]
Sep 28 23:35:52 dantooine postfix/cleanup[4309]: DD457889B: message-id=<>
Sep 28 23:35:52 dantooine spamd[3175]: spamd: connection from localhost [::1]:59471 to port 783, fd 6
Sep 28 23:35:52 dantooine spamd[3175]: spamd: handle_user (getpwnam) unable to find user: 'someone'
Sep 28 23:35:52 dantooine spamd[3175]: spamd: still running as root: user not specified with -u, not found, or set to root, falling back to nobody
Sep 28 23:35:52 dantooine spamd[3175]: spamd: processing message (unknown) for someone:65534
Sep 28 23:35:52 dantooine spamd[3175]: spamd: clean message (2.5/5.0) for someone:65534 in 0.0 seconds, 331 bytes.
Sep 28 23:35:52 dantooine spamd[3175]: spamd: result: . 2 - MISSING_DATE,MISSING_FROM,MISSING_MID,UNPARSEABLE_RELAY scantime=0.0,size=331,user=someone,uid=65534,required_score=5.0,rhost=localhost,raddr=::1,rport=59471,mid=(unknown),autolearn=no autolearn_force=no
Sep 28 23:35:52 dantooine opendkim[3179]: DD457889B: can't determine message sender; accepting
Sep 28 23:35:53 dantooine postfix/qmgr[3664]: DD457889B: from=<whoever@example.com>, size=275, nrcpt=1 (queue active)
Sep 28 23:35:53 dantooine postfix/smtpd[4306]: disconnect from unknown[172.17.0.95]
Sep 28 23:35:53 dantooine postfix/smtp[4311]: DD457889B: to=<someone@gmail.com>, relay=gmail-smtp-in.l.google.com[2607:f8b0:4003:c05::1b]:25, delay=0.25, delays=0.12/0.01/0.03/0.09, dsn=5.7.1, status=bounced (host gmail-smtp-in.l.google.com[2607:f8b0:4003:c05::1b] said: 550-5.7.1 [fd17:8b70:893a:44bf:fe73:6c21] Our system has detected that 550-5.7.1 this message is likely unsolicited mail. To reduce the amount of spam 550-5.7.1 sent to Gmail, this message has been blocked. Please visit 550-5.7.1 http://support.google.com/mail/bin/answer.py?hl=en&answer=188131 for 550 5.7.1 more information. su20si7357528oeb.94 - gsmtp (in reply to end of DATA command))
Sep 28 23:35:53 dantooine postfix/cleanup[4309]: 254E688A0: message-id=<20140928233553.254E688A0@myserver.example.com>
Sep 28 23:35:53 dantooine postfix/bounce[4330]: DD457889B: sender non-delivery notification: 254E688A0
Sep 28 23:35:53 dantooine postfix/qmgr[3664]: 254E688A0: from=<>, size=3374, nrcpt=1 (queue active)
Sep 28 23:35:53 dantooine postfix/qmgr[3664]: DD457889B: removed
Sep 28 23:35:53 dantooine postfix/virtual[4331]: 254E688A0: to=<whoever@example.com>, relay=virtual, delay=0.01, delays=0/0/0/0, dsn=2.0.0, status=sent (delivered to maildir)
Sep 28 23:35:53 dantooine postfix/qmgr[3664]: 254E688A0: removed

দয়া করে আপনার ইমেলের শিরোনাম পোস্ট করুন (যিনি
জিএমএল

আমি যে ইমেলটি পাঠানোর চেষ্টা করছিলাম তার একটি Toশিরোনাম, Subjectশিরোনাম এবং একটি লাইন বডি ছিল। আমি নিশ্চিত নই যে পোস্টফিক্স মিলটারদের মাধ্যমে এটি চালানোর পরে কী কী শিরোনাম ছিল তা কীভাবে জানাবেন, আপনি কীভাবে জানেন? এখানে / var / লগ / সিসলগের আউটপুটটি
ডেভিড গ্রেসন

উত্তর:


8

আপনার কার্যক্ষম সমাধান হওয়ার কারণে, আমি যখন আপনি পোস্টফিক্স (এসএমটিপি) তে টেলনেট করেন এবং যখন আপনি সেন্ডমেল (এসএমটি-নন) ব্যবহার করেন তখন আমি বিভিন্ন আচরণের ব্যাখ্যা করার চেষ্টা করব।

এফওয়াইআই, ওপেনডিকেআইএম মিলটার প্রক্রিয়া সহ পোস্টফিক্সের মাধ্যমে আবেদন করবে । আপনি কিছু তথ্য পেতে পারেন কিভাবে এর মাধ্যমে পোস্টসাফিক্স মধ্যে পুরুষ মাছ বাস্তবায়ন কর্মকর্তা ডকুমেন্টেশন । এখানে পোস্টফিক্সে মিলটার হুকের ডায়াগ্রাম।

             SMTP-only       non-SMTP
             filters         filters
                ^ |            ^ |
                | v            | |
Network ->  smtpd(8)           | |
                       \       | V
Network ->  qmqpd(8)    ->  cleanup(8)  ->  incoming
                       /
            pickup(8)
               :
Local   ->  sendmail(1)

আপনি দেখতে পারেন যে সেন্ডমেল-ওয়ে (নন-এসএমটিপি) এবং টেলনেট-ওয়ে (এসএমটিপি) এর বিভিন্ন প্রসেসিং অর্ডার রয়েছে।

  • অ-এসএমটিপি ইমেলটি মিলটারে ইনজেকশনের আগে ক্লিনআপ দ্বারা প্রক্রিয়া করা হবে। পরিষ্কারের ডেমন : অনুপস্থিত হেডার যোগ করার জন্য দায়ী (Resent-) :, করতে :, বার্তা- ID থেকে :, এবং তারিখ: । সুতরাং আপনার ইমেলটিতে সম্পূর্ণ হেডার থাকবে যখন ওপেনডিকেআইএম মিল্টারে ইনজেকশন দেওয়া হলেও এমনকি মূল ইমেলটির অসম্পূর্ণ শিরোনাম ছিল।

  • এসএমটিপি ইমেলটি কোনও ক্লিনআপ প্রক্রিয়াজাতকরণের আগে ওপেনডিকেআইএম মিল্টারে ইনজেকশনের ব্যবস্থা করবে। অতএব, যদি আপনার আসল ইমেলটির অসম্পূর্ণ শিরোনাম থাকে তবে ওপেনডকিম ইমেলটিতে স্বাক্ষর করতে অস্বীকার করতে পারে। এর থেকে: শিরোনামটি বাধ্যতামূলক ছিল ( আরএফসি 63৩76 and দেখুন ) এবং কোনও ইমেল না থাকলে ওপেনডিকেইএম ইমেলটি স্বাক্ষর করতে অস্বীকার করবে এবং আপনাকে একটি সতর্কতা দেবে

    can't determine message sender; accepting
    

আমি কখনই ডকার ব্যবহার করি না, আমি জানি না যে ধারকটির ভিতরে সেন্ডমেল / পিকআপে কী সীমাবদ্ধতা রয়েছে। আমি মনে করি যে ওপেনডিকেইএম এই বার্তায় স্বাক্ষর করছে তা নিশ্চিত করার জন্য ডেভিড গ্রেসনের কর্মক্ষেত্র যথেষ্ট নিরাপদ ছিল।


সে ছিল আলোকিত; ধন্যবাদ. দুর্ভাগ্যক্রমে, আমি এখনও আমার বর্তমান সমাধানের চেয়ে ভাল কোনও সমাধান দেখতে পাচ্ছি না (আমার উত্তরে বর্ণিত)।
ডেভিড গ্রেসন

স্পষ্ট কারণটি ছিল From:আপনার ইমেলটিতে শিরোনাম যুক্ত করার জন্য অ্যাপ্লিকেশনটি ঠিক করা ছিল :)
masegaloeh

তবে আমাকে এমন জিনিসও যুক্ত করতে হবে Message-Idযার সম্পর্কে আমি খুব বেশি জানি না এবং আমি সম্ভবত এটি ভুল হয়ে যাব ... ক্লিনআপ ডেমনকে এটি যত্ন নিতে দেওয়া সহজ বলে মনে হচ্ছে।
ডেভিড গ্রেসন

আসলে, আরএফসি 76৩7676 বলে ম্যাসেজ-আইডি বাধ্যতামূলক ছিল না । ডিফল্টরূপে, বাধ্যতামূলক শিরোনামটি কেবল Fromশিরোনাম ছিল । তবে, আপনি যদি নিজের নিজস্ব বার্তা-আইডি উত্পন্ন করতে চান তবে আপনি এই আইইটিএফ খসড়ার
masegaloeh

6

আপনাকে সেটটিতে অবস্থিত পোস্টফিক্স কনফিগারেশনে inet_interfacesডকার ব্রিজ ( docker0) নির্দেশ করতে হবে/etc/postfix/main.cf

inet_interfaces = <docker0_ip>

হোস্টটিতে পোস্ট-ফিক্স-ইনস্টল-ইনস্টল-থেকে-ডকার-থেকে-ইমেল প্রেরণে আরও অভ্যন্তরীণ কাজের বিশদ


লিঙ্কের জন্য ধন্যবাদ! আমার জন্য প্রাসঙ্গিক অংশের মতো কিছু যোগ করতে ছিল 172.17.0.0/16থেকে mynetworks/etc/postfix/main.cfএবং service postfix restart
JSchirrmacher

5

এটি একটি অর্ধ উত্তর, বা কমপক্ষে অর্ধ-পরীক্ষিত একটি, যেহেতু আমি বর্তমানে একই সমস্যার মধ্য দিয়ে কাজ করছি। আমি আশা করছি যে আমি যা মিস করেছি তা থেকে কেউ মাংসে সহায়তা করতে পারে।

ওপি (ডেভিড গ্রেইসন) এর উত্তর আমার কাছে পোস্টড্রপ মেল-স্পুলের পুনঃ-আবিষ্কারের মতো মনে হচ্ছে, কিন্তু সেই মেল স্পুলটি ব্যবহার করা একটি আশাব্যঞ্জক মতামত বলে মনে হচ্ছে, তাই আমি এখানেই পৌঁছেছি।

পোস্টফিক্সের দ্বারা সরবরাহিত / usr / bin / সেন্ডমেল সামঞ্জস্যতা ইন্টারফেস মেল পোস্টপ্রেডে প্রেরণ করে, যা স্যাজিড পোস্টড্রপ, এটি মাইক্রোপ লাইনে / var / spool / postfix / mailrop এ মেল সংরক্ষণ করতে দেয়। এটি ডকার পাত্রে হওয়া উচিত। বাকি পোস্টফিক্সটি আশা করি পাত্রে চালাতে হবে না।

সুতরাং, আমি হোস্ট করছি / var / spool / postfix / maeldrop এবং / var / spool / postfix / সর্বজনীন। আমি হোস্ট পরিবেশে মেইলটি / var / spool / postfix / mailrop এ পৌঁছে দিতে পারি, যেহেতু আমি মেলড্রপ সারি ডিরেক্টরিটি মাউন্ট করেছি। যেহেতু আমি মাউন্ট করেছি /var/spool/postfix/public, সারি থেকে মেইল ​​সংগ্রহ maildropকরতে সংকেত pickupদিতে পারি । দুর্ভাগ্যক্রমে, আমি যদি এটি যত্ন না করি তবে ইউডস এবং গিডগুলি এতে জড়িত, যার অর্থ হোস্ট ডিরেক্টরিতে পিকআপটি স্পুল ফাইলগুলি পড়তে পারে না এবং আরও খারাপ পোস্টপিক্স ইনস্টলেশনটি হোস্ট এনভায়রনমেন্টের মেলড্রপ ডিরেক্টরিতে অনুমতিগুলি মেসেজ করে।

তবুও, এটি কাজ করছে বলে মনে হচ্ছে:

$ cat Dockerfile 
FROM debian:jessie
# Ids from parent environment

    RUN groupadd -g 124 postfix && \
        groupadd -g 125 postdrop && \
    useradd -u 116 -g 124 postfix

    RUN apt-get update && \
      DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
        postfix \
        bsd-mailx

    CMD echo test mail | mail myemail@example.com

$ sudo docker build   .
...
Successfully built 16316fcd44b6

$ sudo docker run   -v /var/spool/postfix/maildrop:/var/spool/postfix/maildrop \
  -v /var/spool/postfix/public:/var/spool/postfix/public 16316fcd44b6

এটি কাজ করার সময়, আমি ইউডস এবং গিডগুলিকে কঠোরভাবে কোডিং করে মারাত্মকভাবে খুশি নই। এর অর্থ হ'ল একই পাত্রে সর্বত্র একই চালনা করা যায় না। যদিও আমি অনুমান করি যে হোস্টের ভলিউম মাউন্ট করার পরিবর্তে আমি এটি কোনও কন্টেইনারে পোস্টফিক্সটি চালাচ্ছি তবে এটি কখনও বিবাদ করবে না এবং অনেক পাত্রে মেইল ​​আউট পেতে আমার কেবল একটি পোস্টফিক্স ইনস্টলেশন প্রয়োজন। আমি সেই বেসগুলি এবং গিডগুলিকে একটি বেস ইমেজে সেট করব যা আমার সমস্ত ধারকরা উত্তরাধিকার সূত্রে পেয়েছে।

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

এমএসএমটিপি পদ্ধতির সাথে উদ্বেগগুলির মধ্যে রয়েছে:

  • যদি এসএমটিপি রিলে এটি প্রেরণ করে তবে মেল হারিয়ে যাওয়ার আরও সম্ভাবনা। যদি এটি একই হোস্টের রিলে হয় তবে নেটওয়ার্ক সমস্যার সম্ভাবনা কম তবে আমি কীভাবে রিলে ধারকটি পুনরায় চালু করেছি সে সম্পর্কে আমাকে যত্নবান হতে হবে।
  • কর্মক্ষমতা?
  • যদি মেলের বিশাল ফাটলে যায় তবে মেল কি বাদ পড়তে শুরু করবে?

সাধারণভাবে, ভাগ করা পোস্টফিক্স স্পুল পদ্ধতির সেট আপ করার জন্য ভঙ্গুর কনফিগারেশন হওয়ার সম্ভাবনা বেশি দেখা যায়, তবে রান সময়ে ব্যর্থ হওয়ার সম্ভাবনা কম থাকে (রিলে উপলভ্য নয়, তাই মেল ফেলে দেওয়া হয়েছে)।


4

আমি স্থির করেছিলাম যে ধারকটি যেভাবে মেল প্রেরণ করবে তা হ'ল এটি কোনও নির্দিষ্ট ডিরেক্টরিতে কোনও ফাইলে লিখতে হবে যা কনটেইনার এবং হোস্ট উভয়ের থেকে ডকার "ভলিউম" হিসাবে অ্যাক্সেসযোগ্য।

আমি মেলসেন্ডার.শ নামে একটি শেল স্ক্রিপ্ট তৈরি করেছি যা একটি নির্দিষ্ট ডিরেক্টরি থেকে মেলগুলি পড়ে, প্রেরণমেলকে প্রেরণ করে এবং তারপরে সেগুলি মুছে দেয়:

#!/bin/bash
# Runs on the host system, reading mails files from a directory
# and piping them to sendmail -t and then deleting them.

DIR=$1

if [ \! \( -d "$DIR" -a -w "$DIR" \) ]
then
  echo "Invalid directory given: $DIR"
  exit 1
fi

echo "`date`: Starting mailsender on directory $DIR"

cd $DIR

while :
do
  for file in `find . -maxdepth 1 -type f`
  do
    echo "`date`: Sending $file"
    sendmail -t < $file
    rm $file
  done
  sleep 1
done

উবুন্টু আপস্টার্ট ব্যবহার করে তাই আমি /etc/init/mailsender.confএই স্ক্রিপ্টটিকে ডেমন হিসাবে রূপান্তর করতে একটি ফাইল তৈরি করেছি :

description "sends mails from directory"
start on stopped rc RUNLEVEL=[2345]
stop on runlevel[!2345]
respawn
exec start-stop-daemon --start --make-pidfile --pidfile /var/run/mailsender.pid --exec
/path/to/mailsender.sh /var/mailsend

আমি পরিষেবাটি দিয়ে শুরু করতে start mailsenderএবং এটি দিয়ে বন্ধ করতে পারি stop mailsender। আমি এর লগ ইনগুলি দেখতে পারি /var/log/upstart/mailsender.logএবং অবশ্যই আমি পিআইডি ফাইল ব্যবহার করে এটি পর্যবেক্ষণ করতে পারি।

আপনাকে /var/mailsendডিরেক্টরিটি তৈরি করতে হবে এবং তারপরে -v /var/mailsend:/var/mailsendআপনার docker runকমান্ডটিতে যুক্তি যুক্ত করে ডকার ধারক থেকে এটিকে অ্যাক্সেসযোগ্য করে তুলতে হবে ।


হয়তো মিনি_সেন্ডমেলের মতো কিছু হেল্পফুল হবে? এটি পাত্রে পৃথক অ্যাপ এবং কনটেইনার হোস্ট সিস্টেমে সেন্ডমেল সার্ভার ডেমন এর মধ্যে একটি ব্রিজের মতো পাত্রে ব্যবহৃত হয়। cyberciti.biz/tips/… acme.com/software/mini_sendmail
মিকল

এটি যদি এসএমটিপি এর মাধ্যমে পোস্টফিক্সটিতে ইমেল প্রেরণ করে তবে আমি মনে করি না যে পোস্টফিক্স ইমেলটি পরিষ্কার করবে। আপনার যদি এমন একটি এমটিএ থাকে যা আরও কনফিগারযোগ্য ছিল (বা আমরা কীভাবে পোস্টফিক্সকে আরও ভালভাবে কনফিগার করতে পারি তা কার্যকর হবে)।
ডেভিড গ্রেসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.