コード例 #1
0
        protected override void Execute(CodeActivityContext executionContext)
        {
            ITracingService             tracer         = executionContext.GetExtension <ITracingService>();
            IWorkflowContext            context        = executionContext.GetExtension <IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>();
            IOrganizationService        service        = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {
                EntityReference emailToSend = EmailToSend.Get(executionContext);

                SendEmailRequest request = new SendEmailRequest
                {
                    EmailId       = emailToSend.Id,
                    TrackingToken = string.Empty,
                    IssueSend     = true
                };

                SendEmailResponse response = (SendEmailResponse)service.Execute(request);

                bool emailSent = (response != null);

                EmailSent.Set(executionContext, emailSent);
            }
            catch (Exception ex)
            {
                tracer.Trace("Exception: {0}", ex.ToString());
            }
        }
コード例 #2
0
ファイル: EmailLogger.cs プロジェクト: tellma-ltd/tellma
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }

            // Create the email body
            var exceptionType = exception?.GetType()?.Name ?? "Error";
            var truncatedMsg  = exception?.Message?.Truncate(50, appendEllipses: true);
            var subjectText   = $"{_provider.InstallationIdentifier ?? "Tellma ERP"}: Unhandled {exceptionType}: {truncatedMsg}";
            var bodyText      = $@"
{formatter(state, exception)}

--- Stack Trace ---

{exception}";

            // Create the email
            var email = new EmailToSend(_provider.EmailAddress)
            {
                Subject = subjectText,
                Body    = Htmlify(bodyText),
            };

            // Fire and forget the email (no need to await email logging)
            var _ = TrySendEmail(email);
        }
コード例 #3
0
        protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (localContext == null)
            {
                throw new ArgumentNullException(nameof(localContext));
            }

            EntityReference emailToSend           = EmailToSend.Get(context);
            EntityReference recipientBusinessUnit = RecipientBusinessUnit.Get(context);
            bool            includeChildren       = IncludeChildren.Get(context);
            bool            sendEmail             = SendEmail.Get(context);

            List <Entity> ccList = new List <Entity>();

            Entity email = RetrieveEmail(localContext.OrganizationService, emailToSend.Id);

            if (email == null)
            {
                UsersAdded.Set(context, 0);
                return;
            }

            //Add any pre-defined recipients specified to the array
            foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("cc").Entities)
            {
                ccList.Add(activityParty);
            }

            EntityCollection buUsers = GetBuUsers(localContext.OrganizationService, recipientBusinessUnit.Id);

            ccList = ProcessUsers(buUsers, ccList);

            if (includeChildren)
            {
                ccList = DrillDownBu(localContext.OrganizationService, recipientBusinessUnit.Id, ccList);
            }

            //Update the email
            email["cc"] = ccList.ToArray();
            localContext.OrganizationService.Update(email);

            //Send
            if (sendEmail)
            {
                SendEmailRequest request = new SendEmailRequest
                {
                    EmailId       = emailToSend.Id,
                    TrackingToken = string.Empty,
                    IssueSend     = true
                };

                localContext.OrganizationService.Execute(request);
            }

            UsersAdded.Set(context, ccList.Count);
        }
コード例 #4
0
ファイル: EmailService.cs プロジェクト: ktodorov/Garvan
        public async Task SendEmailAsync(EmailToSend emailToSend)
        {
            var smtpAddress   = _configuration.GetSection("SMTP_Address").Value;
            var smtpUsername  = _configuration.GetSection("SMTP_Username").Value;
            var smtpPassword  = _configuration.GetSection("SMTP_Password").Value;
            var smtpPort      = _configuration.GetSection("SMTP_Port").Value.ConvertString <int>();
            var smtpEnableSSL = _configuration.GetSection("SMTP_UseSSL").Value.ConvertString <bool>();
            var receiverEmail = _configuration.GetSection("SMTP_ReceivingEmail").Value;

            using (var client = new SmtpClient(smtpAddress))
            {
                client.UseDefaultCredentials = false;
                client.Credentials           = new NetworkCredential(smtpUsername, smtpPassword);
                client.Port      = smtpPort;
                client.EnableSsl = smtpEnableSSL;

                using (var mailMessage = new MailMessage())
                {
                    mailMessage.From = new MailAddress(emailToSend.Email);
                    mailMessage.To.Add(receiverEmail);
                    mailMessage.Body    = $"You received email from '{emailToSend.Email}';{Environment.NewLine}{Environment.NewLine}{Environment.NewLine} Subject: {emailToSend.Subject}{Environment.NewLine}{Environment.NewLine}{Environment.NewLine} {emailToSend.Message}";
                    mailMessage.Subject = "Email from website form";
                    await client.SendMailAsync(mailMessage);
                }
            }
        }
