открытое PowerShell .msg вложение без сохранения - PullRequest
0 голосов
/ 04 июня 2018

Мне нужно написать скрипт powershell, который будет проходить через папку Outlook, извлекать идентификатор пользователя из URL-адреса в электронной почте и отправлять GET с идентификатором пользователя в новом URL-адресе.

Это хорошо дляэлектронные письма, которые просто пересылаются в почтовый ящик, но иногда они пересылаются как вложения.Я хотел бы открыть файл .msg, чтобы извлечь uid таким же образом, но я не могу найти способ сделать это без предварительного сохранения файла.

Моя первоначальная идея состояла в том, чтобы сохранитьфайл, откройте его, вытащите информацию, затем удалите .msg.Проблема заключается в том, что Outlook сохраняет экземпляр MSG-файла открытым, поэтому его нельзя удалить.Я мог бы сделать $ outlook.quit (), но тогда он закроет экземпляр Outlook, который я использую для просмотра остальных писем.

Я бы предпочел не сохранять всеОтдельно .msg отдельно в файле, а затем, если возможно, просмотреть все из них.

Можно ли просто прочитать тело файла .msg, как будто это просто еще одно сообщение электронной почты?

Вот мой код:

# Mailbox name
$mailbox = "abuse@place.com"
# Name of folder containing reported phishing emails
$folderName = "SelfPhishTest"
# Create the Outlook object to access mailboxes
$Outlook = New-Object -ComObject Outlook.Application;
# Grab the folder containing the emails from the phishing exercise
$Folder = $Outlook.Session.Folders($mailbox).Folders.Item($folderName)
# Grab the emails in the folder
$Emails = $Folder.Items
# Path to save attachments to
$filepath = "C:\SavedPhishEmails\"
# Run through each email in the folder
foreach($email in $Emails){
    # Output Sender Name for Testing
    Write-Host $email.SenderName
    # The number of email attachments
    $intCount = $email.Attachments.Count

    # If the email has attachments, let's open the .msg email
    if($intCount -gt 0) {
        # Let's go through those attachments
        for($i=1; $i -le $intCount; $i++) {

            # The attachment being looked at
            $attachment = $email.Attachments.Item($i)

            # If this is a .msg, let's open it
            if($attachment.FileName -like "*.msg"){
                $attachmentPath = $filepath+$attachment.FileName
                $attachment.SaveAsFile($attachmentPath)
                Get-ChildItem $attachmentPath |
                    ForEach-Object {
                        $msg = $Outlook.Session.OpenSharedItem($_.FullName)
                        $msg.Body
                    }
                Remove-Item $attachmentPath
            }
        }
    }
}

1 Ответ

0 голосов
/ 04 июня 2018

Разобрался.

Добавление этого приведет к освобождению MSG-файла

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($msg) | Out-Null
...