วิธีอ่านอีเมล Outlook ด้วย PowerShell
มาดูวิธีการเปิด อ่าน และแยกวิเคราะห์อีเมลในกล่องจดหมาย Outlook ที่เชื่อมต่อจากภายในสคริปต์ PowerShell Outlook MAPI ช่วยให้คุณเข้าถึงกล่องจดหมายได้โดยตรง แสดงรายการในกล่องจดหมาย และอ่านอีเมล (รวมถึงที่อยู่ของผู้ส่ง หัวข้อ เนื้อหา ฯลฯ)
สถานการณ์นี้ต้องการให้ติดตั้ง Outlook บนคอมพิวเตอร์และมีโปรไฟล์กล่องจดหมายที่กำหนดค่าไว้ คุณสามารถอ่านกล่องเมลจากเซิร์ฟเวอร์เมลใดก็ได้ รวมถึง Exchange, Outlook.com, Gmail, AOL, Yahoo และอื่นๆ
เพื่อให้ PowerShell สามารถเข้าถึงเนื้อหาของกล่องจดหมายได้ คุณต้องมี Outlook ทำงานบนคอมพิวเตอร์ ตรวจสอบว่ากระบวนการ outlook.exe กำลังทำงานอยู่และรันในเบื้องหลังโดยใช้คำสั่ง:
$OutlookProc = ( Get-Process | where { $_.Name -eq "OUTLOOK" } )
if ( $OutlookProc -eq $null ) { Start-Process outlook.exe -WindowStyle Hidden; Start-Sleep -Seconds 5 }ตอนนี้คุณต้องโหลดคลาส .NET และสร้างอินสแตนซ์ Outlook:
Add-Type -Assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -ComObject Outlook.Applicationเนื้อหาของกล่องจดหมายสามารถเข้าถึงได้ผ่านทางเนมสเปซโปรโตคอล MAPI:
$namespace = $Outlook.GetNameSpace("MAPI")
สามารถมีได้หลายโฟลเดอร์ในกล่องจดหมาย แสดงรายการโฟลเดอร์กล่องจดหมาย:
$NameSpace.Folders.Item(1).Folders | FT FolderPathคุณสามารถแสดงรายการโฟลเดอร์ในมุมมองแบบต้นไม้และนับจำนวนรายการอีเมลในแต่ละโฟลเดอร์ได้:
Function Listfolders
{
param($Folders, $Indent)
ForEach ($Folder in $Folders | sort-object name)
{
write-host $Indent$($Folder.Name)" ("$($Folder.Items.Count)")"
Listfolders $Folder.Folders $Indent" "
}
}
ListFolders $namespace.Folders ""
หากต้องการค้นหาชื่อเริ่มต้นของโฟลเดอร์สำหรับอีเมลขาเข้า ให้รันคำสั่งต่อไปนี้ (โดยค่าเริ่มต้น นี่คือโฟลเดอร์ กล่องจดหมาย แต่ชื่อนี้อาจแตกต่างกันไปขึ้นอยู่กับการตั้งค่าภาษา/ภูมิภาคของคุณ):
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)แสดงรายการอีเมลในโฟลเดอร์กล่องขาเข้าในรูปแบบต่อไปนี้: ที่อยู่ผู้ส่ง ผู้รับ เรื่อง ขนาด และวันที่ได้รับ
$inbox.Items | ft SenderEmailAddress, To, Subject, Size, ReceivedTimeตัวกรอง PowerShell Where-Object อย่างง่ายช่วยให้คุณค้นหาอีเมลที่ต้องการได้ ตัวอย่างเช่น แสดงรายการอีเมลที่ได้รับในวันนี้จากผู้ส่งรายใดรายหนึ่ง:
$currentDate = Get-Date
$inbox.Items | Where-Object { $_.ReceivedTime -like "*$currentDate*" -and $_.SenderEmailAddress -eq "[email "}คุณสามารถแสดงหัวเรื่องและเนื้อหาของอีเมลได้ เนื้อความอีเมลสามารถแสดงเป็นข้อความธรรมดา (
Bodyคุณสมบัติ) หรือในรูปแบบ HTML (
HTMLBodyคุณสมบัติ). ในตัวอย่างนี้ เนื้อหาของอีเมลที่ได้รับล่าสุดจะปรากฏขึ้น:
$inbox.Items($inbox.Items.Count)|select SenderEmailAddress,subject,Body,HTMLBody|fl
หากต้องการตรวจสอบว่าผู้ใช้ Exchange อ่านอีเมลแล้วหรือยัง คุณสามารถใช้แอตทริบิวต์ UnRead ได้
หากอีเมลมีไฟล์แนบ คุณสามารถบันทึกไฟล์แนบลงในไดรฟ์ในเครื่องได้:
$email= $inbox.Items($inbox.Items.Count)
if ($Email.Attachments.Count -gt 0) {
$Attachment = $Email.Attachments.Item(1)
$Attachment.SaveAsFile("C:\Downloads\$($Email.Attachments.Item(1).FileName)")
}ลบอีเมลที่ได้รับล่าสุดออกจากกล่องจดหมาย:
$email= $inbox.Items($inbox.Items.Count)
$Email.Delete()คุณสามารถใช้ PowerShell เพื่อเข้าถึงกล่องจดหมาย Outlook ของคุณในสคริปต์อัตโนมัติที่ต้องการให้คุณดำเนินการบางอย่างเมื่อคุณได้รับอีเมลขาเข้า ใช้งาน Task Scheduler เพื่อเรียกใช้สคริปต์ PS1 เพื่อตรวจสอบกล่องจดหมายของคุณ


