ওএস এক্স সি এল এলিতে টেলনেট এবং এফটিপি ব্যবহার করে স্বয়ংক্রিয় ইমেল প্রেরণ


1

নিম্নলিখিত স্ক্রিপ্ট চলছে:

#!/bin/bash

cvs_domain=abc.com
cvs_mail_server=mail.${cvs_domain}
cvs_port=25
telnet $cvs_mail_server $cvs_port<<_EOF_
EHLO $cvs_domain
MAIL FROM:my_mail@abc.com
RCPT TO:my_mail@abc.com
DATA
Subject:Test!

Don't panic. This is only a test.
.
QUIT
_EOF_

Connection closed by hostসার্ভারের পালাবার চরিত্রের জবাব দেওয়ার পরে এবং 220বার্তাটি পরিবেশন করার আগে ঠিক একটি বার্তা দিয়ে ব্যর্থ হয় ।

ইন্টারেক্টিভ মোডে সংশ্লিষ্ট সিকোয়েন্সটি চালানো (অবশ্যই, "এখানে-ডক" ব্যতীত) আমার লক্ষ্য অর্জন করে।

আমার সন্দেহ হয় যে সার্ভারে কমান্ড লাইনগুলি "ফিডিং" করা লাইনের অন্য প্রান্তে প্রত্যাশা মতো ঠিক ঘটে না।

আমার ধারণা সঠিক? এই সমস্যাটি প্রশমিত করার কোনও উপায় আছে কি?


1
আমি আপনাকে
ওয়্যারশার্কে

আপনি "এখানে-দস্তাবেজ" ছাড়াই লিখেন <- কি? এই শব্দগুলি কোথাও ঘটে না
বার্লপ

@ বারলপ এটি আমার মন অতিক্রম করা উচিত ছিল! দুর্দান্ত ধারণা (ওয়্যারশার্ক)। "এখানে-ডক" হিসাবে, আমি tldp.org/LDP/abs/html/ এখানে-docs.html উল্লেখ করছি
বড় প্রবীণ

উত্তর:


1

যখন আপনাকে একটি ইন্টারেক্টিভ কমান্ড-লাইন সরঞ্জামটি স্ক্রিপ্ট করতে হবে তখন সাধারণ সমাধানটি ব্যবহার করা উচিত expect(1)


যদিও এটি মার্জিত উত্তর, আমি thitonএখানে তার উত্তরে বর্ণিত দ্বিতীয় কৌশল (ব্রেসড এক্সপ্রেশন) প্রয়োগ করে এই সমস্যাটি সম্পর্কে একটি উপায় খুঁজে পেতে সক্ষম হয়েছি : স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 7013137/… । একটি খাঁটি বাশ সমাধান নির্দিষ্ট পরিস্থিতিতে under
বড় প্রবীণ

আমি সম্পূর্ণরূপে নিশ্চিত হয়েছি তা নিশ্চিত করার জন্য, আমি sleep 1আমার কমান্ডগুলির মধ্যে বিলম্ব ( ) প্রবর্তন করেছি। "এখানে-ডক" স্বরলিপি আর প্রয়োজন নেই।
বড় প্রবীণ

0

সম্পূর্ণতার জন্য, আমি এখানে সম্পূর্ণ "কুরুচিপূর্ণ-তবে-এটি-কাজ করে" সমাধান পোস্ট করছি (সংশোধনীর সাথে, এটির চূড়ান্ত আকারে, এটি আরও বেশি লোককে ইমেল প্রেরণ করে পাশাপাশি একটি সংযুক্তি সরবরাহ করে):

cd "$(dirname "$0")"
working_dir=$(pwd)  # switching to the folder this script has been started from

cvs_domain=mail.org
cvs_mail_server=mail.${cvs_domain}
cvs_port=25
cvs_sender=me@mail.org
cvs_recipients=(me@mail.org me@mail.com)
cvs_delimiter=-----nEXt_paRt_frontier!!VSFCDVGGERHERZZ@$%^zzz---  # MIME multi-part delimiter, do not change

{ echo HELO $cvs_domain; sleep 1
  # set up the email (sender, receivers): 
  echo MAIL FROM:$cvs_sender; sleep 1
  for r in ${cvs_recipients[@]}; do
    echo RCPT TO:$r; sleep 1
  done
  echo DATA; sleep 1
  echo From:$cvs_sender; sleep 1
  for r in ${cvs_recipients[@]}; do
    echo To:$r; sleep 1
  done
  echo Subject:Test for build; sleep 1
  # build the mail structure, according to the MIME standard:
  echo MIME-Version: 1.0; sleep 1
  echo "Content-Type: multipart/mixed; boundary=\"$cvs_delimiter\""; sleep 1
  echo --${cvs_delimiter}; sleep 1
  echo Content-Type: text/plain; sleep 1
  echo; sleep 1
  echo Don\'t panic. This is only a test.; sleep 1
  echo; sleep 1
  echo --${cvs_delimiter}; sleep 1
  echo "Content-Type: text/plain; name=\"test.txt\""; sleep 1
  echo "Content-Disposition: attachment; filename=\"test.txt\""; sleep 1
  echo "Content-Transfer-Encoding: base64"; sleep 1
  echo; sleep 1
  encoded_file=$( base64 ./change.log )  # encoding the contents of the file, according to the declaration above
  echo "$encoded_file"; sleep 1
  echo; sleep 1  
  echo --${cvs_delimiter}; sleep 1 
  echo .; sleep 1
  echo QUIT
  sleep 1; } | telnet $cvs_mail_server $cvs_port  

কেউ বিলম্বের সাথে বেড়াতে বেছে নিতে পারে। এবং, (যা আমি মনে করি) এর জন্য আরও দৃ solution় সমাধানের জন্য আমি যেতে চাই expect(1)

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