لهذا الأمر البرمجي باوشيل لهذا اليوم، سنغطي أمر باوشيل Send-MailMessage. يقوم هذا الأمر البرمجي باوشيل بخدمة هدف واحد وهو إرسال رسائل بريد إلكتروني بطرق مختلفة جداً.
نظرًا لوجود العديد من الطرق التي يمكن بها يمكن لأمر Send-MailMessage إرسال رسائل البريد الإلكتروني، فلنقم بالانتقال مباشرةً وبدء تغطية جميع الأمثلة الشائعة التي قد تواجهها. في هذه المقالة، سنغطي العديد من الأمثلة بدءًا من الأبسط وصولاً إلى بعض السيناريوهات التي لا أتمناها لأحد!
سيكون هذا المنشور موردًا رائعًا للإشارة إليه في حال واجهت أي حالات تحتاج فيها إلى إرسال بريد إلكتروني باستخدام باوشيل ونسيت الصيغة البرمجية.
خادم SMTP
يجب أن يمر كل بريد إلكتروني عبر خادم SMTP في مكان ما عبر خادم ومنفذ. لتحديد خادم SMTP المستخدم، استخدم معامل يسمى SMTPServer
الذي يتيح لك تحديد خادم SMTP لإنشاء اتصال وتوجيه البريد من خلاله. ومع ذلك، فإنه ليس مطلوبًا.
إذا لم تحدد قيمة لمعامل SMTPServer
، سيتم استخدام القيمة المخزنة في متغير تفضيل $PSEmailServer
. يمكنك تعيين قيمة لهذا المتغير تمامًا كما تفعل مع أي متغير آخر.
ومع ذلك، هذا المتغير لا يعيش عبر جلسات PowerShell. وهذا يعني أنه يجب عليك تعريفه في كل مرة يتم فيها فتح جلسة PowerShell جديدة. لهذا السبب، أنصح بإما استخدامه عن طريق تعريفه أعلاه في مرجع Send-MailMessage
الخاص بك أو عدم تعريفه على الإطلاق. بدلاً من ذلك، أوفر شخصيًا قيمة معلمة SMTPServer
. بهذه الطريقة، لن تضطر إلى إدارة متغير خارجي قد يتغير عليك.
المنفذ
افتراضيًا، القيمة التي ستحاول الأمر إرسال البريد الإلكتروني من خلال خادم SMTP هي المنفذ 25. هذا هو برتوكول SMTP العادي غير المشفر. ومع ذلك، في الوقت الحاضر، فمن الأكثر شيوعًا إرسال البريد الإلكتروني المشفر باستخدام SSL/TLS (سنغطي هذه السيناريوهات لاحقًا).
إذا كنت بحاجة إلى تغيير المنفذ من 25، يمكنك استخدام معلمة Port
.
المستلمون والمرسلون
لإرسال بريد إلكتروني إلى مستلمين مختلفين عبر طرق مثل To، Cc و Bcc، يحتوي الأمر على معلمات مختلفة لاستيعاب ذلك.
معلمات To و Cc و Bcc في أمر Send-Mailmessage
الأمر يحتوي على ثلاث معلمات تدعم كل منها مستلمين متعددين مفصولين بفاصلة تسمى To
، Cc
و Bcc
.
يمكنك تحديد عناوين فردية مثلما هو مبين أدناه.
أو يمكنك تحديد مستلمين متعددين لكل قيمة للمعلمة.
معلمة From
عند إرسال البريد الإلكتروني ، يمكنك أيضًا تحديد المعلمة “من” التي ستضبط رأس الرد في البريد الإلكتروني. تسمح هذه المعلمة بعنوان واحد فقط. إذا قرر المستلم الرد على البريد الإلكتروني ، فسيكون هذا هو البريد الإلكتروني الذي سيعود به الرد.
بشكل افتراضي ، باستخدام عنوان البريد الإلكتروني ، سيتم عرض عنوان البريد الإلكتروني فقط في حقل المرسل في بريد المستلم. ومع ذلك ، إذا كنت ترغب في تحديد اسم أو نوعًا ما من التسمية مثل صندوق بريد حساب الخدمة ، فيمكنك أيضًا تحديد اسم وبريد إلكتروني مثل:
لاحظ استخدام معلمة “الموضوع”. يُطلب دائمًا استخدام هذه المعلمة. سترى استخدام هذه المعلمة في جميع الأمثلة.
الجسم
تسمح المعلمة “الجسم” لك بتحديد محتوى البريد الإلكتروني. في أبسط حالة ، يمكنك تحديد أي نص تريده وسيقوم الأمر بإرساله عبر النص العادي.
إرسال رسائل البريد الإلكتروني بجسم HTML
يمكنك أيضًا إرسال جسم رسالة البريد الإلكتروني عبر HTML بدلاً من النص العادي. للقيام بذلك ، استخدم نفس المعلمة “الجسم” كما تفعل مع النص العادي واستخدم HTML للسلسلة واستخدم معلمة تحويل “الجسمكـ HTML”
لاحظ في المثال أعلاه أنني قمت بتضمين سلسلة النص في
@'
و'@
. هذا ما يسمى سلسلة هنا. يتيح لك هذا تعريف سلاسل طويلة تعتاد على رؤيتها في أجسام البريد الإلكتروني التي تحتوي على عوائد السيارة. تحافظ سلاسل هنا على تنسيق السلاسل وهي طريقة رائعة لتعريف جسم البريد الإلكتروني خاصة إذا كان في تنسيق HTML.
الترميز
إذا كان لديك أحرف خاصة في عنوان أو جسم البريد الإلكتروني الخاص بك، يمكنك استخدام معلمة Encoding
. تسمح لك هذه المعلمة بترميز عنوان وجسم البريد الإلكتروني عبر نوع الترميز المحدد قبل الإرسال.
لديك بعض الخيارات هنا:
- ASCII (الافتراضي)
- UTF8
- UTF7
- UTF32
- Unicode
- BigEndianUnicode
- Default
- OEM
المرفقات
يمكن للأمر أيضًا إرفاق ملف أو أكثر. للقيام بذلك، يمكنك استخدام معلمة Attachments
وتوفير مسار الملف (أو الملفات) التي ترغب في إرفاقها.
يمكنك أيضًا تحديد مرفقات متعددة عبر مجموعة عن طريق فصلها بفاصلة.
تسمح معلمة Attachments
أيضًا بتوجيه الملفات عبر أوامر مثل Get-Item
و Get-ChildItem
إلى أمر Send-MailMessage
.
بريد إلكتروني آمن ومصادق عليه
بشكل افتراضي، يقوم cmdlet بإرسال البريد الإلكتروني عبر اتصال SMTP غير مشفر عبر المنفذ 25. ومع ذلك، يتيح أيضًا دعم إرسال البريد الإلكتروني المشفر عبر SSL/TLS بوجود اسم مستخدم وكلمة مرور.
إذا حاولت إعادة توجيه البريد الإلكتروني من خلال خادم SMTP يتطلب المصادقة، سيفشل الأمر مع رسالة خطأ مثلما هو موضح أدناه.
لتلافي ذلك، يجب عليك أولاً تحديد المنفذ (عادةً 587 لبروتوكول TLS) ومعلمة UseSsl
. يُخبر ذلك cmdlet بمحاولة الاتصال بالمنفذ 587 على خادم SMTP وتشفير الرسالة بأكملها. عادةً (دائمًا؟) ستحتاج أيضًا إلى تحديد اسم المستخدم/كلمة المرور للمصادقة على خادم SMTP باستخدام معلمة Credential
.
أعلاه، أقوم بالحصول على كائن أوراق الاعتماد (PSCredential) باستخدام cmdlet
Get-Credential
. وفي بعض الأحيان يشكل ذلك مشكلة لأنه تفاعلي يعني أنه يتوقف عند تشغيل النص لطلب اسم مستخدم وكلمة مرور. لتجنب ذلك، يمكنك إنشاء كائن PSCredential على الطاير.
A common email example is to use Gmail. Using the knowledge you’ve gained above, you can now easily send email through Gmail using the smtp.gmail.com SMTP server as shown below.
تعيين أولوية البريد الإلكتروني
على الرغم من أنني شخصياً أود أن تختفي ميزة تعيين أولويات البريد الإلكتروني، يمكنك تعيين مستويات أولوية للرسائل التي ترسلها عبر معلمة Priority
. يتم تفسير هذه الأولوية بطرق مختلفة من قبل برنامج البريد الإلكتروني.

