إرسال الرسائل البريدية بسهولة باستخدام سيند-ميلمساج في برنامج باور شيل

لهذا الأمر البرمجي باوشيل لهذا اليوم، سنغطي أمر باوشيل Send-MailMessage. يقوم هذا الأمر البرمجي باوشيل بخدمة هدف واحد وهو إرسال رسائل بريد إلكتروني بطرق مختلفة جداً.

نظرًا لوجود العديد من الطرق التي يمكن بها يمكن لأمر Send-MailMessage إرسال رسائل البريد الإلكتروني، فلنقم بالانتقال مباشرةً وبدء تغطية جميع الأمثلة الشائعة التي قد تواجهها. في هذه المقالة، سنغطي العديد من الأمثلة بدءًا من الأبسط وصولاً إلى بعض السيناريوهات التي لا أتمناها لأحد!

سيكون هذا المنشور موردًا رائعًا للإشارة إليه في حال واجهت أي حالات تحتاج فيها إلى إرسال بريد إلكتروني باستخدام باوشيل ونسيت الصيغة البرمجية.

خادم SMTP

يجب أن يمر كل بريد إلكتروني عبر خادم SMTP في مكان ما عبر خادم ومنفذ. لتحديد خادم SMTP المستخدم، استخدم معامل يسمى SMTPServer الذي يتيح لك تحديد خادم SMTP لإنشاء اتصال وتوجيه البريد من خلاله. ومع ذلك، فإنه ليس مطلوبًا.

إذا لم تحدد قيمة لمعامل SMTPServer، سيتم استخدام القيمة المخزنة في متغير تفضيل $PSEmailServer. يمكنك تعيين قيمة لهذا المتغير تمامًا كما تفعل مع أي متغير آخر.

Assigning a value to the $PSEmailServer preference variable
PS51> $PSEmailServer = 'smtp.server.local'

ومع ذلك، هذا المتغير لا يعيش عبر جلسات PowerShell. وهذا يعني أنه يجب عليك تعريفه في كل مرة يتم فيها فتح جلسة PowerShell جديدة. لهذا السبب، أنصح بإما استخدامه عن طريق تعريفه أعلاه في مرجع Send-MailMessage الخاص بك أو عدم تعريفه على الإطلاق. بدلاً من ذلك، أوفر شخصيًا قيمة معلمة SMTPServer. بهذه الطريقة، لن تضطر إلى إدارة متغير خارجي قد يتغير عليك.

PS51> Send-MailMessage -SmtpServer 'smtp.server.local'

المنفذ

افتراضيًا، القيمة التي ستحاول الأمر إرسال البريد الإلكتروني من خلال خادم SMTP هي المنفذ 25. هذا هو برتوكول SMTP العادي غير المشفر. ومع ذلك، في الوقت الحاضر، فمن الأكثر شيوعًا إرسال البريد الإلكتروني المشفر باستخدام SSL/TLS (سنغطي هذه السيناريوهات لاحقًا).

إذا كنت بحاجة إلى تغيير المنفذ من 25، يمكنك استخدام معلمة Port.

PS51> Send-MailMessage -SmtpServer 'smtp.server.local' -Port 587

المستلمون والمرسلون

لإرسال بريد إلكتروني إلى مستلمين مختلفين عبر طرق مثل To، Cc و Bcc، يحتوي الأمر على معلمات مختلفة لاستيعاب ذلك.

معلمات To و Cc و Bcc في أمر Send-Mailmessage

الأمر يحتوي على ثلاث معلمات تدعم كل منها مستلمين متعددين مفصولين بفاصلة تسمى To، Cc و Bcc.

يمكنك تحديد عناوين فردية مثلما هو مبين أدناه.

Sending email to one recipient via To, Cc and Bcc
PS51> Send-MailMessage -To joe@gmail.com -Cc bob@gmail.com -Bcc susie@hotmail.com -Subject 'this is a subject'

أو يمكنك تحديد مستلمين متعددين لكل قيمة للمعلمة.