コード例 #5
0
        protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (localContext == null)
            {
                throw new ArgumentNullException(nameof(localContext));
            }

            EntityReference emailToSend = EmailToSend.Get(context);

            SendEmailRequest request = new SendEmailRequest
            {
                EmailId       = emailToSend.Id,
                TrackingToken = string.Empty,
                IssueSend     = true
            };

            SendEmailResponse response = (SendEmailResponse)localContext.OrganizationService.Execute(request);

            bool emailSent = response != null;

            EmailSent.Set(context, emailSent);
        }
コード例 #6
0
        protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (localContext == null)
            {
                throw new ArgumentNullException(nameof(localContext));
            }

            EntityReference emailToSend = EmailToSend.Get(context);
            Guid            roleId      = IsGuid(RecipientRole.Get(context));
            bool            sendEmail   = SendEmail.Get(context);

            if (roleId == Guid.Empty)
            {
                throw new InvalidWorkflowException("Invalid Role GUID");
            }

            List <Entity> toList = new List <Entity>();

            Entity email = RetrieveEmail(localContext.OrganizationService, emailToSend.Id);

            if (email == null)
            {
                UsersAdded.Set(context, 0);
                return;
            }

            //Add any pre-defined recipients specified to the array
            foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("to").Entities)
            {
                toList.Add(activityParty);
            }

            EntityCollection users = GetRoleUsers(localContext.OrganizationService, roleId);

            toList = ProcessUsers(users, toList);

            //Update the email
            email["to"] = toList.ToArray();
            localContext.OrganizationService.Update(email);

            //Send
            if (sendEmail)
            {
                SendEmailRequest request = new SendEmailRequest
                {
                    EmailId       = emailToSend.Id,
                    TrackingToken = string.Empty,
                    IssueSend     = true
                };

                localContext.OrganizationService.Execute(request);
            }

            UsersAdded.Set(context, toList.Count);
        }
コード例 #7
0
        protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (localContext == null)
            {
                throw new ArgumentNullException(nameof(localContext));
            }

            Guid            primaryEntityId = localContext.WorkflowExecutionContext.PrimaryEntityId;
            EntityReference emailToSend     = EmailToSend.Get(context);
            EntityReference connectionRole  = ConnectionRole.Get(context);
            bool            includeOpposite = IncludeOppositeConnection.Get(context);
            bool            sendEmail       = SendEmail.Get(context);

            List <Entity> ccList = new List <Entity>();

            Entity email = RetrieveEmail(localContext.OrganizationService, emailToSend.Id);

            if (email == null)
            {
                UsersAdded.Set(context, 0);
                return;
            }

            //Add any pre-defined recipients specified to the array
            foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("cc").Entities)
            {
                ccList.Add(activityParty);
            }

            EntityCollection records = GetConnectedRecords(localContext.OrganizationService, primaryEntityId, connectionRole.Id, includeOpposite);

            localContext.TracingService.Trace($"Found {records.Entities.Count} records");

            ccList = ProcessRecords(localContext.OrganizationService, records, ccList, primaryEntityId);

            //Update the email
            email["cc"] = ccList.ToArray();
            localContext.OrganizationService.Update(email);

            //Send
            if (sendEmail)
            {
                SendEmailRequest request = new SendEmailRequest
                {
                    EmailId       = emailToSend.Id,
                    TrackingToken = string.Empty,
                    IssueSend     = true
                };

                localContext.OrganizationService.Execute(request);
            }

            UsersAdded.Set(context, ccList.Count);
        }
