<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cloudek Hosting</title>
    <description>The latest articles on DEV Community by Cloudek Hosting (@cloudekhosting).</description>
    <link>https://dev.to/cloudekhosting</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4234416%2F0628e92d-52c6-465e-97ae-f66aa24d9458.png</url>
      <title>DEV Community: Cloudek Hosting</title>
      <link>https://dev.to/cloudekhosting</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cloudekhosting"/>
    <language>en</language>
    <item>
      <title>Exchange Server on Windows Server 2016: Migrate, Do Not Upgrade the OS</title>
      <dc:creator>Cloudek Hosting</dc:creator>
      <pubDate>Mon, 09 Nov 2026 04:55:11 +0000</pubDate>
      <link>https://dev.to/cloudekhosting/exchange-server-on-windows-server-2016-migrate-do-not-upgrade-the-os-120</link>
      <guid>https://dev.to/cloudekhosting/exchange-server-on-windows-server-2016-migrate-do-not-upgrade-the-os-120</guid>
      <description>&lt;p&gt;If Exchange Server is installed on a Windows Server 2016 machine, you have two end-of-support dates stacked on one server, and the one that matters more has already passed. Exchange Server 2016 and 2019 reached end of support on 14 October 2025, and the Windows Server 2016 operating system underneath follows in January 2027. This guide explains why the answer here is to migrate rather than upgrade, what Microsoft documents as your options, and a step list with the cmdlets and the points where you can still turn back. &lt;strong&gt;Sources checked 6 November 2026&lt;/strong&gt; against Microsoft Learn, Microsoft Lifecycle and the Exchange team blog; they are listed at the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verdict
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Verdict: Migrate.&lt;/strong&gt;&lt;br&gt;
Microsoft says an in-place upgrade of the Windows Server operating system between major versions with Exchange installed is not supported, and Exchange 2016 cannot be upgraded in place to a newer Exchange, so the only supported road is a new server or Exchange Online.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;There is no clever shortcut. Upgrading the operating system under Exchange is the tempting move because it keeps the server name, the databases and the certificates. It is also the one Microsoft's supportability matrix rules out, and Exchange 2016 does not run on Windows Server 2019 or later in any case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is for and what changes on the end-of-support date
&lt;/h2&gt;

&lt;p&gt;This is for anyone with Exchange Server 2016 (or 2019) servers on Windows Server 2016, including the "leftover" server kept only for mail relay, public folders or recipient management after a move to Microsoft 365.&lt;/p&gt;

&lt;p&gt;Start with Exchange, because it is the bigger problem. Microsoft's end-of-support roadmap says support for Exchange 2019 and 2016 ended on 14 October 2025, so Microsoft no longer provides technical support, bug fixes, security fixes or time zone updates for them. The installation keeps running, but nothing fixes it. Microsoft ran an Extended Security Update programme for Exchange 2016 and 2019. Its second period ran from May to October 2026 for customers with an Enterprise Agreement, covering Exchange 2016 CU23 and Exchange 2019 CU14 and CU15. In an update dated 13 October 2026 the Exchange team said it had released the final set of updates, that no more updates will be released for Exchange 2016 or 2019, and that future updates will be for Exchange Server Subscription Edition (SE) only. So there is no ESU path left to buy time for Exchange itself.&lt;/p&gt;

&lt;p&gt;For the operating system, Microsoft Lifecycle lists Windows Server 2016 under the Fixed Lifecycle Policy. The Lifecycle table shows the extended support end as 1/13/2027 6:59:59 AM, while Microsoft's extended security updates page names 12 January 2027 and says 2016 ESU starts on that date. Microsoft's Azure Arc documentation says Windows Server 2016 ESU provides Critical and Important updates for up to three years, through 2030, can be configured in the Azure portal from August 3, 2026, is billed from January 13, 2027 and requires Software Assurance or an equivalent server subscription; the pages show no price. That covers the operating system only. Whatever you decide about the operating system, it does not repair an Exchange build that no longer gets fixes.&lt;/p&gt;

