Upgrading the modern email tracking service (including .NET 10)
Who is this article for?
Administrators who want to update their Email tracking service to the latest version.
Administrator access is required.
This article guides you through upgrading the Email Tracking Function App infrastructure and deploying the new .NET 10 build across four sequential steps.
Understanding the upgrade process
The upgrade involves four steps that must be completed in order:
- Migrate the storage account from general-purpose v1 to v2.
- Change the Function App stack setting to .NET 10 Isolated.
- Deploy the new .NET 10 artifact to the staging slot.
- Set the stack to .NET 10 Isolated again after swapping slots.
Migrating the storage account to general-purpose v2 (prior to October 2026)
The Function App's linked storage account must be a general-purpose v2 account. Microsoft is retiring general-purpose v1 accounts on 13 October 2026, and new v1 accounts can no longer be created.
You will not need to do this after October 2026 as Microsoft will automatically switch you.
To migrate the storage account:
- Sign in to the Azure portal.
- Navigate to Home, Resource group, enter your email tracking name and storage account.
- In the Settings section, select Configuration.
- Under Account kind, select Upgrade.
- Under Confirm upgrade, type the storage account's name to confirm.
- Our recommendation is the Hot Access Tier.
- Select Upgrade at the bottom of the panel.
Note: This is a metadata-only change performed through Azure Resource Manager. There is no downtime and no risk of data loss. If prompted for a default access tier, leave it on the account's current tier unless instructed otherwise, since changing tier afterwards can add a one-off read or write charge across all existing data.
Setting the stack to .NET 10 Isolated
Once the storage account is on v2, update the Function App's language stack so it can host the new .NET 10 build.
To update the language stack:
- In the Azure portal, open the Saffron Function App.
- Under Settings, select Configuration.
- Switch to the Stack settings tab.
- Confirm Stack is set to .NET.
- Set Version to .NET 10 Isolated.
- Save the change and allow the Function App to restart.
The screenshot above shows the target state of the Stack settings tab for reference.
Deploying the new email tracking package
The deployment uses the Azure CLI to push the .NET 10 build artifact to the Function App's staging slot.
Before running the command
Ensure you have:
- Downloaded the latest email tracking update as a zip package here: email tracking code package
- Azure CLI installed on the machine running the command
- The tenant domain, resource group name, Azure subscription ID, and Function App name ready
Note: Run the command from the directory containing the zip package, or adjust the
--src-pathvalue accordingly.
Signing in to Azure
To sign in to Azure:
- Run the following command:
az login --tenant "<your tenant-domain-or-id>"- Select your subscription from the list.
Running the deployment command
To deploy the artifact:
- Run the following command:
az webapp deploy --resource-group "<resource-group>" --name "<function-app-name>" --subscription "<azure subscription-id>" --src-path "<path-to-zip-package>" --verbose --clean true --async true --timeout 3600000 --slot stagingFor example, for an example test Function App the command line is below:
az webapp deploy --resource-group "EmailTracking2" --name "emailtracking-diqvfudvcniis" --subscription "21af60e0-8e21-4230-af9c-1c6f82290620" --src-path .\IdeagenMailManagerEmailTracking-20260729.1.zip --verbose --clean true --async true --timeout 3600000 --slot stagingThis deploys the zip package to the staging slot of the target Function App. --clean true removes existing content before deploying, --async true returns control once the deployment is triggered rather than blocking on completion, and --timeout 3600000 allows up to an hour for the deployment to finish. Use --verbose so any errors are visible in the console output.
Important: Because this targets the staging slot, verify the app there before swapping it into production.
Swapping slots
To swap the staging slot into production:
- Open the Function App instance.
- Switch to the Deployment slots tab.
- Click Swap (both slots must be running).
- Click Swap in the pane on the right.
Setting the stack to .NET 10 Isolated again
After swapping slots, you must set the stack to .NET 10 Isolated again.
To update the stack setting:
- In the Azure portal, open the Saffron Function App.
- Under Settings, select Configuration.
- Switch to the Stack settings tab.
- Confirm Stack is set to .NET. (refresh if needed)
- Set Version to .NET 10 Isolated.
Verifying the upgrade
To verify the upgrade was successful, check the following:
- Storage account kind shows StorageV2 in its overview page
- Function App Stack settings show .NET 10 Isolated
-
az webapp deploycompletes without errors in the console output - The Function App on the staging slot starts and responds as expected before any production swap