رمز KornShell (ksh) لإرسال المرفقات باستخدام mailx وuuencode؟

StackOverflow https://stackoverflow.com/questions/96326

سؤال

أحتاج إلى إرفاق ملف باستخدام mailx ولكن في الوقت الحالي لا أحقق نجاحًا.

هذا هو الكود الخاص بي:

subject="Something happened"
to="somebody@somewhere.com"
body="Attachment Test"
attachment=/path/to/somefile.csv

uuencode $attachment | mailx -s "$subject" "$to" << EOF

The message is ready to be sent with the following file or link attachments:

somefile.csv

Note: To protect against computer viruses, e-mail programs may prevent
sending or receiving certain types of file attachments.  Check your
e-mail security settings to determine how attachments are handled.

EOF

أي ردود فعل سيكون موضع تقدير كبير.


تحديثلقد أضفت المرفق var لتجنب الاضطرار إلى استخدام المسار في كل مرة.

هل كانت مفيدة؟

المحلول

يجب عليك ربط كل من نص رسالتك والمرفق المشفر:

$ subject="Something happened"
$ to="somebody@somewhere.com"
$ body="Attachment Test"
$ attachment=/path/to/somefile.csv
$
$ cat >msg.txt <<EOF
> The message is ready to be sent with the following file or link attachments:
>
> somefile.csv
>
> Note: To protect against computer viruses, e-mail programs may prevent
> sending or receiving certain types of file attachments.  Check your
> e-mail security settings to determine how attachments are handled.
>
> EOF
$ ( cat msg.txt ; uuencode $attachment somefile.csv) | mailx -s "$subject" "$to"

هناك طرق مختلفة لتقديم نص الرسالة، وهذا مجرد مثال قريب من سؤالك الأصلي.إذا كان يجب إعادة استخدام الرسالة فمن المنطقي تخزينها في ملف واستخدام هذا الملف.

نصائح أخرى

حسنًا، إليك المشاكل القليلة الأولى التي تواجهك.

  1. يبدو أنك تفترض أن عميل البريد سيتعامل مع المرفقات المشفرة دون أي رؤوس.هذا لن يحدث.

  2. أنت تسيء استخدام إعادة توجيه الإدخال/الإخراج:يتم تغذية مخرجات uuencode والمستند هنا إلى mailx، وهو ما لا يمكن أن يحدث.

  3. أنت تسيء استخدام uuencode:إذا تم إعطاء مسار واحد، فهو مجرد اسم لإعطاء الملف الذي تم فك تشفيره، وليس اسم ملف الإدخال.سيؤدي إعطاء الملف مرتين إلى تعيين نفس الاسم للملف الذي تم فك ترميزه مثل الاسم الذي تمت قراءته.العلم -m يفرض تشفير Base64.ولكن هذا لا يزال لن يوفر رؤوس المرفقات لـ mailx.

من الأفضل أن تحصل على نسخة من mpack، والتي ستفعل ما تريد.

إذا كان يجب عليك القيام بذلك، فيمكنك القيام بشيء مثل هذا:

cat <<EOF | ( cat -; uuencode -m /path/to/somefile.csv /path/to/somefile.csv; ) | mailx -s "$subject" "$to" 
place your message from the here block in your example here
EOF

هناك الكثير من الاحتمالات الأخرى..لكن هذا لا يزال يحتوي على المستند هنا كما في المثال الخاص بك وكان من السهل من أعلى رأسي ، وليس هناك ملف مؤقت المعنية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top