&lt;p&gt;Exchange servers are commonly reachable from the internet, which is why this role belongs near the top of the list. Finish before 12 January 2027, and treat any Exchange 2016 or 2019 server as overdue now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;What Microsoft documents&lt;/th&gt;
&lt;th&gt;Fit for Exchange on Windows Server 2016&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stay and buy ESU&lt;/td&gt;
&lt;td&gt;Windows Server 2016 ESU (Azure Arc: up to three years, through 2030, needs Software Assurance or equivalent) covers the operating system only. Exchange 2016 and 2019 ESU periods have ended and no more updates will be released&lt;/td&gt;
&lt;td&gt;Does not protect Exchange. Not a plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In-place upgrade&lt;/td&gt;
&lt;td&gt;The supportability matrix says in-place upgrade of the server OS between major versions with Exchange installed is not supported. Exchange 2019 CU14 or CU15 can upgrade in place to Exchange SE&lt;/td&gt;
&lt;td&gt;Not available for Exchange 2016. The 2019 to SE route needs a 2019 server on Windows Server 2019 or later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Side-by-side migration&lt;/td&gt;
&lt;td&gt;A legacy upgrade: add Exchange SE servers, move mailboxes and resources, uninstall the old servers. Required when moving from Exchange 2016 to 2019 or SE and when moving to a newer Windows Server&lt;/td&gt;
&lt;td&gt;The on-premises answer. Exchange SE runs on Windows Server 2019, 2022 and 2025&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Move to Microsoft 365&lt;/td&gt;
&lt;td&gt;Cutover, staged or hybrid migration to Exchange Online, then decommission on-premises Exchange where the rules allow&lt;/td&gt;
&lt;td&gt;Microsoft's recommended and simplest option; read the decommission caveats below&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Exchange Server SE supports Windows Server 2025, 2022 and 2019 in Datacenter and Standard editions, with Server Core recommended, per the supportability matrix. Exchange 2016 supports Windows Server 2016, 2012 R2 and 2012.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps, with the rollback point
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventory the organization.&lt;/strong&gt; In the Exchange Management Shell run &lt;code&gt;Get-ExchangeServer | Format-Table Name, Edition, AdminDisplayVersion&lt;/code&gt;, &lt;code&gt;Get-Mailbox -ResultSize Unlimited | Measure-Object&lt;/code&gt;, &lt;code&gt;Get-MailboxDatabase -Status&lt;/code&gt;, &lt;code&gt;Get-ReceiveConnector&lt;/code&gt; and &lt;code&gt;Get-SendConnector&lt;/code&gt;. Run &lt;code&gt;Get-OrganizationConfig | Format-List PublicFoldersEnabled&lt;/code&gt; and &lt;code&gt;Get-HybridConfiguration&lt;/code&gt;. Write down every client, application and device that sends mail through this server by name or address; those are the things that break.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide the destination.&lt;/strong&gt; Microsoft 365 if no regulatory or technical reason forces mail on-premises. Exchange SE otherwise. Microsoft's decommission guide says organizations under 2,000 mailboxes should strongly consider a cutover or staged migration over hybrid, and hybrid for larger or longer migrations, because hybrid allows moves in both directions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Know the identity catch.&lt;/strong&gt; If you keep Microsoft Entra Connect managing accounts from on-premises Active Directory, you must keep at least one Exchange server to change Exchange recipient attributes, because the source of authority is on-premises. Microsoft's roadmap lists upgrading to Exchange SE, or using a management-tools approach, as the supported answers. Plan this before you promise "we will switch Exchange off".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prepare Active Directory.&lt;/strong&gt; Domain controllers must run versions supported for the target Exchange. If a Windows Server 2025 domain controller holds the Schema Master, Microsoft requires the November 2025 or later cumulative update on it before any &lt;code&gt;PrepareAD&lt;/code&gt; operation. If your domain controllers are also on Windows Server 2016, schedule that work first, because Exchange setup depends on a healthy forest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Back up and freeze.&lt;/strong&gt; Take a verified backup of the Exchange databases, the system and the configuration, record &lt;code&gt;Get-ExchangeCertificate&lt;/code&gt;, the virtual directory URLs (&lt;code&gt;Get-OwaVirtualDirectory&lt;/code&gt;, &lt;code&gt;Get-EcpVirtualDirectory&lt;/code&gt;, &lt;code&gt;Get-WebServicesVirtualDirectory&lt;/code&gt;) and the Autodiscover settings, and stop any "just one more change" on the old server. This is your rollback.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-premises route: build and join.&lt;/strong&gt; Install Windows Server 2019, 2022 or 2025, run Exchange SE setup (the Exchange Server Deployment Assistant generates a tailored checklist), and add the new server to the existing organization. Microsoft warns that SE CU2 setup prohibits coexistence with any Exchange version no longer supported at that release, so plan to remove Exchange 2016 on a schedule rather than leave it indefinitely, and install the newest cumulative update at build time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On-premises route: move.&lt;/strong&gt; Create target databases, then move mailboxes with &lt;code&gt;New-MoveRequest -Identity user@contoso.com -TargetDatabase DB-NEW&lt;/code&gt;, watch &lt;code&gt;Get-MoveRequest | Get-MoveRequestStatistics&lt;/code&gt;, and complete in batches. Move arbitration, audit and discovery mailboxes and public folder mailboxes too. Move the namespace last: import or request certificates, repoint the Autodiscover and virtual directory URLs, and update receive connectors and any relay IP lists.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft 365 route: connect.&lt;/strong&gt; For a cutover or staged migration, follow the migration batch process in the Exchange admin center. For hybrid, run the Hybrid Configuration Wizard from an on-premises Exchange server, then move mailboxes as remote moves. Public folders need their own migration if you use them, and the decommission guide lists the exact check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cut mail flow.&lt;/strong&gt; For Microsoft 365, point MX and Autodiscover at Exchange Online, update both internal and external DNS (Microsoft warns about inconsistent client behaviour otherwise), and move relay users to a supported alternative. Rollback point: keep the old server, its databases and its connectors untouched until mail has flowed cleanly through the new path for a full business cycle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decommission only when allowed.&lt;/strong&gt; If all mailboxes are in the cloud and you can disable directory synchronization, Microsoft's steps include removing the Hybrid Configuration Wizard connectors and organization relationship, disabling the OAuth intra-organization connectors, setting &lt;code&gt;Get-ClientAccessService | Set-ClientAccessService -AutoDiscoverServiceInternalUri $Null&lt;/code&gt;, and then uninstalling Exchange. If you keep synchronization, keep one (preferably two) Exchange servers for recipient management; they need no database availability group.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uninstall the old server.&lt;/strong&gt; Run Exchange setup in uninstall mode (&lt;code&gt;Setup.exe /mode:Uninstall /IAcceptExchangeServerLicenseTerms_DiagnosticDataON&lt;/code&gt;) after mailboxes, public folders, arbitration mailboxes and connectors have moved, then rebuild or retire the Windows Server 2016 machine.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Mistakes that cause outages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Upgrading Windows underneath Exchange.&lt;/strong&gt; Microsoft states it is not supported. A failed upgrade usually means a rebuild during business hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Removing the last Exchange server in a synchronized environment.&lt;/strong&gt; You lose the ability to edit Exchange attributes for cloud mailboxes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgetting relay.&lt;/strong&gt; Printers, scanners, line-of-business apps and scripts relay through the server by IP address. Public folders and SMTP relay are the two things Microsoft calls out as reasons not to decommission.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changing MX or Autodiscover in only one DNS.&lt;/strong&gt; Internal and external records both need to move.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leaving the certificate for last.&lt;/strong&gt; The new server needs a certificate with the right names before clients find it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipping the schema and domain controller checks.&lt;/strong&gt; A Windows Server 2025 Schema Master without the required cumulative update can cause replication issues during &lt;code&gt;PrepareAD&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running Exchange 2016 alongside a newer SE build indefinitely.&lt;/strong&gt; Microsoft's coexistence rule for SE CU2 and later blocks it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating hybrid as free.&lt;/strong&gt; Hybrid adds complexity; Microsoft recommends cutover or staged for smaller organizations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Exchange servers, versions, mailboxes, connectors, public folders and relay users inventoried&lt;/li&gt;
&lt;li&gt;Destination chosen: Exchange SE or Microsoft 365&lt;/li&gt;
&lt;li&gt;Identity source of authority understood; plan for the last Exchange server written down&lt;/li&gt;
&lt;li&gt;Domain controllers and functional levels checked; Schema Master update confirmed if on 2025&lt;/li&gt;
&lt;li&gt;Backups verified; certificates and URLs recorded&lt;/li&gt;
&lt;li&gt;New server or tenant ready; test mailboxes moved first&lt;/li&gt;
&lt;li&gt;Mail flow and DNS cut over; relay users moved&lt;/li&gt;
&lt;li&gt;Old Exchange uninstalled, Windows Server 2016 host retired&lt;/li&gt;
&lt;li&gt;Finish before 12 January 2027, and sooner for Exchange itself&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related tools and reading
&lt;/h2&gt;

