示例#1
0
        private MailMessage BuildMailMessage(NotifyMessage m)
        {
            var email = new MailMessage
            {
                BodyEncoding    = Encoding.UTF8,
                SubjectEncoding = Encoding.UTF8,
                From            = MailAddressUtils.Create(m.From),
                Subject         = m.Subject,
            };

            foreach (var to in m.To.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries))
            {
                email.To.Add(MailAddressUtils.Create(to));
            }

            if (m.ContentType == Pattern.HTMLContentType)
            {
                email.Body = HtmlUtil.GetText(m.Content);
                email.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(GetHtmlView(m.Content), Encoding.UTF8, "text/html"));
            }
            else
            {
                email.Body = m.Content;
            }

            if (!string.IsNullOrEmpty(m.ReplyTo))
            {
                email.ReplyToList.Add(MailAddressUtils.Create(m.ReplyTo));
            }

            return(email);
        }
        private NotifyMessage CreateNotifyMessage(INoticeMessage message)
        {
            var m = new NotifyMessage
            {
                Subject      = message.Subject.Trim(' ', '\t', '\n', '\r'),
                ContentType  = message.ContentType,
                Content      = message.Body,
                Sender       = senderName,
                CreationDate = DateTime.UtcNow,
            };

            var tenant = CoreContext.TenantManager.GetCurrentTenant(false);

            m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId;

            var from    = MailAddressUtils.Create(CoreContext.Configuration.SmtpSettings.SenderAddress, CoreContext.Configuration.SmtpSettings.SenderDisplayName);
            var fromTag = message.Arguments.FirstOrDefault(x => x.Tag.Equals("MessageFrom"));

            if ((CoreContext.Configuration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(CoreContext.Configuration.SmtpSettings.SenderDisplayName)) &&
                fromTag != null && fromTag.Value != null)
            {
                try
                {
                    from = MailAddressUtils.Create(from.Address, fromTag.Value.ToString());
                }
                catch { }
            }
            m.From = from.ToString();

            var to = new List <string>();

            foreach (var address in message.Recipient.Addresses)
            {
                to.Add(MailAddressUtils.Create(address, message.Recipient.Name).ToString());
            }
            m.To = string.Join("|", to.ToArray());

            var replyTag = message.Arguments.FirstOrDefault(x => x.Tag == "replyto");

            if (replyTag != null && replyTag.Value is string)
            {
                try
                {
                    m.ReplyTo = MailAddressUtils.Create((string)replyTag.Value).ToString();
                }
                catch (Exception e)
                {
                    LogManager.GetLogger("ASC.Notify").Error("Error creating reply to tag for: " + replyTag.Value, e);
                }
            }

            var priority = message.Arguments.FirstOrDefault(a => a.Tag == "Priority");

            if (priority != null)
            {
                m.Priority = Convert.ToInt32(priority.Value);
            }

            return(m);
        }
        public HttpResponseMessage SendNotification(string name, string email, string subject, string message)
        {
            if (string.IsNullOrWhiteSpace(name))
            {
                throw new ArgumentException("name");
            }
            if (string.IsNullOrWhiteSpace(email))
            {
                throw new ArgumentException("email");
            }
            if (string.IsNullOrWhiteSpace(subject))
            {
                throw new ArgumentException("subject");
            }
            if (string.IsNullOrWhiteSpace(message))
            {
                throw new ArgumentException("message");
            }

            try
            {
                log.DebugFormat("SendNotification name = {0}, email = {1}", name, email);
                if (IsValidEmail(email))
                {
                    var sender = HealthCheckRunner.NotifySenders["email.sender"];
                    var result = sender.Send(new NotifyMessage
                    {
                        Content      = message,
                        Subject      = subject,
                        CreationDate = DateTime.UtcNow,
                        Sender       = name,
                        From         = MailAddressUtils.Create(CoreContext.Configuration.SmtpSettings.SenderAddress,
                                                               CoreContext.Configuration.SmtpSettings.SenderDisplayName).ToString(),//email,
                        To = HealthCheckCfgSectionHandler.Instance.SupportEmails
                    });
                    if (result == NoticeSendResult.OK)
                    {
                        log.ErrorFormat("Successful Send Notification! email = {0}", email);
                        return(ResultHelper.Success(HealthCheckResource.SuccessfulSendNotification));
                    }

                    log.ErrorFormat("Error Send Notification. email = {0}  result = {1}", email, result);
                    return(ResultHelper.Error(HealthCheckResource.ErrorSendNotification));
                }

                log.ErrorFormat("Wrong Email Address! email = {0}", email);
                return(ResultHelper.Error(HealthCheckResource.WrongEmailAddress));
            }
            catch (Exception ex)
            {
                log.ErrorFormat("Error on SendNotification. email = {0} {1} {2}", email,
                                ex.ToString(), ex.InnerException != null ? ex.InnerException.Message : string.Empty);
                return(ResultHelper.Error(HealthCheckResource.SendNotificationError));
            }
        }
