Ejemplo n.º 1
0
        static void ResourceFileTestInGerman()
        {
            var queue = new InMemoryMailQueue();

            var senderx = new MailSenderService(queue);

            var generator = new MailGeneratorService(queue, mailSenderService: senderx, async: false);

            var loader = new ResourceFileTemplateRepository(new DefaultResourceManagerAdapter(Templates.ResourceManager));

            loader.EnumerateTemplates(generator.Register);

            dynamic recipient = new ExpandoObject();

            recipient.email    = "*****@*****.**";
            recipient.fullname = "Bob";
            recipient.userid   = "baxtor";

            dynamic data = new ExpandoObject();

            data.link = "http://www.google.com";
            data.name = "Google";

            generator.Send(recipient, "Welcome", data, language: CultureInfo.CreateSpecificCulture("de-AT"));
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            //var md = new TableMetadata();

            //MetadataHelper.MetadataForClass(typeof(Dragon.Mail.SqlQueue.Mail), ref md);
            //var s = TSQLGenerator.BuildCreate(md);

            var queue = new InMemoryMailQueue();
            
            var senderx = new MailSenderService(queue);

            var generator = new MailGeneratorService(queue, mailSenderService: senderx, async: false);


            var loader = new FileFolderTemplateRepository(@"..\..\templates");

            loader.EnumerateTemplates(generator.Register);

            dynamic recipient = new ExpandoObject();
            recipient.email = "*****@*****.**";
            recipient.fullname = "Bob";
            recipient.userid = "baxtor";
            
            dynamic data = new ExpandoObject();
            data.link = "http://www.google.com";
            data.name = "Google";

            generator.Send(recipient, "Welcome", data);

            //while (senderx.ProcessNext())
            //{
            //}
        }
Ejemplo n.º 3
0
        public void MailMessage_is_correct_if_only_html_available()
        {
            // ARRANGE
            var queueMock = new Mock<IMailQueue>();
            queueMock.Setup(m => m.Enqueue(It.IsAny<Models.Mail>(), It.IsAny<object>()));

            var configMock = new Mock<IConfiguration>();

            var subject = new MailSenderService(queueMock.Object, configMock.Object);

            var renderedMail = new RenderedMail();
            renderedMail.Sender = new MailAddress("*****@*****.**");
            renderedMail.Receiver = new MailAddress("*****@*****.**");
            renderedMail.Subject = "foo";
            renderedMail.Body = "htmlbody";
            renderedMail.TextBody = null;

            // ACT
            var mailMessage = subject.CreateMailMessage(renderedMail);

            // ASSERT
            var html = mailMessage.AlternateViews.FirstOrDefault(x => x.ContentType.MediaType == MediaTypeNames.Text.Html);
            Assert.AreEqual("htmlbody", new StreamReader(html.ContentStream).ReadToEnd());

            var text = mailMessage.AlternateViews.FirstOrDefault(x => x.ContentType.MediaType == MediaTypeNames.Text.Plain);
            // html was transferred to plain text
            Assert.AreEqual("htmlbody", new StreamReader(text.ContentStream).ReadToEnd().Trim());
        }
Ejemplo n.º 4
0
        static void FolderTest()
        {
            var queue = new InMemoryMailQueue();

            var senderx = new MailSenderService(queue);

            var generator = new MailGeneratorService(queue, mailSenderService: senderx, async: false);


            var loader = new FileFolderTemplateRepository(@"..\..\templates");

            loader.EnumerateTemplates(generator.Register);

            dynamic recipient = new ExpandoObject();

            recipient.email    = "*****@*****.**";
            recipient.fullname = "Bob";
            recipient.userid   = "baxtor";

            dynamic data = new ExpandoObject();

            data.link = "http://www.google.com";
            data.name = "Google";

            generator.Send(recipient, "Welcome", data);
        }
