שלחו דואר אלקטרוני בקלות עם פקודת ה- PowerShell Send-MailMessage

לצורך פקודת PowerShell של היום, אנו מכסים את פקודת ה-PowerShell Send-MailMessage. פקודת PowerShell זו משרתת מטרה אחת ויחידה; לשלוח דוא"ל בהרבה דרכים שונות.

מכיוון שישנן כל כך הרבה דרכים שבהן הפקודה Send-MailMessage יכולה לשלוח הודעות דוא"ל, בואו נצלול פנימה ונתחיל לכסות את כל הדוגמאות הנפוצות שעלולות להיתקל בהן. במאמר זה, אנו הולכים לכסות דוגמאות רבות החל מהפשוטות ביותר ועד לכמה תרחישים שאני מאחל לאף אחד!

הפוסט הזה יהיה משאב מעולה להוסיף לסימנייה במקרה שתתקלו במקרים בהם תצטרכו לשלוח דוא"ל עם PowerShell ותשכחו את התחביר.

שרת ה-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

בעת שליחת דוא"ל, ניתן גם לציין את הפרמטר 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>

שים לב שהוזן הפרמטר Subject. פרמטר זה נדרש תמיד. תראה שימוש בפרמטר זה בכל הדוגמאות.

גוף

הפרמטר Body מאפשר לך לציין מה יהיה בגוף הדוא"ל. בפשטות מרבית, תוכל לציין טקסט כלשהו והפקודה תשלח אותו בפליינטקסט.

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

שליחת דוא"ל עם גוף בפורמט HTML

תוכל גם לשלוח גוף הדוא"ל בפורמט HTML במקום פליינטקסט. כדי לעשות זאת, השתמש באותו הפרמטר Body שתשתמש עם פליינטקסט, אך השתמש ב-HTML עבור המחרוזת והשתמש בפרמטר המתג BodyAsHtml.

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
  • בררת מערכת
  • 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

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'

סיכום

בפוסט זה, למדת על פקודת ה-Send-mailmessage ועל כל הפרמטרים שיש לה, יחד עם דוגמאות. אני מקווה שהפוסט הזה יכול לשמש כמקור מידע עבורך בעת שימוש בפקודת ה-Send-mailmessage.

קריאה נוספת

אל תשכח לבדוק פוסטים נוספים קשורים!

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