কমান্ড লাইন পাইপিংয়ের মাধ্যমে কীভাবে প্রেরণমেল


9

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

আমি এমন একটি সার্ভার থেকে মাইগ্রেশন করছি যা ব্যবহার করে mailএমন একটি সার্ভারে ব্যবহার করে sendmail। কমান্ড লাইনের মাধ্যমে কীভাবে কোনও সাবডিকেস সেন্ডমেইলে প্রেরণ করা যায় তা অনুসন্ধান করার জন্য আমি সংগ্রাম করছি।

/usr/local/bin/php -f /path/to/file.php 2>&1 | /usr/sbin/sendmail -s "My Test Email Subject" test@email.com

sendmailআপনার সিস্টেমে ব্যবহৃত মেইলটি রুট করতে ব্যবহৃত বাইনারিটি এটি দ্বারা জমা দেওয়া হয় mail। এটি প্রেরণমেল , পোস্টফিক্স , এক্সিম এবং আরও অনেক কিছু প্রোগ্রামের স্যুট অংশ । সুতরাং আপনাকে মেইলের জন্য উপযুক্ত প্যাকেজ ইনস্টল করতে হবে । সুতরাং আপনি যে লিনাক্স বিতরণটি ব্যবহার করছেন তা আমাদের জানান।
অ্যাডামো

ইউএনআইএক্স / লিনাক্সের সমস্ত POSIX সম্মতিযুক্ত ফর্মগুলিকে "সেন্ডমেল" নামক কিছু এক্সিকিউটেবল সরবরাহ করা উচিত এবং একটি নির্দিষ্ট বিকল্পের বিকল্প গ্রহণ করা উচিত যা সেন্ডমেলের কার্যকারিতার একটি উপসেটের সাথে সামঞ্জস্যপূর্ণ (নীচে টিমডাইয়ের উত্তরে বর্ণিত -t বিকল্প সহ)। এক্সিম, পোস্টফিক্স এবং কিমেল এগুলি সরবরাহ করে --- কখনও কখনও তারা উদাহরণস্বরূপ / usr / bin বা / usr / sbin এর পরিবর্তে / usr / Libxec / সেন্ডমেলের অধীনে ইনস্টল করা হবে।
জিম ডেনিস

উত্তর:


3

/ Usr / sbin / সঠিকভাবে sendmail

ওইটা ভুল.

আপনার mailকিছুটা কমান্ড থাকা উচিত । এটি বলা যেতে পারে mailx। মধ্যে হওয়া উচিত /bin/ডিরেক্টরি। স্ট্যান্ডার্ড অনুশীলন হিসাবে, পিএইচপি স্ক্রিপ্টগুলি কখনই /sbinবা কিছুতে কল করা উচিত নয় /usr/sbin। এসবিন প্রোগ্রামগুলি সাধারণত মূলের জন্য।

এছাড়াও, পিএইচপি একটি বিল্ট ইন মেল ফাংশন রয়েছে


যদি তা না হয় mailবা mailxতা হতে পারে Mail। কিন্তু এমন কি যদি ঐ উপস্থিত না থাকার, আপনি ইনস্টল করতে পারেন গাড়ল এবং চালানোর mutt -xযা অনুকরণ mailx
অ্যাডামো

এটি সত্য ... আমার পথ নির্ধারণের জন্য, আমি দৌড়ে এসেছি which mailএবং এটি ফিরে এসেছে /bin/mail
ওয়েবনেট

2
সেন্ডমেইল হ'ল আরও ভাল পদ্ধতির (এটি একটি পিক্সিক স্ট্যান্ডার্ড) ... তবে সেন্ডমেল-টি ব্যবহার করা ভাল (ইনপুট স্ট্রিম থেকে শিরোনামগুলি নেবে)। প্রোগ্রামটি মেল প্রেরণকে কোনও প্রকার শেলকে বিনা বাধায় কেবলমাত্র সেন্ডমেইল ইউটিলিটির সাথে ইন্টারঅ্যাক্ট করার অনুমতি দিয়ে অনেকগুলি সম্ভাব্য শেল ভেরিয়েবল ইন্টারপোলেশন দুর্বলতা এড়িয়ে চলে)। আরও বিশদ বিবরণের জন্য "টিমডি'এর উত্তর দেখুন।
জিম ডেনিস

13

আমার ডেবিয়ান সিস্টেমগুলিতে (যা "রিয়েল" সেন্ডমেলের পরিবর্তে এক্সিম রয়েছে, তবে এখনও সামঞ্জস্যের জন্য বাইনারি রয়েছে), যখন আমি কোনও স্ক্রিপ্ট থেকে মেল প্রেরণ করতে চাই তখন এর সমান কিছু করি:

cat <<EOF | sendmail -t
To: recipient@example.com
Subject: Testing
From: sender@example.com

This is a test message
EOF

লক্ষ করুন যে ফাঁকা রেখাটি গুরুত্বপূর্ণ।


1
ফাঁকা রেখাটি বার্তার প্রধান অংশ থেকে কোনও বার্তার শিরোনাম অংশ আলাদা করতে ব্যবহৃত হয়। কেন না sendmail -t <<EOF?
অ্যাডামো

@ অ্যাডামো: কারণ এটি '|' দিয়ে প্রেরণমেলকে পাইপের জন্য মূল প্রশ্নে প্যাটার্নের আরও কাছাকাছি ছিল (এবং বাস্তবে যে জায়গাগুলি আমি নিজেই এটি করি এটি সাধারণত জেনারেট_স্টেট_মেসেজ.শ | সেন্ডমেল-টি) এর মতো।
টিমডে

2
এটি ইউনিক্সের অধীনে নিরাপদ প্রোগ্রামমেটিক মেইল ​​প্রেরণের স্বীকৃতি approach
জিম ডেনিস

অবশেষে সেন্ডমেলের জন্য একটি কাজের উদাহরণ পেল! ধন্যবাদ!
ইনটারপাওয়ার

যদি sendmailএসটিডিআরআর ব্যর্থ হয়ে লিখতে হয়, তবে স্ক্রিপ্টের পরে আমি এটি কীভাবে পরিবর্তনশীল হিসাবে ক্যাপচার করব?
স্ট্রিস্টার

1
echo -e "This is my body\nSecond line" 2>&1 | sed '1!b;s/^/To: test@email.com\nSubject: My Test Email Subject\n\n/' | sendmail -t

প্রতিধ্বনি = ইমেলের মূল অংশ।
সেড স্টাফ = ইমেল শিরোনামগুলি এবং শরীর এবং শিরোলেখগুলির মধ্যে গুরুত্বপূর্ণ ডাবল-লাইন প্রয়োগ করে।
সেন্ডমেইল -t = প্রেরণ মেল মাধ্যমে সরাসরি এটি।


-1
php -f file.php 2>&1 | sed 's/^/To: test@email.com\nSubject: My Test Email Subject\n\n/' | sendmail -t

1
হাই এবং সার্ভার ফল্টটিতে আপনাকে স্বাগতম। সম্ভবত আপনি নিজের উত্তরটি কিছুটা ব্যাখ্যা করতে পারেন?
slm
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.