Post

截取一个Asp.Net页面中的部分内容作为邮件的一部分发送给用户

截取一个Asp.Net页面中的部分内容作为邮件的一部分发送给用户

问题描述

下面是一个Asp.Net的 Page

1
2
3
4
5
6
7
8
9
10
11
12
13
******************************************************  
*Header   
******************************************************  
*Body   
*   
*   
*   
*   
*   
******************************************************  
*Footer   
* Send[Button]  
******************************************************

当用户点击Send后 抽取body 部分的html内容当作邮件正文的一部分发给用户。

解法一 前端截取

Send Button Click 后,先执行页面中JavaScriptBody 中的内容存到一个 hidden filed 中,然后PostBack

1
2
3
4
5
6
7
8
9
function ClientGet()  
{   
    //result is a div.  
    var result = document.getElementById("result"); 
    var hiddenInfo = document.getElementById("hiddenInfo");

    //alert(result.innerText); 
    hiddenInfo.value = result.innerHTML; 
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<asp:Button ID="btnSendMail" runat="server" Text="Send" OnClientClick="ClientGet();" OnClick="btnSendMail_Click"/> 
private void SendMail( string body)  
{  
    SmtpClient smtpClient = new SmtpClient(); 
    MailMessage message = new MailMessage(); 
    MailAddress fromAddress = new MailAddress("zhangsichu@gmail.com", "HtmlPartMail"); 
    smtpClient.Host = "MailEXG";

    //smtpClient.Port = 25; 
    message.From = fromAddress; 
    message.To.Add("zhangsichu@gmail.com"); 
    message.Subject = "HtmlPartMail"; 
    message.IsBodyHtml = true; 
    message.Body = body; 
    smtpClient.Send(message);  
}  
protected void btnSendMail_Click(object sender, EventArgs e)  
{  
    if (string.IsNullOrEmpty(this.hiddenInfo.Value))  
    this.SendMail(this.hiddenInfo.Value); 
}   
<pages enableEventValidation="false" validateRequest="false"/>  

解法二 后端截取

override page 的 Render 方法。当页面 Render 前用一个 staticStringBuider 记住全部 html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
protected override void Render(HtmlTextWriter writer)  
{  
    HtmlForMailPart = new StringBuilder(); 
    StringWriter stringWriter = new StringWriter(HtmlForMailPart); 
    HtmlTextWriter innerWriter = new HtmlTextWriter(stringWriter);  
    base.Render(innerWriter); 
    innerWriter.Close(); 
    writer.Write(HtmlForMailPart.ToString());  
    //base.Render(writer); 
}  

//取得Body部分
public const string HtmlForMailPartBeginKey = "<!-- mial html part begin -->"; 
public const string HtmlForMailPartEndKey = "<!-- mial html part end -->"; 

public string GetMailHtmlPart()  
{  
    if (HtmlForMailPart == null)  
    {  
        return string.Empty;  
    }  

    string htmlContent = HtmlForMailPart.ToString(); 
    int startIndex = htmlContent.IndexOf(HtmlForMailPartBeginKey); 
    int endIndex = htmlContent.IndexOf(HtmlForMailPartEndKey); 

    if (endIndex < startIndex)  
    {  
        return string.Empty;  
    }

    htmlContent = "<html><head><style>td { font-size: 12px } body { font-size: 12px }</style></head><body>" + htmlContent.Substring(startIndex, endIndex - startIndex) + "</body></html>";

    return htmlContent;  
}

HtmlForMailPartBeginKey HtmlForMailPartEndKey 这两个tag放在要取得内容的头和尾。

This post is licensed under CC BY 4.0 by the author.