Sending email to multiple recipients via To, Cc and Bcc
PS51> Send-MailMessage -To joe@gmail.com, tony@mycompany.local -Cc bob@gmail.com, rick@othercompany.com -Bcc susie@hotmail.com,secret@fooorg.org -Subject 'this is a subject'

معلمة From

عند إرسال البريد الإلكتروني ، يمكنك أيضًا تحديد المعلمة “من” التي ستضبط رأس الرد في البريد الإلكتروني. تسمح هذه المعلمة بعنوان واحد فقط. إذا قرر المستلم الرد على البريد الإلكتروني ، فسيكون هذا هو البريد الإلكتروني الذي سيعود به الرد.

Sending email from an address
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject'

بشكل افتراضي ، باستخدام عنوان البريد الإلكتروني ، سيتم عرض عنوان البريد الإلكتروني فقط في حقل المرسل في بريد المستلم. ومع ذلك ، إذا كنت ترغب في تحديد اسم أو نوعًا ما من التسمية مثل صندوق بريد حساب الخدمة ، فيمكنك أيضًا تحديد اسم وبريد إلكتروني مثل:

Adam Bertram <adbertram@gmail.com>

لاحظ استخدام معلمة “الموضوع”. يُطلب دائمًا استخدام هذه المعلمة. سترى استخدام هذه المعلمة في جميع الأمثلة.

الجسم

تسمح المعلمة “الجسم” لك بتحديد محتوى البريد الإلكتروني. في أبسط حالة ، يمكنك تحديد أي نص تريده وسيقوم الأمر بإرساله عبر النص العادي.

PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body'

إرسال رسائل البريد الإلكتروني بجسم HTML

يمكنك أيضًا إرسال جسم رسالة البريد الإلكتروني عبر HTML بدلاً من النص العادي. للقيام بذلك ، استخدم نفس المعلمة “الجسم” كما تفعل مع النص العادي واستخدم HTML للسلسلة واستخدم معلمة تحويل “الجسمكـ HTML”

Sending an HTML table in an email
$body = @' <table style="width:100%"> <tr> <th>Firstname</th> <th>Lastname</th> <th>Age</th> </tr> <tr> <td>Jill</td> <td>Smith</td> <td>50</td> </tr> <tr> <td>Eve</td> <td>Jackson</td> <td>94</td> </tr> </table> '@ PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body $body -BodyAsHtml

لاحظ في المثال أعلاه أنني قمت بتضمين سلسلة النص في @' و '@. هذا ما يسمى سلسلة هنا. يتيح لك هذا تعريف سلاسل طويلة تعتاد على رؤيتها في أجسام البريد الإلكتروني التي تحتوي على عوائد السيارة. تحافظ سلاسل هنا على تنسيق السلاسل وهي طريقة رائعة لتعريف جسم البريد الإلكتروني خاصة إذا كان في تنسيق HTML.

الترميز

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

لديك بعض الخيارات هنا:

  • ASCII (الافتراضي)
  • UTF8
  • UTF7
  • UTF32
  • Unicode
  • BigEndianUnicode
  • Default
  • OEM
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body' -Encoding UTF8

المرفقات

يمكن للأمر أيضًا إرفاق ملف أو أكثر. للقيام بذلك، يمكنك استخدام معلمة Attachments وتوفير مسار الملف (أو الملفات) التي ترغب في إرفاقها.

Attaching the C:\file.doc to an email
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body' -Attachments 'C:\file.doc'

يمكنك أيضًا تحديد مرفقات متعددة عبر مجموعة عن طريق فصلها بفاصلة.

Attaching the C:\file.doc and D:\report.xlsx file to an email
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body' -Attachments 'C:\file.doc','D:\report.xlsx'

تسمح معلمة Attachments أيضًا بتوجيه الملفات عبر أوامر مثل Get-Item و Get-ChildItem إلى أمر Send-MailMessage.

PS51> Get-ChildItem -Path 'C:\MyFiles' | Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body'

بريد إلكتروني آمن ومصادق عليه