コード例 #8
0
        protected override void Execute(CodeActivityContext executionContext)
        {
            ITracingService             tracer         = executionContext.GetExtension <ITracingService>();
            IWorkflowContext            context        = executionContext.GetExtension <IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>();
            IOrganizationService        service        = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {
                EntityReference emailToSend   = EmailToSend.Get(executionContext);
                EntityReference recipientTeam = RecipientTeam.Get(executionContext);
                bool            sendEmail     = SendEmail.Get(executionContext);

                List <Entity> toList = new List <Entity>();

                Entity email = RetrieveEmail(service, emailToSend.Id);

                if (email == null)
                {
                    UsersAdded.Set(executionContext, 0);
                    return;
                }

                //Add any pre-defined recipients specified to the array
                foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("to").Entities)
                {
                    toList.Add(activityParty);
                }

                EntityCollection teamMembers = GetTeamMembers(service, recipientTeam.Id);

                toList = ProcessUsers(service, teamMembers, toList);

                //Update the email
                email["to"] = toList.ToArray();
                service.Update(email);

                //Send
                if (sendEmail)
                {
                    SendEmailRequest request = new SendEmailRequest
                    {
                        EmailId       = emailToSend.Id,
                        TrackingToken = string.Empty,
                        IssueSend     = true
                    };

                    service.Execute(request);
                }

                UsersAdded.Set(executionContext, toList.Count);
            }
            catch (Exception ex)
            {
                tracer.Trace("Exception: {0}", ex.ToString());
            }
        }
コード例 #9
0
ファイル: EmailLogger.cs プロジェクト: tellma-ltd/tellma
 private async Task TrySendEmail(EmailToSend email)
 {
     try
     {
         await _provider.EmailSender().SendAsync(email);
     }
     // If we attempt to email an exception and the email sender itself throws
     // an exception then we just throw our hands up and forget about it.
     catch { }
 }
コード例 #10
0
        public IHttpActionResult Post(EmailRecipientsModel model)
        {
            if (model.SendDate == null)
            {
                model.SendDate = DateTime.Now;
            }

            if (model.To == null)
            {
                model.To = new List <EmailAddress>();
            }

            if (model.UserId != null)
            {
                foreach (int recipientid in model.UserId)
                {
                    var user = db.User.Where(u => u.Id == recipientid).FirstOrDefault();

                    if (user != null)
                    {
                        model.To.Add(new EmailAddress {
                            Address = user.Email, DisplayName = user.Name
                        });
                    }
                }
            }

            var recipients = model.To.Select(t => new EmailToSendAddress {
                EmailAddress = t.Address, DisplayName = t.DisplayName
            }).ToList();

            if (recipients.Count > 0)
            {
                var EmailToSend = new EmailToSend
                {
                    Body         = model.Body,
                    Subject      = model.Subject,
                    SendDate     = model.SendDate.Value,
                    IsSent       = false,
                    CreatedDate  = DateTime.Now,
                    EmailAddress = recipients,
                    Retry        = 0
                };

                db.EmailToSend.Add(EmailToSend);
                db.SaveChanges();

                return(Ok(EmailToSend.Id));
            }

            return(NotFound());
        }
コード例 #11
0
        public async Task <IHttpActionResult> SendEmail(EmailToSend emailToSend)
        {
            var receiverId = await _emailRepository.GetIdOfReceiver(emailToSend.ReceiverEmail);

            var emailToCreate = new Email
            {
                Subject    = emailToSend.Subject,
                Message    = emailToSend.Message,
                SenderId   = emailToSend.SenderId,
                ReceiverId = receiverId
            };

            await _emailRepository.SendEmail(emailToCreate);

            return(StatusCode((HttpStatusCode)201));
        }
コード例 #12
0
        public async Task <IActionResult> SendEmailToAll([FromBody] EmailToSend command)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            try
            {
                //await _accountEmailFactory.SendEmailToAllAsync(command.Subject, command.Body);
                await _accountEmailFactory.SendEmailToAllUnregisteredAsync(command.Subject, command.Body);

                return(StatusCode(201));
            }
            catch (Exception e)
            {
                return(BadRequest(e.Message));
            }
        }