&lt;p&gt;Use the role-by-role &lt;a href="https://www.cloudekhosting.com/tools/windows-server-licensing-calculator.html" rel="noopener noreferrer"&gt;Windows Server 2016 end-of-support planner&lt;/a&gt; for the other roles on the same host. For the migration itself, see our guides on the &lt;a href="https://www.cloudekhosting.com/blog/migrate-email-using-the-exchange-cutover-method.html" rel="noopener noreferrer"&gt;Exchange cutover method&lt;/a&gt;, &lt;a href="https://www.cloudekhosting.com/blog/hybrid-deployment-prerequisites.html" rel="noopener noreferrer"&gt;Exchange hybrid deployment prerequisites&lt;/a&gt; and &lt;a href="https://www.cloudekhosting.com/blog/office-365-smtp-relay-options.html" rel="noopener noreferrer"&gt;Microsoft 365 SMTP relay options&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;p&gt;Checked 6 November 2026.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/exchange/plan-and-deploy/supportability-matrix" rel="noopener noreferrer"&gt;Exchange Server supportability matrix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/troubleshoot/exchange/administration/exchange-2019-2016-end-of-support" rel="noopener noreferrer"&gt;Exchange Server 2019 and 2016 End of Support Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/exchange/plan-and-deploy/deploy-new-installations/upgrade-to-exchange-server-se" rel="noopener noreferrer"&gt;Upgrading to Exchange Server Subscription Edition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/lifecycle/products/exchange-server-2016" rel="noopener noreferrer"&gt;Exchange Server 2016 on Microsoft Lifecycle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcommunity.microsoft.com/blog/exchange/announcing-period-2-exchange-20162019-extended-security-update-esu-program/4511603" rel="noopener noreferrer"&gt;Announcing Period 2 of the Exchange 2016/2019 ESU program&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/exchange/decommission-on-premises-exchange" rel="noopener noreferrer"&gt;How and when to decommission on-premises Exchange in a hybrid deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/lifecycle/products/windows-server-2016" rel="noopener noreferrer"&gt;Windows Server 2016 on Microsoft Lifecycle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/en-us/windows-server/extended-security-updates" rel="noopener noreferrer"&gt;Extended Security Updates for SQL Server and Windows Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/azure-arc/servers/prepare-extended-security-updates" rel="noopener noreferrer"&gt;Prepare to deliver Extended Security Updates for Windows Server through Azure Arc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/azure-arc/servers/license-extended-security-updates" rel="noopener noreferrer"&gt;License provisioning guidelines for Extended Security Updates for Windows Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/azure-arc/servers/billing-extended-security-updates" rel="noopener noreferrer"&gt;Billing service for Extended Security Updates for Windows Server through Azure Arc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/windows-server/get-started/upgrade-migrate-roles-features" rel="noopener noreferrer"&gt;Upgrade and migrate roles and features&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;General planning information, not a design for your environment. Pilot with test mailboxes first.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cloudekhosting.com/blog/exchange-server-on-windows-server-2016.html" rel="noopener noreferrer"&gt;cloudekhosting.com&lt;/a&gt;. Free IT admin tools are at &lt;a href="https://www.cloudekhosting.com/tools.html" rel="noopener noreferrer"&gt;cloudekhosting.com/tools&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>windows</category>
      <category>microsoft</category>
      <category>sysadmin</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to Find and Reclaim Unused Microsoft 365 Licences</title>
      <dc:creator>Cloudek Hosting</dc:creator>
      <pubDate>Mon, 09 Nov 2026 04:49:48 +0000</pubDate>
      <link>https://dev.to/cloudekhosting/how-to-find-and-reclaim-unused-microsoft-365-licences-3799</link>
      <guid>https://dev.to/cloudekhosting/how-to-find-and-reclaim-unused-microsoft-365-licences-3799</guid>
      <description>&lt;p&gt;&lt;strong&gt;Short answer:&lt;/strong&gt; build a report that flags possible waste, then have an administrator verify each account, workload, mailbox, group assignment and contract before changing anything. A disabled account or a long gap in sign-in activity is a reason to investigate, not automatic proof that a licence can be removed.&lt;/p&gt;

