একটি লিনাক্স শেল স্ক্রিপ্ট থেকে একটি মেল প্রেরণ


120

আমি একটি লিনাক্স শেল স্ক্রিপ্ট থেকে একটি ইমেল প্রেরণ করতে চাই। এটি করার জন্য স্ট্যান্ডার্ড কমান্ডটি কী এবং আমার কি কোনও বিশেষ সার্ভারের নাম সেট আপ করতে হবে?


8
Superuser [উপর জিজ্ঞেস করে দেখুন superuser.com ] বা, এখনো ভালো, ইউনিক্স এবং Linux দঃপূঃ [ unix.stackexchange.com ]।
ড্যান মোল্ডিং

উত্তর:


119

যদি সার্ভারটি ভালভাবে কনফিগার করা থাকে, যেমন এটির একটি আপ এবং চলমান এমটিএ রয়েছে, আপনি কেবল মেল কমান্ডটি ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, কোনও ফাইলের সামগ্রী পাঠাতে, আপনি এটি করতে পারেন:

$ cat /path/to/file | mail -s "your subject" your@email.com

man mail আরো বিস্তারিত জানার জন্য.


7
'এমটিএ' বলতে এখানে কী বোঝায়, এখানে কোনও পুরো নাম বা লিঙ্ক আছে? শিক্ষানবিস হিসাবে, আমি এটি জানতে চাই। যেহেতু আমার তা করার অভিজ্ঞতা নেই।
জেন

5
@ জেন এমটিএ মেল পরিবহণ এজেন্ট হিসাবে বিবেচিত। পোস্টফিক্স, সেন্ডমেল, কিমেল ইত্যাদি
ফ্রান্সেসকো লরিটা

@ জেন বেশিরভাগ অংশে, আপনি এমটিএকে এসএমটিপি বা আইএমএপি সার্ভার বোঝাতে পারেন।
ব্যবহারকারী 151841

1
আপনি কীভাবে ইনস্টল / কনফিগার করবেন তা নিশ্চিত না হন এবং আপনি উবুন্টুতে আছেন: sudo apt-get install mailutilsএবং ইন্টারনেট সাইট নির্বাচন করুন : মেল প্রেরণ এবং সরাসরি এসএমটিপি ব্যবহার করে প্রাপ্ত হয়।
ব্যবহারকারী 1717828

86

আপনি ব্যাশ একটি পরিষ্কার এবং সহজ পদ্ধতি চান, এবং আপনি ব্যবহার করতে না চান তাহলে cat, echoইত্যাদি সহজ উপায় হতে হবে:

mail -s "subject here" email@address.com <<< "message"

<<<স্ট্যান্ডার্ড ইনপুট পুনর্নির্দেশের জন্য ব্যবহৃত হয়। এটি দীর্ঘদিন ধরে বাশের একটি অংশ ছিল।


6
প্রতিধ্বনি- "" কিছু ulti n মাল্টলাইন এবং ট্যাব msg t msg "| মেল-গুলি" বিষয় "your@email.com
পিপো

cat << END...END | mail -s "subject" test@example.com
ulidtko

আরে, এটি আমার জন্য দুর্দান্ত কাজ করেছে, ধন্যবাদ! আমি বিতরণ করার জন্য একাধিক ঠিকানা কীভাবে নির্দিষ্ট করব?
ইওউইন

1
@ E.Owen আপনি -t বিকল্প ব্যবহার করতে পারেন একাধিক ঠিকানা পাঠাতে শূণ্যস্থান দ্বারা পৃথক
জন

25

এক্সিম এবং এসএসএমটিপি উভয়ই চলমান থাকলে আপনি সমস্যার মধ্যে পড়তে পারেন। তাই আপনি যদি শুধুমাত্র একটি সহজ MTA এর চালাতে চান, শুধুমাত্র একটি সহজ SMTP ক্লায়েন্ট insistance জন্য ইমেল বিজ্ঞপ্তি পাঠাতে আছে, আপনি শেষ পর্যন্ত প্রাক ইনস্টল MTA এর মত দূর করবে | এক্সিম বা পোস্টসাফিক্স প্রথম এবং পুনরায় ইনস্টল করুন ssmtp।

