public async Task SendPublicBidEmails()
    {
        var supportedYears = await _interLeagueService.GetSupportedYears();

        var activeYears = supportedYears.Where(x => x.OpenForPlay && !x.Finished);

        var publicBiddingSetDictionary = new Dictionary <LeagueYearKey, PublicBiddingSet>();

        foreach (var year in activeYears)
        {
            var publicBiddingSets = await _gameAcquisitionService.GetPublicBiddingGames(year.Year);

            foreach (var publicBiddingSet in publicBiddingSets)
            {
                publicBiddingSetDictionary[publicBiddingSet.LeagueYear.Key] = publicBiddingSet;
            }
        }

        var userEmailSettings = await _userManager.GetAllEmailSettings();

        var usersWithPublicBidEmails = userEmailSettings.Where(x => !x.User.IsDeleted && x.User.EmailConfirmed && x.EmailTypes.Contains(EmailType.PublicBids)).Select(x => x.User).ToList();
        var usersWithLeagueYears     = await _leagueMemberService.GetUsersWithLeagueYearsWithPublisher();

        foreach (var user in usersWithPublicBidEmails)
        {
            if (!usersWithLeagueYears.TryGetValue(user, out var leagueYearKeys))
            {
                continue;
            }

            List <PublicBiddingSet> publicBiddingSetsForUser = new List <PublicBiddingSet>();
            foreach (var leagueYearKey in leagueYearKeys)
            {
                if (publicBiddingSetDictionary.TryGetValue(leagueYearKey, out var publicBiddingSet))
                {
                    publicBiddingSetsForUser.Add(publicBiddingSet);
                }
            }

            if (publicBiddingSetsForUser.Any() && publicBiddingSetsForUser.Any(x => x.MasterGames.Any()))
            {
                await SendPublicBiddingEmailToUser(user, publicBiddingSetsForUser);
            }
        }
    }