&lt;p&gt;This report-first method helps teams find unused Microsoft 365 licences without disrupting work. It separates observable signals from decisions and keeps removal under human approval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with evidence, not an automatic removal
&lt;/h2&gt;

&lt;p&gt;A good licence assignment review starts with a dated inventory of users, account state, assigned products and service plans, assignment source, sign-in indicators, mailbox type and business owner. Microsoft Graph's &lt;a href="https://learn.microsoft.com/en-us/graph/api/user-list-licensedetails?view=graph-rest-1.0" rel="noopener noreferrer"&gt;&lt;code&gt;licenseDetails&lt;/code&gt; endpoint&lt;/a&gt; returns details for licences assigned directly and through licensed-group membership. Its documentation identifies delegated &lt;code&gt;LicenseAssignment.Read.All&lt;/code&gt; as the least privileged permission for that operation and says application permissions are not supported. This is a Microsoft API reference; administrators should confirm the current permission model and their approved reporting route before use.&lt;/p&gt;

&lt;p&gt;Keep the extract limited to fields needed for the review, store it in an approved location and record when it was generated. A spreadsheet or read-only CSV report is enough to begin. Do not start by removing assignments or by treating a cost estimate as a realized saving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Four signals worth reviewing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Disabled accounts that still have assignments
&lt;/h3&gt;

