Exemple #1
0
 private void SetSentimentProps(EmailInformation email)
 {
     if (email.SentimentScore > 0.75)
     {
         email.SentimentCss  = "positive";
         email.SentimentText = "Really positive";
         return;
     }
     if (email.SentimentScore > 0.5 && email.SentimentScore <= 0.75)
     {
         email.SentimentCss  = "mild-positive";
         email.SentimentText = "Somewhat positive";
         return;
     }
     if (email.SentimentScore == 0.5)
     {
         email.SentimentCss  = "neutral";
         email.SentimentText = "Neutral";
         return;
     }
     if (email.SentimentScore < 0.5 && email.SentimentScore > 0.25)
     {
         email.SentimentCss  = "mild-negative";
         email.SentimentText = "Mildly negative";
         return;
     }
     email.SentimentCss  = "negative";
     email.SentimentText = "Really negative";
 }
 /// <summary>
 /// 系统发送 站内信、邮件、短信
 /// </summary>
 /// <param name="title">标题</param>
 /// <param name="content">内容</param>
 /// <param name="recUserId">收件人</param>
 /// <param name="sendFlag">发送方式
 /// <para>0:站内信;</para>
 /// <para>1:邮件;</para>
 /// <para>2:短信;</para>
 /// <para>11:站内信、邮件;</para>
 /// <para>22:站内信、短信;</para>
 /// <para>33:邮件、短信;</para>
 /// <para>99:站内信、邮件、短信;</para>
 /// </param>
 public static void SendMessage(string title, string content, int[] recUserId, int sendFlag, int tenantId)
 {
     if (recUserId.Length == 0 || string.IsNullOrWhiteSpace(title) || string.IsNullOrWhiteSpace(content))
     {
         return;
     }
     if (sendFlag == 0 || sendFlag == 99 || sendFlag == 11 || sendFlag == 22)
     {
         SendUserMessage(title, content, recUserId, tenantId);
     }
     if (sendFlag == 1 || sendFlag == 99 || sendFlag == 11 || sendFlag == 33)
     {
         var userlist = GetUserList(recUserId);
         EmailInformation emailinf = new EmailInformation();
         emailinf.ToList   = userlist.Where(p => !string.IsNullOrWhiteSpace(p.Email)).Select(p => p.Email).ToList();
         emailinf.SendFlag = 1;
         emailinf.Subject  = title;
         //emailinf.mailName = mailName;
         emailinf.Context  = content.Replace("/[urllanguage]", "http://" + System.Web.HttpContext.Current.Request.Url.Authority + "/" + System.Threading.Thread.CurrentThread.CurrentCulture.ToString());
         emailinf.UserName = Email_Username;
         emailinf.PassWord = Email_Password;
         //接收邮件服务器
         emailinf.From = Email_From;
         //发送邮件服务器
         emailinf.Host = Email_Host;
         //端口
         emailinf.IPort = Convert.ToInt32(Email_IPort);
         new RabbitMQHelper(Rabbit_EmailAddress, Rabbit_userName, Rabbit_password, Rabbit_SendEmail,
                            Rabbit_Emailqueue).SendMessage(emailinf);
     }
     if (sendFlag == 2 || sendFlag == 99 || sendFlag == 22 || sendFlag == 33)
     {
         ;//发送短信
     }
 }
Exemple #3
0
        public EmailResult SendEmail(string attachmentLocation, EmailInformation emailInfo)
        {
            MailMessage msg = new MailMessage(from: emailInfo.FromEmail, to: emailInfo.ToEmail, subject: "Your parking pass", body: null);

            msg.Attachments.Add(new Attachment(attachmentLocation));
            MimeMessage mimeMsg      = MimeMessage.CreateFromMailMessage(msg);
            var         raw          = Base64UrlEncode(mimeMsg.ToString());
            var         gmailMessage = new Message {
                Raw = raw
            };
            var gmailSendRequest = gmailService.Users.Messages.Send(gmailMessage, "me");

            try
            {
                Message gmailMessageSent = gmailSendRequest.Execute();
                return(new EmailResult {
                    Success = true
                });
            }
            catch (Exception e)
            {
                return(new EmailResult
                {
                    Success = false,
                    ErrorMessage = e.Message
                });
            }
        }