コード例 #13
0
        public IHttpActionResult Post(EmailRecipientModel model)
        {
            if (model.SendDate == null)
            {
                model.SendDate = DateTime.Now;
            }

            if (model.To == null)
            {
                model.To = new EmailAddress();
            }

            if (model.UserId != null)
            {
                var user = db.User.Where(u => u.Id == model.UserId).FirstOrDefault();

                model.To.Address     = user.Email;
                model.To.DisplayName = user.Name;
            }

            if (!string.IsNullOrEmpty(model.To.Address))
            {
                var EmailToSend = new EmailToSend
                {
                    Body         = model.Body,
                    Subject      = model.Subject,
                    SendDate     = model.SendDate.Value,
                    IsSent       = false,
                    CreatedDate  = DateTime.Now,
                    EmailAddress = new List <EmailToSendAddress>(new EmailToSendAddress[] { new EmailToSendAddress {
                                                                                                EmailAddress = model.To.Address, DisplayName = model.To.DisplayName
                                                                                            } }),
                    Retry = 0
                };

                db.EmailToSend.Add(EmailToSend);
                db.SaveChanges();

                return(Ok(EmailToSend.Id));
            }

            return(NotFound());
        }
コード例 #14
0
ファイル: EmailService.cs プロジェクト: ktodorov/Garvan
        public async Task SendShopEmailAsync(BasketToSend basketToSend)
        {
            var emailMessage = new StringBuilder(basketToSend.Message);

            emailMessage.AppendLine();

            foreach (var shopObject in basketToSend.ShopObjects)
            {
                emailMessage.AppendLine(shopObject.ToString());
            }

            var emailToSend = new EmailToSend
            {
                Email   = basketToSend.Email,
                Name    = basketToSend.Name,
                Subject = basketToSend.Subject,
                Message = emailMessage.ToString()
            };

            await SendEmailAsync(emailToSend);
        }
コード例 #15
0
        public long SaveEmailToLocal(EmailToSend email)
        {
            using (var db = new SQLiteConnection(dbPath))
            {
                try
                {
                    //EmailToSend objSaveEmail = new EmailToSend();
                    //objSaveEmail.EmailId = email.EmailId;
                    //objSaveEmail.EmailTemplate = email.EmailTemplate;
                    //objSaveEmail.EmailBody = email.EmailBody;
                    //objSaveEmail.DateTime = email.DateTime;
                    db.Insert(email);
                    return(email.Id);
                }

                catch (Exception ex)
                {
                    throw ex;
                    //exception handling code to go here
                }
            }
        }
コード例 #16
0
 public Task SendAsync(EmailToSend email, string fromEmail = null, CancellationToken cancellation = default)
 {
     throw new InvalidOperationException(Message);
 }
コード例 #17
0
        /// <summary>
        /// Helper function.
        /// </summary>
        public static (EmailForSave result, IEnumerable <(string name, byte[] content)> blobs) ToEntity(EmailToSend emailToSend)
        {
            var blobCount = 1 + emailToSend.Attachments.Count(); // To make sliiightly faster
            var blobs     = new List <(string name, byte[] content)>(blobCount);

            string bodyBlobId = null;

            if (!string.IsNullOrWhiteSpace(emailToSend.Body))
            {
                bodyBlobId = Guid.NewGuid().ToString();
                var bodyBlobName    = EmailUtil.EmailBodyBlobName(bodyBlobId);
                var bodyBlobContent = Encoding.UTF8.GetBytes(emailToSend.Body);

                blobs.Add((bodyBlobName, bodyBlobContent));
            }

            var emailForSave = new EmailForSave
            {
                To          = string.Join(';', emailToSend.To ?? new List <string>()),
                Cc          = string.Join(';', emailToSend.Cc ?? new List <string>()),
                Bcc         = string.Join(';', emailToSend.Bcc ?? new List <string>()),
                Subject     = emailToSend.Subject,
                BodyBlobId  = bodyBlobId,
                Id          = emailToSend.EmailId,
                State       = EmailState.Scheduled,
                Attachments = new List <EmailAttachmentForSave>()
            };

            if (emailToSend.Attachments != null)
            {
                foreach (var att in emailToSend.Attachments)
                {
                    // If there is no content, then don't add the attachment
                    var    contentBlobContent = att.Contents;
                    string contentBlobId      = null;

                    if (contentBlobContent != null && contentBlobContent.Length > 0)
                    {
                        contentBlobId = Guid.NewGuid().ToString();
                        var contentBlobName = EmailUtil.EmailAttachmentBlobName(contentBlobId);
                        blobs.Add((contentBlobName, contentBlobContent));
                    }

                    emailForSave.Attachments.Add(new EmailAttachmentForSave
                    {
                        Name          = att.Name,
                        ContentBlobId = contentBlobId
                    });
                }
            }

            return(emailForSave, blobs);
        }