بشكل افتراضي، يقوم cmdlet بإرسال البريد الإلكتروني عبر اتصال SMTP غير مشفر عبر المنفذ 25. ومع ذلك، يتيح أيضًا دعم إرسال البريد الإلكتروني المشفر عبر SSL/TLS بوجود اسم مستخدم وكلمة مرور.

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

Error message when attempting to send unencrypted email.
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first.

لتلافي ذلك، يجب عليك أولاً تحديد المنفذ (عادةً 587 لبروتوكول TLS) ومعلمة UseSsl. يُخبر ذلك cmdlet بمحاولة الاتصال بالمنفذ 587 على خادم SMTP وتشفير الرسالة بأكملها. عادةً (دائمًا؟) ستحتاج أيضًا إلى تحديد اسم المستخدم/كلمة المرور للمصادقة على خادم SMTP باستخدام معلمة Credential.

PS51> $credential = Get-Credential
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body' -UseSsl -Port 587 -Credential $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.

$gmailCred = Get-Credential

$sendMailParams = @{
    From = '[email protected]' ## يجب أن يكون gmail.com
    To = '[email protected]'
    Subject = 'some subject'
    Body = 'some body'
    SMTPServer = 'smtp.gmail.com'
    SMTPPort = 587
    UseSsl = $true
    Credential = $gmailCred
}

Send-MailMessage @sendMailParams

تعيين أولوية البريد الإلكتروني

على الرغم من أنني شخصياً أود أن تختفي ميزة تعيين أولويات البريد الإلكتروني، يمكنك تعيين مستويات أولوية للرسائل التي ترسلها عبر معلمة Priority. يتم تفسير هذه الأولوية بطرق مختلفة من قبل برنامج البريد الإلكتروني.

High priority message in Outlook

يسمح cmdlet Send-mailmessage لك بتعيين البريد الإلكتروني بثلاثة أولويات مختلفة.

  • عادي (افتراضي)
  • عالي
  • منخفض
Assigning a high-priority email
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body' -Priority High

ولكن من فضلك، من أجل الله، لا تعتقد أن جميع رسائلك ذات أولوية عالية!

تنبيهات التسليم

في النهاية، يمكنك تحديد تنبيهات التسليم للرسائل الإلكترونية. تعرف تنبيهات التسليم عادة بتصدير القراءة في بعض عملاء البريد الإلكتروني. تسمح لك تنبيهات التسليم بتلقي إشعار إذا ما تم استلام البريد الإلكتروني من قبل المستلم. ومع ذلك، يجب على المستلم السماح بهذا.

لديك أربعة خيارات عند طلب تنبيهات التسليم.

  • لا شيء (افتراضي)
  • عند النجاح (عندما يتم توصيل البريد بنجاح)
  • عند الفشل (إشعار إذا فشل التسليم)
  • تأخير (عندما يتم تأخير البريد عبر خادم SMTP)

يمكنك تحديد خيار تنبيه التسليم باستخدام معلمة DeliveryNotificationOptions.

Requesting a notification on delivery
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body' -DeliveryNotificationsOptions 'OnSuccess'

يمكنك أيضًا طلب تنبيهات تسليم متعددة في وقت واحد عن طريق فصلها بفاصلة.

Requesting a notification for all types
PS51> Send-MailMessage -From me@company.org -To joe@gmail.com -Subject 'this is a subject' -Body 'this is the body' -DeliveryNotificationsOptions 'OnSuccess','OnFailure','Delay'

ملخص

في هذه المقالة، تعلمت كل شيء عن cmdlet Send-mailmessage وما يمكنه من القيام به. غطينا هذا الأمر بشكل وافر باستخدام كل المعلمات المتاحة مع أمثلة. آمل أن يكون هذا المقال مرجعًا لك عند استخدام cmdlet Send-mailmessage.

قراءة إضافية

تأكد من مراجعة بعض المقالات ذات الصلة الأخرى!

Source:
https://adamtheautomator.com/send-mailmessage/