كيفية تعيين عنوان البريد الإلكتروني من أمر MAILX؟

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

سؤال

أنا أعمل على برنامج نصي Kornshell (KSH) يعمل على خادم Solaris الذي سيرسل رسالة بريد إلكتروني عند وفاء شرط الخطأ. أنا أرسل البريد الإلكتروني عبر mailx.

سؤال: كيف يمكنني تعيين عنوان البريد الإلكتروني "من" mailx أمر؟

الرمز الحالي:

echo ${msg_txt} | mailx -s "Script Failure" ${to_email}

ملاحظة: الأمر يعمل بشكل جيد، ومع ذلك، فإن "من" هو اسم المستخدم الذي أقوم بتشغيل البرنامج النصي كما وأود ذلك عن عنوان بريد إلكتروني آخر.

كيف يمكنني تحقيق ذلك؟

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

المحلول

يمكنك استخدام خيار "-r" لتعيين عنوان المرسل:

mailx -r me@example.com -s ...

نصائح أخرى

خيار "-r" غير صالح على أنظمتي. اضطررت إلى استخدام بناء جملة مختلف لحقل "من".

-a "From: Foo Bar <foo.bar@someplace.com>"

في حال كنت تريد أيضا تضمين اسمك الحقيقي في الحقل من الحقل، يمكنك استخدام التنسيق التالي

mailx -r "me@example.com (My Name)" -s "My Subject" ...

إذا حدثت أحرفا غير ASCII في اسمك، مثل بلدي Aeæoeøaaå (æ = c3 86، Ø = c3 b8، Å = c3 a5)، عليك أن ترميزها مثل هذا:

mailx -r "me@example.com (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...

آمل أن ينقذ هذا شخص ما ساعة من العمل الشاق / الأبحاث!

على دبيان حيث bsd-mailx تم تثبيته بشكل افتراضي، -r الخيار لا يعمل. ومع ذلك يمكنك استخدام mailx -s subject recipient@abc.com -- -f sender@abc.com في حين أن. وفقا لصفحة الإنسان، يمكنك تحديد خيارات SendMail بعد --.

حزمة nail يوفر واجهة معززة مثل الواجهة. ويشمل ذلك -r اختيار.

في Centos 5 تثبيت الحزمة mailx يمنحك برنامج يسمى mail, ، والتي لا تدعم mailx والخيارات.

ركض فقط مشكلة بناء الجملة هذه على آلة Centos 7.

على آلة أوبونتو قديمة جدا mail, ، بناء الجملة للحصول على بريد إلكتروني مؤلف جيدا

echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"

ولكن على مربع centos 7 الذي جاء مع mailx تثبيت، إنه مختلف تماما:

echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"

مستشار man mail يدل علي -r يتم إهماله ويجب الآن تحديد عنوان المرسل مباشرة باستخدام -S "variable=value".

في هذه الأمثلة اللاحقة، أنا محدد $sender كما "Sender Name <sender.address@domain.tld>" و $recipients كما "recipient.name@domain.tld" كما أفعل في بلدي الباش البرنامج النصي.

قد تجد بعد ذلك، كما فعلت ذلك، عندما تحاول إنشاء محتوى جسم البريد الإلكتروني في البرنامج النصي الخاص بك عند نقطة إرسال البريد الإلكتروني، فإنك تواجه سلوكا غريبا حيث يتم احتساب جسم البريد الإلكتروني بدلا من ذلك كملف ثنائي ("ATT00001. بن "،" تطبيق / Octet-Stream "أو" Noname "، اعتمادا على العميل).

هذا السلوك هو كيفية معالجة Mailx الإرث أحرف غير معروفة / تحكم في إدخال النص. (مزيد من المعلومات: https://access.redhat.com/solutions/1136493., ، والتي تشير نفسها إلى صفحة MAILX MAN للحل.)

للحصول على هذا، استخدمت طريقة أنابيب الناتج الذي تم إنشاؤه tr قبل المرور إلى mail, كما يحدد أيضا شحن البريد الإلكتروني:

echo -e "$body" | tr -d \\r | mail -s "$subject" -S "from=$sender" -S "sendcharsets=utf-8,iso-8859-1" "$recipients"

في البرنامج النصي الخاص بي، أنا أيضا أعمدت أيضا صراحة المحلية مسبقا كما هو قيد التشغيل حيث أن كرونجوب (وكرون لا يرث المتغيرات البيئية):

LANG="en_GB.UTF8" ; export LANG ;

(طريقة بديلة لإعداد اللغات ل cronjobs مناقشة هنا)

مزيد من المعلومات حول هذه الحلول عبر https://stackoverflow.com/a/29826988/253139. و https://stackoverflow.com/a/3120227/253139..

على ماكوس سييرا، خلق ~ / .mailrc مع إعداد SMTP فعلت الخدعة:

set smtp-use-starttls
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=youremail@gmail.com
set smtp-auth-password=yourpass

ثم لإرسال البريد من CLI:

echo "your message" | mail -s "your subject" to_email@gmail.com

على أوبونتو بيونيتش 18.04، وهذا يعمل حسب الرغبة:

$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx --append='FROM:Foghorn Leghorn <fleghorn@yourisp.com>' -s "test cli email $(date)" -- recipient@acme.com

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