send dynamic table or div content as an email body content

.net-4.0, asp.net, c#, sendmail

Solution

This code will get the generated HTML of your dynamic control in to a string variable.

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();

Then just use `DV_TimeReportWraper_innerHTML` as the body of your email

You might have to create a loop in case this control has children controls. More on that here: http://msdn.microsoft.com/en-us/library/htwek607.aspx#Y472

Problem

I have a page (`somePage.aspx`) and I need the content that has been generated as an Email body ``` <div id="DV_TimeReportWraper" runat="server" style="display:block"> <table id="TBL_UsersinTblTime"> <tr id="TR_UsersinTblTime"> <td id="TD_H_Name" class="Dg"> name </td> <td id="TD_H_UserID" class="Dg"> ID </td> <td id="TD_H_Status" class="Dg"> initial Stage </td> <td id="TD_H_SignOutAutoExeState" class="Dg"> current Stage </td> </tr> <% if(edata != null) for (int idx=0;idx<edata.Count;idx++) { var row = edata[idx]; bool bgcl = (idx % 2) == 0; string BgCol = ""; if (bgcl) BgCol = "#70878F"; else BgCol = "#E6E6B8"; %> <tr style=" background-color:<%=BgCol%>"> <td id="TD_Name"> <% = row["name"] %> </td> <td id="TD_UserID"> <%= row["UserId"]%> </td> <td id="TD_Status"> <% int uidForSrc = Convert.ToInt32(row["UserId"]); string src = "images/SignedOutNoFrame.png"; if (UserDidnotSignOutTimeOut(uidForSrc)) src = "images/didnotSignOut.png"; %> <input type="image" src="<% =src %>" style="width:25px" /> </td> <td id="TD_SignOutAutoExeState" > <% string EexcSrc = ""; string inputType ="hidden"; //this updates if needed then returns true= needed update false = isn't need if (UpdatedTimeOutOKForUSER(uidForSrc)) { inputType = "image"; excSrc = "/images/SignedOutNoFrame.png"; } %> <input type="<%=inputType %>" src="<%=EexcSrc %>" style="width:25px" /> </td> </tr> <% if (idx == edata.Count - 1) sendLog(); } %> </table> </div> ``` code for `sendLog()` ``` public void sendLog() { mail.aReciver="username@gmail.com"; mail.bSubject="ttest"; mail.cBody = DV_UsersInTblTime.InnerHtml; mail.HentalSend(); } ``` I can't get the value of content to assign `mail.cBody` with. It's saying something about the value not being a literal etc'. That is the method I'm using in an external class which works fine till this last attempt to add the functionality of page content as a body, how is it possible to achieve the result as needed here? ``` 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 } } ```

Original source