&lt;p&gt;A disabled account with a paid product assigned is a strong prompt to ask whether the person has left, changed role, or still owns a service, workflow, mailbox or data. Check the account's owner and dependencies, group-based assignment rules, retention needs and any handover period. If the account is an emergency, service or shared workload identity, use the organization's specific policy instead of an employee rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Long gaps since sign-in
&lt;/h3&gt;

&lt;p&gt;Microsoft 365 sign-in activity is one signal to review. Microsoft Entra's &lt;a href="https://learn.microsoft.com/en-us/entra/identity/monitoring-health/howto-manage-inactive-user-accounts" rel="noopener noreferrer"&gt;inactive-account guidance&lt;/a&gt; explains how sign-in activity can help investigate inactive accounts. It also stresses that an inactivity window depends on context. The documented &lt;code&gt;lastSignInDateTime&lt;/code&gt; records an interactive sign-in attempt, which is not the same as proof of successful use. The page notes that displayed activity can take time to update; access to &lt;code&gt;lastSuccessfulSignInDateTime&lt;/code&gt; has separate licensing and permission prerequisites.&lt;/p&gt;

&lt;p&gt;Use a gap as a review threshold that your organization chooses. Check leave, seasonal patterns, non-interactive workloads and recent successful activity with the service owner. If the evidence is stale or missing, mark the candidate as uncertain rather than inactive.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Shared mailboxes
&lt;/h3&gt;

&lt;p&gt;A shared mailbox licence needs its own review category. Microsoft's &lt;a href="https://learn.microsoft.com/en-us/microsoft-365/admin/email/about-shared-mailboxes" rel="noopener noreferrer"&gt;shared-mailbox guidance&lt;/a&gt; says a separate licence is not required in some situations, but lists exceptions tied to mailbox size, archiving, holds and advanced features. Verify the live mailbox configuration and current licensing terms before changing its assignment. A missing interactive sign-in is not a safe removal signal for a shared mailbox.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Duplicate or overlapping SKU assignments
&lt;/h3&gt;

&lt;p&gt;Duplicate licence SKUs can look similar while providing different service plans, or the same entitlement can arrive by direct and group assignment. Compare the enabled services with the user's work, confirm the assignment source, and check whether a group rule will restore a removed licence. Label these rows "possible overlap" until an administrator and service owner verify the requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the report useful to a reviewer
&lt;/h2&gt;

