没有用户,编程会更容易......
我真正需要做的是: 将网页的内容(包括样式)放入电子邮件正文中,并设置主题。 要么 向当前用户发送包含网页正文的电子邮件。
我真的不在乎这是如何实现的 - 服务器端或客户端端。除了尝试将网页推入剪贴板以供用户粘贴到他们的电子邮件中之外,我还没有提出任何好的客户方式。
应用背景 我用c#,ts,angular写了一个网站。该站点管理xml文档。
用户可以选择文档并单击“Human Readable”按钮或“XML”按钮。 “Human Readable”是带有xsl的xml,使它看起来很适合人类。 XML按钮显然适用于非人类。
“人类可读”版本将在另一个浏览器选项卡中打开。
用户想要一个新的“电子邮件”按钮,用于通过电子邮件发送人类可读的内容。点击电子邮件按钮的人可以访问我的网站,但收件人可能没有。
我尝试过教我的用户做Ctrl + A,Ctrl + C,打开电子邮件,Ctrl + V,但这超出了他们的大部分功能。
我已经尝试了很多不同的方法来完成这一切,但都失败了。
我目前正在进行mailto链接,打开他们的电子邮件,正文包含人类可读的链接。
这是我到目前为止所尝试的内容 - 这可能不是我尝试的确凿列表,因为我已经在这几天了。
选项#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()。结果 - 阻塞和所有......让我们先让这个工作,我们呢?