2014-04-08 1 views
0

나는이 프로젝트가 진행되는 동안 폴더에 푸시 된 전자 메일이 도착하는지 여부를 확인해야합니다. 그래서이 문제를 해결하기 위해 필자는 powershell 스크립트를 사용하여 메일 폴더에 연결하고 데이터를 수집했습니다. 코드는 아래에 붙여 넣습니다.Outlook 메일 상자에 대한 Powershell 스크립트가 이전 데이터를 선택합니다.

Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook 
$class = @" 
using Microsoft.Office.Interop.Outlook;public class MyOL 
{ 
public MAPIFolder GetInbox(string userName) 
{ 
    Application oOutlook = new Application(); 
    NameSpace oNs = oOutlook.GetNamespace("MAPI"); 
    Recipient oRep = oNs.CreateRecipient(userName); 
    MAPIFolder inbox = oNs.GetSharedDefaultFolder(oRep, OlDefaultFolders.olFolderInbox); 
    return inbox; 
} 
} 
"@ 
    Add-Type $class -ReferencedAssemblies Microsoft.Office.Interop.Outlook 

$MyOL = New-Object MyOL 
$olInbox = $MyOL.GetInbox("mailbox") 

$olInbox.items | Select-Object -Property Subject, ReceivedTime, Importance, SenderName 

하지만이 코드는 일주일 이전 데이터를 를 수집!이고 새 이메일은 아닙니다. 나는 주변을 둘러 보았고 이것이 사서함의 색인과 관련 될 수 있음을 발견했습니다. 그래서, 나는 그것을 헛되이 무력화 시키려 노력했다.

+0

*** ReceivedTime ***을 사용하여 필터링을 시도 했습니까? – Kiquenet

답변

0

왜 ComObject for Outlook을 사용하지 않는지 잘 모름. 당신이 최근의 항목을 원하는 경우에만이 당신에게 지난 24 시간 동안받은 항목을 얻어야한다 :

$RecentItems | Select -Property Subject, ReceivedTime, Importance, SenderName 
: 당신은 단지 특정 속성을 얻으려면

$MSOut = new-object -ComObject Outlook.Application 
$MAPI = $MSOut.GetNamespace("MAPI")|?{$_.SMTP -match "[email protected]"} 
$Account = $MAPI.Folders|?{$_.Name -match "[email protected]"} 
$Inbox = $Account.folders | ?{$_.Name -match "Inbox"} 
$24hours = (get-date).AddDays(-1) 
$RecentItems = $Inbox.Items|?{$_.ReceivedTime -gt $24hours} 

그런 다음 당신처럼, 그으로부터 선택을 실행할 수 있습니다

+0

이 코드는 저에게 맞지 않습니다! 나는 PowerShell 스크립팅을위한 새내기이다. 이것은 sdk의 버전과 관련이 있습니까? – user3300750

+0

SDK가 없어도 Office 만 설치하면됩니다. 어디서 오류가 발생 했습니까? – TheMadTechnician

+0

나는 당신이 저에게 주신 코드에 어떤 오류도 나타나지 않지만 모든 데이터를 검색하는 것은 아닙니다. 붙여 넣은 코드, 실행하면 출력은 어떻게됩니까? 최신 이메일이 포함되어 있습니까? 그것이 작동한다면 그것은 그것이 작동해야하는 방법입니다. 내가 반환 한 것은 일주일 전 이메일 목록입니다. (예 : 오늘 9 일에 2 일부터 목록을 얻습니다.) – user3300750

관련 문제