Ejemplo n.º 5
0
        private void SendMailButton_Click(object sender, RoutedEventArgs e)
        {
            if (IsAllFieldsFilled())
            {
                MailSenderService mailSenderService
                    = new MailSenderService(UserNameEditor.Text, PasswordEditor.SecurePassword, MessageEditor.Text, SubjectEditor.Text);

                SentState sentState = mailSenderService.SendMail();
                ShowState(sentState);
            }
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> AcceptRequest(int Id)
        {
            var          model = _context.RegistrationRequests.FirstOrDefault(p => p.Id == Id);
            IdentityUser user  = new IdentityUser()
            {
                UserName = model.Email,
                Email    = model.Email,
            };

            string role = "";

            if (model.UserType == Utilities.UserType.TrainnerUser)
            {
                role = "User";
            }
            else
            {
                role = "SimpleUser";
            }

            var result = await _userManager.CreateAsync(user, model.Password);

            if (result.Succeeded)
            {
                await _userManager.AddToRoleAsync(user, role);
            }
            else
            {
                return(RedirectToAction("UserRequestIndex"));
            }

            model.Accept = true;

            _context.RegistrationRequests.Update(model);
            _context.SaveChanges();

            MailModel mail = new MailModel();

            mail.ToMail = new System.Collections.Generic.List <string>();
            mail.ToMail.Add(model.Email);
            mail.Subject = "Account approval";
            mail.Body    = $"Dear {model.Name} {model.SurName}, This email is to notify you that your account has been approved, you're free to login now and enjoy all the features of the website";

            MailSenderService.SendMail(mail);

            return(RedirectToAction("UserRequestIndex"));
        }
Ejemplo n.º 7
0
        public async Task <IActionResult> SendMail([FromForm] string Mail, [FromForm(Name = "Attachment")] IFormFile Attachment)
        {
            Result <string> result = new Result <string>();

            try {
                var mail = JsonConvert.DeserializeObject <Mail>(Mail);
                MailSenderService.SendMailWithAttach(mail.MailTo, mail.MailTitle, mail.MailContent, Attachment);
                result.Data = "sucess";
                return(Ok(result));
            }
            catch (Exception ex)
            {
                result.IsSuccess    = false;
                result.ErrorMessage = ex.Message;
                return(BadRequest(result));
            }
        }
Ejemplo n.º 8
0
        public async void DeleteUserRequest(int id)
        {
            var          model = _context.RegistrationRequests.FirstOrDefault(p => p.Id == id);
            IdentityUser user  = await _userManager.FindByEmailAsync(model.Email);

            await _userManager.DeleteAsync(user);

            _context.RegistrationRequests.Remove(model);
            _context.SaveChanges();

            MailModel mail = new MailModel();

            mail.ToMail.Add(model.Email);
            mail.Subject = "User Deleted";
            mail.Body    = "Your account has been deleted";

            MailSenderService.SendMail(mail);
        }
Ejemplo n.º 9
0
        private void OnSendButtonClick(object Sender, RoutedEventArgs E)
        {
            var sender = SendersList.SelectedItem as Sender;

            if (sender is null)
            {
                return;
            }

            if (!(RecipientsList.SelectedItem is Recipient recipient))
            {
                return;
            }
            if (!(ServersList.SelectedItem is Server server))
            {
                return;
            }
            if (!(MessagesList.SelectedItem is Message message))
            {
                return;
            }

            var send_service = new MailSenderService
            {
                ServerAddress = server.Address,
                ServerPort    = server.Port,
                UseSSL        = server.UseSSL,
                Login         = server.Login,
                Password      = server.Password,
            };

            try
            {
                send_service.SendMessage(sender.Address, recipient.Address, message.Subject, message.Body);
            }

            catch (SmtpException error)
            {
                MessageBox.Show(
                    "Ошибка при отправке почты" + error.Message, "Ошибка",
                    MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Моментальная отправка письма
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SendMailButton_Click(object sender, RoutedEventArgs e)
        {
            if (IsAllFieldsFilled())
            {
                TextRange textRange = new TextRange(MessageEditor.Document.ContentStart, MessageEditor.Document.ContentEnd);
                if (!string.IsNullOrEmpty(textRange.Text))
                {
                    MailSenderService mailSenderService
                        = new MailSenderService((Sender)this.SenderBox.SelectedItem, textRange.Text, "Empty subject");

                    SentState sentState
                        = mailSenderService.SendMails((IQueryable <Recipient>) this.RecipientsGrid.ItemsSource);
                    ShowState(sentState);
                }
                else
                {
                    ShowState(false, "не заполнено тело письма");
                }
            }
        }
Ejemplo n.º 11
0
        //private void BtnSend_Click(object sender, System.Windows.RoutedEventArgs e)
        //{
        //    //var sendSender = SenderList.SelectedItem as Sender;
        //    //if (sendSender is null)
        //    //{
        //    //    return;
        //    //}
        //    if (!(SenderList.SelectedItem is Sender sendSender)) return;
        //    if (!(RecipientList.SelectedItem is Recipient sendRecip)) return;
        //    if (!(Serverlist.SelectedItem is Server sendServer)) return;
        //    if (!(MessagesList.SelectedItem is Message msg)) return;

        //    var sendService = new MailSenderService
        //    {
        //        ServerAdress = sendServer.Adress,
        //        ServerPort = sendServer.Port,
        //        UseSSL = sendServer.UseSSL,
        //        Password = sendServer.Passord,
        //        Login = sendServer.Login
        //    };

        //    try
        //    {
        //        sendService.SendMail(sendSender.EmailAdress, sendRecip.EmailAdress, msg.Subject, msg.Body);
        //    }
        //    catch(SmtpException ex)
        //    {
        //        MessageBox.Show("Ошибка SMTP при отправке почты" + ex.Message,"Ошибка",MessageBoxButton.OK, MessageBoxImage.Error);
        //    }
        //    catch (System.Exception ex)
        //    {
        //        MessageBox.Show("Ошибка при отправке почты" + ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
        //    }
        //}

        private void OnSendButtonClick(object sender, RoutedEventArgs e)
        {
            if (!(SenderList.SelectedItem is Sender sendSender))
            {
                return;
            }
            if (!(RecipientList.SelectedItem is Recipient sendRecip))
            {
                return;
            }
            if (!(ServerList.SelectedItem is Server sendServer))
            {
                return;
            }
            if (!(MessagesList.SelectedItem is Message msg))
            {
                return;
            }

            var sendService = new MailSenderService
            {
                ServerAdress = sendServer.Adress,
                ServerPort   = sendServer.Port,
                UseSSL       = sendServer.UseSSL,
                Password     = sendServer.Passord,
                Login        = sendServer.Login
            };

            try
            {
                sendService.SendMessage(sendSender.EmailAdress, sendRecip.EmailAdress, msg.Subject, msg.Body);
            }
            catch (SmtpException ex)
            {
                MessageBox.Show("Ошибка SMTP при отправке почты: " + ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            catch (System.Exception ex)
            {
                MessageBox.Show("Ошибка при отправке почты: " + ex.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Ejemplo n.º 12
0
 /// <summary>
 /// Запланировать отправку письма
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void SendSheduledMail_Click(object sender, RoutedEventArgs e)
 {
     if (!this.SendMailDateTimePicker.Value.HasValue ||
         this.SendMailDateTimePicker.Value.Value <= DateTime.Now)
     {
         ShowState(false, "воспользуйтесь отправкой сразу");
     }
     else
     {
         TextRange textRange = new TextRange(MessageEditor.Document.ContentStart, MessageEditor.Document.ContentEnd);
         if (!string.IsNullOrEmpty(textRange.Text))
         {
             MailSenderService mailSenderService
                 = new MailSenderService((Sender)this.SenderBox.SelectedItem
                                         , textRange.Text, "Empty subject"
                                         , (IQueryable <Recipient>) this.RecipientsGrid.ItemsSource);
             Sheduler.AddTask(new Task(this.SendMailDateTimePicker.Value.Value
                                       , mailSenderService));
         }
     }
 }
Ejemplo n.º 13
0
        public async Task <IActionResult> DeleteRequest(int Id)
        {
            var          model = _context.RegistrationRequests.FirstOrDefault(p => p.Id == Id);
            IdentityUser user  = await _userManager.FindByEmailAsync(model.Email);

            await _userManager.DeleteAsync(user);

            _context.RegistrationRequests.Remove(model);
            _context.SaveChanges();

            MailModel mail = new MailModel();

            mail.ToMail = new System.Collections.Generic.List <string>();
            mail.ToMail.Add(model.Email);
            mail.Subject = "Account Ban";
            mail.Body    = $"Dear {model.Name} {model.SurName}, This email is to notify you that your account has been deleted. If you want to know the specific reason of the denial feel free to give us a call with the number provided on our website";

            MailSenderService.SendMail(mail);

            return(RedirectToAction("UserRequestIndex"));
        }
Ejemplo n.º 14
0
        public async Task <bool> ForgotPassword(UserFilter userFilter)
        {
            //Quên mật khẩu
            //Nếu thí sinh nhập đúng Identify và Email, hệ thống sẽ generate lại mật khẩu và gửi về email
            User user = await UOW.UserRepository.Get(userFilter);

            if (user == null)
            {
                throw new BadRequestException("Id không tồn tại");
            }
            if (!userFilter.Email.Equals(user.Email))
            {
                throw new BadRequestException("Email không đúng!");
            }
            user.Password = CryptographyExtentions.GeneratePassword();
            user.Salt     = null;
            await UOW.UserRepository.ChangePassword(user);

            MailSenderService mailSender     = new MailSenderService(user);
            Thread            sendMailThread = new Thread(new ThreadStart(mailSender.RecoveryPasswordMail));

            sendMailThread.Start();
            return(true);
        }
Ejemplo n.º 15
0
        public void Smtp_All_Credentials_IsOverwritten_ButNoOther_WhenSet()
        {
            // ARRANGE
            var queueMock = new Mock<IMailQueue>();
            queueMock.Setup(m => m.Enqueue(It.IsAny<Models.Mail>(), It.IsAny<object>()));

            var configMock = new Mock<IConfiguration>();
            configMock.Setup(m => m.GetValue(MailSenderService.APP_KEY_OVERRIDE_SMTP_USER))
                .Returns("a");
            configMock.Setup(m => m.GetValue(MailSenderService.APP_KEY_OVERRIDE_SMTP_PASSWORD))
                .Returns("c");

            var smtpMock = new Mock<ISmtpClient>();

            var subject = new MailSenderService(queueMock.Object, configMock.Object);

            var renderedMail = new RenderedMail();
            renderedMail.Sender = new MailAddress("*****@*****.**");
            renderedMail.Receiver = new MailAddress("*****@*****.**");
            renderedMail.Subject = "foo";
            renderedMail.Body = "htmlbody";
            renderedMail.TextBody = "textbody";

            // ACT
            var mailMessage = subject.ProcessInternal(renderedMail, smtpMock.Object);

            // ASSERT
            smtpMock.Verify(c => c.SetHost("example.org"), Times.Never);
            smtpMock.Verify(c => c.SetPort(1234), Times.Never);
            smtpMock.Verify(c => c.SetCredentials(null, "a", "c"), Times.Once);
            smtpMock.Verify(c => c.SetEnableSsl(It.IsAny<bool>()), Times.Never);
        }
Ejemplo n.º 16
0
        private Boolean PackageEmailContent(short role, string content, Lesson lesson, string learnerEmail, string teacherEmail)
        {
            StringBuilder EmailContent = new StringBuilder(@"
                                <td align='center' valign='top' id='templateHeader' style='background:#FFFFFF none no-repeat center/cover;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: #FFFFFF;background-image: none;background-repeat: no-repeat;background-position: center;background-size: cover;border-top: 0;border-bottom: 0;padding-top: 9px;padding-bottom: 0;'>
                        <!--[if (gte mso 9)|(IE)]>
                        <table align='center' border='0' cellspacing='0' cellpadding='0' width='600' style='width:600px;'>
                        <tr>
                        <td align='center' valign='top' width='600' style='width:600px;'>
                        <![endif]-->
                        <table align='center' border='0' cellpadding='0' cellspacing='0' width='100%' class='templateContainer' style='border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;'>
                            <tr>
                                <td valign='top' class='headerContainer' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'><table border='0' cellpadding='0' cellspacing='0' width='100%' class='mcnImageBlock' style='min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
            <tbody class='mcnImageBlockOuter'>
                        <tr>
                            <td valign='top' style='padding: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;' class='mcnImageBlockInner'>
                                <table align='left' width='100%' border='0' cellpadding='0' cellspacing='0' class='mcnImageContentContainer' style='min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                                    <tbody><tr>
                                        <td class='mcnImageContent' valign='top' style='padding-right: 9px;padding-left: 9px;padding-top: 0;padding-bottom: 0;text-align: center;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                                            
                                                
                                                    <img align='center' alt='' src='https://mcusercontent.com/29ed8676ac274685bdb472ffb/images/7502ab7a-c966-47e1-b410-93f7a449afd0.png' width='564' style='max-width: 1200px;padding-bottom: 0px;vertical-align: bottom;display: inline !important;border: 1px none;border-radius: 0%;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;' class='mcnImage'>
                                                
                                            
                                        </td>
                                    </tr>
                                </tbody></table>
                            </td>
                        </tr>
                </tbody>
            </table><table border='0' cellpadding='0' cellspacing='0' width='100%' class='mcnCodeBlock' style='border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                <tbody class='mcnTextBlockOuter'>
                    <tr>
                        <td valign='top' class='mcnTextBlockInner' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                            <div style='background-color:#ddd;margin-left:20px;margin-right:20px'>
            <span>
            ");
            string        part2        = @"</span>
</span>
</div>

            </td>
        </tr>
    </tbody>
</table><table border='0' cellpadding='0' cellspacing='0' width='100%' class='mcnTextBlock' style='min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
    <tbody class='mcnTextBlockOuter'>
        <tr>
            <td valign='top' class='mcnTextBlockInner' style='padding-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                <!--[if mso]>
				<table align='left' border='0' cellspacing='0' cellpadding='0' width='100%' style='width:100%;'>
				<tr>
				<![endif]-->
			    
				<!--[if mso]>
				<td valign='top' width='600' style='width:600px;'>
				<![endif]-->
                <table align='left' border='0' cellpadding='0' cellspacing='0' style='max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;' width='100%' class='mcnTextContentContainer'>
                    <tbody><tr>
                        
                        <td valign='top' class='mcnTextContent' style='padding: 0px 18px 9px;color: #4CAAD8;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: break-word;font-family: Helvetica;font-size: 16px;line-height: 150%;text-align: left;'>
                        
                            <h1 style='display: block;margin: 0;padding: 0;color: #202020;font-family: Helvetica;font-size: 26px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: normal;text-align: left;'><span style='font-size:16px'><span style='color:#0000CD'>This is an automated email - please do not reply directly to this email. Please click button to reply!</span></span></h1>

                        </td>
                    </tr>
                </tbody></table>
				<!--[if mso]>
				</td>
				<![endif]-->
                
				<!--[if mso]>
				</tr>
				</table>
				<![endif]-->
            </td>
        </tr>
    </tbody>
</table><table border='0' cellpadding='0' cellspacing='0' width='100%' class='mcnButtonBlock' style='min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
    <tbody class='mcnButtonBlockOuter'>
        <tr>
            <td style='padding-top: 0;padding-right: 18px;padding-bottom: 18px;padding-left: 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;' valign='top' align='center' class='mcnButtonBlockInner'>
                <table border='0' cellpadding='0' cellspacing='0' width='100%' class='mcnButtonContentContainer' style='border-collapse: separate !important;border: 1px none;border-radius: 9px;background-color: #2BAADF;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                    <tbody>
                        <tr>
                            <td align='center' valign='middle' class='mcnButtonContent' style='font-family: Arial;font-size: 16px;padding: 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>";

            string part4 = @"                            </td>
                        </tr>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table></td>
                                        </tr>
                                    </table>
                                    <!--[if (gte mso 9)|(IE)]>
                                    </td>
                                    </tr>
                                    </table>
                                    <![endif]-->
                                </td>
                            </tr>
                            <tr>
                                <td align='center' valign='top' id='templateBody' style='background:#FFFFFF none no-repeat center/cover;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: #FFFFFF;background-image: none;background-repeat: no-repeat;background-position: center;background-size: cover;border-top: 0;border-bottom: 0;padding-top: 9px;padding-bottom: 9px;'>
                                    <!--[if (gte mso 9)|(IE)]>
                                    <table align='center' border='0' cellspacing='0' cellpadding='0' width='600' style='width:600px;'>
                                    <tr>
                                    <td align='center' valign='top' width='600' style='width:600px;'>
                                    <![endif]-->
                                    <table align='center' border='0' cellpadding='0' cellspacing='0' width='100%' class='templateContainer' style='border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;'>
                                        <tr>
                                            <td valign='top' class='bodyContainer' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'></td>
                                        </tr>
                                    </table>
                                    <!--[if (gte mso 9)|(IE)]>
                                    </td>
                                    </tr>
                                    </table>
                                    <![endif]-->
                                </td>
                            </tr>
                            <tr>
                                <td align='center' valign='top' id='templateFooter' style='background:#FAFAFA none no-repeat center/cover;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;background-color: #FAFAFA;background-image: none;background-repeat: no-repeat;background-position: center;background-size: cover;border-top: 0;border-bottom: 0;padding-top: 9px;padding-bottom: 9px;'>
                                    <!--[if (gte mso 9)|(IE)]>
                                    <table align='center' border='0' cellspacing='0' cellpadding='0' width='600' style='width:600px;'>
                                    <tr>
                                    <td align='center' valign='top' width='600' style='width:600px;'>
                                    <![endif]-->
                                    <table align='center' border='0' cellpadding='0' cellspacing='0' width='100%' class='templateContainer' style='border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;max-width: 600px !important;'>
                                        <tr>
                                            <td valign='top' class='footerContainer' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'><table border='0' cellpadding='0' cellspacing='0' width='100%' class='mcnDividerBlock' style='min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;table-layout: fixed !important;'>
    <tbody class='mcnDividerBlockOuter'>
        <tr>
            <td class='mcnDividerBlockInner' style='min-width: 100%;padding: 10px 18px 25px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                <table class='mcnDividerContent' border='0' cellpadding='0' cellspacing='0' width='100%' style='min-width: 100%;border-top: 2px solid #EEEEEE;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                    <tbody><tr>
                        <td style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                            <span></span>
                        </td>
                    </tr>
                </tbody></table>
<!--            
                <td class='mcnDividerBlockInner' style='padding: 18px;'>
                <hr class='mcnDividerContent' style='border-bottom-color:none; border-left-color:none; border-right-color:none; border-bottom-width:0; border-left-width:0; border-right-width:0; margin-top:0; margin-right:0; margin-bottom:0; margin-left:0;' />
-->
            </td>
        </tr>
    </tbody>
</table><table border='0' cellpadding='0' cellspacing='0' width='100%' class='mcnTextBlock' style='min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
    <tbody class='mcnTextBlockOuter'>
        <tr>
            <td valign='top' class='mcnTextBlockInner' style='padding-top: 9px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;'>
                <!--[if mso]>
				<table align='left' border='0' cellspacing='0' cellpadding='0' width='100%' style='width:100%;'>
				<tr>
				<![endif]-->
			    
				<!--[if mso]>
				<td valign='top' width='600' style='width:600px;'>
				<![endif]-->
                <table align='left' border='0' cellpadding='0' cellspacing='0' style='max-width: 100%;min-width: 100%;border-collapse: collapse;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;' width='100%' class='mcnTextContentContainer'>
                    <tbody><tr>
                        
                        <td valign='top' class='mcnTextContent' style='padding-top: 0;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;word-break: break-word;color: #656565;font-family: Helvetica;font-size: 12px;line-height: 150%;text-align: center;'>
                        
                            <h2 style='text-align: left;display: block;margin: 0;padding: 0;color: #202020;font-family: Helvetica;font-size: 22px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: normal;'><strong><span style='font-size:20px'><img data-file-id='1270491' height='88' src='https://mcusercontent.com/29ed8676ac274685bdb472ffb/images/ed52b6cd-88f5-41f6-9dec-fd071cf64a60.png' style='border: 0px;width: 91px;height: 88px;margin: 0px;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;' width='91'><br>
ABLE MUSIC STUDIO</span><br>
<br>
<br>
<font size='4'>Central AKL Branch</font></strong></h2>

<div style='text-align: left;'><strong>Address:</strong>&nbsp;Level 2,&nbsp;953 New North Rd, Mt Albert, Auckland<br>
<strong>Ph</strong><strong>one:</strong>&nbsp; &nbsp;09-846 9618<br>
<strong>Fax:</strong>&nbsp; 09-846 9848<br>
<strong>Email:</strong>&nbsp;<a href='mailto:[email protected]' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decoration: underline;'>[email protected]</a></div>

<h2 style='text-align: left;display: block;margin: 0;padding: 0;color: #202020;font-family: Helvetica;font-size: 22px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: normal;'><strong><font size='4'>East AKL Branch</font></strong></h2>

<div style='text-align: left;'><strong>Add</strong><strong>ress</strong><strong>:</strong>&nbsp;2/ 550 Chapel Rd, Botany, Auckland<br>
<strong>Ph</strong><strong>one</strong><strong>:</strong>&nbsp; 09-274 9618<br>
<strong>Fax:</strong>&nbsp; 09-274 9648<br>
<strong>Email:</strong>&nbsp;<a href='mailto:[email protected]' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decoration: underline;'>[email protected]</a></div>

<h2 style='text-align: left;display: block;margin: 0;padding: 0;color: #202020;font-family: Helvetica;font-size: 22px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: normal;'><strong><font color='#2a2a2a' size='4'>Auckland City Branch</font></strong></h2>

<div style='text-align: left;'><font size='2'><strong>Add</strong><strong>ress</strong><strong>:</strong>&nbsp;</font><font size='2'>Level 5, 109 Queens St, Auckland CBD</font><br>
<strong>Ph</strong><strong>one</strong><strong>:</strong>&nbsp; 09-377 9618<br>
<strong>​Fax:&nbsp;</strong>​09-377 9648<br>
<strong>Email:</strong>&nbsp;<a href='mailto:[email protected]' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decoration: underline;'>[email protected]</a></div>

<h2 style='text-align: left;display: block;margin: 0;padding: 0;color: #202020;font-family: Helvetica;font-size: 22px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: normal;'><strong><font size='4'>Henderson Branch</font></strong></h2>

<div style='text-align: left;'><strong>Address:</strong>&nbsp;Level 2, 34 Te Pai Place, Henderson, Auckland<br>
<strong>Ph</strong><strong>one:</strong>&nbsp; &nbsp;09-835 9618<br>
<strong>Fax:</strong>&nbsp; 09-835 9648<br>
<strong>Email:</strong><font size='1'>&nbsp;</font><a href='http://[email protected]/' target='_blank' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decoration: underline;'><font size='2'>[email protected]</font><font size='2'>&nbsp;</font></a></div>

<h2 style='text-align: left;display: block;margin: 0;padding: 0;color: #202020;font-family: Helvetica;font-size: 22px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: normal;'><strong><font size='4'><font size='4'>North Shore Branch</font></font></strong></h2>

<div style='text-align: left;'><strong>Add</strong><strong>ress</strong><strong>:&nbsp;</strong><font size='2'>Level 2, 8C Link Drive, Sunnynook, Auckland</font><br>
<strong>Ph</strong><strong>one</strong><strong>:&nbsp;</strong><font size='2'>09-444 6888</font><br>
<strong>Fax:&nbsp;</strong><font size='2'>09-444 9648</font><br>
<strong><font size='2'>Email</font><font size='2'>:&nbsp;</font></strong><a href='mailto:[email protected]' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decoration: underline;'><font size='2'>[email protected]</font></a></div>

<h2 style='text-align: left;display: block;margin: 0;padding: 0;color: #202020;font-family: Helvetica;font-size: 22px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: normal;'><strong><font size='4'><font size='4'>Epsom Branch</font></font></strong></h2>

<div style='text-align: left;'><strong>Add</strong><strong>ress</strong><strong>:&nbsp;</strong><font size='2'>Level 2, 123 Manukau Road, Epsom, Auckland</font><br>
<strong>Ph</strong><strong>one</strong><strong>:&nbsp;</strong><font size='2'>09-522 9618&nbsp;</font><br>
<strong>Fax:&nbsp;</strong><font size='2'>09-522 9648</font><br>
<strong><font size='2'>Email</font><font size='2'>:&nbsp;</font></strong><font size='2'><a href='mailto:[email protected]' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decoration: underline;'>[email protected]</a></font><br>
<br>
<strong><font size='4'><font size='4'>Auckland Music Academy</font></font></strong><br>
<strong>Add</strong><strong>ress</strong><strong>:&nbsp;</strong>19 William Roberts Rd, Pakuranga, Auckland<br>
<strong>Ph</strong><strong>one</strong><strong>:&nbsp;</strong><font size='2'>09-577 3311</font><br>
<strong><font size='2'>Email</font><font size='2'>:<u>&nbsp;info</u></font></strong><u><font size='2'><a href='mailto:[email protected]' style='mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #656565;font-weight: normal;text-decoration: underline;'>@</a>nzama.co.nz</font></u><br>
<br>
<br>
<em>Copyright © 2020&nbsp; ABLE MUSIC STUDIO All rights reserved.</em></div>";
            string title = "Message For Able Music Studio Lesson(" + lesson.BeginTime.Value.ToString("MM/dd/yyyy H:mm") + ")";


            string userConfirmUrlPrefix = _configuration.GetSection("UrlPrefixMessage").Value;
            string photoUrlPrefix       = _configuration.GetSection("UrlPrefixPhoto").Value;

            string confirmURLTeacher = userConfirmUrlPrefix + "Messgeboard/1/" + lesson.LessonId + "/" + lesson.TeacherId;
            string confirmURLStudent = userConfirmUrlPrefix + "Messgeboard/4/" + lesson.LessonId + "/" + lesson.LearnerId;


            //role  1:teacher 3:Receptionist,manager,principal 4:learner
            try
            {
                if (role == 4) //Teacher  Send to student
                {
                    var teacher = _ablemusicContext.Teacher.FirstOrDefault(t => t.TeacherId == lesson.TeacherId);

                    string teacherImg;
                    if (teacher != null && teacher.Photo != null)
                    {
                        teacherImg = photoUrlPrefix + teacher.Photo;
                    }
                    else
                    {
                        teacherImg = "https://d3fa68hw0m2vcc.cloudfront.net/931/213379411.jpeg";
                    }

                    var teacherContent = "<img src='" + teacherImg + "' alt='icon' style='max-width: 60px;border-radius: 60%;margin-left: 10px;border: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;'> "
                                         + "<span style='margin-left:20px;margin-right:20px;font:12px/1 'Merriweather', arial, sans-serif'><div style='color:blue'>"
                                         + teacher.FirstName + " " + teacher.LastName + "</div>" + content;
                    EmailContent.Append(teacherContent);
                    EmailContent.Append(part2);
                    var urlTeacher =
                        "<a class='mcnButton ' title='Reply' href='" + confirmURLTeacher + "' target='_blank' style='font-weight: bold;letter-spacing: normal;line-height: 100%;text-align: center;text-decoration: none;color: #FFFFFF;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;display: block;'>Reply</a>";
                    EmailContent.Append(urlTeacher);
                    EmailContent.Append(part4);
                    return(MailSenderService.SendMail(teacherEmail, title, EmailContent.ToString()));
                }
                else if (role == 1) //Student Send to Teacher
                {
                    var learner        = _ablemusicContext.Learner.FirstOrDefault(t => t.LearnerId == lesson.LearnerId);
                    var studentContent = "<img src='http://www.ablemusic.co.nz/uploads/4/4/4/0/44407777/2908727_orig.jpg' alt='icon' style='max-width: 60px;border-radius: 60%;margin-left: 10px;border: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;'> "
                                         + "<span style='margin-left:20px;margin-right:20px;font:12px/1 'Merriweather', arial, sans-serif'><div style='color:blue'>"
                                         + learner.FirstName + " " + learner.LastName + "</div>" + content;
                    EmailContent.Append(studentContent);
                    EmailContent.Append(part2);
                    var urlStudent =
                        "<a class='mcnButton ' title='Reply' href='" + confirmURLStudent + "' target='_blank' style='font-weight: bold;letter-spacing: normal;line-height: 100%;text-align: center;text-decoration: none;color: #FFFFFF;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;display: block;'>Reply</a>";
                    EmailContent.Append(urlStudent);
                    EmailContent.Append(part4);
                    return(MailSenderService.SendMail(learnerEmail, title, EmailContent.ToString()));
                }
                else
                {
                    var allContent = "<img src='" + "http://www.gradspace.org:8888/assets/images/Avatar/able.png" + "' alt='icon' style='max-width: 60px;border-radius: 60%;margin-left: 10px;border: 0;height: auto;outline: none;text-decoration: none;-ms-interpolation-mode: bicubic;'> "
                                     + "<span style='margin-left:20px;margin-right:20px;font:12px/1 'Merriweather', arial, sans-serif'><div style='color:blue'>"
                                     + "ABLE MUSIC STUDIO RECEIPTIONIST" + "</div>" + content;
                    EmailContent.Append(allContent);
                    EmailContent.Append(part2);


                    var urlTeacher =
                        "<a class='mcnButton ' title='Reply' href='" + confirmURLTeacher + "' target='_blank' style='font-weight: bold;letter-spacing: normal;line-height: 100%;text-align: center;text-decoration: none;color: #FFFFFF;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;display: block;'>Reply</a>";
                    var urlLearner =
                        "<a class='mcnButton ' title='Reply' href='" + confirmURLStudent + "' target='_blank' style='font-weight: bold;letter-spacing: normal;line-height: 100%;text-align: center;text-decoration: none;color: #FFFFFF;mso-line-height-rule: exactly;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;display: block;'>Reply</a>";

                    // EmailContent.Append(urlTeacher);
                    // EmailContent.Append(part4);
                    var teacherContent = EmailContent + urlTeacher + part4;
                    var learnerContent = EmailContent + urlLearner + part4;
                    if (MailSenderService.SendMail(learnerEmail, title, learnerContent) == false)
                    {
                        return(false);
                    }
                    return(MailSenderService.SendMail(teacherEmail, title, teacherContent));
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Ejemplo n.º 17
0
 private void SendNotification(object sender, NotificationEventArgs e)
 {
     Task mailTask = MailSenderService.SendMailAsync(e.mailTo, e.mailTitle, e.mailContent, e.remindLogId);
 }
Ejemplo n.º 18
0
        private void BtnSendEmail_Click(object sender, RoutedEventArgs e)
        {
            var SendService = new MailSenderService();

            // Givers
            List <string> listStrMails = new List <string>();

            listStrMails.Add(tbxSender.Text);

            // Sender
            string strSender = tbxSender.Text;
            var    password  = passwordBox.SecurePassword;

            // Email
            string title = txtBxEmailTitle.Text; // Email title / Тема
            //string body = txtBxEmailBody.Text;   // Email body / Текст
            string body;

            #region RichTextBox
            // Create Stream for text
            using (var stream = new MemoryStream(100))
            {
                // Get text from RichTextBox
                TextRange range = new TextRange(rchTxtBxEmailBody.Document.ContentStart,
                                                rchTxtBxEmailBody.Document.ContentEnd);


                // Save text to stream
                range.Save(stream, DataFormats.Text);

                // Set seek to begin
                stream.Seek(0, SeekOrigin.Begin);

                // Create Reader from stream
                var reader = new StreamReader(stream);

                // Convert stream to string
                body = reader.ReadToEnd();
            }
            body = body.Trim();

            if (body == string.Empty)
            {
                var eW = new ErrorWindow("Письмо не заполнено, переход в редактор писем.");
                eW.ShowDialog();
                MainTabControl.SelectedIndex = 2;
                return;
            }

            #endregion

            // every time null
            if (lcSmtpServer.SelectedItem == null)
            {
                var eW = new ErrorWindow("Smtp-server не указан.");
                eW.ShowDialog();
                MainTabControl.SelectedIndex = 0;
                return;
            }
            if (!(lcSmtpServer.SelectedItem is Server smtp))
            {
                var eW = new ErrorWindow("Ошибка в данных, передан не smtp-server.");
                eW.ShowDialog();
                MainTabControl.SelectedIndex = 0;
                return;
            }

            string FullAddress = smtp.FullAddress;
            var    arr         = FullAddress.Split(':');

            StringBuilder strB = new StringBuilder();

            foreach (var str in arr)
            {
                strB.Append(str);
            }
            string smtpUrl = strB.ToString(0, strB.Length - arr.Last().Length);
            int    smtpPort;

            if (!(int.TryParse(arr.Last(), out smtpPort)))
            {
                var eW = new ErrorWindow(string.Format(
                                             "Порт smpt сервера {0} указан неверно.", smtpUrl));
                return;
            }


            // Времменно отключена отправка для тестирования
            //return;

            try
            {
                var results = SendService.SmtpSendMessages(strSender, password,
                                                           smtpUrl, smtpPort, title, body, listStrMails);


                for (int i = 0; i < results.Count; i++)
                {
                    if (!results[i])
                    {
                        var eW = new ErrorWindow(string.Format(
                                                     "Ошибка письмо до {0} не отправлено.", listStrMails[i]));
                        eW.ShowDialog();
                    }
                }

                SendEndWindow sew = new SendEndWindow();
                sew.ShowDialog();
            }
            catch (ArgumentException ae)
            {
                string errMsg = string.Empty;
                if (ae.ParamName == "from")
                {
                    errMsg = "Email адрес отправителя не указан.";
                }
                else
                {
                    throw;
                }

                var eW = new ErrorWindow(errMsg);
                eW.ShowDialog();
            }
            catch (FormatException fe)
            {
                var eW = new ErrorWindow(fe.Message);
                eW.ShowDialog();
            }
        }
Ejemplo n.º 19
0
 public IActionResult ContactUs(MailModel model)
 {
     model.Subject = "Contact Us";
     MailSenderService.SendMail(model);
     return(RedirectToAction("ContactUs"));
 }
Ejemplo n.º 20
0
        public void Recipient_is_overridden_if_set()
        {
            // ARRANGE
            var queueMock = new Mock<IMailQueue>();
            queueMock.Setup(m => m.Enqueue(It.IsAny<Models.Mail>(), It.IsAny<object>()));

            var configMock = new Mock<IConfiguration>();
            configMock.Setup(m => m.GetValue(MailSenderService.APP_KEY_OVERRIDE_RECIPIENT))
                .Returns("*****@*****.**");

            var smtpMock = new Mock<ISmtpClient>();

            var subject = new MailSenderService(queueMock.Object, configMock.Object);

            var renderedMail = new RenderedMail();
            renderedMail.Sender = new MailAddress("*****@*****.**");
            renderedMail.Receiver = new MailAddress("*****@*****.**");
            renderedMail.Subject = "foo";
            renderedMail.Body = "htmlbody";
            renderedMail.TextBody = "textbody";

            // ACT
            var mailMessage = subject.ProcessInternal(renderedMail, smtpMock.Object);


            // ASSERT
            smtpMock.Verify(c => c.Send(
                It.Is<MailMessage>(m =>
                    m.To.Count == 1
                    && m.To.First().Address == "*****@*****.**")),
                Times.Once);
        }
Ejemplo n.º 21
0
        public async Task <IActionResult> PutInvoiceWaitingConfirm([FromBody] InvoiceWaitingConfirmViewModel invoiceWaitingConfirmViewModel)
        {
            var result = new Result <string>();
            InvoiceWaitingConfirm invoiceWaitingConfirm       = new InvoiceWaitingConfirm();
            InvoiceWaitingConfirm invoiceWaitingConfirmUpdate = new InvoiceWaitingConfirm();
            List <Invoice>        activeInvoices = new List <Invoice>();
            Invoice existInvoice = new Invoice();
            Learner learner      = new Learner();

            _mapper.Map(invoiceWaitingConfirmViewModel, invoiceWaitingConfirm);
            try
            {
                invoiceWaitingConfirmUpdate = await _ablemusicContext.InvoiceWaitingConfirm.
                                              Where(i => (i.InvoiceNum == invoiceWaitingConfirm.InvoiceNum && i.IsActivate == 1)).FirstOrDefaultAsync();

                activeInvoices = await _ablemusicContext.Invoice.Where(i => (i.IsActive == 1 || i.IsActive == null) && i.InvoiceNum == invoiceWaitingConfirm.InvoiceNum).ToListAsync();
            }
            catch (Exception ex)
            {
                result.IsSuccess    = false;
                result.IsFound      = false;
                result.ErrorMessage = ex.Message;
                return(NotFound(result));
            }

            if (invoiceWaitingConfirmUpdate == null)
            {
                result.IsSuccess    = false;
                result.IsFound      = false;
                result.ErrorMessage = "invoice waiting id not found";
                return(NotFound(result));
            }
            if (invoiceWaitingConfirmUpdate.IsActivate == 0)
            {
                result.IsSuccess    = false;
                result.ErrorMessage = "The provided invoice id is not active";
                return(BadRequest(result));
            }
            if (activeInvoices.Count > 0 && activeInvoices.FirstOrDefault().PaidFee > 0)
            {
                result.IsSuccess    = false;
                result.ErrorMessage = "The provided invoice is already paid";
                return(BadRequest(result));
            }

            invoiceWaitingConfirmUpdate.IsActivate = 0;
            invoiceWaitingConfirm.IsConfirmed      = 1;
            invoiceWaitingConfirm.WaitingId        = 0;
            invoiceWaitingConfirm.IsPaid           = 0;
            invoiceWaitingConfirm.IsActivate       = 1;
            invoiceWaitingConfirm.IsEmailSent      = 0;
            invoiceWaitingConfirm.CreatedAt        = toNZTimezone(DateTime.UtcNow);
            //for patch
            invoiceWaitingConfirm.EndDate = invoiceWaitingConfirmUpdate.EndDate;
            invoiceWaitingConfirm.DueDate = invoiceWaitingConfirmUpdate.DueDate;
            //
            Invoice invoice = new Invoice
            {
                InvoiceNum            = invoiceWaitingConfirm.InvoiceNum,
                LessonFee             = invoiceWaitingConfirm.LessonFee,
                ConcertFee            = invoiceWaitingConfirm.ConcertFee,
                NoteFee               = invoiceWaitingConfirm.NoteFee,
                Other1Fee             = invoiceWaitingConfirm.Other1Fee,
                Other2Fee             = invoiceWaitingConfirm.Other2Fee,
                Other3Fee             = invoiceWaitingConfirm.Other3Fee,
                LearnerId             = invoiceWaitingConfirm.LearnerId,
                LearnerName           = invoiceWaitingConfirm.LearnerName,
                BeginDate             = invoiceWaitingConfirm.BeginDate,
                EndDate               = invoiceWaitingConfirm.EndDate,
                TotalFee              = invoiceWaitingConfirm.TotalFee,
                DueDate               = invoiceWaitingConfirm.DueDate,
                PaidFee               = invoiceWaitingConfirm.PaidFee,
                OwingFee              = invoiceWaitingConfirm.OwingFee,
                CreatedAt             = invoiceWaitingConfirm.CreatedAt,
                IsPaid                = invoiceWaitingConfirm.IsPaid,
                TermId                = invoiceWaitingConfirm.TermId,
                CourseInstanceId      = invoiceWaitingConfirm.CourseInstanceId,
                GroupCourseInstanceId = invoiceWaitingConfirm.GroupCourseInstanceId,
                LessonQuantity        = invoiceWaitingConfirm.LessonQuantity,
                CourseName            = invoiceWaitingConfirm.CourseName,
                ConcertFeeName        = invoiceWaitingConfirm.ConcertFeeName,
                LessonNoteFeeName     = invoiceWaitingConfirm.LessonNoteFeeName,
                Other1FeeName         = invoiceWaitingConfirm.Other1FeeName,
                Other2FeeName         = invoiceWaitingConfirm.Other2FeeName,
                Other3FeeName         = invoiceWaitingConfirm.Other3FeeName,
                Comment               = invoiceWaitingConfirm.Comment,
                IsActive              = 1
            };

            if (activeInvoices.Count > 0)
            {
                foreach (var activeInvoice in activeInvoices)
                {
                    activeInvoice.IsActive = 0;
                }
            }

            try
            {
                await _ablemusicContext.SaveChangesAsync();

                await _ablemusicContext.InvoiceWaitingConfirm.AddAsync(invoiceWaitingConfirm);

                await _ablemusicContext.Invoice.AddAsync(invoice);

                await _ablemusicContext.SaveChangesAsync();

                learner = await _ablemusicContext.Learner.Where(l => l.LearnerId == invoice.LearnerId).FirstOrDefaultAsync();

                if (learner == null)
                {
                    result.IsSuccess    = false;
                    result.IsFound      = false;
                    result.ErrorMessage = "learner not found";
                    return(NotFound(result));
                }
            }
            catch (Exception ex)
            {
                result.IsSuccess    = false;
                result.ErrorMessage = ex.Message;
                return(BadRequest(result));
            }

            var invoicePDFGeneratorService = new InvoicePDFGeneratorService(invoice, _log);

            invoicePDFGeneratorService.SavePDF();

            //sending Email
            string mailTitle             = "Invoice";
            string mailContent           = MailContentGenerator(invoiceWaitingConfirmUpdate);
            Task   learnerMailSenderTask = MailSenderService.SendMailUpdateInvoiceWaitingTableAsync(learner.Email, mailTitle, mailContent, invoiceWaitingConfirmUpdate.WaitingId);

            return(Ok(result));
        }