コード例 #18
0
        protected override void Execute(CodeActivityContext executionContext)
        {
            ITracingService             tracer         = executionContext.GetExtension <ITracingService>();
            IWorkflowContext            context        = executionContext.GetExtension <IWorkflowContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>();
            IOrganizationService        service        = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {
                EntityReference emailToSend    = EmailToSend.Get(executionContext);
                EntityReference recipientQueue = RecipientQueue.Get(executionContext);
                bool            sendEmail      = SendEmail.Get(executionContext);
                bool            includeOwner   = IncludeOwner.Get(executionContext);

                List <Entity> toList = new List <Entity>();

                Entity email = RetrieveEmail(service, emailToSend.Id);

                if (email == null)
                {
                    UsersAdded.Set(executionContext, 0);
                    return;
                }

                //Add any pre-defined recipients specified to the array
                foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("to").Entities)
                {
                    toList.Add(activityParty);
                }

                bool             is2011 = Is2011(service);
                EntityCollection users  = is2011 ? GetQueueOwner(service, recipientQueue.Id) : GetQueueMembers(service, recipientQueue.Id);

                if (!is2011)
                {
                    if (includeOwner)
                    {
                        users.Entities.AddRange(GetQueueOwner(service, recipientQueue.Id).Entities);
                    }
                }

                toList = ProcessUsers(users, toList);

                //Update the email
                email["to"] = toList.ToArray();
                service.Update(email);

                //Send
                if (sendEmail)
                {
                    SendEmailRequest request = new SendEmailRequest
                    {
                        EmailId       = emailToSend.Id,
                        TrackingToken = string.Empty,
                        IssueSend     = true
                    };

                    service.Execute(request);
                }

                UsersAdded.Set(executionContext, toList.Count);
            }
            catch (Exception e)
            {
                throw new InvalidPluginExecutionException(e.Message);
            }
        }
