Farseer

导航

用Asp.net高效地发送Html格式的Email(五)

通过模板解析器发送Html格式的E_Mail

本部分所要描述的产生html格式的E_Mail的解决方案将呈现的输出与本文其他方式产生的输出是完全一样的。它采用完全不同的技术,它已经在开发领域出现多年了:解析。让我们先创建解析器,代码如下:

public class HtmlTemplateParserCS
{
    
private string _TemplateFileName; 
    
private string[] _Tokens; 
    
private string[] _Values; 

    
public string TemplateFileName 
    

        
get 
        

            
return _TemplateFileName; 
        }
 
        
set 
        

            _TemplateFileName 
= value; 
        }
 
    }
 

    
public string Tokens 
    

        
set 
        

            _Tokens 
= value.Split(Convert.ToChar(“|”)); 
        }
 
    }
 

    
public string Values 
    

        
set 
        

            _Values 
= value.Split(Convert.ToChar(“|”)); 
        }
 
    }
 

    
public HtmlTemplateParserCS()
    
{
        
//Constructor
    }


    
public string GetParsedHtmlFile() 
    

        StringBuilder FileContents 
= new StringBuilder(); 
 
        FileContents 
= FileContents.Append(GetContentOfTemplateFile(TemplateFileName)); 
            
        
for (int TokenCounter = _Tokens.GetLowerBound(0); TokenCounter <= 
            _Tokens.GetUpperBound(
0); TokenCounter++
        

            FileContents 
= FileContents.Replace(_Tokens[TokenCounter],     
                _Values[TokenCounter]);
        }
 

        
return FileContents.ToString(); 
    }
 

    
private string GetContentOfTemplateFile(string FileName) 
    

        StreamReader StreamReaderHtmlFile; 
        
string ContentOfFile; 

        StreamReaderHtmlFile 
= File.OpenText(FileName); 
        ContentOfFile 
= StreamReaderHtmlFile.ReadToEnd(); 
        StreamReaderHtmlFile.Close(); 

        
return ContentOfFile;  
    }
 
}




他们是如何创建,有什么用那?首先:HtmlTemplateParserCS类的属性(只读),这些属性对我的类来说是至关重要的。为了解析html文件,我需要一个TemplateFileName,符号(作为我模板文件中数据的占位符)数组,数据(呈现从数据储存器中获取的数据)数组。符号和值是由“|”分割的字符数组。注意,我在他们各自属性的set方法里通过Split方法(value变量的)分割数组。分割是必须的,因为我要移除“|”字符。

在方法GetParsedHtmlFile中,我创建了StringBuilder的实例FileContents ,它将附加函数GetContentOfTemplateFile的返回值。

方法GetContentOfTemplateFile 将文件名作为参数,并用StreamReader 读取提供的html模板的内容,然后以string类型返回模板的内容。

剩下的事就是用各自的值替换符号。为了实现这个目的,我重新遍历数组,通过用GetLowerBound 和GetUpperBound 方法探测边界。然后以string类型返回FileContents的内容。

利用解析发送Mail

问题是如何利用上面开发的解析器发送Mail?这是我接下来要描述的。从一个新的名为TemplateHtmlParser.aspx的开始。用户获取密码的接口以及触发的行为---发送要求的Mail---跟文章前面部分描述的一样,所以不再赘述。但是,我发现我必须创建一个新的名为ParsedHtmlEmailCS.cs的文件,它将从EmailDataCS(这个前面也有叙述)的实例中获取必需的数据。下面的代码展示了上面所说的内容

public class ParsedHtmlEmailCS
{
    
public ParsedHtmlEmailCS()
    
{
        
//Constructor
    }


    
public void SendParsedTemplate(string emailAddress) 
    

        HtmlEmailCS.EmailDataCS Credentials 
= new HtmlEmailCS.EmailDataCS(); 
        HtmlEmailCS.UserCredentialsCS UserData 
=     
            Credentials.GetUserCredentials(emailAddress); 

        
if (UserData.ExistingCredentials > 0
        

            HtmlEmailCS.HtmlTemplateParserCS HtmlFile 
= new 
                HtmlEmailCS.HtmlTemplateParserCS(); 
            HtmlFile.TemplateFileName 
= 
                HttpContext.Current.Server.MapPath(“Templates
/HtmlTemplate.htm”); 
                
            HtmlFile.Tokens 
= “Token1|Token2”; 
            HtmlFile.Values 
= Convert.ToString(UserData.Username) + (“|”) + 
                Convert.ToString(UserData.Password); 

            MailMessage MessageMail 
= new MailMessage(); 
            MessageMail.From 
= “info@domain.com”; 
            MessageMail.To 
= emailAddress; 
            MessageMail.Subject 
= “Your credentials”; 
            MessageMail.BodyFormat 
= MailFormat.Html; 
            
            
string MailBody; 
            MailBody 
= Convert.ToString(HtmlFile.GetParsedHtmlFile()); 
            MessageMail.Body 
= MailBody; 
            SmtpMail.SmtpServer 
= “mail-out.server.com”; 
            SmtpMail.Send(MessageMail); 
        }
 
        
else 
        

            
throw new Exception(“Please specify a valid registered e-mail address”); 
        }
 
    }

}


posted on 2005-03-27 17:02  佛西亚  阅读(640)  评论(1编辑  收藏  举报