Reading inbox on a shared mailbox on office365

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


# 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 = {
    param ([string] $url)
    if ($url -eq '') {$true} else {$false}
# Autodiscover using the mail address set above

# 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 
    # 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

        # 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

I solved the issue,


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

If you use this the script works