&lt;p&gt;For each candidate, show the evidence and its date, why it was flagged, what remains unknown, the business or service owner, the next verification step and a status such as &lt;strong&gt;review&lt;/strong&gt;, &lt;strong&gt;confirmed needed&lt;/strong&gt;, &lt;strong&gt;approved to change&lt;/strong&gt; or &lt;strong&gt;unresolved&lt;/strong&gt;. Do not label a row "waste" just because an account is disabled or quiet. Keep the report separate from the action process: no automatic removal, no silent group changes and no unreviewed mailbox changes.&lt;/p&gt;

&lt;p&gt;Before anyone acts, check dependent services, retention and legal holds, mailbox features, group membership and subscription commitments. The authorized administrator should make an approved change through the tenant's established process, document the decision and check that the user or service still works afterward. If a reviewer cannot establish the assignment's purpose, leave it in place until the right owner can decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estimate savings carefully
&lt;/h2&gt;

&lt;p&gt;Use the tenant's actual contract price, currency, renewal date and cancellation terms. A public list price may not match a negotiated rate, and a remaining commitment can mean that removing an assignment does not immediately reduce the bill. Keep confirmed changes separate from potential candidates, and state the assumptions behind any estimate.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Export a minimal, dated view of assignments and account signals.&lt;/li&gt;
&lt;li&gt;Separate disabled users, long sign-in gaps, shared mailboxes and possible SKU overlap.&lt;/li&gt;
&lt;li&gt;Confirm the signal with the account or service owner.&lt;/li&gt;
&lt;li&gt;Check group assignments, enabled service plans, mailbox features and retention.&lt;/li&gt;
&lt;li&gt;Verify actual contract and renewal terms before estimating savings.&lt;/li&gt;
&lt;li&gt;Record approval before an authorized administrator changes anything.&lt;/li&gt;
&lt;li&gt;Recheck the dependent service and assignment rule afterward.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tools that help
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.cloudekhosting.com/tools/licence-waste-analyzer.html" rel="noopener noreferrer"&gt;licence waste analyzer&lt;/a&gt; reviews a selected CSV locally in the browser. The &lt;a href="https://www.cloudekhosting.com/tools/microsoft-365-license-cost-calculator.html" rel="noopener noreferrer"&gt;Microsoft 365 licence cost calculator&lt;/a&gt; helps organize cost assumptions. Both are review aids: they do not connect to a tenant or remove licences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does a disabled account always mean its licence is unused?&lt;/strong&gt; No. Confirm its owner, services, group rules, retention requirements and any handover period first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does no recent sign-in prove a licence is not needed?&lt;/strong&gt; No. Sign-in activity is a signal with timing and interpretation limits. Check with the owner and consider workload patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should a shared mailbox have its licence removed?&lt;/strong&gt; Not without checking the mailbox's current size, archive, hold and feature requirements against Microsoft's current guidance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can duplicate products be removed automatically?&lt;/strong&gt; This guide recommends human review. Similar names or overlapping assignments do not prove that an entitlement is redundant.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cloudekhosting.com/blog/reclaim-unused-microsoft-365-licences.html" rel="noopener noreferrer"&gt;cloudekhosting.com&lt;/a&gt;. Free Microsoft 365 and IT admin tools are at &lt;a href="https://www.cloudekhosting.com/tools.html" rel="noopener noreferrer"&gt;cloudekhosting.com/tools&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>microsoft</category>
      <category>sysadmin</category>
      <category>cloud</category>
      <category>productivity</category>
    </item>
    <item>
      <title>DMARC Rollout Plan: From p=none to p=reject Without Losing Mail</title>
      <dc:creator>Cloudek Hosting</dc:creator>
      <pubDate>Mon, 09 Nov 2026 04:43:14 +0000</pubDate>
      <link>https://dev.to/cloudekhosting/dmarc-rollout-plan-from-pnone-to-preject-without-losing-mail-57b1</link>
      <guid>https://dev.to/cloudekhosting/dmarc-rollout-plan-from-pnone-to-preject-without-losing-mail-57b1</guid>
      <description>&lt;h2&gt;
  
  
  What a DMARC rollout is really doing
&lt;/h2&gt;