তারপরে এটি কেবল সোজা এগিয়ে রয়েছে, কেবলমাত্র 2 টি ফাইল (রেভালিয়াসেস এবং এসএসএমটিপিএকএনএফ) কনফিগার করে - এসএসএমটিপি ডক দেখুন - এবং আপনার ব্যাশ বা বোর্ন স্ক্রিপ্টে ব্যবহারটি হ'ল:

#!/bin/sh  
SUBJECT=$1  
RECEIVER=$2  
TEXT=$3  

SERVER_NAME=$HOSTNAME  
SENDER=$(whoami)  
USER="noreply"

[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"  
[[ -z $2 ]] && RECEIVER="another_configured_email_address"   
[[ -z $3 ]] && TEXT="no text content"  

MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"  
echo -e $MAIL_TXT | sendmail -t  
exit $?  

স্পষ্টতই আপনার ফায়ারওয়াল আউটপুটটি এসএমটিপি পোর্ট (25) এ খুলতে ভুলবেন না।


এই স্ক্রিপ্টে আমি কোথায় পোর্ট নম্বর পরিবর্তন করতে পারি? আমার সার্ভারে এসএমটিপি পোর্ট 8181 এরও বেশি কাজ করে।
ম্যানিক্স

আমি এই শেলটিতে এটি করব না অন্যথায় আপনি শীঘ্রই বা পরে আটকে যাবেন। আপনি এটি কনফিগার ফাইলে করতে পারেন: unix.stackexchange.com/a/132731
हॉর্নেটবজ

1
আমি যদি সহজ প্রতিধ্বনি $ MAIL_TXT করি তবে নিউলাইনগুলি কেন যুক্ত হচ্ছে?
কর্নেলপ্যানিক

1
@ মারকো: প্লিজ মানুষ-ই বিকল্পের সাথে প্রতিধ্বনি দেখছেন: ব্যাকস্ল্যাশ
পলায়নের

দুঃখিত, -e প্যারামিটারটি ভুল করেছে
কার্নেলপ্যানিক

10

ব্যাশ স্ক্রিপ্টের জন্য অন্য একটি বিকল্প:

mailbody="Testmail via bash script"
echo "From: info@myserver.test" > /tmp/mailtest
echo "To: john@mywebsite.test" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
  • /tmp/mailtestএই স্ক্রিপ্টটি ব্যবহৃত হওয়ার সময় ফাইলটি ওভাররাইট করা হয়।
  • সেন্ডমেলের অবস্থান প্রতি সিস্টেমের জন্য পৃথক হতে পারে।
  • এটি ক্রোন স্ক্রিপ্টে ব্যবহার করার সময়, আপনাকে সেন্ডমেল কমান্ডের জন্য নিখুঁত পথটি ব্যবহার করতে হবে।

1
ডাউনভোটেড কারণ একাধিক প্রক্রিয়া একই সময়ে স্ক্রিপ্ট কল করতে পারে। এটি দূষিত / ভুল টিএমপি ফাইলের কারণ হতে পারে। এছাড়াও প্রতিবার / টিএমপি ফাইলটি ব্যবহৃত হওয়ার পরে ওভাররাইট করা হয় না - এটি প্রকৃতপক্ষে প্রতিটি ইমেলের অভ্যন্তরে পূর্ববর্তী সমস্ত ইমেল রয়েছে grows ভাল না.
টেটারহেড

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

8

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

ssmtpকনফিগার করা বেশ সহজ। মূলত, আপনাকে কেবল আপনার সরবরাহকারীর এসএমটিপি সার্ভারটি নির্দিষ্ট করতে হবে:

# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail

আরেকটি বিকল্প হাজার হাজার স্ক্রিপ্ট এক যে শুধু সরাসরি SMTP সার্ভারের সাথে সংযোগ ব্যবহার এবং যেমন সেখানে একটি বার্তা পোস্ট করতে, চেষ্টা হল SMTP-প্রমাণীকরণ-ইমেল-স্ক্রিপ্ট , SMTP-CLI , SendEmail , ইত্যাদি


"ssmtp" ছিল মেশিনে ইনস্টল করা তাই আমি এটিকে যেকোনোভাবে কিন্তু ধন্যবাদ চেষ্টা করতে পারেনি
appshare.co

5

আপনি কিছু এসএমটিপি সার্ভার ব্যবহার করতে চান তা স্বীকার করে, আপনি এটি করতে পারেন:

export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

পরিবর্তন করুন somehost, someportএবং someaccount@somedomainআপনি ব্যবহার করবেন এমন প্রকৃত মানগুলিতে। এই উদাহরণে কোনও এনক্রিপশন এবং কোনও প্রমাণীকরণ কার্যকর করা হয় না।


এবং mailxইনস্টল না হলে কী করবেন ?
এলোমেলোভাবে

2

mailকমান্ড যে (যিনি অনুমিত হবে ;-) আছে। আপনার শেলটি খুলুন এবং উপলভ্য সমস্ত বিকল্পের কমান্ডের জন্য man mailম্যানুয়াল পৃষ্ঠা পেতে প্রবেশ mailকরুন।


2
আমি এটি করেছি তবে ব্যবহারের জন্য কোনও সার্ভার নির্দিষ্ট করার কোনও বিকল্প নেই
15/07 এ 15+ এ appshare.co

1
এটি আপনার স্থানীয় মেল স্থানান্তর এজেন্ট কনফিগারেশনের অংশ, যেমন সেন্ডমেল বা পোস্টফিক্স।
ডার্কডাস্ট

2

এমনকি আপনার এমটিএ দরকার নেই। এসএমটিপি প্রোটোকলটি আপনার এসএমটিপি সার্ভারে সরাসরি এটি লিখতে যথেষ্ট সহজ। এমনকি যদি আপনি ওপেনএসএসএল প্যাকেজ ইনস্টল করা থাকে তবে আপনি এসএসএল / টিএলএসের মাধ্যমেও যোগাযোগ করতে পারেন। এই পোস্টটি দেখুন: https://33hops.com/send-email-from-bash-shell.html

উপরেরটি কীভাবে পাঠ্য / এইচটিএমএল ইমেলগুলি পাঠাতে হবে যা বাক্সের বাইরে কাজ করবে। আপনি যদি সংযুক্তিগুলি যুক্ত করতে চান তবে জিনিসটি কিছুটা জটিল হয়ে উঠতে পারে, আপনাকে বাইনারি ফাইলগুলি এনকোড করতে হবে এবং এগুলি সীমানার মধ্যে এম্বেড করতে হবে। তদন্ত শুরু করার জন্য এটি একটি ভাল জায়গা: http://forums.codeguru.com/showthread.php?418377- বিক্রয়- ইমেল-w-attachments- using-SMTP


2

লিনাক্সে, মেল ইউটিলিটি "-a" বিকল্পের সাথে সংযুক্তি প্রেরণের জন্য ব্যবহার করা যেতে পারে। বিকল্পটি পড়তে ম্যান পৃষ্ঠাগুলি যান। যেমন নীচের কোডটি একটি সংযুক্তি প্রেরণ করবে:

মেল-গুলি "এটি সাবজেক্ট" -a সংযুক্তি.টেক্সট নাম@domain.com <<< "হাই বাডি, দয়া করে ব্যর্থতার প্রতিবেদনগুলি সন্ধান করুন।"


তাই আপনাকে স্বাগতম। একটি উত্তর পোস্ট করার জন্য ধন্যবাদ। কীভাবে একটি ভাল উত্তর লিখবেন এবং সে অনুযায়ী সংশোধন করবেন সে সম্পর্কিত তথ্যটি পড়ুন । উপভোগ করুন SO ;-)
ZF007

