コード例 #1
0
ファイル: EmailController.cs プロジェクト: Morr0/EmailSender
        public async Task <IActionResult> Send([FromForm] SendEmailRequest request, [FromServices] IGoogleAuthProvider auth)
        {
            if (!ModelState.IsValid)
            {
                return(View("Index", new List <Destination>(_emailsService.Get())));
            }

            var credentials = await auth.GetCredentialAsync().ConfigureAwait(false);

            var gmailService = new GmailService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credentials,
                ApplicationName       = "EmailSender"
            });

            var destinations = _emailsService.Get();
            int sections     = (destinations.Count / 5) + 1;
            var tasks        = new List <Task>(5);

            for (int i = 0; i < sections; i++)
            {
                var currFive = destinations.Skip(i * 5).Take(5);
                tasks.Clear();

                foreach (var destination in currFive)
                {
                    string body    = request.Template.Replace("{0}", destination.Name);
                    var    message = new Message
                    {
                        Raw = EmailMessageCreator.Message(destination.Name, destination.Email, request.Subject, body)
                    };

                    var compose = new UsersResource.MessagesResource.SendRequest(gmailService, message, "me");
                    tasks.Add(compose.ExecuteAsync());
                }

                await Task.WhenAny(tasks).ConfigureAwait(false);

                await Task.Delay(1000).ConfigureAwait(false);
            }

            _emailsService.RemoveAll();

            return(Redirect("/"));
        }