&lt;p&gt;DMARC lets a domain owner tell receiving mail systems what to do with messages that claim to be from the domain but fail authentication. The DMARC policy has three levels: &lt;code&gt;p=none&lt;/code&gt; asks for no action, &lt;code&gt;p=quarantine&lt;/code&gt; asks the receiver to treat failing mail with suspicion, and &lt;code&gt;p=reject&lt;/code&gt; asks it to refuse the mail. The risk in moving from the first to the last is simple: if a legitimate sender is not authenticating correctly, it will start losing mail when you tighten the policy. A good DMARC rollout plan is mostly about finding every legitimate sender before that happens.&lt;/p&gt;

&lt;p&gt;This plan assumes SPF and DKIM already exist for your main mail system. If you are unsure, begin with the &lt;a href="https://www.cloudekhosting.com/tools/email-health-check.html" rel="noopener noreferrer"&gt;email domain health score&lt;/a&gt; to see which records are published, and read &lt;a href="https://www.cloudekhosting.com/blog/check-email-domain-records-mx-spf-dkim-dmarc-lookup.html" rel="noopener noreferrer"&gt;how to check email domain records&lt;/a&gt; for what each one does.&lt;/p&gt;

&lt;h2&gt;
  
  
  How DMARC decides pass or fail
&lt;/h2&gt;

&lt;p&gt;A message passes DMARC if SPF or DKIM passes and, crucially, the domain it authenticated is aligned with the domain in the visible From address. It fails only if both fail. Alignment is where most rollouts hit trouble. A marketing platform may pass SPF for its own bounce domain and sign DKIM with its own domain, so both authentication checks pass but neither aligns with your From domain, and DMARC fails. By default alignment is relaxed, meaning a subdomain of the same organizational domain aligns; strict mode requires an exact match.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 0: take stock
&lt;/h2&gt;

&lt;p&gt;Before publishing anything, list who sends mail as your domain. Typical senders are your main mailbox service, a marketing platform, a ticketing or support system, an invoicing or billing system, a website contact form, monitoring and printers or scanners, and a few forgotten servers. Ask each department, and also check the DNS: your SPF record often names the services someone once approved. Remove nothing yet; collect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 1: publish p=none with reporting
&lt;/h2&gt;

&lt;p&gt;Publish a DMARC record at &lt;code&gt;_dmarc.yourdomain&lt;/code&gt; with &lt;code&gt;p=none&lt;/code&gt; and an &lt;code&gt;rua=mailto:&lt;/code&gt; address for aggregate reports. A minimal example is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use a dedicated shared mailbox or group for reports, not a person's inbox, and expect the volume to grow. If the report address is in a different domain from the one being protected, the receiving domain has to publish a small TXT record to authorise report delivery, or receivers may not send reports. Many teams use a DMARC reporting service to turn the XML into something readable; if you do, check what the service stores and who can see it.&lt;/p&gt;

&lt;p&gt;Stay at &lt;code&gt;p=none&lt;/code&gt; long enough to see a full business cycle. That should include month-end invoicing, any quarterly mailings and seasonal campaigns, since infrequent senders are the ones you miss. Microsoft's guidance is to monitor for enough time before moving up, without giving a fixed number; the right length depends on how many senders you have and how regular they are.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read aggregate reports
&lt;/h2&gt;

&lt;p&gt;Receivers usually send aggregate reports as a daily XML attachment, often compressed. Reading raw XML is tedious, so use a viewer or a script, but understand the fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;source_ip&lt;/code&gt;: the server that sent the mail, and &lt;code&gt;count&lt;/code&gt;, how many messages.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;policy_evaluated&lt;/code&gt;: whether SPF and DKIM were aligned, and what disposition the receiver applied.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;auth_results&lt;/code&gt;: the raw SPF and DKIM results and the domains they used.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;header_from&lt;/code&gt; and the envelope sender, so you see which domain was used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern to look for is a known, legitimate source where the authentication result is pass but the aligned result is fail. That is a sender who needs fixing, either by signing DKIM with your domain or by using a bounce address in your domain. A high-volume unknown source that fails everything is probably spoofing, and DMARC will protect recipients once you enforce. Forwarded mail and mailing lists often fail and are normal background noise; do not chase every line.&lt;/p&gt;