2

লিনাক্স থেকে জিমেইলে মেল পাঠান

পোস্টফিক্স ব্যবহার করা হচ্ছে

1: সফ্টওয়্যার ইনস্টল করুন

দেবিয়ান এবং উবুন্টু:

apt-get update && apt-get install postfix mailutils

openSUSE:

zypper update && zypper install postfix mailx cyrus-sasl

ফেডোরা:

dnf update && dnf install postfix mailx

সেন্টওএস:

yum update && yum install postfix mailx cyrus-sasl cyrus-sasl-plain

আর্চ লিনাক্স:

pacman -Sy postfix mailutils

FreeBSD 'র:

portsnap fetch extract update

cd /usr/ports/mail/postfix

make config

কনফিগারেশনে এসএএসএল সমর্থন নির্বাচন করুন

make install clean

pkg install mailx

২. জিমেইল কনফিগার করুন

জন্য / etc / পোস্টসাফিক্স। পাসওয়ার্ড ফাইল তৈরি বা সম্পাদনা করুন:

vim /etc/postfix/sasl_passwd

আমি ভিআইএম ব্যবহার করছি আপনি ন্যানো, বিড়াল ..... এর মতো যে কোনও ফাইল এডিটর ব্যবহার করতে পারেন

> উবুন্টু, ফেডোরা, সেন্টসস, দেবিয়ান, ওপেনসুএস, আর্চ লিনাক্স:

