将动态表格或div内容作为电子邮件正文内容发送

我有一个页面( somePage.aspx ),我需要作为电子邮件正文生成的内容

 
<% if(edata != null) for (int idx=0;idx <tr style=" background-color:">
name ID initial Stage current Stage
<input type="image" src="" style="width:25px" /> <input type="" src="" style="width:25px" />

sendLog()代码

 public void sendLog() { mail.aReciver="username@gmail.com"; mail.bSubject="ttest"; mail.cBody = DV_UsersInTblTime.InnerHtml; mail.HentalSend(); } 

我无法获得分配mail.cBody的内容的价值。
它说的是关于价值不是文字等的东西。

这是我在外部类中使用的方法,该方法在最后一次尝试将页面内容的function添加为正文之前工作正常,如何在此处根据需要实现结果?

 public static class mail { public static string aReciver, bSubject, cBody; public static void HentalSend() { string SmtpServer = "smtp.gmail.com"; int port = 587; string sender = "Sender@domain.com"; string ReCiver = aReciver; string Subject = bSubject; string Body = cBody; string account = "mail@domain.com"; string Pass = "123456"; Send(SmtpServer, port, account, Pass, sender, Receiver, Subject, Body); ... //send() is another relevant method to this question, it does rest of mail settings } } 

此代码将生成的动态控件的HTML转换为字符串变量。

 StringBuilder stringBuilder = new StringBuilder(); StringWriter writer = new StringWriter(stringBuilder); HtmlTextWriter htmlWriter = new HtmlTextWriter(writer); try { DV_TimeReportWraper.RenderControl(htmlWriter); } catch (HttpException generatedExceptionName) { } string DV_TimeReportWraper_innerHTML = stringBuilder.ToString(); 

然后使用DV_TimeReportWraper_innerHTML作为电子邮件的正文

如果此控件具有子控件,则可能必须创建循环。 更多相关内容: http : //msdn.microsoft.com/en-us/library/htwek607.aspx#Y472

我在这里假设您正在加载该页面,然后在页面加载或页面加载期间或在页面生命周期的某些部分期间尝试运行sendLog方法。 试图获取未呈现的东西的内部世界不会起作用。

基本上,您需要先呈现页面,然后获取内容。

[编辑]我正在更新我的答案,包括我将如何做到这一点。 正如我在上面的评论中所述,而不是编写.NET代码来强制渲染。让ASP.NET为你做肮脏的工作。

  using(WebClient c=new WebClient()){ var result=c.DownloadString(@"http://yourdomain.com/somePage.aspx/"); } 

现在,您可以将该调用的结果用作电子邮件正文。

试试这个 ,

添加命名空间

 using System; using System.Net.Mail; using System.IO; using System.Configuration; 

邮件function

 public void SendHTMLMail() { StreamReader reader = new StreamReader(Server.MapPath("~/somePage.aspx")); string readFile = reader.ReadToEnd(); string myString = ""; myString = readFile; myString = myString.Replace("$$Admin$$", "Sajan SJ"); myString = myString.Replace("$$CompanyName$$", "RFT"); myString = myString.Replace("$$Email$$", "sajan@roomfortekki.com"); myString = myString.Replace("$$Website$$", "http://www.roomfortekki.com"); MailMessage Msg = new MailMessage(); MailAddress fromMail = new MailAddress("sajan@roomfortekki.com"); // Sender e-mail address. Msg.From = fromMail; // Recipient e-mail address. Msg.To.Add(new MailAddress("sajan@roomfortekki.com")); // Subject of e-mail Msg.Subject = "Send Mail with HTML File"; Msg.Body = myString.ToString(); Msg.IsBodyHtml = true; string sSmtpServer = ""; sSmtpServer = "10.2.69.121"; SmtpClient a = new SmtpClient(); a.Host = sSmtpServer; a.Send(Msg); reader.Dispose(); } 

Hardrada在这里指出了正确的方向

在.ASPX文件下的服务器上,添加所需的本地化文件

 \App_LocalResources somePage.aspx.en.resx somePage.aspx.es.resx somePage.aspx.fr.resx somePage.aspx 
  • 添加您的翻译
  • 将它们插入您的aspx文件中

按照建议调用您的文件,但使用查询字符串除外

/somePage.aspx?culture=fr

在somepage.aspx中,在OnLoad()或OnInit()中设置:

 var culture = System.Globalization.CultureInfo.CreateSpecificCulture(Request["culture"]) if (culture != null) System.Threading.Thread.CurrentThread.CurrentUICulture = culture; 

瞧!

SendEmail按钮单击代码:

  protected void BtnSendIngMail_Click(object sender, EventArgs e) { StringBuilder stringBuilder = new StringBuilder(); StringWriter writer = new StringWriter(stringBuilder); HtmlTextWriter htmlWriter = new HtmlTextWriter(writer); try { DivSendMail.RenderControl(htmlWriter); } catch (HttpException generatedExceptionName) { e.ToString(); } try { string DefProductTemp_Html = stringBuilder.ToString(); //send mail string smtpServer = Convert.ToString(DotNetNuke.Common.Globals.HostSettings["SMTPServer"]); string uid = Convert.ToString(DotNetNuke.Common.Globals.HostSettings["SMTPUsername"]); string upwd = Convert.ToString(DotNetNuke.Common.Globals.HostSettings["SMTPPassword"]); // DotNetNuke.Services.Mail.Mail.SendMail(uid, txtMail.Text, uid, "Proforma Invoice", DefProductTemp_Html, "", DotNetNuke.Services.Mail.MailFormat.Html.ToString(), "", "", "", ""); System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); System.Net.Mail.SmtpClient client = new SmtpClient(); mail.To.Add(txtMail.Text); mail.From = new System.Net.Mail.MailAddress(uid); mail.Subject = ddlSubList.SelectedItem.Text; mail.SubjectEncoding = System.Text.Encoding.UTF8; mail.IsBodyHtml = true; mail.Body = DefProductTemp_Html; //mail.BodyEncoding = System.Text.Encoding.UTF8; //mail.Priority = System.Net.Mail.MailPriority.High; client.Credentials = new System.Net.NetworkCredential(uid, upwd); //client.Host = "localhost"; client.Host = "smtp.gmail.com"; client.Port = 587; client.EnableSsl = true; client.Send(mail); } catch (Exception ex) { // catch }