Exemple #4
0
        public async Task <ActionResult> SendEmailToCustomer(EmailInformation emailInformation)
        {
            var currentUsername   = User.Identity.Name;
            var currentUser       = db.Users.Where(m => m.UserName == currentUsername).Select(m => m.Id).FirstOrDefault();
            var employee          = db.Employees.Where(m => m.ApplicationUserId == currentUser).Select(m => m.Id).FirstOrDefault();
            var dogPickup         = db.MyPickups.Where(m => m.EmployeeId == employee).OrderByDescending(m => m.Id).FirstOrDefault();
            var dogOwner          = db.Dogs.Where(d => d.Id == dogPickup.DogId).Select(d => d.CustomerId).FirstOrDefault();
            var customer          = db.Customers.Where(c => c.Id == dogOwner).FirstOrDefault();
            var customerEmail     = customer.Email;
            var customerFirstName = customer.FirstName;
            var customerLastName  = customer.LastName;

            var currentEmployee          = db.Employees.Where(m => m.ApplicationUserId == currentUser).FirstOrDefault();
            var currentEmployeeEmail     = currentEmployee.Email;
            var currentEmployeeFirstName = currentEmployee.FirstName;
            var currentEmployeeLastName  = currentEmployee.LastName;
            var apiKey  = Environment.GetEnvironmentVariable("SENDGRID_API_KEY");
            var client  = new SendGridClient(apiKey);
            var subject = emailInformation.Subject;
            var message = emailInformation.Message;
            var msg     = new SendGridMessage()
            {
                From             = new EmailAddress(currentEmployeeEmail, (currentEmployeeFirstName + "" + currentEmployeeLastName)),
                Subject          = subject,
                PlainTextContent = "Elmwood is the best place in the world to me",
                HtmlContent      = message
            };

            msg.AddTo(new EmailAddress(customerEmail, (customerFirstName + customerLastName)));
            var response = await client.SendEmailAsync(msg);

            return(View());
        }
    protected void Page_Load(object sender, EventArgs e)
    {
        string    url  = Request.Url.ToString();
        ArrayList list = new ArrayList();
        string    str  = string.Empty;

        if (Request.HttpMethod == "GET")
        {
            if (url.IndexOf("status") != -1)
            {
                string query = Request.QueryString["status"].ToString();
                if (query.ToUpper() == "ALL")
                {
                    DataSet ds    = SqlHelper.GetEmailInformation();
                    int     count = ds.Tables[0].Rows.Count;
                    for (int i = 0; i < count; i++)
                    {
                        EmailInformation email = new EmailInformation();
                        email.Level        = ds.Tables[0].Rows[i]["level"].ToString();
                        email.EmailAddress = ds.Tables[0].Rows[i]["emailAddress"].ToString();

                        list.Add(email);
                    }
                }
            }
        }
        else if (Request.HttpMethod == "POST")
        {
            string oper = Request.Form["oper"].ToString();

            if (oper == "edit")
            {
                string level        = Request.Form["Level"].ToString();
                string emailAddress = Request.Form["EmailAddress"].ToString();
                SqlHelper.UpdateEmailInformation(level, emailAddress);
            }
            else if (oper == "del")
            {
                string level = Request.Form["name"].ToString();
                SqlHelper.DeleteEmailInformation(level);
            }
            else if (oper == "add")
            {
                string level        = Request.Form["Level"].ToString();
                string emailAddress = Request.Form["EmailAddress"].ToString();
                SqlHelper.InsertEmailInformation(level, emailAddress);
            }
        }

        JavaScriptSerializer json = new JavaScriptSerializer();

        str = json.Serialize(list);

        Response.Write(str);
        Response.End();
        return;
    }
        public Attachment CreateAttachment(EmailInformation emailInformation)
        {
            var eventToSend = emailInformation.CurrentEvent;

            var startDate = eventToSend.StartDate.GetValueOrDefault().ToUniversalTime();
            var endDate   = startDate.Add(TimeSpan.FromHours(4));

            //Build attachment
            var stringBuilder = new StringBuilder();

            stringBuilder.AppendLine("BEGIN:VCALENDAR");
            stringBuilder.AppendLine("PRODID:-//Invitation");
            stringBuilder.AppendLine("VERSION:2.0");
            stringBuilder.AppendLine("METHOD:REQUEST");

            stringBuilder.AppendLine("BEGIN:VEVENT");
            stringBuilder.AppendLine("SUMMARY;LANGUAGE=en-us:" + eventToSend.Title);
            stringBuilder.AppendLine(String.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", startDate));     //Verify if the time is local time
            stringBuilder.AppendLine(String.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
            stringBuilder.AppendLine(String.Format("DTEND:{0:yyyyMMddTHHmmssZ}", endDate));
            stringBuilder.AppendLine(String.Format("LOCATION: {0}", eventToSend.Location));
            stringBuilder.AppendLine(String.Format("UID:{0}", Guid.NewGuid()));
            stringBuilder.AppendLine(String.Format("DESCRIPTION:{0}", eventToSend.Description));
            stringBuilder.AppendLine(String.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", eventToSend.Title));
            stringBuilder.AppendLine(String.Format("SUMMARY:{0}", eventToSend.Title));
            stringBuilder.AppendLine(String.Format("ORGANIZER:MAILTO:{0}", emailInformation.OrganizerEmail));
            //stringBuilder.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", email.SenderLastName, email.From));
            stringBuilder.AppendLine("BEGIN:VALARM");
            stringBuilder.AppendLine("TRIGGER:-PT15M");
            stringBuilder.AppendLine("ACTION:DISPLAY");
            stringBuilder.AppendLine("DESCRIPTION:Reminder");
            stringBuilder.AppendLine("END:VALARM");
            stringBuilder.AppendLine("END:VEVENT");
            stringBuilder.AppendLine("END:VCALENDAR");

            //store it in Memory stream
            var          bytes  = Encoding.ASCII.GetBytes(stringBuilder.ToString());
            MemoryStream stream = null;

            using (stream)
            {
                stream = new MemoryStream(bytes);
            }

            var contentType = new ContentType("text/calender");

            contentType.Parameters.Add("method", "REQUEST");
            contentType.Parameters.Add("name", String.Format("{0}'s_Invitation.ics", eventToSend.Title));

            //create attachment
            var attachment = new Attachment(stream, contentType);

            //return Attachment
            return(attachment);
        }
Exemple #7
0
        public static void ScheduleParticipantListEmail(EmailInformation emailInfo, DateTime listDate)
        {
            const string jobDescription = "Send list";
            var          currentEvent   = emailInfo.CurrentEvent;

            RemoveOldListJob(currentEvent, jobDescription);

            var listJobId = BackgroundJob.Schedule(() => PostalEmailManager.SendListEmail(emailInfo, new ParticipantListEmail()), listDate);

            AddJobsIntoEvent(listJobId, currentEvent.Id, jobDescription);
        }
Exemple #8
0
        public async Task UpdateMessageAsync(EmailInformation emailMsg)
        {
            await EnsureSetup();

            //var query = _client.CreateDocumentQuery<EmailInformation>(DocumentCollectionUri)
            //   .Where(f => f.id == emailMsg.id).FirstOrDefault();
            //if (query != null)
            //{
            await _client.UpsertDocumentAsync(DocumentCollectionUri, emailMsg);

            //}
        }
        public void WhenSmtpClientFailsToSendThenErrorStatusReturned()
        {
            using (ShimsContext.Create())
            {
                var emailInfo = new EmailInformation {
                };

                ShimMailAddress.ConstructorStringString =
                    (@this, addr, name) =>
                {
                    new ShimMailAddress(@this);
                };

                int emailSendCalled = 0;
                ShimSmtpClient.Constructor =
                    @this =>
                {
                    var shim = new ShimSmtpClient(@this);
                    shim.SendMailMessage =
                        e =>
                    {
                        ++emailSendCalled;
                        throw new SmtpException("Error sending email.");
                    };
                };

                ShimMailMessage.Constructor =
                    @this =>
                {
                    var msg = new ShimMailMessage(@this);
                    msg.FromSetMailAddress = mailAddr => { };
                    msg.ToGet                = () => new MailAddressCollection();
                    msg.SubjectSetString     = subject => { };
                    msg.BodySetString        = bodyText => { };
                    msg.IsBodyHtmlSetBoolean = isHtml => { };
                };

                var sendEmail = new SendEmail();
                var status    = sendEmail.Send(emailInfo);

                Assert.AreEqual(1, emailSendCalled);

                Assert.IsNotNull(status);
                Assert.AreEqual(false, status.WasSent);
                Assert.AreEqual("Error sending email.", status.ErrorMessage);
            }
        }
        public void WhenSmtpClientFailsToSendThenErrorStatusReturned()
        {
            using (ShimsContext.Create())
            {
                var emailInfo = new EmailInformation { };

                ShimMailAddress.ConstructorStringString =
                    (@this, addr, name) =>
                    {
                        new ShimMailAddress(@this);
                    };

                int emailSendCalled = 0;
                ShimSmtpClient.Constructor =
                    @this =>
                    {
                        var shim = new ShimSmtpClient(@this);
                        shim.SendMailMessage =
                            e =>
                            {
                                ++emailSendCalled;
                                throw new SmtpException("Error sending email.");
                            };
                    };

                ShimMailMessage.Constructor =
                    @this =>
                    {
                        var msg = new ShimMailMessage(@this);
                        msg.FromSetMailAddress = mailAddr => { };
                        msg.ToGet = () => new MailAddressCollection();
                        msg.SubjectSetString = subject => { };
                        msg.BodySetString = bodyText => { };
                        msg.IsBodyHtmlSetBoolean = isHtml => { };
                    };

                var sendEmail = new SendEmail();
                var status = sendEmail.Send(emailInfo);

                Assert.AreEqual(1, emailSendCalled);

                Assert.IsNotNull(status);
                Assert.AreEqual(false, status.WasSent);
                Assert.AreEqual("Error sending email.", status.ErrorMessage);
            }
        }
 /// <summary>
 /// 系统发送 站内信、邮件、短信
 /// </summary>
 /// <param name="title">标题</param>
 /// <param name="content">内容</param>
 /// <param name="recUserId">收件人</param>
 /// <param name="sendFlag">发送方式
 /// <para>0:站内信;</para>
 /// <para>1:邮件;</para>
 /// <para>2:短信;</para>
 /// <para>11:站内信、邮件;</para>
 /// <para>22:站内信、短信;</para>
 /// <para>33:邮件、短信;</para>
 /// <para>99:站内信、邮件、短信;</para>
 /// </param>
 public static void SendMessage(List <SysIinstationMessage> messageList, int sendFlag, int tenantId)
 {
     if (messageList.Count == 0)
     {
         return;
     }
     if (sendFlag == 0 || sendFlag == 99 || sendFlag == 11 || sendFlag == 22)
     {
         SendUserMessage(messageList, tenantId);
     }
     if (sendFlag == 1 || sendFlag == 99 || sendFlag == 11 || sendFlag == 33)
     {
         List <int> userIds = new List <int>();
         foreach (var item in messageList)
         {
             userIds.AddRange(item.recUserId);
         }
         var userlist = GetUserList(userIds.Distinct());
         //发送邮件
         foreach (var item in messageList)
         {
             EmailInformation emailinf = new EmailInformation();
             emailinf.ToList   = userlist.Where(p => item.recUserId.Contains(p.UserId) && (!string.IsNullOrWhiteSpace(p.Email))).Select(p => p.Email).ToList();
             emailinf.SendFlag = 1;
             emailinf.Subject  = item.title;
             //emailinf.mailName = mailName;
             emailinf.Context  = item.content.Replace("/[urllanguage]", "http://" + System.Web.HttpContext.Current.Request.Url.Authority + "/" + System.Threading.Thread.CurrentThread.CurrentCulture.ToString());
             emailinf.UserName = Email_Username;
             emailinf.PassWord = Email_Password;
             //接收邮件服务器
             emailinf.From = Email_From;
             //发送邮件服务器
             emailinf.Host = Email_Host;
             //端口
             emailinf.IPort = Convert.ToInt32(Email_IPort);
             new RabbitMQHelper(Rabbit_EmailAddress, Rabbit_userName, Rabbit_password, Rabbit_SendEmail,
                                Rabbit_Emailqueue).SendMessage(emailinf);
         }
     }
     if (sendFlag == 2 || sendFlag == 99 || sendFlag == 22 || sendFlag == 33)
     {
         ;//发送短信
     }
 }
Exemple #12
0
        public ActionResult DeleteConfirmed(int id)
        {
            var user   = _service.GetUser();
            var @event = _db.Events.Include(ev => ev.Participants)
                         .FirstOrDefault(e => (e.Id == id) && (e.SchedulerUserId == UserId));


            //if event hasn't occured notify users of cancellation
            if (_service.EventHasNotPassed(@event))
            {
                var currentEvent = _db.Events.Where(e => e.Id == @event.Id)
                                   .Include(e => e.Participants).FirstOrDefault();

                if (currentEvent == null)
                {
                    return(View("error"));
                }
                var participants = currentEvent.Participants.ToList();


                foreach (var participant in participants)
                {
                    var emailInfo = new EmailInformation
                    {
                        CurrentEvent     = @event,
                        OrganizerEmail   = user.UserName,
                        OrganizerName    = user.FirstName,
                        EmailSubject     = " cancellation",
                        ParticipantEmail = participant.Email,
                        ParticipantId    = participant.Id
                    };
                    PostalEmailManager.SendEmail(emailInfo, new CancellationEmail());
                }

                //Remove Scheduled emails for deleted Event
                JobManager.RemoveScheduledJobs(currentEvent);
            }

            _db.Events.Remove(@event);
            _db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Exemple #13
0
        internal EmailInformation BuildWatchedListProductEmail(User user, List watchedList, User listUser, UserAlert alert, MonitoredProduct newBestDealProduct, decimal newBestDealPrice)
        {
            var emailInformation = new EmailInformation();

            emailInformation.RecipientAddress = user.Email;

            var productUrl     = new Uri(newBestDealProduct.Uri);
            var manipulatedUrl = this.GetManipulatedUrl(productUrl);
            var subject        = GetProductTitle(user, alert);

            emailInformation.Parameters = new Dictionary <string, string>
            {
                {
                    "subject", user.Settings.CorrespondenceLanguage == "en"
                        ? $"Price alert from PriceWise: The price of {subject} in a list you are watching changed!"
                        : $"Alerte de prix de PriceWise: Le prix de {subject} dans une liste que vous surveillez a changé!"
                },
                { "merge_email", user.Email },
                { "merge_listUserName", listUser.FirstName },
                { "merge_firstname", user.FirstName ?? string.Empty },
                { "merge_productName", alert.Title ?? string.Empty },
                { "merge_previousPrice", alert.BestCurrentDeal.Price.ToString(CultureInfo.InvariantCulture) },
                { "merge_newPrice", newBestDealPrice.ToString(CultureInfo.InvariantCulture) },
                { "merge_alertId", alert.Id },
                { "merge_listId", watchedList.Id },
                { "merge_productUrl", manipulatedUrl.AbsoluteUri },
                { "merge_productDomain", productUrl.Authority },
                { "merge_imageUrl", alert.ImageUrl.IsBase64Url() ? string.Empty : alert.ImageUrl }
            };

            var changeQualifier = "Drop";

            if (alert.BestCurrentDeal.Price < newBestDealPrice)
            {
                changeQualifier = "Raise";
            }
            emailInformation.TemplateName = $"WatchedListPrice{changeQualifier}_Unsubscribe_{user.Settings.CorrespondenceLanguage}";

            return(emailInformation);
        }
        public async Task <IActionResult> SaveEmailInformations([FromBody] ListEmailInformationViewModel model)
        {
            if (await _context.EmailInformations.AnyAsync(x => x.UserId == model.UserId))
            {
                var emailUserDetected = await _context.EmailInformations.Where(x => x.UserId == model.UserId).FirstOrDefaultAsync();

                emailUserDetected.Message  = model.ObjectReference.Message;
                emailUserDetected.Sender   = model.ObjectReference.Sender;
                emailUserDetected.SenderAt = model.ObjectReference.SenderAt;
                emailUserDetected.Subject  = model.ObjectReference.Subject;
                emailUserDetected.UserId   = model.UserId;
                emailUserDetected.Index    = model.ObjectReference.Index;
                await _context.SaveChangesAsync();

                return(Ok());
            }
            else
            {
                var emailInformation = new EmailInformation()
                {
                    Message  = model.ObjectReference.Message,
                    Sender   = model.ObjectReference.Sender,
                    SenderAt = model.ObjectReference.SenderAt,
                    Subject  = model.ObjectReference.Subject,
                    UserId   = model.UserId,
                    Index    = model.ObjectReference.Index
                };
                await _context.EmailInformations.AddAsync(emailInformation);

                await _context.SaveChangesAsync();

                return(Ok());
            }


            //var booleanTable = await _context.BooleanTables.Where(x => x.UserId == model.UserId).FirstOrDefaultAsync();
            //booleanTable.Email = true;
        }
Exemple #15
0
        /// <summary>
        /// 系统发送 站内信、邮件、短信
        /// </summary>
        /// <param name="title">标题</param>
        /// <param name="content">内容</param>
        /// <param name="recUserId">收件人</param>
        /// <param name="sendFlag">发送方式
        /// <para>0:站内信;</para>
        /// <para>1:邮件;</para>
        /// <para>2:短信;</para>
        /// <para>11:站内信、邮件;</para>
        /// <para>22:站内信、短信;</para>
        /// <para>33:邮件、短信;</para>
        /// <para>99:站内信、邮件、短信;</para>
        /// </param>
        /// <param name="tenantId"></param>
        public static void SendMessage(string title, string content, int[] recUserId, int sendFlag, int tenantId)
        {
            if (recUserId.Length == 0 || string.IsNullOrWhiteSpace(title) || string.IsNullOrWhiteSpace(content))
            {
                return;
            }
            if (sendFlag == 0 || sendFlag == 99 || sendFlag == 11 || sendFlag == 22)
            {
                //1:
                //SendUserMessage(title, content, recUserId, tenantId);
                //2:
                //new UserMessageManager().AddMessage(title, content, recUserId, 0, tenantId);
                //3:
                var messageContent = new SysUserMessageContent()
                {
                    Title          = title,
                    MessageContent = content,
                    CreateTime     = DateTime.Now,
                    TenantId       = tenantId
                };
                messageContent.MessageId = _dataAccess.AddEntity(messageContent);
                var list = new List <SysUserMessage>();
                for (int i = 0; i < recUserId.Length; i++)
                {
                    if (recUserId[i] > 0)
                    {
                        list.Add(new SysUserMessage
                        {
                            MessageId  = messageContent.MessageId,
                            SendStatus = 0,
                            RecStatus  = 0,
                            SendUserId = 0,
                            RecUserId  = recUserId[i],
                            TenantId   = tenantId
                        });
                    }
                }
                _dataAccess.AddEntities(list);
            }
            if (sendFlag == 1 || sendFlag == 99 || sendFlag == 11 || sendFlag == 33)
            {
                var userlist = GetUserList(recUserId);
                EmailInformation emailinf = new EmailInformation();
                emailinf.ToList   = userlist.Where(p => !string.IsNullOrWhiteSpace(p.Email)).Select(p => p.Email).ToList();
                emailinf.SendFlag = 1;
                emailinf.Subject  = title;
                //emailinf.mailName = mailName;
                //emailinf.Context = content.Replace("/[urllanguage]", "http://" + System.Web.HttpContext.Current.Request.Url.Authority);
                emailinf.Context  = content.Replace("/[urllanguage]", "");
                emailinf.UserName = Email_Username;
                if (System.Configuration.ConfigurationManager.AppSettings["ConfigEncrypt"] == "True")
                {
                    emailinf.PassWord = Extensions.EncryptHelper.Decrypto(Email_Password);
                }
                else
                {
                    emailinf.PassWord = Email_Password;
                }

                //接收邮件服务器
                emailinf.From = Email_From;
                //发送邮件服务器
                emailinf.Host = Email_Host;
                //端口
                emailinf.IPort = Convert.ToInt32(Email_IPort);

                RibbitMQProvider.SendMessage(emailinf, "sendEmail");
            }
            //if (sendFlag == 2 || sendFlag == 99 || sendFlag == 22 || sendFlag == 33)
            //;发送短信
        }
        public void WhenSmtpClientSendRequestedThenMailMessageValuesArePopulatedCorrectly()
        {
            using (ShimsContext.Create())
            {
                var emailInfo =
                    new EmailInformation
                    {
                        FromAddress = "*****@*****.**",
                        FromName = "From Name",
                        ToAddress = "*****@*****.**",
                        ToName = "To Name",
                        Subject = "Email Subject",
                        MessageText = "Email Body",
                        IsHtmlMessage = false,
                    };

                int mailAddrCalled = 0;
                ShimMailAddress.ConstructorStringString =
                    (@this, addr, name) =>
                    {
                        new ShimMailAddress(@this);
                        switch (mailAddrCalled++)
                        {
                            case 0:
                                Assert.AreEqual("*****@*****.**", addr);
                                Assert.AreEqual("From Name", name);
                                break;
                            case 1:
                                Assert.AreEqual("*****@*****.**", addr);
                                Assert.AreEqual("To Name", name);
                                break;
                        }
                    };

                ShimSmtpClient.Constructor =
                    @this =>
                    {
                        var shim = new ShimSmtpClient(@this);
                        shim.SendMailMessage = e => { };
                    };

                int fromCalled = 0;
                int toCalled = 0;
                int subjectCalled = 0;
                int bodyCalled = 0;
                int isHtmlCalled = 0;
                ShimMailMessage.Constructor =
                    @this =>
                    {
                        var msg = new ShimMailMessage(@this);
                        msg.FromSetMailAddress =
                            mailAddr =>
                            {
                                ++fromCalled;
                            };
                        msg.ToGet =
                            () =>
                            {
                                ++toCalled;
                                return new MailAddressCollection();
                            };
                        msg.SubjectSetString =
                            subject =>
                            {
                                Assert.AreEqual("Email Subject", subject);
                                ++subjectCalled;
                            };
                        msg.BodySetString =
                            bodyText =>
                            {
                                Assert.AreEqual("Email Body", bodyText);
                                ++bodyCalled;
                            };
                        msg.IsBodyHtmlSetBoolean =
                            isHtml =>
                            {
                                Assert.AreEqual(false, isHtml);
                                ++isHtmlCalled;
                            };
                    };

                var sendEmail = new SendEmail();
                sendEmail.Send(emailInfo);

                Assert.AreEqual(2, mailAddrCalled);
                Assert.AreEqual(1, fromCalled);
                Assert.AreEqual(1, toCalled);
                Assert.AreEqual(1, subjectCalled);
                Assert.AreEqual(1, bodyCalled);
                Assert.AreEqual(1, isHtmlCalled);
            }
        }
Exemple #17
0
        /// <summary>
        /// 系统发送 站内信、邮件、短信
        /// </summary>
        /// <param name="messageList"></param>
        /// <param name="sendFlag">发送方式
        /// <para>0:站内信;</para>
        /// <para>1:邮件;</para>
        /// <para>2:短信;</para>
        /// <para>11:站内信、邮件;</para>
        /// <para>22:站内信、短信;</para>
        /// <para>33:邮件、短信;</para>
        /// <para>99:站内信、邮件、短信;</para>
        /// </param>
        /// <param name="tenantId"></param>
        public static void SendMessage(List <SysIinstationMessage> messageList, int sendFlag, int tenantId)
        {
            if (messageList.Count == 0)
            {
                return;
            }
            if (sendFlag == 0 || sendFlag == 99 || sendFlag == 11 || sendFlag == 22)
            {
                //1:
                //SendUserMessage(messageList, tenantId);
                //2:
                //var userMessageManager = new UserMessageManager();
                //foreach (var item in messageList)
                //{
                //    userMessageManager.AddMessage(item.title, item.content, item.recUserId, 0, tenantId);
                //}
                //3:
                var list = new List <SysUserMessage>();
                foreach (var item in messageList)
                {
                    var messageContent = new SysUserMessageContent()
                    {
                        Title          = item.title,
                        MessageContent = item.content,
                        CreateTime     = DateTime.Now,
                        TenantId       = tenantId
                    };
                    messageContent.MessageId = _dataAccess.AddEntity(messageContent);
                    for (int i = 0; i < item.recUserId.Length; i++)
                    {
                        if (item.recUserId[i] > 0)
                        {
                            list.Add(new SysUserMessage
                            {
                                MessageId  = messageContent.MessageId,
                                SendStatus = 0,
                                RecStatus  = 0,
                                SendUserId = 0,
                                RecUserId  = item.recUserId[i],
                                TenantId   = tenantId
                            });
                        }
                    }
                }
                _dataAccess.AddEntities(list);
            }
            if (sendFlag == 1 || sendFlag == 99 || sendFlag == 11 || sendFlag == 33)
            {
                List <int> userIds = new List <int>();
                foreach (var item in messageList)
                {
                    userIds.AddRange(item.recUserId);
                }
                var userlist = GetUserList(userIds.Distinct());
                var ep       = Email_Password;
                if (System.Configuration.ConfigurationManager.AppSettings["ConfigEncrypt"] == "True")
                {
                    ep = Extensions.EncryptHelper.Decrypto(Email_Password);
                }

                //发送邮件
                foreach (var item in messageList)
                {
                    EmailInformation emailinf = new EmailInformation();
                    emailinf.ToList   = userlist.Where(p => item.recUserId.Contains(p.UserId) && (!string.IsNullOrWhiteSpace(p.Email))).Select(p => p.Email).ToList();
                    emailinf.SendFlag = 1;
                    emailinf.Subject  = item.title;
                    //emailinf.mailName = mailName;
                    emailinf.Context  = item.content.Replace("/[urllanguage]", "http://" + System.Web.HttpContext.Current.Request.Url.Authority + "/" + System.Threading.Thread.CurrentThread.CurrentCulture.ToString());
                    emailinf.UserName = Email_Username;
                    emailinf.PassWord = ep;
                    //接收邮件服务器
                    emailinf.From = Email_From;
                    //发送邮件服务器
                    emailinf.Host = Email_Host;
                    //端口
                    emailinf.IPort = Convert.ToInt32(Email_IPort);

                    RibbitMQProvider.SendMessage(emailinf, "sendEmail");
                }
            }
            //if (sendFlag == 2 || sendFlag == 99 || sendFlag == 22 || sendFlag == 33)
            //  ;发送短信
        }
        public void WhenSmtpClientSendRequestedThenMailMessageValuesArePopulatedCorrectly()
        {
            using (ShimsContext.Create())
            {
                var emailInfo =
                    new EmailInformation
                {
                    FromAddress   = "*****@*****.**",
                    FromName      = "From Name",
                    ToAddress     = "*****@*****.**",
                    ToName        = "To Name",
                    Subject       = "Email Subject",
                    MessageText   = "Email Body",
                    IsHtmlMessage = false,
                };

                int mailAddrCalled = 0;
                ShimMailAddress.ConstructorStringString =
                    (@this, addr, name) =>
                {
                    new ShimMailAddress(@this);
                    switch (mailAddrCalled++)
                    {
                    case 0:
                        Assert.AreEqual("*****@*****.**", addr);
                        Assert.AreEqual("From Name", name);
                        break;

                    case 1:
                        Assert.AreEqual("*****@*****.**", addr);
                        Assert.AreEqual("To Name", name);
                        break;
                    }
                };

                ShimSmtpClient.Constructor =
                    @this =>
                {
                    var shim = new ShimSmtpClient(@this);
                    shim.SendMailMessage = e => { };
                };

                int fromCalled    = 0;
                int toCalled      = 0;
                int subjectCalled = 0;
                int bodyCalled    = 0;
                int isHtmlCalled  = 0;
                ShimMailMessage.Constructor =
                    @this =>
                {
                    var msg = new ShimMailMessage(@this);
                    msg.FromSetMailAddress =
                        mailAddr =>
                    {
                        ++fromCalled;
                    };
                    msg.ToGet =
                        () =>
                    {
                        ++toCalled;
                        return(new MailAddressCollection());
                    };
                    msg.SubjectSetString =
                        subject =>
                    {
                        Assert.AreEqual("Email Subject", subject);
                        ++subjectCalled;
                    };
                    msg.BodySetString =
                        bodyText =>
                    {
                        Assert.AreEqual("Email Body", bodyText);
                        ++bodyCalled;
                    };
                    msg.IsBodyHtmlSetBoolean =
                        isHtml =>
                    {
                        Assert.AreEqual(false, isHtml);
                        ++isHtmlCalled;
                    };
                };

                var sendEmail = new SendEmail();
                sendEmail.Send(emailInfo);

                Assert.AreEqual(2, mailAddrCalled);
                Assert.AreEqual(1, fromCalled);
                Assert.AreEqual(1, toCalled);
                Assert.AreEqual(1, subjectCalled);
                Assert.AreEqual(1, bodyCalled);
                Assert.AreEqual(1, isHtmlCalled);
            }
        }
Exemple #19
0
        public ActionResult SendEventsInvitation([Bind(Include =
                                                           "ParticipantsEmails,EventDate,EventId,SendRemainder,ReminderDate,ListDate")] InvitationViewModel model)
        {
            var id = model.EventId;

            if (!ModelState.IsValid)
            {
                return(View(ReturnInvitationModel(id)));
            }

            //ToDo: change list and remainder dates to swiss time to be used for sending email

            // get event from database
            var eventForInvitation = GetEvent(id);

            eventForInvitation.ListDate =
                // ReSharper disable once PossibleInvalidOperationException
                ConvertDateTime.ToSwissTimezone(TimeZoneInfo.ConvertTimeToUtc((DateTime)model.ListDate));

            if (model.ReminderDate != null)
            {
                eventForInvitation.ReminderDate = ConvertDateTime.ToSwissTimezone(TimeZoneInfo.ConvertTimeToUtc((DateTime)model.ReminderDate));
                Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("{ From Invitation controller sending invitation } Remainder date is on " + eventForInvitation.ReminderDate));
            }

            /*
             * This is used to check time on the server
             * when this is deployed
             */

            Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("{ From Invitation controller sending invitation } List date is on " + eventForInvitation.ListDate));


            //Check if invitations can still be sent
            var notPassed = _service.EventHasNotPassed(eventForInvitation);

            if (!notPassed)
            {
                return(View("_CantInvite", eventForInvitation));
            }



            var unsavedContacts        = new UnsavedContactViewModel();
            EmailInformation emailInfo = null;
            var allSaved = false;
            var contacts = new List <Contact>();
            var emails   = new List <EmailInformation>();

            //loop through emails
            var emailList = model.ParticipantsEmails.Split(',').ToList();

            foreach (var participantEmail in emailList)
            {
                var email = _service.RemoveBrackets(participantEmail);

                //save new participant
                SaveParticipantInDb(email, eventForInvitation);


                #region Create and send Email

                emailInfo = ComposeEmailInfo(eventForInvitation, email);
                emails.Add(emailInfo);

                //Send Invitation Email
                try
                {
                    PostalEmailManager.SendEmail(emailInfo, new InvitationEmail());

                    //todo: this is to be removed before deployment for production
                    Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("Email sent to " + emailInfo.ParticipantEmail));

                    if (model.SendRemainder)
                    {
                        var remainderDate = Service.GetRemanderDate(eventForInvitation);
                        JobManager.ScheduleRemainderEmail(emails, remainderDate);

                        //todo: this is to be removed before deployment for production
                        Elmah.ErrorSignal.FromCurrentContext().Raise(new Exception("remainder is set at " + remainderDate));
                    }
                }
                catch (Exception exception)
                {
                    Elmah.ErrorSignal.FromCurrentContext().Raise(exception);
                    return(RedirectToAction("Error"));
                }


                #endregion

                #region after sending email, save unsaved contacts

                var contactEmails = _contactsController.GetUserContacts(UserId);
                allSaved = contactEmails.Any(c => c.Email == email);

                if (allSaved)
                {
                    continue;
                }
                var contact = new Contact {
                    Email = email
                };
                contacts.Add(contact);
                unsavedContacts.Contacts = contacts;

                #endregion
            }

            #region Scheduling List email

            // start participant list summary scheduler
            var listDate = Service.GetListDate(eventForInvitation);
            JobManager.ScheduleParticipantListEmail(emailInfo, listDate);

            #endregion

            //redirect to details if all contacts are saved
            if (allSaved)
            {
                Response.Cookies.Add(new HttpCookie("successCookie", "Action is completed successfully"));

                return(RedirectToAction("Details", "Events", new { id }));
            }

            //Let user save his contacts return view with list of unsaved contacts
            unsavedContacts.EventId = eventForInvitation.Id;
            TempData["model"]       = unsavedContacts;     //Pass list to SaveEmails action
            return(RedirectToAction("SaveEmails"));
        }
Exemple #20
0
        public ActionResult Edit([Bind(Include = "Id,Title,Location,Description,StartDate,EndDate,ReminderDate,ListDate,SchedulerUserId")]
                                 Event eventToEdit, int?id)
        {
            var results = eventToEdit.StartDate.GetValueOrDefault().CompareTo(eventToEdit.ListDate.GetValueOrDefault());

            if (results < 0)
            {
                ModelState.AddModelError("dateError", "Enter date before Starting date");
            }

            if (!ModelState.IsValid)
            {
                return(View(eventToEdit));
            }

            _db.Entry(eventToEdit).State = EntityState.Modified;
            _db.SaveChanges();

            var remanderDate = Service.GetRemanderDate(eventToEdit);
            var listDate     = Service.GetListDate(eventToEdit);

            //Remove scheduled jobs of this event
            JobManager.RemoveScheduledJobs(eventToEdit);

            #region Send update emails to participants
            //Get Participants
            var currentEvent = _db.Events
                               .Where(e => e.Id == eventToEdit.Id)
                               .Include(e => e.Participants)
                               .FirstOrDefault();

            if (currentEvent == null)
            {
                return(View("Error"));
            }

            var participants = currentEvent.Participants.ToList();

            var user = _service.GetUser();

            EmailInformation emailInfo = null;
            var emails = new List <EmailInformation>();

            //There is no participants
            if (participants.Count == 0)
            {
                return(RedirectToAction("Index"));
            }

            foreach (var participant in participants)
            {
                var participantId = participant.Id;
                var detailsUrl    = Url.Action("Details", "Response",
                                               new RouteValueDictionary(new { id = currentEvent.Id }), "https");
                var responseUrl = Url.Action("Response", "Response",
                                             new RouteValueDictionary(new { id = currentEvent.Id, pId = participantId }), "https");

                emailInfo = new EmailInformation
                {
                    CurrentEvent     = currentEvent,
                    OrganizerName    = user.FirstName,
                    OrganizerEmail   = user.UserName,
                    ParticipantId    = participantId,
                    ParticipantEmail = participant.Email,
                    EmailSubject     = " changes.",
                    ResponseUrl      = responseUrl,
                    EventDetailsUrl  = detailsUrl
                };

                emails.Add(emailInfo);

                //Notify Participant using postal
                PostalEmailManager.SendEmail(emailInfo, new EmailInfoChangeEmail());
            }
            #endregion


            //Schedule remainders only when there is a remainder date
            if (eventToEdit.ReminderDate != null)
            {
                JobManager.ScheduleRemainderEmail(emails, remanderDate);
            }
            //Schedule new emails for edited Job
            JobManager.ScheduleParticipantListEmail(emailInfo, listDate);
            //JobManager.AddJobsIntoEvent(eventToEdit.Id,"Send List");

            return(RedirectToAction("Index"));
        }