এটি যোগ করুন

যেখানে ব্যবহারকারীরা আপনার মেইল নাম এবং পাসওয়ার্ডের সাথে প্রতিস্থাপন করে তা হ'ল জিমেইল পাসওয়ার্ড

[smtp.gmail.com]:587    user@gmail.com:password

ফাইলটি সংরক্ষণ করুন এবং বন্ধ করুন এবং এটি কেবল রুট দ্বারা অ্যাক্সেসযোগ্য করুন: এটির সংবেদনশীল বিষয়বস্তু যা আপনার পাসওয়ার্ড ধারণ করে bec

chmod 600 /usr/local/etc/postfix/sasl_passwd

> FreeBSD 'র:

ডিরেক্টরি / usr / স্থানীয় / ইত্যাদি / পোস্টফিক্স।

vim /usr/local/etc/postfix/sasl_passwd

লাইন যুক্ত করুন:

[smtp.gmail.com]:587    user@gmail.com:password

সংরক্ষণ এবং এটিকে কেবল মূল দ্বারা অ্যাক্সেসযোগ্য করে তুলুন:

chmod 600 /usr/local/etc/postfix/sasl_passwd

৩. পোস্টফিক্স কনফিগারেশন

কনফিগারেশন ফাইল

6 পরামিতি আমাদের অবশ্যই পোস্টফিক্সে সেট করতে হবে

উবুন্টু, আর্চ লিনাক্স, দেবিয়ান:

সম্পাদন করা

 vim /etc/postfix/main.cf

নিম্নলিখিত মানগুলি সংশোধন করুন:

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

smtp_sasl_security_options যা কনফিগারেশনে খালি সেট করা হবে তা নিশ্চিত করার জন্য যে কোনও জিমেইল-বেমানান সুরক্ষা বিকল্প ব্যবহার করা হয়নি।

সংরক্ষণ করেন এবং বন্ধ করেন

যেমন পছন্দ

openSUSE:

vim /etc/postfix/main.cf

পরিবর্তন

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/ca-bundle.pem

এটি ফাইলের কনফিগারেশন প্রয়োজন master.cf

সংশোধন:

vim /etc/postfix/master.cf