示例#4
0
        private NoticeSendResult SendMessage(NotifyMessage m)
        {
            //Check if we need to query stats
            RefreshQuotaIfNeeded();
            if (quota != null)
            {
                lock (locker)
                {
                    if (quota.Max24HourSend <= quota.SentLast24Hours)
                    {
                        //Quota exceeded, queue next refresh to +24 hours
                        lastRefresh = DateTime.UtcNow.AddHours(24);
                        log.WarnFormat("Quota limit reached. setting next check to: {0}", lastRefresh);
                        return NoticeSendResult.SendingImpossible;
                    }
                }
            }

            var dest = new Destination
            {
                ToAddresses = m.To.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries).Select(a => MailAddressUtils.Create(a).Address).ToList(),
            };

            var subject = new Content(MimeHeaderUtils.EncodeMime(m.Subject)) { Charset = Encoding.UTF8.WebName, };

            Body body;
            if (m.ContentType == Pattern.HTMLContentType)
            {
                body = new Body(new Content(HtmlUtil.GetText(m.Content)) { Charset = Encoding.UTF8.WebName });
                body.Html = new Content(GetHtmlView(m.Content)) { Charset = Encoding.UTF8.WebName };
            }
            else
            {
                body = new Body(new Content(m.Content) { Charset = Encoding.UTF8.WebName });
            }

            var from = MailAddressUtils.Create(m.From).ToEncodedString();
            var request = new SendEmailRequest {Source = from, Destination = dest, Message = new Message(subject, body)};
            if (!string.IsNullOrEmpty(m.ReplyTo))
            {
                request.ReplyToAddresses.Add(MailAddressUtils.Create(m.ReplyTo).Address);
            }

            ThrottleIfNeeded();

            var response = ses.SendEmail(request);
            lastSend = DateTime.UtcNow;

            return response != null ? NoticeSendResult.OK : NoticeSendResult.TryOnceAgain;
        }
示例#5
0
        /*
         * private static bool MailBoxExists(Tenant tenant, UserInfo userInfo, string ascAuthKey)
         * {
         *  string portalUrl = ConfigurationManager.AppSettings["portalUrl"] ?? "http://localhost/";
         *  var client = new RestClient(portalUrl);
         *  var request = new RestRequest("/api/2.0/mail/accounts/" + HttpUtility.UrlEncode(userInfo.Email), Method.GET);
         *  request.AddCookie("asc_auth_key", ascAuthKey);
         *  var response = client.Execute(request);
         *  var jObject = JObject.Parse(response.Content);
         *  if (response.StatusCode == HttpStatusCode.InternalServerError)
         *  {
         *      if (jObject["error"]["type"].ToString() == "System.NullReferenceException")
         *      {
         *          log.DebugFormat("MailBox account {0} does not exist", userInfo.Email);
         *          return false;
         *      }
         *  }
         *  if (response.StatusCode != HttpStatusCode.OK)
         *  {
         *      throw new Exception("Can't get mailBox using API. Response code = " + response.StatusCode, response.ErrorException);
         *  }
         *  return true;
         * }
         *
         * private static void CreateMailBox(Tenant tenant, UserInfo userInfo, string ascAuthKey)
         * {
         *  string portalUrl = ConfigurationManager.AppSettings["portalUrl"] ?? "http://localhost/";
         *  var client = new RestClient(portalUrl);
         *  var request = new RestRequest();
         *  request.AddCookie("asc_auth_key", ascAuthKey);
         * }
         */

        private static void SendEmail(string subject, string message, HealthCheckSettings healthCheckSettings)
        {
            if (healthCheckSettings.Emails != null && healthCheckSettings.Emails.Count != 0)
            {
                log.DebugFormat("SendEmail: subject = {0}, message = {1}", subject, message);
                var sender = NotifySenders["email.sender"];
                sender.Send(new NotifyMessage
                {
                    Content      = message,
                    Subject      = subject,
                    CreationDate = DateTime.UtcNow,
                    Sender       = Core.Configuration.Constants.NotifyEMailSenderSysName,
                    To           = string.Join("|", healthCheckSettings.Emails),
                    From         = MailAddressUtils.Create(CoreContext.Configuration.SmtpSettings.SenderAddress,
                                                           CoreContext.Configuration.SmtpSettings.SenderDisplayName).ToString()
                });
            }
            else
            {
                log.Debug("SendEmail: healthCheckSettings.Emails is empty, there are no recipients");
            }
        }
