将aspx页面导出为pdf并通过asp.net中的邮件发送

时间:2012-09-13 12:28:27

标签: asp.net

我想通过电子邮件发送aspx页面。所以我把它转换成了pdf。问题是pdf是在保存数据之前创建的。所以当我打开pdf时,我的测试盒是空的。请找我一个解决方案。以下是我正在使用的代码。另外,我想将pdf文件作为附件发送。

     protected void SendMail()
    {

        var userName = "4.n-4@gmail.com";

        var toAddress = YourEmail.Text.ToString();

        const string Password = "Mypassword123#";

        string subject = YourSubject.Text.ToString();
        string body = "From: " + YourName.Text + "\n";
        body += "Email: " + YourEmail.Text + "\n";
        body += "Subject: " + YourSubject.Text + "\n";
        body += "Question: \n" + Comments.Text + "\n";

        var smtp = new System.Net.Mail.SmtpClient();
        {
            smtp.Host = "10.238.52.240";
            smtp.Port = 25;
            smtp.EnableSsl = false;
            smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
            smtp.Credentials = new NetworkCredential(userName, Password);
            smtp.Timeout = 20000;
        }

        smtp.Send(userName, toAddress, subject, body);
    }

     protected void Button1_Click(object sender, EventArgs e)
    {

        Response.ContentType = "application/pdf"; 
        Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache); 
        StringWriter sw = new StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(sw); 
        this.Page.RenderControl(hw); 
        StringReader sr = new StringReader(sw.ToString());
        Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f); 
        HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
        pdfDoc.Open(); 
        htmlparser.Parse(sr); 

        Response.Write(pdfDoc);


         try
        {
             SendMail();

            DisplayMessage.Text = "Your Comments after sending the mail";
            DisplayMessage.Visible = true;
            YourSubject.Text = "";
            YourEmail.Text = "";
            YourName.Text = "";
            Comments.Text = "";
            pdfDoc.Close();
            Response.End();
        }
        catch (Exception) { }
    }
        }
      }

1 个答案:

答案 0 :(得分:0)

我不知道你的其余代码背后,但我猜你错过了足够的PostBack处理。当您单击“提交”按钮时,首先发布该页面(即“PostBack” - 重新处理整个页面生命周期,包括Page_Load事件;重新初始化页面),因此当您到达时之后,在按钮的Click事件中,表单和文本框将为空。

您可以在msdn上阅读ASP.NET页面生命周期。