এই লাইনটি uncommenting দ্বারা (# অপসারণ)

#tlsmgr unix - - n 1000? 1 tlsmg

সংরক্ষণ করেন এবং বন্ধ করেন

ফেডোরা, সেন্টোস:

vim /etc/postfix/main.cf

পরিবর্তন

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

FreeBSD 'র:

vim /usr/local/etc/postfix/main.cf

সংশোধন:

relayhost = [smtp.gmail.com]:587
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/usr/local/etc/postfix/sasl_passwd
smtp_tls_CAfile = /etc/mail/certs/cacert.pem

এটি সংরক্ষণ এবং বন্ধ করুন

প্রক্রিয়া পাসওয়ার্ড ফাইল:

উবুন্টু, ফেডোরা, সেন্টোস, ওপেনসুএস, আর্চ লিনাক্স, দেবিয়ান:

postmap /etc/postfix/sasl_passwd

বিনামূল্যে বিএসডি জন্য

postmap /usr/local/etc/postfix/sasl_passwd

৪.১) পুনঃসূচনা পোস্টফিক্স

উবুন্টু, ফেডোরা, সেন্টোস, ওপেনসুএস, আর্চ লিনাক্স, দেবিয়ান:

systemctl restart postfix.service

ফ্রিবিএসডি এর জন্য :

service postfix onestart
nano /etc/rc.conf

যোগ

postfix_enable=YES

সংরক্ষণ করুন তারপর চালানো

service postfix start

5. নীচের লিঙ্কটির সহায়তা ব্যবহার করে Gmail এ "কম সুরক্ষিত অ্যাপস" সক্ষম করুন

https://support.google.com/accounts/answer/6010255

6. একটি পরীক্ষার ইমেল প্রেরণ করুন

mail -s "subject" recever@domain.com

টিপুন

আপনার ইচ্ছা হিসাবে মেল লাশ যোগ এন্টার টিপুন তারপর প্রেস Ctrl + D সঠিক পরিসমাপ্তি জন্য

এটা কাজ করছে না যদি সমস্ত ধাপ পরীক্ষা আবার এবং পরীক্ষা U "সক্ষম করলে কম সুরক্ষিত অ্যাপলিকেশান" আপনার Gmail এ

তারপরে আপনি যদি কিছু পরিবর্তন করেন তবে পোস্টফিক্স পুনরায় চালু করুন

শেল স্ক্রিপ্টের জন্য .sh ফাইল তৈরি করুন এবং আপনার প্রয়োজনীয়তা হিসাবে 6 টি পদক্ষেপ কমান্ড যুক্ত করুন

যেমন একটি নমুনার জন্য উদাহরণস্বরূপ

#!/bin/bash
REALVALUE=$(df / | grep / | awk '{ print $5}' | sed 's/%//g')
THRESHOLD=80

if [ "$REALVALUE" -gt "$THRESHOLD" ] ; then
    mail -s 'Disk Space Alert' mailid@domainname.com << EOF
Your root partition remaining free space is critically low. Used: $REALVALUE%
EOF
fi

স্ক্রিপ্টটি ইমেল প্রেরণ করে যখন ডিস্কের ব্যবহার থ্রিলহোল্ড ভেরিয়ালবে (এখানে ৮০%) নির্দিষ্ট করা শতাংশের উপরে উঠে যায়।


এই উত্তরের নামটি কি "লিনাক্স থেকে মেইল ​​প্রেরণ করুন recever@domain.com Via GMAIL" হওয়া উচিত নয়?
ক্যামেরন হাডসন

1

আপনি 'ইমেল' বা 'ইমেলেক্স' কমান্ড ব্যবহার করতে পারেন।

(1) im vim /etc/mail.rc # বা # vim /etc/nail.rc

set from = xxx@xxx.com #
set smtp = smtp.exmail.gmail.com #gmail's smtp server 
set smtp-auth-user = xxx@xxx.com #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login

কারণ এটি যদি কোনও অনুমোদিত অ্যাকাউন্ট থেকে না পাঠানো হয় তবে ইমেল জাঙ্ক মেইল ​​তালিকায় পাবেন।

(2) cho প্রতিধ্বনি "অনুগ্রহ করে অনস অন विषयগুলি অপসারণ করতে দয়া করে মনে রাখবেন!" | মেল-গুলি "বর্জ্য বিষয়গুলি" -a a.txt বিকাশকারী @ xxx.com # ব্যবহারকারীদের 'বিকাশকারী@xxxx.com.com' এ পাঠান

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