通过电子邮件Asp.Net发送部分页面作为文件附件

时间:2011-09-22 12:03:04

标签: asp.net web-applications

是否可以发送部分页面,例如IFrame的内容或Panel的内容作为电子邮件中的附件?

我正在动态创建具有动态尺寸标注的制造图纸页面。我希望用户能够单击“电子邮件”按钮并将其作为附件发送给供应商。

2 个答案:

答案 0 :(得分:1)

您可以使用Server.Execute执行页面,捕获TextWriter中的输出,然后使用该字符串为您的电子邮件构建html附件。 server.execute仍在当前用户上下文中执行,因此如果您将其选择放在Session中,那么构建nexessary html就很容易了。但是有一些陷阱:

  • 如果你链接到图片并使用hrefs,要么制作这些绝对链接,要么在头脑中使用基础href标记
  • 我要小心发送html附件:垃圾邮件过滤器和病毒扫描程序可以阻止它们。
祝你好运!

门诺

答案 1 :(得分:0)

            Winnovative.WnvHtmlConvert.PdfConverter p = new Winnovative.WnvHtmlConvert.PdfConverter();

            p.LicenseKey = "NotPostingTHat";
            p.PdfDocumentOptions.GenerateSelectablePdf = true;
            /*
            ... Setting a bunch of options ...
            */
            p.PdfFooterOptions.DrawFooterLine = false;

            System.IO.TextWriter writer = new System.IO.StringWriter();

            string html = "";
            string pdfType = GetPdfType();

            switch (pdfType.ToUpper())
            {
                case "THEME":
                    HttpContext.Current.Server.Execute("~/Pdf/Theme.aspx", writer);
                    break;
                /* More cases */
            }

            html = writer.ToString();

            if (html.Length > 0)
            {
                byte[] bytes = p.GetPdfBytesFromHtmlString(html);
                context.Response.ContentType = "application/pdf";
                context.Response.OutputStream.Write(bytes, 0, bytes.Length);
            }
            else
            {
                context.Response.ContentType = "text/plain";
                context.Response.Write("No data found!");

                foreach (string item in context.Request.Form.AllKeys)
                    context.Response.Write(String.Format("{0}: {1}\n", new object[] { item, context.Request.Form[item] }));
            }

没什么。这是在.ashx。

门诺