将Gridview HTML传递到电子邮件正文(字符串) [英] Pass Gridview HTML into email body (string)
问题描述
我一直在尝试使用百万种方法让我的网格视图在电子邮件正文中可见..
其中一个方法是这样的:
私有 函数 RenderGridView()作为 字符串
Dim writer As 新 StringWriter
Dim htmlWriter As 新 HtmlTextWriter(writer)
尝试
gdEmail.RenderControl(htmlWriter)
Catch ex As HttpException
结束 尝试
返回 writer.ToString()
结束 功能
公共 覆盖 Sub VerifyRenderingInServerForm( ByVal control As System.Web.UI.Control)
结束 Sub
受保护的 覆盖 Sub 渲染( ByVal writer As System.Web.UI.HtmlTextWriter)
如果页面 IsNot 没什么 然后
页面.VerifyRenderingInServerFor m(我)
结束 如果
MyBase .Render(writer)
结束 Sub
Dim StrEmailBody As String =
StrEmailBody = StrEmailBody& RenderGridView()
这是我收到的电子邮件的结果:
& lt; div& gt;
& lt; table cellspacing =& quot; 1& quot; CELLPADDING =安培; QUOT; 3及QUOT; ID =安培; QUOT; MainContent_gdEmail&安培; QUOT;风格=安培; QUOT;背景颜色:白色;边框颜色:白色;边框宽度:2px的;边界式:脊;&安培; QUOT;&安培; GT;
& lt; tr style =& quot; color:#E7E7FF; background-color:#4A3C8C; font-weight:bold;& quot;& gt;
& lt; th scope =& quot; col& quot;& gt; Reg。 No& lt; / th& gt;& lt; th scope =& quot; col& quot;& gt; Requestor& lt; / th& gt;& lt; th scope =& quot; col& & gt; Control No& lt; / th& gt;& lt; th scope =& quot; col& quot;& gt; Cert。类型&安培; LT; /第&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120813/001363& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0216&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120817/001379& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0044&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120817/001380& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0045&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120823/001381& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0053&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120824/001384& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0110&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120828/001395& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0271&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120830/001406& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0284&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120903/001413& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0371&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120903/001414& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0067&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;& lt; tr style =& quot; color:Black; background-color:#DEDFDE;& quot;& gt;
& lt; td& gt; WC-DG / 20120905/001415& lt; / td& gt;& lt; td& gt; EPJ6520-HAMDAN BIN JELANI& lt; / td& gt;& LT; TD&安培; GT; WC-DG0137&安培; LT; / TD&安培; GT;&安培; LT; TD&安培; GT; CALIBRATE&安培; LT; / TD&安培; GT;
& lt; / tr& gt;
& lt; / table& gt;
& lt; / div& gt;
我错过了什么步骤?谢谢你们。
---更新--- -
完整代码:
受保护的子BtnApprove_Click(ByVal sender As Object,ByVal e As EventArgs)处理btnApprove.Click
SendNotificationEmail(regArr,Nothing,Nothing,Nothing,Nothing,Nothing,APPROVED,nxt)
End Sub
Public Sub SendNotificationEmail(ByVal RegNo As String,ByVal RequestorName As String,ByVal RequestorID As String,ByVal CtrlNo As String,ByVal CertType As String,ByVal Remarks As String,ByVal ReceiverType As String,ByVal NextAppID As String)
If ReceiverType = APPROVED和NextAppID<> LAST然后
Dim StrEmailBody As String =
StrEmailBody = StrEmailBody& 问候,& Chr(10)& Chr(10)
StrEmailBody = StrEmailBody& 你有新的证书等待你的批准:& Chr(10)& Chr(10)&环境。新浪潮& Environment.NewLine
StrEmailBody = StrEmailBody& &环境。新浪潮& Environment.NewLine
StrEmailBody = StrEmailBody& RegNo
StrEmailBody = StrEmailBody& &环境。新浪潮& Environment.NewLine
StrEmailBody = StrEmailBody& 请点击以下网址作为参考:& Chr(10)& < &安培; http://& HttpContext.Current.Request.Url.Host& HttpContext.Current.Request.ApplicationPath& /Account /Login.aspx& > 中&安培; Chr(10)
StrEmailBody = StrEmailBody& RenderGridView()
Dim StrEmailSubject =TQM INSTRUMENT E-CERTIFICATE REQUISITION CONFIRMATION
SendEmailNotification(GetEmailObject(StrEmailBody,StrEmailSubject,RequestorID,NextAppID))
End if
结束Sub
私有函数RenderGridView()As String
Dim writer As New StringWriter
Dim htmlWriter As New HtmlTextWriter(writer)
尝试
gdEmail.RenderControl (htmlWriter)
Catch ex As HttpException
结束尝试
返回writer.ToString()
结束函数
公开覆盖Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)
End Sub
受保护的覆盖子渲染(ByVal writer As System.Web.UI.HtmlTextWriter)
如果Page IsNot Nothing则
Page.VerifyRenderingInServerForm(Me)
End if
MyBase.Render(writer)
结束子
私人函数SendEmailNotification(ByVal MailSend As MailMessage)As String
Dim webS As New EmailService.emailServices
Dim CountTo As Integer = 1
Dim CountCC As Integer = 1
Dim ToStrS As String =
Dim CCStrS As String =
For each ma As MailAddress在MailSend.To
If CountTo = 1 Then
ToStrS = ToStrS& ma.Address
Else
ToStrS = ToStrS& ; &安培; ma.Address
End if
CountTo = CountTo + 1
Next
For each ma As MailAddress In MailSend.CC
If CountCC = 1 Then
CCStrS = CCStrS& ma.Address
Else
CCStrS = CCStrS& ; &安培; ma.Address
End if
CountCC = CountCC + 1
Next
MailSend.IsBodyHtml = True
Dim s As String = webS.sendmailSmtp(MailSend .Subject,MailSend.Body,sitinoraina.matyazaz@sep.epson.com.sg,Nothing,,MailSend.From.Address,MailSend.From.Address)
SendEmailNotification = s
结束函数
私有函数GetEmailObject(ByVal EmailBody As String,ByVal EmailSubject As String,ByVal RequestorID As String,ByVal NextAppID As String)As MailMessage
Dim TempMail As New MailMessage()
TempMail.From =新邮件地址(eCalibration_Admin@sep.epson.com.sg)
Dim ToColl As MailAddressCollection = TempMail.To
Dim CCColl As MailAddressCollection = TempMail.CC
ToColl.Add(CheckEmailAdd(NextAppID))
TempMail.Subject = EmailSubject
TempMail.Body = EmailBody&环境。新浪潮& TO:&环境。新浪潮& CheckEmailAdd(NextAppID)
返回TempMail
结束函数
私有函数CheckEmailAdd(ByVal touserid As String)As String
Dim Result As String =
Dim dt As DataTable = DBLayer.Util.Data.MsSql.DBFunction.BuildDataTable(SELECT * FROM EPJ_EMAIL WHERE USERID_T =''& touserid&'',DBLayer.ClsConnection.getConnString(Maintenance))
如果dt.Rows.Count> 0然后
结果= dt.Rows(0).Item(EMAILADD_T)
结束如果
CheckEmailAdd =结果
结束函数
一切正确。这是因为您没有表明您的电子邮件或多部分电子邮件中的部分具有HTML 内容类型,语法如下:
内容类型:text / plain
请参阅:
http://en.wikipedia.org/wiki/MIME [ ^ ]。
在本文中,您将看到其他相关的邮件标题,说明多部分消息格式以及对相关 RFC备忘录的引用标准化邮件消息结构。
由于某种原因,您的代码示例与您完全无关问题,因为你从未演示过如何形成邮件消息文本本身,但通常是使用类System.Net.Mail.MailMessage
:
$ b完成的$ b http://msdn.microsoft.com/en-us/li brary / system.net.mail.mailmessage.aspx [ ^ ]。
从这篇MSDN文章中,您可以了解如何设置邮件的所有细节。
例如,这个页面解释了简单HTML消息的形成:
http://www.systemnetmail.com/faq/3.1.2.aspx [ ^ ]。
此页面 - 包含内容类型的多部分消息plain / text和plain / html:
http:// www。 systemnetmail.com/faq/3.1.3.aspx [ ^ ]。
要查看MIME媒体类型的完整列表,您需要向IANA发送电子邮件:
http://www.iana.org/assignments/media-types [ ^ ],
http://www.iana.org/assignments/media-types/text [ ^ ]。
参见:
http://en.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority [ ^ ],
http://www.iana.org/ [ ^ ]。
-SA
Hye all,
I have been trying like million methods to make my gridview visible inside email body..
One of the method is like this:
Private Function RenderGridView() As String
Dim writer As New StringWriter
Dim htmlWriter As New HtmlTextWriter(writer)
Try
gdEmail.RenderControl(htmlWriter)
Catch ex As HttpException
End Try
Return writer.ToString()
End Function
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)
End Sub
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
If Page IsNot Nothing Then
Page.VerifyRenderingInServerForm(Me)
End If
MyBase.Render(writer)
End Sub
Dim StrEmailBody As String = "" StrEmailBody = StrEmailBody & RenderGridView()
This is the result from the email I received:
<div> <table cellspacing="1" cellpadding="3" id="MainContent_gdEmail" style="background-color:White;border-color:White;border-width:2px;border-style:Ridge;"> <tr style="color:#E7E7FF;background-color:#4A3C8C;font-weight:bold;"> <th scope="col">Reg. No</th><th scope="col">Requestor</th><th scope="col">Control No</th><th scope="col">Cert. Type</th> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120813/001363</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0216</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120817/001379</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0044</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120817/001380</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0045</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120823/001381</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0053</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120824/001384</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0110</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120828/001395</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0271</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120830/001406</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0284</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120903/001413</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0371</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120903/001414</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0067</td><td>CALIBRATE</td> </tr><tr style="color:Black;background-color:#DEDFDE;"> <td>WC-DG/20120905/001415</td><td>EPJ6520-HAMDAN BIN JELANI</td><td>WC-DG0137</td><td>CALIBRATE</td> </tr> </table> </div>
What step am I missing? Thanks guys.
---UPDATED-----
Full Code:
Protected Sub BtnApprove_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnApprove.Click SendNotificationEmail(regArr, Nothing, Nothing, Nothing, Nothing, Nothing, "APPROVED", nxt) End Sub Public Sub SendNotificationEmail(ByVal RegNo As String, ByVal RequestorName As String, ByVal RequestorID As String, ByVal CtrlNo As String, ByVal CertType As String, ByVal Remarks As String, ByVal ReceiverType As String, ByVal NextAppID As String) If ReceiverType = "APPROVED" And NextAppID <> "LAST" Then Dim StrEmailBody As String = "" StrEmailBody = StrEmailBody & "Greetings," & Chr(10) & Chr(10) StrEmailBody = StrEmailBody & "You have new certificate awaiting for your approval: " & Chr(10) & Chr(10) & Environment.NewLine & Environment.NewLine StrEmailBody = StrEmailBody & "" & Environment.NewLine & Environment.NewLine StrEmailBody = StrEmailBody & RegNo StrEmailBody = StrEmailBody & "" & Environment.NewLine & Environment.NewLine StrEmailBody = StrEmailBody & "Please click below URL for reference: " & Chr(10) & "<" & "http://" & HttpContext.Current.Request.Url.Host & HttpContext.Current.Request.ApplicationPath & "/Account/Login.aspx" & ">" & Chr(10) StrEmailBody = StrEmailBody & RenderGridView() Dim StrEmailSubject = "TQM INSTRUMENT E-CERTIFICATE REQUISITION CONFIRMATION " SendEmailNotification(GetEmailObject(StrEmailBody, StrEmailSubject, RequestorID, NextAppID)) End If End Sub Private Function RenderGridView() As String Dim writer As New StringWriter Dim htmlWriter As New HtmlTextWriter(writer) Try gdEmail.RenderControl(htmlWriter) Catch ex As HttpException End Try Return writer.ToString() End Function Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control) End Sub Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) If Page IsNot Nothing Then Page.VerifyRenderingInServerForm(Me) End If MyBase.Render(writer) End Sub Private Function SendEmailNotification(ByVal MailSend As MailMessage) As String Dim webS As New EmailService.emailServices Dim CountTo As Integer = 1 Dim CountCC As Integer = 1 Dim ToStrS As String = "" Dim CCStrS As String = "" For Each ma As MailAddress In MailSend.To If CountTo = 1 Then ToStrS = ToStrS & ma.Address Else ToStrS = ToStrS & ";" & ma.Address End If CountTo = CountTo + 1 Next For Each ma As MailAddress In MailSend.CC If CountCC = 1 Then CCStrS = CCStrS & ma.Address Else CCStrS = CCStrS & ";" & ma.Address End If CountCC = CountCC + 1 Next MailSend.IsBodyHtml = True Dim s As String = webS.sendmailSmtp(MailSend.Subject, MailSend.Body, "sitinoraina.matyazaz@sep.epson.com.sg", Nothing, "", MailSend.From.Address, MailSend.From.Address) SendEmailNotification = s End Function Private Function GetEmailObject(ByVal EmailBody As String, ByVal EmailSubject As String, ByVal RequestorID As String, ByVal NextAppID As String) As MailMessage Dim TempMail As New MailMessage() TempMail.From = New MailAddress("eCalibration_Admin@sep.epson.com.sg") Dim ToColl As MailAddressCollection = TempMail.To Dim CCColl As MailAddressCollection = TempMail.CC ToColl.Add(CheckEmailAdd(NextAppID)) TempMail.Subject = EmailSubject TempMail.Body = EmailBody & Environment.NewLine & "TO : " & Environment.NewLine & CheckEmailAdd(NextAppID) Return TempMail End Function Private Function CheckEmailAdd(ByVal touserid As String) As String Dim Result As String = "" Dim dt As DataTable = DBLayer.Util.Data.MsSql.DBFunction.BuildDataTable("SELECT * FROM EPJ_EMAIL WHERE USERID_T = ''" & touserid & "'' ", DBLayer.ClsConnection.getConnString("Maintenance")) If dt.Rows.Count > 0 Then Result = dt.Rows(0).Item("EMAILADD_T") End If CheckEmailAdd = Result End Function
All correct. This is because you provide no indication that your e-mail or a part in multipart e-mail has HTML content type, in this syntax:
Content-Type: text/plain
Please see:
http://en.wikipedia.org/wiki/MIME[^].
In this article, you will see other relevant mail message header, explanation of multipart message format and reference to relevant RFC memoranda standardizing a mail message structure.
By some reason, your code sample is totally irrelevant to you problem, as you never demonstrated how you formed the mail message text itself, but usually it is done using the classSystem.Net.Mail.MailMessage
:
http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.aspx[^].
From this MSDN article you can find out how to set all the detail of the message.
For example, this page explains forming of simple HTML message:
http://www.systemnetmail.com/faq/3.1.2.aspx[^].
And this page — а multipart message with content types "plain/text" and "plain/html":
http://www.systemnetmail.com/faq/3.1.3.aspx[^].
To check the the full list of MIME media type, you need to address to IANA:
http://www.iana.org/assignments/media-types[^],
http://www.iana.org/assignments/media-types/text[^].
See also:
http://en.wikipedia.org/wiki/Internet_Assigned_Numbers_Authority[^],
http://www.iana.org/[^].
—SA
这篇关于将Gridview HTML传递到电子邮件正文(字符串)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!