Farseer

导航

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


开发一个能够发送Html格式邮件的用户控件

实际上开发这个控件是很简单的。在UserControl的文件夹里,添加一个名为SimpleEmailTemplate.ascx 的控件并添加想要的Html代码(看看下载的代码中的html代码是否中意)。在相关联的后台代码SimpleEmailTemplate.ascx.cs 中,添加两个Literal 控件并声明两个公共属性。这些公共属性对这个用户控件是至关重要的,因为在本文接下来的部分用这些属性给Literal 控件的value赋值。

由上在SimpleEmailTemplate.ascx.cs 文件中产生的代码如下:

public class SimpleEmailTemplate : System.Web.UI.UserControl
{
    
protected System.Web.UI.WebControls.Literal LiteralUsername;
    
protected System.Web.UI.WebControls.Literal LiteralPassword;

    
private string _Username; 
    
private string _Password; 

    
public string Username 
    

        
get 
        

            
return _Username; 
        }
 
        
set 
        

            _Username 
= value; 
            LiteralUsername.Text 
= _Username; 
        }
 
    }
 

    
public string Password 
    

        
get 
        

            
return _Password; 
        }
 
        
set 
        

            _Password 
= value; 
            LiteralPassword.Text 
= _Password; 
        }
 
    }

}



注意,我在各自属性的set方法里给两个Literal控件赋了值。这是必须的,因为当呈现一个用户控件去发送邮件的时候,Page_Load事件将不再触发。

现在,创建的用户控件如何呈现为一个html格式的邮件?这是我在下面就呈现给您的内容。

用这个控件发送html格式的邮件

现在在您的工程里面添加一个名为SimpleHtmlTemplate.aspx 的页面。这个页面将包含与"创建页面获取失去的密码"部分同样的接口,因此我将不再赘述。

让我们看一下后台文件 SimpleHtmlTemplate.aspx.cs ,并看一下它是如何做的

private void SendSimpleEmailTemplate() 

    HtmlEmailCS.EmailDataCS Credentials 
= new HtmlEmailCS.EmailDataCS(); 
    HtmlEmailCS.UserCredentialsCS UserData 
=     
        Credentials.GetUserCredentials(Convert.ToString(TextboxEmailAddress.Text)); 
            
    
if (UserData.ExistingCredentials > 0
    

        
try 
        

            SimpleEmailTemplate EmailTemplate 
= 
                ((SimpleEmailTemplate)LoadControl
                    (“
~/UserControls/SimpleEmailTemplate.ascx”)); 

            EmailTemplate.Username 
= UserData.Username; 
            EmailTemplate.Password 
= UserData.Password; 
                    
            StringWriter StringWriter 
= new StringWriter(); 
            Html32TextWriter HtmlMailWriter 
= new Html32TextWriter(StringWriter); 
            EmailTemplate.RenderControl(HtmlMailWriter); 
            
string Body = StringWriter.ToString(); 
                    
            MailMessage MailMessage 
= new MailMessage(); 
            MailMessage.From 
= “info@domain.com”; 
            MailMessage.To 
= Convert.ToString(TextboxEmailAddress.Text);
            MailMessage.Subject 
= “Your credentials”; 
            MailMessage.Body 
= Body; 

            MailMessage.BodyFormat 
= MailFormat.Html; 
            SmtpMail.SmtpServer 
= “mail-out.server.com”; 
            SmtpMail.Send(MailMessage); 

            LabelMessage.Text 
= “The requested information has been sent to the email 
                address specified.”; 

        }
 
        
catch (Exception ex) 
        

            LabelMessage.Text 
= ex.Message.ToString(); 
        }
 

    }
 
    
else 
    

        LabelMessage.Text 
= “Please provide a valid e-mail address”; 
    }

 
        }

    }
}


上面就是SendSimpleEmailTemplate 代码的主要部分。首先我创建了一个EmailDataCS 类的实例,接着我定义了一个UserCredentialsCS类型的实例UserData,我调用Credentials对象(EmailDataCS类型的)的GetUserCredentials方法,获取我的用户控件SimpleEmailTemplate.ascx需要的认证信息。

我通过UserCredentialsCS 的ExistingCredentials 属性判断对象是否包含需要的认证信息。如果包含,发送Mail。然后我将通过LoadControl方法 动态地加载用户控件SimpleEmailTemplate.ascx ,同时我将用户控件转换为SimpleEmailTemplate类型。现在我通过UserCredentialsCS的实例UserData 的属性UserName和PassWord给用户控件公共属性赋值。

当这些做完后,我实际上已经把控件作为html格式的E_mail来呈现。为了实现这个目的,我首先用了StringWriter类,它内在地采用了StringBuilder.这个类将把信息--SimpleEmailTemplate.ascx 的内容--转换成string类型。这里要注意最终的输出代码必须转换成适当的html代码。为了实现这个要求,我创建了Html32TextWriter 的一个实例,并把StringWriter 作为参数传入。

EmailTemplate 类(SimpleEmailTemplate 类的一个实例,它实际的包含着用户控件SimpleEmailTemplate .ascx的实例)的方法RenderControl呈现我的HtmlMailWriter.我创建了一个string类型的变量body,并将StringWriter 做类型转换后赋值给它。这样用户控件的内容就变成了我邮件的内容。

接下来就是创建一个MailMessage 的实例,给相关的属性赋值(比如"From","To","Body","Format")并且将信息发送给用户。如果在进行的过程中发生错误,将会报告给用户。如果因为用户填入了错误的E_mail而不能发送,用户将得到通知。

posted on 2005-03-27 16:24  佛西亚  阅读(496)  评论(0编辑  收藏  举报