コード例 #19
0
        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
            case Resource.Id.menu_done:
                if (!String.IsNullOrWhiteSpace(txtSendTo.Text.Trim()))
                {
                    Regex regexEmail = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$");
                    if (!regexEmail.Match(txtSendTo.Text).Success)
                    {
                        AlertDialog.Builder alert = new AlertDialog.Builder(this);
                        alert.SetMessage("Please enter valid email id.");
                        alert.SetNeutralButton("OK", delegate { });
                        alert.Create().Show();
                        //  Toast.MakeText(this, "Please enter valid email id.", ToastLength.Short).Show();
                        txtSendTo.RequestFocus();
                    }
                    else
                    {
                    }
                    try
                    {
                        this.progressLayout.Visibility = ViewStates.Gone;
                        var         db    = new SQLiteConnection(dbPath);
                        EmailToSend email = new EmailToSend();
                        email.EmailId       = txtSendTo.Text;
                        email.EmailTemplate = ddlEmailTemplate.SelectedItem.ToString();
                        email.EmailBody     = txtEmailTemplateContent.Text;
                        email.DateTime      = DateTime.Now;
                        DataManager objData = new DataManager();
                        objData.SaveEmailToLocal(email);
                        AlertDialog.Builder alert = new AlertDialog.Builder(this);
                        alert.SetMessage("Record has been saved successfully.");
                        alert.SetNeutralButton("OK", delegate
                        {
                            var intent = new Intent(this, typeof(MainMenuActivity));
                            StartActivity(intent);
                        });
                        alert.Create().Show();
                    }
                    catch (Exception ex)
                    {
                        Toast.MakeText(this, ex.ToString(), ToastLength.Short).Show();
                    }

                    //this.progressLayout.Visibility = ViewStates.Gone;
                    //MailMessage mail = new MailMessage();
                    //SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                    //// SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
                    //mail.From = new MailAddress("*****@*****.**");
                    //mail.To.Add(txtSendTo.Text);
                    //mail.Subject = "Car Rental Agreement";
                    //mail.Body = (txtEmailTemplateContent.Text);
                    //    SmtpServer.Port = 587;
                    //    SmtpServer.Credentials = new System.Net.NetworkCredential("*****@*****.**", "8273690066");
                    //    SmtpServer.EnableSsl = true;
                    //    SmtpServer.Send(mail);
                    //    // MessageBox.Show("mail Send");
                    //    AlertDialog.Builder alert = new AlertDialog.Builder(this);
                    //    alert.SetMessage("mail send.");
                    //    alert.SetNeutralButton("OK", delegate { });
                    //    alert.Create().Show();
                    //    //Toast.MakeText(this, "mail send", ToastLength.Short).Show();
                    //}
                    //catch (Exception ex)
                    //{

                    //}
                }

                else
                {
                    AlertDialog.Builder alert = new AlertDialog.Builder(this);
                    alert.SetMessage("Please fill all mandatory details.");
                    alert.SetNeutralButton("OK", delegate { });
                    alert.Create().Show();
                    // Toast.MakeText(this, "Please fill all mandatory details", ToastLength.Short).Show();
                }
                break;

            case Resource.Id.menu_cancel:
                //this.progressLayout.Visibility = ViewStates.Visible;
                //var intentVehicle = new Intent(this, typeof(RentFlowDriverSignatureActivity));
                //intentVehicle.PutExtra("RentRunningTrans", JsonConvert.SerializeObject(rentRunningTrans));
                //StartActivity(intentVehicle);
                break;
            }
            //Toast.MakeText(this, "Top ActionBar pressed: " + item.TitleFormatted, ToastLength.Short).Show();
            return(base.OnOptionsItemSelected(item));
        }
コード例 #20
0
 public Task SendAsync(EmailToSend email, string fromEmail = null, CancellationToken cancellation = default)
 => Task.CompletedTask;
コード例 #21
0
 public void SendEmail(EmailToSend email)
 {
     //Not doing this here
 }
コード例 #22
0
        protected override void ExecuteCrmWorkFlowActivity(CodeActivityContext context, LocalWorkflowContext localContext)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            if (localContext == null)
            {
                throw new ArgumentNullException(nameof(localContext));
            }

            EntityReference emailToSend    = EmailToSend.Get(context);
            EntityReference recipientQueue = RecipientQueue.Get(context);
            bool            sendEmail      = SendEmail.Get(context);
            bool            includeOwner   = IncludeOwner.Get(context);

            List <Entity> toList = new List <Entity>();

            Entity email = RetrieveEmail(localContext.OrganizationService, emailToSend.Id);

            if (email == null)
            {
                UsersAdded.Set(context, 0);
                return;
            }

            //Add any pre-defined recipients specified to the array
            foreach (Entity activityParty in email.GetAttributeValue <EntityCollection>("to").Entities)
            {
                toList.Add(activityParty);
            }

            bool             is2011 = Is2011(localContext.OrganizationService);
            EntityCollection users  = is2011
                ? GetQueueOwner(localContext.OrganizationService, recipientQueue.Id)
                : GetQueueMembers(localContext.OrganizationService, recipientQueue.Id);

            if (!is2011)
            {
                if (includeOwner)
                {
                    users.Entities.AddRange(GetQueueOwner(localContext.OrganizationService, recipientQueue.Id).Entities);
                }
            }

            toList = ProcessUsers(users, toList);

            //Update the email
            email["to"] = toList.ToArray();
            localContext.OrganizationService.Update(email);

            //Send
            if (sendEmail)
            {
                SendEmailRequest request = new SendEmailRequest
                {
                    EmailId       = emailToSend.Id,
                    TrackingToken = string.Empty,
                    IssueSend     = true
                };

                localContext.OrganizationService.Execute(request);
            }

            UsersAdded.Set(context, toList.Count);
        }