يسمح cmdlet Send-mailmessage لك بتعيين البريد الإلكتروني بثلاثة أولويات مختلفة.
- عادي (افتراضي)
- عالي
- منخفض
ولكن من فضلك، من أجل الله، لا تعتقد أن جميع رسائلك ذات أولوية عالية!
تنبيهات التسليم
في النهاية، يمكنك تحديد تنبيهات التسليم للرسائل الإلكترونية. تعرف تنبيهات التسليم عادة بتصدير القراءة في بعض عملاء البريد الإلكتروني. تسمح لك تنبيهات التسليم بتلقي إشعار إذا ما تم استلام البريد الإلكتروني من قبل المستلم. ومع ذلك، يجب على المستلم السماح بهذا.
لديك أربعة خيارات عند طلب تنبيهات التسليم.
- لا شيء (افتراضي)
- عند النجاح (عندما يتم توصيل البريد بنجاح)
- عند الفشل (إشعار إذا فشل التسليم)
- تأخير (عندما يتم تأخير البريد عبر خادم SMTP)
يمكنك تحديد خيار تنبيه التسليم باستخدام معلمة DeliveryNotificationOptions
.
يمكنك أيضًا طلب تنبيهات تسليم متعددة في وقت واحد عن طريق فصلها بفاصلة.
ملخص
في هذه المقالة، تعلمت كل شيء عن cmdlet Send-mailmessage وما يمكنه من القيام به. غطينا هذا الأمر بشكل وافر باستخدام كل المعلمات المتاحة مع أمثلة. آمل أن يكون هذا المقال مرجعًا لك عند استخدام cmdlet Send-mailmessage.
قراءة إضافية
تأكد من مراجعة بعض المقالات ذات الصلة الأخرى!