&lt;p&gt;Not every receiver sends reports, so the data is a sample of your mail rather than all of it. Also note that Microsoft 365 does not send the per-message forensic reports, so do not rely on &lt;code&gt;ruf&lt;/code&gt;; start with &lt;code&gt;rua&lt;/code&gt; only.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 2: find and fix the senders
&lt;/h2&gt;

&lt;p&gt;Work through the senders from the aggregate reports, one at a time. For each, decide whether it should send as your domain. If yes, make it align. The two usual fixes are to configure DKIM signing in the service using your domain, which tends to be the more robust route since it also survives most forwarding, and to configure a custom return-path domain so SPF aligns. If a service cannot do either, send its mail from a subdomain and give that subdomain its own record. If a sender should not exist, remove it from SPF and ask why it was sending.&lt;/p&gt;

&lt;p&gt;Use a subdomain for third-party bulk senders so that their reputation does not reflect on your main domain. For domains that never send mail, you can publish a restrictive record straight away, as parked domains should not be sending at all.&lt;/p&gt;

&lt;p&gt;Check progress by re-reading the reports: the legitimate sources should move from failing to aligned passes. Before you publish a change, check your record's syntax and tags with the &lt;a href="https://www.cloudekhosting.com/tools/email-health-check.html#paste-dmarc" rel="noopener noreferrer"&gt;DMARC record check in the email health tool&lt;/a&gt;; it explains a pasted record and does not look it up in DNS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 3: move to p=quarantine
&lt;/h2&gt;

&lt;p&gt;When the reports show your legitimate senders aligned, change to &lt;code&gt;p=quarantine&lt;/code&gt;. The &lt;code&gt;pct&lt;/code&gt; tag in the record lets you apply the policy to a share of failing messages first, and Microsoft's own example steps through increments such as 10, 25, 50, 75 and 100. Be aware that &lt;code&gt;pct&lt;/code&gt; comes from the original specification, RFC 7489. A newer revision of the standard is reported to retire it in favour of a simple test-mode tag, so check the current specification and how your receivers treat partial enforcement before relying on it. Whichever way you stage it, keep watching reports and the help desk for complaints about missing mail.&lt;/p&gt;

&lt;p&gt;Wait for a full cycle again before the last step. Tell the business a change is coming and who to contact.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 4: move to p=reject
&lt;/h2&gt;

&lt;p&gt;When quarantine has been quiet, change to &lt;code&gt;p=reject&lt;/code&gt;. Rejected mail is bounced or discarded by the receiver, so there is no junk folder to rescue it from. That is why the previous stages exist. Keep reading reports, because new senders appear when a team signs up for a new service without asking you.&lt;/p&gt;

&lt;p&gt;If you have subdomains, decide whether they inherit the parent policy, as they do when no record exists for them, or need their own. The &lt;code&gt;sp&lt;/code&gt; tag sets a policy for subdomains in the parent's record. Roll out low-volume, low-complexity domains first and leave the main domain until last, which is Microsoft's suggested order.&lt;/p&gt;

&lt;h2&gt;
  
  
  After the rollout
&lt;/h2&gt;

&lt;p&gt;DMARC is not a one-time project. Add "does this send mail as our domain?" to the checklist for any new application, review aggregate reports monthly, and keep an eye on the SPF lookup limit as senders are added. A policy of &lt;code&gt;p=reject&lt;/code&gt; does not stop all phishing. It makes direct spoofing of your exact domain much harder; look-alike domains remain.&lt;/p&gt;

&lt;p&gt;Keep a record of each change and the date, so that if mail disappears you can see what changed. Verify your own record syntax, alignment settings and report addresses against Microsoft Learn and the DMARC specification before you publish.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://www.cloudekhosting.com/blog/dmarc-rollout-plan-p-none-to-p-reject.html" rel="noopener noreferrer"&gt;cloudekhosting.com&lt;/a&gt;. Free email checks, including the email health score, are at &lt;a href="https://www.cloudekhosting.com/tools.html" rel="noopener noreferrer"&gt;cloudekhosting.com/tools&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>email</category>
      <category>sysadmin</category>
    </item>
  </channel>
</rss>
