使用PowerShell从outlook中的邮件中读取excel内容

时间:2013-04-23 06:41:50

标签: powershell outlook powershell-v2.0

我是PowerShell的新手。我收到邮件给我的主题和一个excel表格。我能够编写一个代码来根据主题分离电子邮件,但我无法理解如何在该电子邮件中获取excel内容并将其保存到某个本地文件中。

谢谢, Sidharth

1 个答案:

答案 0 :(得分:0)

您可以输出3种不同格式的电子邮件正文和邮件对象:

  • 简单文字:MailItemObject.Body
  • HTML:MailItemObject.HTMLBody
  • RTF:MailItemObject.RTFBody

Simple Text方法将每行从左到右,并将其添加到您稍后可以解析的字符串中:

电子邮件正文示例:

Column1 Column2
1       A
2       B
3       C

简单文本输出字符串:

Column1 
Column2
1       
A
2       
B
3      
C

因此,您可以将该字符串输出到文本文件(MailItemObject.Body > 'C:\emailBodyText.txt'),并且您知道表中的列数可以编写脚本来逐行解析该文本文件,并在excel中重新创建表

MailItem Object (Outlook)


如果excel是您电子邮件的附件,则可以使用此方法将附件保存到指定文件夹。

#Outlook setup
$olFolderInbox = 6
$objOutlook = New-Object -com "Outlook.Application"
$objNamespace = $objOutlook.GetNamespace("MAPI")
$objFolder = $objNamespace.GetDefaultFolder($olFolderInbox)
$colItems = $objFolder.Items
#Fliter Unread mail
$colFilteredItems = $colItems.Restrict("[UnRead] = True")

#Change this to the folder you want to save to
$saveFilePath = "C:\myfolder"

foreach($unreadEmail in $colFilteredItems){
    $NumberOfFiles = $unreadEmail.Attachments.Count
    $counter = 0
    While($NumberOfFiles -ne $counter){
        $counter++
        $fileName = $unreadEmail.Attachments.Item($counter).FileName
        $unreadEmail.Attachments.Item($counter).SaveAsFile("$saveFilePath\$fileName")
    }
}

注意:这是针对未读电子邮件进行过滤,因此您需要将过滤器替换为我的过滤器。

此外,你必须在使用它之前理清'while循环'的缩进,因为我似乎可以让它正确显示

http://blogs.technet.com/b/heyscriptingguy/archive/2007/10/05/hey-scripting-guy-how-can-i-save-the-attachments-for-all-my-new-office-outlook-messages.aspx