Breaking changes

v 18.0.0

Breaking changes in v18

Newsletter Studio 18 targets Umbraco 18 and .NET 10. Most public APIs that interact with storage, providers, or rendering are now asynchronous.

Public services

INewsletterStudioService has been updated:

  • AddRecipient(...) -> AddRecipientAsync(...)
  • AddOrUpdateSubscriptions(...) -> AddOrUpdateSubscriptionsAsync(...)
  • GetMailingListsForAllWorkspaces(...) -> GetMailingListsForAllWorkspacesAsync(...)
  • GetMailingList(...) -> GetMailingListAsync(...)
  • GetMailingLists(...) -> GetMailingListsAsync(...)
  • GetSubscriptionsFor(...) -> GetSubscriptionsForAsync(...)
  • GetRecipientsByEmail(...) -> GetRecipientsByEmailAsync(...)
  • ParseUnsubscribeToken(...) -> ParseUnsubscribeTokenAsync(...)
  • Unsubscribe(...) -> UnsubscribeAsync(...)
  • RemoveRecipient(...) -> RemoveRecipientAsync(...)

ICampaignEmailService has been updated:

  • GetByContentKey(...) -> GetByContentKeyAsync(...)
  • GetByKey(...) -> GetByKeyAsync(...)
  • GetById(...) -> GetByIdAsync(...)
  • Save(...) -> SaveAsync(...)
  • Duplicate(...) -> DuplicateAsync(...)

IWorkspaceService has been updated:

  • CurrentUserAccess(...) -> CurrentUserAccessAsync(...)
  • GetByKey(...) -> GetByKeyAsync(...)
  • GetAll(...) -> GetAllAsync(...)
  • Save(...) -> SaveAsync(...)

Providers

IRecipientListProvider implementations must now return Task from the provider methods:

  • GetLists(...) -> GetListsAsync(...)
  • GetReceiversForList(...) -> GetReceiversForListAsync(...)
  • GetByEmail(...) -> GetByEmailAsync(...)
  • GetDataModel(...) -> GetDataModelAsync(...)
  • Unsubscribe(...) -> UnsubscribeAsync(...)
  • UnsubscribeAll(...) -> UnsubscribeAllAsync(...)
  • GetEditInformation(...) -> GetEditInformationAsync(...)
  • ReportSoftBounce(...) -> ReportSoftBounceAsync(...)
  • ReportHardBounce(...) -> ReportHardBounceAsync(...)

IEmailServiceProvider has been updated:

  • ValidateSettings(...) -> ValidateSettingsAsync(...)

IEmailServiceProviderWithBackgroundJob has been updated:

  • ExecuteBackgroundJob(...) -> ExecuteBackgroundJobAsync(...)

The built-in provider implementations and helper methods follow the same async pattern:

  • MailKitSmtpEmailServiceProvider.GetConnectedAndAuthenticatedClient(...) -> GetConnectedAndAuthenticatedClientAsync(...)
  • UmbracoMailKitEmailServiceProvider.GetConnectedAndAuthenticatedClient(...) -> GetConnectedAndAuthenticatedClientAsync(...)
  • SmtpProviderPop3BounceProcessor.DoWork(...) -> DoWorkAsync(...)

Email controls

Email control rendering is async in v18. Custom email control types should use:

  • BuildViewModelAsync(...)
  • DoBuildViewModelAsync(...)
  • UpdateUniqueViewModelAsync(...)
  • DoUpdateUniqueViewModelAsync(...)

If your custom control inherits from EmailControlTypeBase<TControlDataModel, TBlockViewModel>, update your overrides to return Task<TBlockViewModel>.