之前写过一篇文章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. I.MX6 shutdown by software

    /************************************************************************ * I.MX6 shutdown by softwa ...

  2. android 自定义组件-带图片的textView

    1. 定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <decla ...

  3. 【转】strcpy溢出的攻击示例

    在学习c/c++的时候,就讲到了一些C类型的字符串函数不是安全的,比如strcpy没有检查长度会溢出,推荐使用strncpy,笔试面试也经常问到.同时经常浏览安全相关的新闻,缓冲区溢出攻击是很常见的一 ...

  4. over-fitting、under-fitting 与 regularization

    机器学习中一个重要的话题便是模型的泛化能力,泛化能力强的模型才是好模型,对于训练好的模型,若在训练集表现差,不必说在测试集表现同样会很差,这可能是欠拟合导致:若模型在训练集表现非常好,却在测试集上差强 ...

  5. 嵌入式 详解udev

    如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略.在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev ...

  6. mysql Access denied for user \'root\'@\'localhost\'”解决办法总结,下面我们对常见的出现的一些错误代码进行分析并给出解决办法,有需要的朋友可参考一下。

    mysql Access denied for user \'root\'@\'localhost\'”解决办法总结,下面我们对常见的出现的一些错误代码进行分析并给出解决办法,有需要的朋友可参考一下. ...

  7. python+selenium环境搭建

    这里主要基于windows平台. 下载python.http://python.org/getit/ 下载setuptools [python的基础包工具].http://pypi.python.or ...

  8. win8 VS控件信息

    <TextBlock x:Name="button_1" HorizontalAlignment="Center"  TextWrapping=" ...

  9. OpenGl从零开始之坐标变换(上)

    坐标变换是深入理解三维世界的基础,非常重要.学习这部分首先要清楚几个概念:视点变换.模型变换.投影变换.视口变换. 在现实世界中,所有的物体都具有三维特征,但计算机本身只能处理数字,显示二维的图形,因 ...

  10. Cubietruck查看CPU及硬盘温度

    想看看我的Cubietruck的工作状态,尤其是CPU及硬盘温度如何. 网上推荐的都是使用 lm-sensors 查看电脑温度.但是尝试后无奈发现该软件不兼容我的 Cubietruck. 然后就发现外 ...