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)); } }
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; }
/* * 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"); } }
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); }