示例#6
0
        private NotifyMessage CreateNotifyMessage(INoticeMessage message)
        {
            var m = new NotifyMessage
            {
                Subject      = message.Subject.Trim(' ', '\t', '\n', '\r'),
                ContentType  = message.ContentType,
                Content      = message.Body,
                Sender       = senderName,
                CreationDate = DateTime.UtcNow.Ticks,
            };

            using var scope = ServiceProvider.CreateScope();

            var scopeClass = scope.ServiceProvider.GetService <EmailSenderSinkScope>();

            var(tenantManager, configuration, options) = scopeClass;

            var tenant = tenantManager.GetCurrentTenant(false);

            m.Tenant = tenant == null ? Tenant.DEFAULT_TENANT : tenant.TenantId;

            var from    = MailAddressUtils.Create(configuration.SmtpSettings.SenderAddress, configuration.SmtpSettings.SenderDisplayName);
            var fromTag = message.Arguments.FirstOrDefault(x => x.Tag.Equals("MessageFrom"));

            if ((configuration.SmtpSettings.IsDefaultSettings || string.IsNullOrEmpty(configuration.SmtpSettings.SenderDisplayName)) &&
                fromTag != null && fromTag.Value != null)
            {
                try
                {
                    from = MailAddressUtils.Create(from.Address, fromTag.Value.ToString());
                }
                catch { }
            }
            m.From = from.ToString();

            var to = new List <string>();

            foreach (var address in message.Recipient.Addresses)
            {
                to.Add(MailAddressUtils.Create(address, message.Recipient.Name).ToString());
            }
            m.To = string.Join("|", to.ToArray());

            var replyTag = message.Arguments.FirstOrDefault(x => x.Tag == "replyto");

            if (replyTag != null && replyTag.Value is string)
            {
                try
                {
                    m.ReplyTo = MailAddressUtils.Create((string)replyTag.Value).ToString();
                }
                catch (Exception e)
                {
                    ServiceProvider.GetService <IOptionsMonitor <ILog> >().Get("ASC.Notify").Error("Error creating reply to tag for: " + replyTag.Value, e);
                }
            }

            var priority = message.Arguments.FirstOrDefault(a => a.Tag == "Priority");

            if (priority != null)
            {
                m.Priority = Convert.ToInt32(priority.Value);
            }

            var attachmentTag = message.Arguments.FirstOrDefault(x => x.Tag == "EmbeddedAttachments");

            if (attachmentTag != null && attachmentTag.Value != null)
            {
                m.EmbeddedAttachments.AddRange(attachmentTag.Value as NotifyMessageAttachment[]);
            }

            var autoSubmittedTag = message.Arguments.FirstOrDefault(x => x.Tag == "AutoSubmitted");

            if (autoSubmittedTag != null && autoSubmittedTag.Value is string)
            {
                try
                {
                    m.AutoSubmitted = autoSubmittedTag.Value.ToString();
                }
                catch (Exception e)
                {
                    Log.Error("Error creating AutoSubmitted tag for: " + autoSubmittedTag.Value, e);
                }
            }

            return(m);
        }