Example #1
0
        protected virtual void SendInternal(EmailMessageEntity email)
        {
            MailMessage message = CustomCreateMailMessage != null?CustomCreateMailMessage(email) : CreateMailMessage(email);

            using (HeavyProfiler.Log("SMTP-Send"))
                EmailLogic.GetSmtpClient(email).Send(message);
        }
Example #2
0
        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);
    }
Example #4
0
    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();
    }
Example #5
0
 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;
                }
            }
        }
Example #7
0
 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();
    }
Example #9
0
        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)
     });
 }
Example #12
0
        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);
        }
Example #15
0
        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;
        }
Example #17
0
 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;
        }