コード例 #1
0
        Task <IMessageForSend> ResolveMessageAsync(IDataModel dm)
        {
            var templateName = dm.Eval <String>("Message.Template");
            var key          = dm.Eval <String>("Message.Key");
            var templatePath = _host.ApplicationReader.MakeFullPath(templateName, String.Empty);
            var fullPath     = Path.ChangeExtension(templatePath, "xaml");

            var env     = dm.Eval <List <ExpandoObject> >("Message.Environment");
            var hostObj = new ExpandoObject();

            hostObj.Set("Name", "Host");
            hostObj.Set("Value", _host.AppHost);
            env.Add(hostObj);

            using (var stream = _host.ApplicationReader.FileStreamFullPath(fullPath)) {
                var tml             = XamlServices.Load(stream) as Template;
                TemplatedMessage tm = tml.Get(key);
                if (tm == null)
                {
                    throw new MessagingException($"Message not found. Key = '{key}'");
                }
                var resolver = new MessageResolver(_host, _dbContext, dm);
                return(tm.ResolveAndSendAsync(resolver));
            }
        }
コード例 #2
0
 public async override Task <IMessageForSend> ResolveAndSendAsync(MessageResolver resolver)
 {
     return(new SmsMessageForSend(
                await resolver.ResolveAsync(this, Phone),
                await resolver.ResolveAsync(this, Message),
                await resolver.ResolveAsync(this, ExternalId)
                ));
 }
コード例 #3
0
        async Task <String> LoadBodyTemplate(EmailMessage msg, MessageResolver resolver)
        {
            if (String.IsNullOrEmpty(BodyTemplate))
            {
                return(null);
            }
            String text = await resolver.ResolveFileAsync(msg, BodyTemplate);

            return(text);
        }
コード例 #4
0
        async Task LoadBodyTemplate(EmailMessage msg, MessageResolver resolver)
        {
            if (String.IsNullOrEmpty(BodyTemplate))
            {
                return;
            }
            String text = await resolver.ResolveFileAsync(msg, BodyTemplate);

            if (text != null)
            {
                Body = text;
            }
        }
コード例 #5
0
        public async override Task <IMessageForSend> ResolveAndSendAsync(MessageResolver resolver)
        {
            var nm = new EmailMessageForSend()
            {
                Subject = await resolver.ResolveAsync(this, Subject),
                Body    = await resolver.ResolveAsync(this, Body),
            };
            var body = await LoadBodyTemplate(this, resolver);

            if (body != null)
            {
                nm.Body = body;
            }
            nm.To = await ResolveCollectionAsync(To, resolver);

            nm.Bcc = await ResolveCollectionAsync(Bcc, resolver);

            nm.CC = await ResolveCollectionAsync(CC, resolver);

            if (From != null)
            {
                nm.From = new MessageAddress(await resolver.ResolveAsync(this, From.Address), await resolver.ResolveAsync(this, From.DisplayName));
            }
            if (Attachments != null && Attachments.Count != 0)
            {
                foreach (var att in Attachments)
                {
                    var ratt = await ResolveAttachmentAsync(att, resolver);

                    if (ratt.Stream != null)
                    {
                        nm.Attachments.Add(ratt);
                    }
                }
            }
            if (Reports != null && Reports.Count != 0)
            {
                foreach (var rep in Reports)
                {
                    var ratt = await ResolveReportAsync(rep, resolver);

                    if (ratt.Stream != null)
                    {
                        nm.Attachments.Add(ratt);
                    }
                }
            }
            return(nm);
        }
コード例 #6
0
        async Task <AttachementForSend> ResolveReportAsync(MessageReport rep, MessageResolver resolver)
        {
            var repName = await resolver.ResolveAsync(this, rep.Name);

            if (repName == null)
            {
                repName = "report";
            }
            repName = Path.ChangeExtension(repName.Trim(), ".pdf");
            var ma = new AttachementForSend()
            {
                Name   = repName,
                Mime   = MimeTypes.Application.Pdf,
                Stream = await resolver.ResolveReportAsync(this, rep)
            };

            return(ma);
        }
コード例 #7
0
        public async override Task <IMessageForSend> ResolveAndSendAsync(MessageResolver resolver)
        {
            var nm = new EmailMessage()
            {
                Subject      = await resolver.ResolveAsync(this, Subject),
                Body         = await resolver.ResolveAsync(this, Body),
                BodyTemplate = await resolver.ResolveAsync(this, BodyTemplate)
            };
            await nm.LoadBodyTemplate(this, resolver);

            nm.To = await ResolveCollectionAsync(To, resolver);

            nm.Bcc = await  ResolveCollectionAsync(Bcc, resolver);

            if (From != null)
            {
                nm.From = new MessageAddress(await resolver.ResolveAsync(this, From.Address), await resolver.ResolveAsync(this, From.DisplayName));
            }
            return(nm);
        }
コード例 #8
0
 public abstract Task <IMessageForSend> ResolveAndSendAsync(MessageResolver resolver);
コード例 #9
0
        async Task <MessageAddressCollection> ResolveCollectionAsync(MessageAddressCollection coll, MessageResolver resolver)
        {
            var newColl = new MessageAddressCollection();

            foreach (var addr in coll)
            {
                var na = new MessageAddress(await resolver.ResolveAsync(this, addr.Address), await resolver.ResolveAsync(this, addr.DisplayName));
                newColl.Add(na);
            }
            return(newColl);
        }
コード例 #10
0
        async Task <AttachementForSend> ResolveAttachmentAsync(MessageAttachment att, MessageResolver resolver)
        {
            var ma = new AttachementForSend()
            {
                Name   = (await resolver.ResolveAsync(this, att.Name))?.Trim(),
                Mime   = (await resolver.ResolveAsync(this, att.Mime))?.Trim(),
                Stream = await resolver.ResolveStreamAsync(this, att.Data)
            };

            return(ma);
        }