在电子邮件正文中发送xsl doc

时间:2017-12-19 23:03:35

标签: c# xslt email-integration

没有用户,编程会更容易......

我真正需要做的是: 将网页的内容(包括样式)放入电子邮件正文中,并设置主题。 要么 向当前用户发送包含网页正文的电子邮件。

我真的不在乎这是如何实现的 - 服务器端或客户端端。除了尝试将网页推入剪贴板以供用户粘贴到他们的电子邮件中之外,我还没有提出任何好的客户方式。

应用背景 我用c#,ts,angular写了一个网站。该站点管理xml文档。

用户可以选择文档并单击“Human Readable”按钮或“XML”按钮。 “Human Readable”是带有xsl的xml,使它看起来很适合人类。 XML按钮显然适用于非人类。

“人类可读”版本将在另一个浏览器选项卡中打开。

用户想要一个新的“电子邮件”按钮,用于通过电子邮件发送人类可读的内容。点击电子邮件按钮的人可以访问我的网站,但收件人可能没有。

我尝试过教我的用户做Ctrl + A,Ctrl + C,打开电子邮件,Ctrl + V,但这超出了他们的大部分功能。

我已经尝试了很多不同的方法来完成这一切,但都失败了。

我目前正在进行mailto链接,打开他们的电子邮件,正文包含人类可读的链接。

这是我到目前为止所尝试的内容 - 这可能不是我尝试的确凿列表,因为我已经在这几天了。

  1. 我尝试在人类可读(xsl with javascript)中添加一个按钮,试图将生成的html复制到剪贴板中以供用户粘贴。
  2. 网站上用于将iFrame刮到剪贴板中的按钮
  3. javascript复制/粘贴技术的多次迭代
  4. 执行ReadAsStringAsync()的c#控制器。结果函数(我将在下面发布,因为我最喜欢那个解决方案...
  5. 选项#4我偏爱并且我几乎正在工作 - 如果不是因为那个讨厌的xsl没有被格式化它可能会起作用。我的结果是没有xml标签而没有样式的数据。

    [ActionName("PostEmailHumanReadable")]
        public void EmailHumanReadable(List<DocumentVM> documents)
        {
            foreach (var document in documents)
            {
    
                var docId = document.document.DocId;
                var docTypeId = document.document.DocTypeId;
                var co = string.Empty;
                var order = string.Empty;
                var name = string.Empty;
                var po = string.Empty;
    
                // get the data for the subject line
                using (var efUoW = new EFUnitOfWork(EDIEnvironment.EDIEnvironment.Instance.ConnectionString))
                {
                    var doc = efUoW.DocumentRepository.GetById(docId);
                    co = doc.CompanyId.ToString();
                    var orders = efUoW.DocumentOrderRepository.GetByDocumentID(docId).ToList();
                        if (!string.IsNullOrEmpty(doc.Source_Order))
                            order = doc.Source_Order;
                        else
                            order = "n/a";
    
    
                    foreach (var o in orders)
                        order += string.Format("{0} ", o.OrderId);
                    //order = string.Join(",", doc.DocumentOrders.Select(q => q.OrderId).ToList());
                    name = doc.BillToName;
                    name = doc.PurchaseOrder;
                }
                var subject = string.Format("{0}, {1}, {2}, {3}", co, order, name, po);
    
                // get the human readable
                var hrResponse = GetFile(docId, docTypeId);
                var hrText = hrResponse.Content.ReadAsStringAsync().Result;
    
                // format the url
                var url = string.Format("<a href='/api/Documents/Getfile?DocId={0}&DocTypeId={1}'>click here to open the jEDI Human Readable</a><br><br>", docId, docTypeId);
    
                // find the current user's email address
                var users = new List<string>();
                users.Add(AppUser.ADUserName);
                //var to = EmailUtility.GetEmailID(users);
    
                // and finally send the email
                EmailUtility.SendEmail(EmailUtility.GetEmailID(users), null, subject, url + hrText);
            }
        }
        [ActionName("GetFile")]
        public HttpResponseMessage GetFile(int DocId, int DocTypeId)
        {
            if (DocTypeId == (int)DocumentTypeEnum.EDI850)
            {
                using (var efUoW = new Factory_UOW().EF_UOW())
                {
                    var doc = efUoW.DocumentRepository.GetById(DocId);
                    var xdoc = XDocument.Parse(doc.Message);
                    var proc = new XProcessingInstruction("xml-stylesheet", "type='text/xsl' href='/EDI850.xsl'");
                    xdoc.Root.AddBeforeSelf(proc);
                    var response = new HttpResponseMessage();
                    response.Content = new System.Net.Http.StringContent(xdoc.ToString());
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
                    response.Content.Headers.Add("X-UA-Compatible", "IE=edge");
                    return response;
                }
    

    我非常感谢能够帮助您实现这一目标。 并且,是的,我知道我不应该做Async()。结果 - 阻塞和所有......让我们先让这个工作,我们呢?

0 个答案:

没有答案