ในการส่งข้อความอีเมลผ่านเซิร์ฟเวอร์ SMTP คุณสามารถใช้ Send-MailMessage cmdlet ของ PowerShell คุณสามารถใช้ cmdlet ในตัวนี้เพื่อส่งอีเมลใน PowerShell เวอร์ชัน 2.0 และใหม่กว่า (ก่อนหน้านี้คุณสามารถใช้ .Net System.Net.Mail
ชั้นเรียนเพื่อส่งอีเมล) ในบทความนี้เราจะแสดงวิธีใช้ Send-MailMessage
เพื่อส่งอีเมลจากสคริปต์ PowerShell
ในการรับไวยากรณ์ของ cmdlet ให้รันคำสั่งนี้:
รับความช่วยเหลือ Send-MailMessage
Send-MailMessage [-To] <String[]> [-Subject] <String> [[-Body] <String>] [[-SmtpServer] <String>] [-Attachments <String[]>] [-Bcc <String[]>] [-BodyAsHtml] [-Cc <String[]>] [-Credential <PSCredential>] [-DeliveryNotificationOption {None | OnSuccess | OnFailure | Delay | Never}] [-Encoding <Encoding>] -From <String> [-Port <Int32>] [-Priority {Normal | Low | High}] [-UseSsl] [<CommonParameters>] The Send-MailMessage cmdlet sends an email message from within Windows PowerShell.
นี่คือตัวเลือกหลัก:
- จาก คือที่อยู่ผู้ส่ง (หากเซิร์ฟเวอร์ SMTP ไม่ตรวจสอบที่อยู่ของผู้ส่งและอนุญาตให้ส่งอีเมลโดยไม่ระบุชื่อ คุณไม่จำเป็นต้องระบุที่อยู่ smtp จริง คุณสามารถส่งข้อความอีเมลในนามของที่อยู่อีเมลใดก็ได้)หลี่>
- ถึง – ที่อยู่อีเมลของผู้รับ;
- เซิร์ฟเวอร์ SMTP –ที่อยู่ของเซิร์ฟเวอร์ SMTP ที่คุณต้องการส่งอีเมล
$PSEmailServer
ตัวแปรสภาพแวดล้อม คุณไม่จำเป็นต้องระบุที่อยู่เซิร์ฟเวอร์ SMTP ใน Send-MailMessage cmdlet คำสั่ง PowerShell อย่างง่ายต่อไปนี้จะส่งอีเมลที่มีหัวเรื่องและเนื้อหาที่ระบุไปยังผู้รับหลายคน
Send-MailMessage -From '[email protected]' -To '[email protected]','[email protected]' -Subject "Test Email Alert" -Body "This is email body text" –SmtpServer 'smtp.woshub.com'
เพื่อให้ง่ายต่อการแก้ไขแอตทริบิวต์ของ cmdlet คำสั่ง send email สามารถแสดงได้ดังนี้:
Send-MailMessage `
-SmtpServer smtp.woshub.com `
-To '[email protected]','[email protected]' `
-From 'ps- [email protected]' `
-Subject "Test" `
-Body "การส่งอีเมลโดยใช้ PowerShell" `
-Encoding 'UTF8'
โปรดทราบว่าในคำสั่งสุดท้าย เราได้ตั้งค่าการเข้ารหัส UTF8 เพิ่มเติมสำหรับอีเมล มิฉะนั้น หากหัวเรื่องหรือเนื้อหาของอีเมลมีอักขระที่ไม่ใช่ ANSI อักขระเหล่านี้จะแสดงอย่างไม่ถูกต้อง
ตามค่าเริ่มต้น การเข้ารหัส ANSI และ ASCII จะใช้ใน Windows PowerShell หากคุณได้อัปเดตเวอร์ชัน PS เป็น PowerShell Core แล้ว โปรดทราบว่าเวอร์ชันนี้ใช้การเข้ารหัส UTF-8 เป็นค่าเริ่มต้นอยู่แล้วตามค่าเริ่มต้น cmdlet ของ Send-MailMessage จะพยายามส่งอีเมลผ่านพอร์ต SMTP มาตรฐาน TCP 25 หากเซิร์ฟเวอร์ SMTP ของคุณอนุญาตให้ส่งอีเมลโดยใช้โปรโตคอลที่เข้ารหัสเท่านั้น คุณสามารถระบุหมายเลขพอร์ตได้ (โดยมากคือ 465 หรือ 587 ) และ UseSsl ตัวเลือก:
-SmtpServer 'smtp.woshub.com' -พอร์ต 465 –UseSsl
ชื่อ | ที่อยู่เซิร์ฟเวอร์ SMTP | พอร์ต | ประเภทการเข้ารหัส |
Gmail | smtp.gmail.com | 587 25 465 | TLS TLS SSL |
Office 365 | smtp.office365.com | 587 | TLS |
Outlook.com | smtp-mail.outlook.com | 587 | TLS |
Yahoo | smtp.mail.yahoo.com | 587 | TLS |
เมล iCloud | smtp.mail.me.com | 587 | TLS |
เอโอแอล | smtp.aol.com | 465 | SSL |
หากเซิร์ฟเวอร์ SMTP ไม่อนุญาตให้ส่งอีเมลโดยไม่ระบุชื่อ (รีเลย์ถูกปฏิเสธ) คุณจะเห็นข้อผิดพลาดนี้:
5.7.1 Client was not authenticated.
จากนั้น คุณจะตรวจสอบสิทธิ์บนเซิร์ฟเวอร์ SMTP ได้โดยใช้ –Credential ตัวเลือก
คุณสามารถโต้ตอบขอข้อมูลรับรองผู้ใช้เพื่อตรวจสอบ:
Send-MailMessage …… -Credential (Get-Credential)
นอกจากนี้ คุณสามารถระบุบัญชีที่จะใช้สำหรับการตรวจสอบสิทธิ์ในตัวแปร:
$cred =Get-Credential
Send-MailMessage ... -Credential $cred
หากคุณต้องการบันทึกรหัสผ่านเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ SMTP โดยตรงในสคริปต์ PowerShell ให้ใช้ไวยากรณ์นี้:
$mypasswd =ConvertTo-SecureString "smP@ssdw0rrd2" -AsPlainText -Force
$mycreds =New-Object System.Management.Automation.PSCredential ("[email protected]", $mypasswd)
ส่ง-MailMessage ... –Credential $mycreds
หากคุณต้องการเพิ่มไฟล์แนบในอีเมล ให้ใช้ –Attachments
ตัวเลือก. ในตัวอย่างด้านล่าง เราจะส่งอีเมลในรูปแบบ HTML และแนบ file1.txt และ install.log จากดิสก์ในเครื่อง เราจะใช้เซิร์ฟเวอร์ Gmail SMTP (ขั้นแรกคุณต้องสร้างรหัสผ่านสำหรับแอปใน Gmail และใช้สำหรับการตรวจสอบสิทธิ์ smtp แทนรหัสผ่าน Gmail ของคุณ):
สร้างแล้ว: $(Get-Date - รูปแบบ g)$MailMessage = @{
To = "[email protected]"
Bcc = "[email protected]", "[email protected]"
From = "smtpsender1 @gmail.com"
Subject = "DC Server Report"
Body = "ยินดีต้อนรับ!
Smtpserver = "smtp.gmail.com"
Port = 587
UseSsl = $true
BodyAsHtml = $true
Encoding =“UTF8”
สิ่งที่แนบมา = “C:\Logs\file1.txt”, “C:\Logs\install.log”
}
Send-MailMessage @MailMessage -Credential $credรหัส>
นี่คือลักษณะของอีเมลในรูปแบบ HTML พร้อมไฟล์แนบในอินเทอร์เฟซ Gmail
คุณสามารถกำหนดค่าการแจ้งเตือนการจัดส่ง (ใบตอบรับการอ่าน) สำหรับอีเมลโดยใช้ -DeliveryNotificationOption
. การแจ้งเตือนการจัดส่งช่วยให้คุณได้รับแจ้งหากผู้รับได้รับอีเมล
ประเภทการแจ้งเตือนที่ใช้ได้คือ:
- ความสำเร็จ (แจ้งว่าส่งของสำเร็จ)
- OnFailure (แจ้งว่าส่งของไม่สำเร็จ)
- ล่าช้า (แจ้งว่าส่งของล่าช้า)