Reading inbox on a shared mailbox on office365

Welcome Forums General PowerShell Q&A Reading inbox on a shared mailbox on office365

This topic contains 1 reply, has 1 voice, and was last updated by

 
Participant
2 weeks, 2 days ago.

  • Author
    Posts
  • #113210

    Participant
    Points: 0
    Rank: Member

    Good morning all,

    I'm trying to read the inbox of a shared mailbox.
    I found this script but cant find a way to change this to a shared mailbox because it doesn't have a login.
    I'm using my own credentials (with rights on that mailbox)

    Hope someone can point me in the right direction

    # Written by Ben Penney https://sysadminben.wordpress.com
    
    $mail='Email'
    $password='Password'
    
    # Set the path to your copy of EWS Managed API 
    $dllpath = 'C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll' 
    # Load the Assemply 
    $null = [Reflection.Assembly]::LoadFile($dllpath) 
    
    # Create a new Exchange service object 
    $service = new-object -TypeName Microsoft.Exchange.WebServices.Data.ExchangeService 
    
    #These are your O365 credentials
    $Service.Credentials = New-Object -TypeName Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList ($mail,$password)
    
    # this TestUrlCallback is purely a security check
    $TestUrlCallback = {
        [CmdletBinding()]
        param ([string] $url)
        if ($url -eq 'https://autodiscover-s.outlook.com/autodiscover/autodiscover.xml') {$true} else {$false}
    }
    # Autodiscover using the mail address set above
    $service.AutodiscoverUrl($mail,$TestUrlCallback)
    
    # create Property Set to include body and header of email
    $PropertySet = New-Object -TypeName Microsoft.Exchange.WebServices.Data.PropertySet -ArgumentList ([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
    
    # set email body to text
    $PropertySet.RequestedBodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::Text
    
    
    # Set how many emails we want to read at a time
    $numOfEmailsToRead = 100
    
    # Index to keep track of where we are up to. Set to 0 initially. 
    $index = 0 
    
    # Do/while loop for paging through the folder 
    do 
    { 
        # Set what we want to retrieve from the folder. This will grab the first $pagesize emails
        $view = New-Object -TypeName Microsoft.Exchange.WebServices.Data.ItemView -ArgumentList ($numOfEmailsToRead,$index) 
        # Retrieve the data from the folder 
        $findResults = $service.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$view) 
        foreach ($item in $findResults.Items)
        {
            # load the additional properties for the item
            $item.Load($propertySet)
    
            # Output the results
            "From: $($item.From.Name)"
            "Subject: $($item.Subject)"
            "Body: $($Item.Body.Text)"
            #"References: $($item.References)"
           # "InternetMessageID: $($item.InternetMessageID)"
           # 'InternetMessageHeaders:'
            # Display the headers - using a little foreach loop
           # $item.InternetMessageHeaders|foreach{"$($_.Name): $($_.Value)"} 
            '' 
        } 
        # Increment $index to next block of emails
        $index += $numOfEmailsToRead
    } while ($findResults.MoreAvailable) # Do/While there are more emails to retrieve
    
  • #113215

    Participant
    Points: 0
    Rank: Member

    I solved the issue,

     

    You can set a password on a unlicensed shared mailbox user,

    If you use this the script works

You must be logged in to reply to this topic.