之前写过一篇文章C#使用SMTP发送邮件

后来做了改进,改成读取独立的配置文件,本文只记录读取配置文件的部分,发送部分见上面的链接。

读取配置文件C#代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.Xml;
using System.IO; //using log4net;
//using log4net.Config; namespace EmailTest.Common
{ #region SMTPEmailSetting信息
/// <summary>
/// SMTPEmailSetting信息
/// </summary>
public class SMTPEmailSetting
{
/// <summary>
/// 私有日志对象
/// </summary>
//private static readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); private EmailInfo _emailInfo;
public EmailInfo EmailInfo
{
get { return _emailInfo; }
set { _emailInfo = value; }
} #region 模板中的方法
/// <summary>
/// 将对象序列化为XML字符串
/// </summary>
/// <returns></returns>
public string ToXml()
{ StringWriter Output = new StringWriter(new StringBuilder());
string Ret = ""; try
{
XmlSerializer s = new XmlSerializer(this.GetType());
s.Serialize(Output, this); // To cut down on the size of the xml being sent to the database, we'll strip
// out this extraneous xml. Ret = Output.ToString().Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", "");
Ret = Ret.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", "");
Ret = Ret.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "").Trim();
}
catch (Exception ex)
{
//logger.Error("对象序列化失败!");
//logger.Error("异常描述:\t" + ex.Message);
//logger.Error("异常方法:\t" + ex.TargetSite);
//logger.Error("异常堆栈:\t" + ex.StackTrace);
throw ex;
} return Ret;
} /// <summary>
/// 将XML字符串中反序列化为对象
/// </summary>
/// <param name="Xml">待反序列化的xml字符串</param>
/// <returns></returns>
public SMTPEmailSetting FromXml(string Xml)
{
StringReader stringReader = new StringReader(Xml);
XmlTextReader xmlReader = new XmlTextReader(stringReader);
SMTPEmailSetting obj;
try
{
XmlSerializer ser = new XmlSerializer(this.GetType());
obj = (SMTPEmailSetting)ser.Deserialize(xmlReader);
}
catch (Exception ex)
{
//logger.Error("对象反序列化失败!");
//logger.Error("异常描述:\t" + ex.Message);
//logger.Error("异常方法:\t" + ex.TargetSite);
//logger.Error("异常堆栈:\t" + ex.StackTrace);
throw ex;
}
xmlReader.Close();
stringReader.Close();
return obj;
} /// <summary>
/// 从xml文件中反序列化对象
/// </summary>
/// <param name="xmlFileName">文件名</param>
/// <returns>反序列化的对象,失败则返回null</returns>
public SMTPEmailSetting fromXmlFile(string xmlFileName)
{
Stream reader = null;
SMTPEmailSetting obj = new SMTPEmailSetting();
try
{
XmlSerializer serializer = new XmlSerializer(typeof(SMTPEmailSetting));
reader = new FileStream(xmlFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
obj = (SMTPEmailSetting)serializer.Deserialize(reader);
reader.Close();
}
catch (Exception ex)
{
//logger.Error("读取配置文件" + xmlFileName + "出现异常!");
//logger.Error("异常描述:\t" + ex.Message);
//logger.Error("引发异常的方法:\t" + ex.TargetSite);
//logger.Error("异常堆栈:\t" + ex.StackTrace);
obj = null;
}
finally
{
if (reader != null)
{
reader.Close();
}
}
return obj;
} /// <summary>
/// 从xml文件中反序列化对象,文件名默认为:命名空间+类名.config
/// </summary>
/// <returns>反序列化的对象,失败则返回null</returns>
public SMTPEmailSetting fromXmlFile()
{
string SettingsFileName = this.GetType().ToString() + ".config";
return fromXmlFile(SettingsFileName);
} /// <summary>
/// 将对象序列化到文件中
/// </summary>
/// <param name="xmlFileName">文件名</param>
/// <returns>布尔型。True:序列化成功;False:序列化失败</returns>
public bool toXmlFile(string xmlFileName)
{
Boolean blResult = false; if (this != null)
{
Type typeOfObj = this.GetType();
//string SettingsFileName = typeOfObj.ToString() + ".config"; try
{
XmlSerializer serializer = new XmlSerializer(typeOfObj);
TextWriter writer = new StreamWriter(xmlFileName);
serializer.Serialize(writer, this);
writer.Close();
blResult = true;
}
catch (Exception ex)
{
//logger.Error("保存配置文件" + xmlFileName + "出现异常!");
//logger.Error("异常描述:\t" + ex.Message);
//logger.Error("引发异常的方法:\t" + ex.TargetSite);
//logger.Error("异常堆栈:\t" + ex.StackTrace);
}
finally
{
}
}
return blResult;
} /// <summary>
/// 将对象序列化到文件中,文件名默认为:命名空间+类名.config
/// </summary>
/// <returns>布尔型。True:序列化成功;False:序列化失败</returns>
public bool toXmlFile()
{
string SettingsFileName = this.GetType().ToString() + ".config";
return toXmlFile(SettingsFileName);
}
#endregion
}
#endregion #region 重复的节点对应声明类
/// <summary>
/// SMTPEmailSetting节点
/// </summary>
public class EmailInfo
{
private string _publicEmail;
public string PublicEmail
{
get { return _publicEmail; }
set { _publicEmail = value; }
} private string _publicEmailPwd;
public string PublicEmailPwd
{
get { return _publicEmailPwd; }
set { _publicEmailPwd = value; }
} private string _publicEmailSMTPURL;
public string PublicEmailSMTPURL
{
get { return _publicEmailSMTPURL; }
set { _publicEmailSMTPURL = value; }
} private string _publicEmailTitle;
public string PublicEmailTitle
{
get { return _publicEmailTitle; }
set { _publicEmailTitle = value; }
} private string _publicEmailContent;
public string PublicEmailContent
{
get { return _publicEmailContent; }
set { _publicEmailContent = value; }
}
}
#endregion }

配置文件示例:

<?xml version="1.0" encoding="utf-8" ?>
<SMTPEmailSetting>
<EmailInfo>
<PublicEmail>yourEmail@sina.com</PublicEmail>
<PublicEmailPwd>yourPWD</PublicEmailPwd>
<PublicEmailSMTPURL>smtp.sina.com</PublicEmailSMTPURL>
<PublicEmailTitle>“{0}”</PublicEmailTitle>
<PublicEmailContent>{0}</PublicEmailContent>
</EmailInfo>
</SMTPEmailSetting>

使用示例:

SMTPEmailSetting emailSetting = new SMTPEmailSetting().fromXmlFile(Server.MapPath("SMTPEmailSetting.config"));
string returnStr = SMTPEmail.SendEmail(lblEmail.Text, new Hashtable(),
string.Format(emailSetting.EmailInfo.PublicEmailTitle, txtTitle.Text.Trim()),
string.Format(emailSetting.EmailInfo.PublicEmailContent, txtRemark.Text),
emailSetting.EmailInfo.PublicEmail,
emailSetting.EmailInfo.PublicEmailPwd,
emailSetting.EmailInfo.PublicEmailSMTPURL);

其他思路,使用web.config的外部文件(避免修改导致程序重启session丢失),参见http://msdn.microsoft.com/zh-cn/library/ms228154(v=vs.100).aspx

示例:

<appSettings
file="relative file name" >
</appSettings>

ASP.NET读取配置文件发送邮件的更多相关文章

  1. asp.net 读取配置文件方法

    方法1: System.Collections.Specialized.NameValueCollection nvc = (System.Collections.Specialized.NameVa ...

  2. Asp.NetCore 读取配置文件帮助类

    /// <summary> /// 读取配置文件信息 /// </summary> public class ConfigExtensions { public static ...

  3. 【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 我们在 读取配置文件(一) appsettings.json 中介绍了,如何读取appsettings.json. 但随之产生 ...

  4. ASP.NET Core开发-读取配置文件Configuration

    ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...

  5. ASP.NET伪静态-无法读取配置文件,因为它超过了最大文件大小的解决办法

    一直都在使用微软URLRewriter,具体的使用方法我就不多说了,网上文章很多. 但最近遇到一个问题,就是当web.config文件里面设置伪静态规则过多,大于2M的时候,就报错:无法读取配置文件, ...

  6. asp.net core轻松入门之MVC中Options读取配置文件

    接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...

  7. Asp.net Core中使用Redis 来保存Session, 读取配置文件

    今天 无意看到Asp.net Core中使用Session ,首先要使用Session就必须添加Microsoft.AspNetCore.Session包,默认Session是只能存去字节,所以如果你 ...

  8. ASP.NET Core开发-读取配置文件Configuration appsettings.json

    https://www.cnblogs.com/linezero/p/Configuration.html ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配 ...

  9. Asp.net Core 和类库读取配置文件信息

    Asp.net Core 和类库读取配置文件信息 看干货请移步至.net core 读取配置文件公共类 首先开一个脑洞,Asp.net core 被使用这么长时间了,但是关于配置文件(json)的读取 ...

随机推荐

  1. log4net使用介绍

    log4net是一款开源的日志工具,现已挂在apache基金会下.非常简单灵活,初学者有时会发现log4参照资料配置好,但并不输出日志.这种情况,一般是没有准确定位到配置文件.可参阅第3步. 下载 下 ...

  2. UIColor,CGColor,CIColor三者的区别和联系

    UIColor,CGColor,CIColor三者的区别和联系((转)) 最近看了看CoreGraphics的东西,看到关于CGColor的东西,于是就想着顺便看看UIColor,CIColor,弄清 ...

  3. Python网页解析

    续上篇文章,网页抓取到手之后就是解析网页了. 在Python中解析网页的库不少,我最开始使用的是BeautifulSoup,貌似这个也是Python中最知名的HTML解析库.它主要的特点就是容错性很好 ...

  4. Android 高仿豌豆荚 一键安装app 功能 实现

    以往我们那些应用市场 帮我们安装app的时候  我们都得点确定,当然你如果 root 以后 不用点确定 也能自动安装了,后来豌豆荚 推出了一个功能 非root的手机也能不点确定 直接帮你安装好.(如果 ...

  5. jquery功能实现总结

    最近一直在做.net这方面的,也学习了jquery一些东西,其中实现了自动关闭页面,json解析字符串,拼接字符串,for循环,函数调用,等一些功能,自己也学习了,也希望可以帮助大家,大家看后给提提意 ...

  6. LR之性能分析基础

    1.判断测试结果有效性 2.分析要点提示 3.Analysis主要提供的6大类分析图 4.分析流程

  7. 【LeetCode】226 - Invert Binary Tree

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9          to 4 / \ 7 2 / \ / \ 9 6 3 1   Notice: Goog ...

  8. Cracking the Code Interview 4.3 Array to Binary Tree

    Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal hei ...

  9. Spinlock

    Spinlock From Wikipedia, the free encyclopedia This article needs additional citations for verificat ...

  10. 黑马程序员——OC的内存管理学习小结

    内存管理在Objective-C中的重要性就像指针在C语言中的重要程序一样. 虽然作为一门高级语言,但OC却没有内存回收机制.这就需要开发者来对动态内存进行管理.OC中内存管理的范围是:任何继承了NS ...