This blog post focusses on an issue where your Exchange Online users are not able to send emails to other Exchange Online recipients outside of your organization when using a 3rd Party Centralized Email Flow Setup. The term 3rd Party Centralized Email Flow Setup describes a solution where you not follow the preferred hybrid architecture proposed by the Exchange product group, but use a 3rd party software as a centralized email gateway.
You have followed the recommendation to secure the Exchange Online inbound connector for your on-premises email servers by using a certificate name or the remote IP address of your on-premises email gateway.
The on-premises email security gateway utilizes a self-signed certificate to secure TLS connections. The gateway is configured to use two different send connector setups:
In this case Exchange Online Protection (EOP) will not be able to differentiate between tenant internal inbound mail flow and mail flow targeted to other tenants. Therefore, email messages sent from your Exchange Online users to recipients located in other Exchange Online tenants will be discarded.
Interestingly enough, this will happen silently. Your gateway solution will log a successful delivery to Exchange Online Protection. The tenant administrator of the recipient domain will not find an any information in the Exchange Online message tracking logs.
The following diagram illustrates the setup.
The solution for this problem is pretty simple. Just use dedicated certificates for each connector targetting Exchange Online.
Change the Internet Connector to fully trusted 3rd party certificate. In this case you are not required to modify the existing Exchange Online inbound connector setup.
The new connector configurations are:
The following diagram illustrates the new setup:
Enjoy!
Troubleshooting Active Directory Federation Services is a tedious tasks for any administrator. Therefore, I've started this blog post to have a comprehensive overview of information sources.
The following list provides links for Active Directory Federation Services troubleshooting:
Additonal information about AD FS can be found here:
If you know of other AD FS troubleshooting information, please use the comments section below to share.
This script fetches emails from a given monitoring mailbox by searching email messages for a given subject string. In this case email messages sent by the ENow Management Suite (http://enowsoftware.com/). Status messages are parsed to extract Disk Performance alert data for further processing in Power BI.
The mailbox is queried using Exchange Web Services (EWS). The EWS endpoint is identified by AutoDiscover.
The script exports the following columns for further processing:
You can easily adjust the script to fit your requirements. Search for other message subjects and parse for other content in the message body.
Code Samples
# Run script using default parameters .\Get-EmailContent.ps1
"COMPUTER";"DATE";"TIME";"IO";"THRESHOLD";"VALUE" "EXLABP08";"19.05.2017";"11:15:38";"READ";"Critical";"109,90" "EXLABP08";"19.05.2017";"11:15:38";"WRITE";"Warning";"23,61" "EXLABP08";"19.05.2017";"11:15:38";"READ";"Critical";"80,13" "EXLABP08";"19.05.2017";"11:15:38";"WRITE";"Warning";"21,58" "EXLABP08";"19.05.2017";"11:15:38";"READ";"Warning";"33,01" "EXLABP08";"19.05.2017";"11:15:38";"READ";"Critical";"53,04" "EXLABP08";"19.05.2017";"11:15:38";"READ";"Warning";"24,24" "EXLABP08";"19.05.2017";"11:15:38";"READ";"Warning";"40,01"
This example shows that P04 and P08 have exceeded the critical and warning state disk performance thresholds more often than the other servers.
The next example shows the same date in a different report.
When you delete a public folder using a legacy Outlook client, you can easily restore the deleted folder and it's content using the Recover Deleted Items function.
Due to a fancy trick implemented in Outlook 2013 and Outlook 2016 the recovered folder will not be recovered using it's full name.
This phenomenon has been verified with Exchange On-Premises and Exchange Online on the server side and Outlook 2013/2016 and Outlook 365 ProPlus.
The following example uses public folders in Exchange Online and Outlook 365 ProPlus.
In this example I will delete and recover a public folder named My Public Folder.
After deletion of My Public Folder and it's content, I need to select the original parent folder and click the Recover Deleted Items button in the button bar.
The Recover Deleted Items dialogue opens and we select the deleted item for recovery. The dialogue displays the original name of the deleted folder.
After recovering the deleted folder the folder is recovered with the first character only.
That's an annoying result in regards to customer self-care when users restore deleted items on their own behalf.
But wait, there is a solution available.
The solution requires today's primary administrative tool available: PowerShell.
Get an overview of public folders currently located in the public folder dumpster
Get-PublicFolder –Identity “\NON_IPM_SUBTREE” –Recurse Name Parent Path ---- ----------- NON_IPM_SUBTREE [...] My Public Folder \NON_IPM_SUBTREE\DUMPSTER_ROOT\DUMPSTER_EXTEND\RESERVED_1\RESERVED_1\65722859-3... Sub Folder 1 \NON_IPM_SUBTREE\DUMPSTER_ROOT\DUMPSTER_EXTEND\RESERVED_1\RESERVED_1\65722859-3... Sub Folder 2 \NON_IPM_SUBTREE\DUMPSTER_ROOT\DUMPSTER_EXTEND\RESERVED_1\RESERVED_1\65722859-3... [...]
Export the list of public folders currently located in the public folder dumpster and find the identity of the deleted public folder you want to recover
Get-PublicFolder –Identity “\NON_IPM_SUBTREE” –Recurse | fl | Out-File D:\TMP\publicfolderdumpster.txt
publicfolderdumpster.txt excerpt:
RunspaceId : 6ce9588e-829b-4592-aedc-85f9a2e2c963 Identity : \NON_IPM_SUBTREE\DUMPSTER_ROOT\DUMPSTER_EXTEND\RESERVED_1\RESERVED_1\65722859-366a-4e0 9-81fe-ea576ec7a6f7\My Public Folder Name : My Public Folder MailEnabled : False MailRecipientGuid : ParentPath : \NON_IPM_SUBTREE\DUMPSTER_ROOT\DUMPSTER_EXTEND\RESERVED_1\RESERVED_1\65722859-366a-4e0 9-81fe-ea576ec7a6f7
Recover the deleted public folder to the correct parent target folder
Set-PublicFolder –Identity "\NON_IPM_SUBTREE\DUMPSTER_ROOT\DUMPSTER_EXTEND\RESERVED_1\RESERVED_1\65722859-366a-4e09-81fe-ea576ec7a6f7\My Public Folder" –Path “\TestFolders” –Verbose
As a result the public folder is recovered with it's original name.
There are some other things to consider when recovering deleted modern public folders.
Public folders originally located in the hierarchy root are always recovered to the public folder mailbox holding the primary hierarchy.
Public folders originally located in the hierarchy root will replace the permissions of child public folders when restored.
More on these default restore behaviours can be read here.
Nevertheless, enjoy modern public folders.
You can block an user from logging on to Office 365 by setting the BlockCredential attribute to $true.
Set-MsolUser -UserPrincipalName myuser@mcsmemail.de -BlockCredential $true
But the MSOL user attribute is reverted to $false, when ADD Connect synchonization cycle runs.
This happens, because the local Active Directory attribute accountEnabled is used to controll the BlockCredential attribute in Azure AD.
If your IT operation requires the ability to have enabled users in your local Active Directory infrastructure and you need to prevent logon to cloud services you need to prevent the accountEnabled attribute from being synchronized to Azure AD. This might not necessarily be a general requirement during normal operations, but might be useful while doing a Proof-of-Concept.
Just exclude the attribute from the Azure Active Directory connector in the Synchronization Service Manager.
The following script disables all users excluding
# Userfilter $UserExceptions = ("Sync_SYNC01_add98768492f@mcsmemail.onmicrosoft.com","SPO-SRV-ACCOUNT@mcsmemail.de","SynchedAdmin@mcsmemail.de") # Fetch synchronized users $DomainAccounts = Get-MsolUser -EnabledFilter EnabledOnly -MaxResults 5000 | Where-Object -Property LastDirSyncTime -ne $null # Select synchronized users not following the pattern ADM*@mcsmemail.de (admin accounts in this case) $DomainAccountsWithoutAdmins = $DomainAccounts | Where-Object -Property UserPrincipalName -notlike "ADM*@mcsmemail.de" # Exclude accounts listed in $UserExceptions $DomainAccountsWithoutAdminsFiltered = $DomainAccountsWithoutAdmins | Where-Object -Property UserPrincipalName -NotIn $UserExceptions # Now block cloud logon for all filtered users ForEach ($User2Block in $DomainAccountsWithoutAdminsFiltered) { Write-Host ('Disabling User: {0}.UserPrincipalName)' -f $User2Block) Set-MsolUser -UserPrincipalName $User2Block.UserPrincipalName -BlockCredential $true }
Enjoy Office 365.