protected virtual void SendInternal(EmailMessageEntity email) { MailMessage message = CustomCreateMailMessage != null?CustomCreateMailMessage(email) : CreateMailMessage(email); using (HeavyProfiler.Log("SMTP-Send")) EmailLogic.GetSmtpClient(email).Send(message); }
protected virtual MailMessage CreateMailMessage(EmailMessageEntity email) { MailMessage message = new MailMessage() { From = email.From.ToMailAddress(), Subject = email.Subject, IsBodyHtml = email.IsBodyHtml, }; AlternateView view = AlternateView.CreateAlternateViewFromString(email.Body, null, email.IsBodyHtml ? "text/html" : "text/plain"); view.LinkedResources.AddRange(email.Attachments .Where(a => a.Type == EmailAttachmentType.LinkedResource) .Select(a => new LinkedResource(a.File.OpenRead(), MimeMapping.GetMimeMapping(a.File.FileName)) { ContentId = a.ContentId, })); message.Attachments.AddRange(email.Attachments .Where(a => a.Type == EmailAttachmentType.Attachment) .Select(a => new Attachment(a.File.OpenRead(), MimeMapping.GetMimeMapping(a.File.FileName)) { ContentId = a.ContentId, Name = a.File.FileName, })); message.AlternateViews.Add(view); message.To.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.To).Select(r => r.ToMailAddress()).ToList()); message.CC.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Cc).Select(r => r.ToMailAddress()).ToList()); message.Bcc.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Bcc).Select(r => r.ToMailAddress()).ToList()); return(message); }
protected virtual void SendSMTP(EmailMessageEntity email, SmtpEmbedded smtp) { System.Net.Mail.MailMessage message = CreateMailMessage(email); using (HeavyProfiler.Log("SMTP-Send")) smtp.GenerateSmtpClient().Send(message); }
protected virtual void SendExchangeWebService(EmailMessageEntity email, ExchangeWebServiceEmbedded exchange) { ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); service.UseDefaultCredentials = exchange.UseDefaultCredentials; service.Credentials = exchange.Username.HasText() ? new WebCredentials(exchange.Username, exchange.Password) : null; //service.TraceEnabled = true; //service.TraceFlags = TraceFlags.All; if (exchange.Url.HasText()) { service.Url = new Uri(exchange.Url); } else { service.AutodiscoverUrl(email.From.EmailAddress, RedirectionUrlValidationCallback); } EmailMessage message = new EmailMessage(service); foreach (var a in email.Attachments.Where(a => a.Type == EmailAttachmentType.Attachment)) { var fa = message.Attachments.AddFileAttachment(a.File.FileName, a.File.GetByteArray()); fa.ContentId = a.ContentId; } message.ToRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.To).Select(r => r.ToEmailAddress()).ToList()); message.CcRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Cc).Select(r => r.ToEmailAddress()).ToList()); message.BccRecipients.AddRange(email.Recipients.Where(r => r.Kind == EmailRecipientKind.Bcc).Select(r => r.ToEmailAddress()).ToList()); message.Subject = email.Subject; message.Body = new MessageBody(email.IsBodyHtml ? BodyType.HTML : BodyType.Text, email.Body.Text); message.Send(); }
public static void SendMailAsync(this EmailMessageEntity email) { using (OperationLogic.AllowSave <EmailMessageEntity>()) { email.State = EmailMessageState.ReadyToSend; email.Save(); } }
public IEnumerable<EmailMessageEntity> CreateEmailMessageInternal() { ExecuteQuery(); foreach (EmailAddressEntity from in GetFrom()) { foreach (List<EmailOwnerRecipientData> recipients in GetRecipients()) { CultureInfo ci = recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault().ToCultureInfo() ?? EmailLogic.Configuration.DefaultCulture.ToCultureInfo(); EmailMessageEntity email = new EmailMessageEntity { Target = (Lite<Entity>)entity.ToLite(), Recipients = recipients.Select(r => new EmailRecipientEntity(r.OwnerData) { Kind = r.Kind }).ToMList(), From = from, IsBodyHtml = template.IsBodyHtml, EditableMessage = template.EditableMessage, Template = template.ToLite(), Attachments = template.Attachments.SelectMany(g => EmailTemplateLogic.GenerateAttachment.Invoke(g, new EmailTemplateLogic.GenerateAttachmentContext { QueryDescription = this.qd, ModelType = template.SystemEmail.ToType(), SystemEmail = systemEmail, CurrentRows = currentRows, ResultColumns = dicTokenColumn, Entity = entity, Template = template, Culture = ci, })).ToMList() }; EmailTemplateMessageEntity message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()); if (message == null) throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {1} (or Default)".FormatWith(template, ci)); using (CultureInfoUtils.ChangeBothCultures(ci)) { email.Subject = SubjectNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = false, SystemEmail = systemEmail }); email.Body = TextNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = template.IsBodyHtml, SystemEmail = systemEmail, }); } yield return email; } } }
public static EmailMessageEntity WithAttachment(this EmailMessageEntity email, FilePathEmbedded filePath, string?contentId = null) { email.Attachments.Add(new EmailAttachmentEmbedded { ContentId = contentId ?? Guid.NewGuid().ToString(), File = filePath, }); return(email); }
protected virtual void SendMicrosoftGraph(EmailMessageEntity email, MicrosoftGraphEmbedded microsoftGraph) { ClientCredentialProvider authProvider = microsoftGraph.GetAuthProvider(); GraphServiceClient graphClient = new GraphServiceClient(authProvider); var message = ToGraphMessage(email); graphClient.Users[email.From.AzureUserId.ToString()] .SendMail(message, false) .Request() .PostAsync().Wait(); }
public IEnumerable <EmailMessageEntity> CreateEmailMessageInternal() { ExecuteQuery(); foreach (EmailFromEmbedded from in GetFrom()) { foreach (List <EmailOwnerRecipientData> recipients in GetRecipients()) { EmailMessageEntity email = CreateEmailMessageInternal(from, recipients); yield return(email); } } }
private static void AssignEntities(this EmailMessageEntity email, EmailMessageEntity dup) { email.Target = dup.Target; foreach (var att in email.Attachments) { att.File = dup.Attachments.FirstEx(a => a.Similar(att)).File; } email.From.EmailOwner = dup.From.EmailOwner; foreach (var rec in email.Recipients.Where(a => a.Kind != EmailRecipientKind.Bcc)) { rec.EmailOwner = dup.Recipients.FirstEx(a => a.GetHashCode() == rec.GetHashCode()).EmailOwner; } }
private Message ToGraphMessage(EmailMessageEntity email) { return(new Message { Subject = email.Subject, Body = new ItemBody { Content = email.Body.Text, ContentType = email.IsBodyHtml ? BodyType.Html : BodyType.Text, }, From = email.From.ToRecipient(), ToRecipients = email.Recipients.Where(r => r.Kind == EmailRecipientKind.To).Select(r => r.ToRecipient()).ToList(), CcRecipients = email.Recipients.Where(r => r.Kind == EmailRecipientKind.Cc).Select(r => r.ToRecipient()).ToList(), BccRecipients = email.Recipients.Where(r => r.Kind == EmailRecipientKind.Bcc).Select(r => r.ToRecipient()).ToList(), Attachments = GetAttachments(email.Attachments) }); }
public virtual void Send(EmailMessageEntity email) { using (OperationLogic.AllowSave <EmailMessageEntity>()) { if (!EmailLogic.Configuration.SendEmails) { email.State = EmailMessageState.Sent; email.Sent = TimeZoneManager.Now; email.Save(); return; } try { SendInternal(email); email.State = EmailMessageState.Sent; email.Sent = TimeZoneManager.Now; email.Save(); } catch (Exception ex) { if (Transaction.InTestTransaction) //Transaction.IsTestTransaction { throw; } var exLog = ex.LogException().ToLite(); try { using (Transaction tr = Transaction.ForceNew()) { email.Exception = exLog; email.State = EmailMessageState.SentException; email.Save(); tr.Commit(); } } catch { } //error updating state for email throw; } } }
public IEnumerable<EmailMessageEntity> CreateEmailMessageInternal() { ExecuteQuery(); foreach (EmailAddressEntity from in GetFrom()) { foreach (List<EmailOwnerRecipientData> recipients in GetRecipients()) { EmailMessageEntity email = new EmailMessageEntity { Target = (Lite<Entity>)entity.ToLite(), Recipients = recipients.Select(r => new EmailRecipientEntity(r.OwnerData) { Kind = r.Kind }).ToMList(), From = from, IsBodyHtml = template.IsBodyHtml, EditableMessage = template.EditableMessage, Template = template.ToLite(), }; CultureInfo ci = recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault().ToCultureInfo(); EmailTemplateMessageEntity message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()); if (message == null) throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {0} (or Default)".FormatWith(template, ci)); email.Subject = SubjectNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = false, SystemEmail = systemEmail }); email.Body = TextNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = template.IsBodyHtml, SystemEmail = systemEmail, }); yield return email; } } }
private static bool AreDuplicates(EmailMessageEntity email, EmailMessageEntity dup) { if (!dup.Recipients.Where(a => a.Kind != EmailRecipientKind.Bcc).OrderBy(a => a.GetHashCode()) .SequenceEqual(email.Recipients.Where(a => a.Kind != EmailRecipientKind.Bcc).OrderBy(a => a.GetHashCode()))) { return(false); } if (!dup.From.Equals(email.From)) { return(false); } if (dup.Attachments.Count != email.Attachments.Count || !dup.Attachments.All(a => email.Attachments.Any(a2 => a2.Similar(a)))) { return(false); } return(true); }
protected virtual void SendInternal(EmailMessageEntity email) { var template = email.Template?.Try(t => EmailTemplateLogic.EmailTemplatesLazy.Value.GetOrThrow(t)); var config = getEmailSenderConfiguration(template, email.Target, email); if (config.SMTP != null) { SendSMTP(email, config.SMTP); } else if (config.Exchange != null) { SendExchangeWebService(email, config.Exchange); } else if (config.MicrosoftGraph != null) { SendMicrosoftGraph(email, config.MicrosoftGraph); } else { throw new InvalidOperationException("No way to send email found"); } }
private static bool AreDuplicates(EmailMessageEntity email, EmailMessageEntity dup) { if (!dup.Recipients.Where(a => a.Kind != EmailRecipientKind.Bcc).OrderBy(a => a.GetHashCode()) .SequenceEqual(email.Recipients.Where(a => a.Kind != EmailRecipientKind.Bcc).OrderBy(a => a.GetHashCode()))) return false; if (!dup.From.Equals(email.From)) return false; if (dup.Attachments.Count != email.Attachments.Count || !dup.Attachments.All(a => email.Attachments.Any(a2 => a2.Similar(a)))) return false; return true; }
public static void SendMail(this EmailMessageEntity email) { SenderManager.Send(email); }
public IEnumerable <EmailMessageEntity> CreateEmailMessageInternal() { ExecuteQuery(); foreach (EmailAddressEmbedded from in GetFrom()) { foreach (List <EmailOwnerRecipientData> recipients in GetRecipients()) { CultureInfo ci = recipients.Where(a => a.Kind == EmailRecipientKind.To).Select(a => a.OwnerData.CultureInfo).FirstOrDefault().ToCultureInfo() ?? EmailLogic.Configuration.DefaultCulture.ToCultureInfo(); EmailMessageEntity email = new EmailMessageEntity { Target = entity?.ToLite() ?? (this.systemEmail.UntypedEntity as Entity)?.ToLite(), Recipients = recipients.Select(r => new EmailRecipientEntity(r.OwnerData) { Kind = r.Kind }).ToMList(), From = from, IsBodyHtml = template.IsBodyHtml, EditableMessage = template.EditableMessage, Template = template.ToLite(), Attachments = template.Attachments.SelectMany(g => EmailTemplateLogic.GenerateAttachment.Invoke(g, new EmailTemplateLogic.GenerateAttachmentContext { QueryDescription = this.qd, ModelType = template.SystemEmail.ToType(), SystemEmail = systemEmail, CurrentRows = currentRows, ResultColumns = dicTokenColumn, Entity = entity, Template = template, Culture = ci, })).ToMList() }; EmailTemplateMessageEmbedded message = template.GetCultureMessage(ci) ?? template.GetCultureMessage(EmailLogic.Configuration.DefaultCulture.ToCultureInfo()); if (message == null) { throw new InvalidOperationException("Message {0} does not have a message for CultureInfo {1} (or Default)".FormatWith(template, ci)); } using (CultureInfoUtils.ChangeBothCultures(ci)) { email.Subject = SubjectNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = false, SystemEmail = systemEmail }); email.Body = TextNode(message).Print( new EmailTemplateParameters(entity, ci, dicTokenColumn, currentRows) { IsHtml = template.IsBodyHtml, SystemEmail = systemEmail, }); } yield return(email); } } }
private static void AssignEntities(this EmailMessageEntity email, EmailMessageEntity dup) { email.Target = dup.Target; foreach (var att in email.Attachments) att.File = dup.Attachments.FirstEx(a => a.Similar(att)).File; email.From.EmailOwner = dup.From.EmailOwner; foreach (var rec in email.Recipients.Where(a => a.Kind != EmailRecipientKind.Bcc)) rec.EmailOwner = dup.Recipients.FirstEx(a => a.GetHashCode() == rec.GetHashCode()).EmailOwner; }