Подтвердить что ты не робот

Как проверить почтовый ящик обмена через powershell?

Как я могу использовать powershell для возврата текста и заголовков последних 5 сообщений, полученных на мою учетную запись электронной почты Exchange? Есть ли простой способ/библиотека для этого?

Это связано с моим вопросом о том, чтобы не использовать Outlook для суперпользователя. За исключением того, что, не найдя хороших альтернатив, я полагаю, что я мог бы написать свой собственный простой клиент powershell.

4b9b3361

Ответ 1

Вам необходимо установить

Ответ 2

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

Я новичок в Powershell, поэтому мои скрипты преимущественно Frankenstein-ed из разных статей, сообщений в блогах и StackOverflow Q & A, конечно, script ниже не является исключением!

Следуя от ответа Криса, я немного погулял по интернету и собрал несколько фрагментов Powershell, чтобы позволить мне отображать несколько ключевых фрагментов информации из электронных писем.

У него, к сожалению, нет никакого "правильного" стиля, и я уверен, что любой Гуру Powershell будет съеживаться на этом. Но что делает этот код, это

  • показать, как использовать EWS и Powershell для чтения писем.
  • адрес George last question re: тело пустое - метод FindItems не возвращает полный почтовый элемент, вам нужно сделать еще один раунд, чтобы получить дополнительную информацию, в которой вы нуждаетесь.
  • удалите требование использовать имя пользователя/пароль/домен, используя текущие учетные данные
  • удалить требование "установить" EWS, просто извлечь MSI и ссылаться на dll

Чтобы использовать...

Загрузите EWS здесь, затем извлеките где-нибудь, например.

msiexec /a C:\Path\To\Downloads\EwsManagedApi.msi /qb TARGETDIR=C:\Progs\EwsManagedApi

затем вызовите этот script с помощью точечного источника, например

. C:\Path\To\Script\Outlook_ReadInbox.ps1

который позволяет вам ссылаться на объекты/переменные из script после его выполнения.

В коде есть ограниченные комментарии по всему сайту, а также несколько ссылок в конце, на которые я ссылался при совместном использовании script.

Здесь мой альфа-код кода для чтения в первых 5 электронных сообщениях, отображает ли чтение/непрочтение и показывает первые 100 символов тела электронной почты на одной строке с удаленным пробелом.

# work with exchange server to retrieve messages
# see this SO answer: http://stackoverflow.com/a/4866894

# call this script using dot-source (see http://technet.microsoft.com/en-us/library/ee176949.aspx)
# to allow continued use of the objects, specifically, reading our inbox
# e.g...
# . C:\Path\To\Script\Outlook_ReadInbox.ps1

# replace with your email address
$email    = "[email protected]"

# only need to populate these if you're impersonating...
$username = "YOUR_USER_NAME"
$password = "YOUR_LAN_PASSWORD"
$domain   = "YOUR_DOMAIN"

# to allow us to write multi-coloured lines
# see http://stackoverflow.com/a/2688572
# usage: Write-Color -Text Red,White,Blue -Color Red,White,Blue
# usage: Write-Color Red,White,Blue Red,White,Blue
function Write-Color([String[]]$Text, [ConsoleColor[]]$Color) {
    for ($i = 0; $i -lt $Text.Length; $i++) {
        Write-Host $Text[$i] -Foreground $Color[$i] -NoNewLine
    }
    Write-Host
}

# load the assembly
[void] [Reflection.Assembly]::LoadFile("C:\Progs\EwsManagedApi\Microsoft.Exchange.WebServices.dll")

# set ref to exchange, first references 2007, 2nd is 2010 (default)
$s = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1)
#$s = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService

# use first option if you want to impersonate, otherwise, grab your own credentials
#$s.Credentials = New-Object Net.NetworkCredential($username, $password, $domain)
#$s.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$s.UseDefaultCredentials = $true

# discover the url from your email address
$s.AutodiscoverUrl($email)

# get a handle to the inbox
$inbox = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($s,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox)

#create a property set (to let us access the body & other details not available from the FindItems call)
$psPropertySet = new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$psPropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text;

$items = $inbox.FindItems(5)

#set colours for Write-Color output
$colorsread = "Yellow","White"
$colorsunread = "Red","White"

# output unread count
Write-Color -Text "Unread count: ",$inbox.UnreadCount -Color $colorsread

foreach ($item in $items.Items)
{
  # load the property set to allow us to get to the body
  $item.load($psPropertySet)

  # colour our output
  If ($item.IsRead) { $colors = $colorsread } Else { $colors = $colorsunread }

  #format our body
  #replace any whitespace with a single space then get the 1st 100 chars
  $bod = $item.Body.Text -replace '\s+', ' '
  $bodCutOff = (100,$bod.Length | Measure-Object -Minimum).Minimum
  $bod = $bod.Substring(0,$bodCutOff)
  $bod = "$bod..."

  # output the results - first of all the From, Subject, References and Message ID
  write-host "====================================================================" -foregroundcolor White
  Write-Color "From:    ",$($item.From.Name) $colors
  Write-Color "Subject: ",$($item.Subject)   $colors
  Write-Color "Body:    ",$($bod)            $colors
  write-host "====================================================================" -foregroundcolor White
  ""
}


# display the newest 5 items
#$inbox.FindItems(5)
# display the unread items from the newest 5
#$inbox.FindItems(5) | ?{$_.IsRead -eq $False} | Select Subject, Sender, DateTimeSent | Format-Table -auto

# returns the number of unread items
# $inbox.UnreadCount


#see these URLs for more info
# EWS
# folder members: https://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.folder_members%28v=exchg.80%29.aspx
# exporting headers: http://www.stevieg.org/tag/how-to/
# read emails with EWS: https://social.technet.microsoft.com/Forums/en-US/3fbf8348-2945-43aa-a0bc-f3b1d34da27c/read-emails-with-ews?forum=exchangesvrdevelopment
# Powershell
# multi-color lines: http://stackoverflow.com/a/2688572



# download the Exchange Web Services Managed API 1.2.1 from
# http://www.microsoft.com/en-us/download/details.aspx?id=30141
# extract somewhere, e.g. ...
# msiexec /a C:\Users\YourUsername\Downloads\EwsManagedApi.msi /qb TARGETDIR=C:\Progs\EwsManagedApi