之前写过一篇文章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. HDU2102 A计划

    解题思路:一道简单题,却WA了十几发,犯几个低级错误.还是不能急躁,     内心要平静,具体分析见代码: #include<iostream> #include<cstdio> ...

  2. YouTrack Changing Database Location for EXE Distribution(windows service)

    If you have installed YouTrack from EXE Distribution, then the best way to change the database locat ...

  3. ORACLE执行计划 explain说明

    ORACLE SQL优化工具系列之--EXPLAIN PLAN 对于oracle数据库来说,sql语句的优化可能是对性能提升最为明显的,当然对于DBA来说,也是挑战性比较大的.为了优化一个复杂的SQL ...

  4. Mysql查询优化器

    Mysql查询优化器 本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率.那么到底mysql到底 ...

  5. 什么是REST?以及RESTful的实现

    什么是REST? REST (REpresentation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy Fielding ...

  6. Web安全测试学习笔记(Cookie&Session)

    一,Session:含义:有始有终的一系列动作\消息1, 隐含了“面向连接” 和“保持状态”两种含义2, 一种用来在客户端与服务器之间保持状态的解决方案3, 也指这种解决方案的存储结构“把××保存在s ...

  7. Yii 实现MySQL多库和读写分离

    前段时间为SNS产品做了架构设计,在程序框架方面做了不少相关的压力测试,最终选定了YiiFramework,至于为什么没选用公司内部的PHP框架,其实理由很充分,公司的框架虽然是“前辈”们辛苦的积累, ...

  8. js获取浏览器高度和宽度值,尽量的考虑了多浏览器。

    js获取浏览器高度和宽度值,尽量的考虑了多浏览器. IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ...

  9. Macbook pro内存升级

    http://support.apple.com/kb/HT1270?viewlocale=zh_CN&locale=zh_CN#link1 https://support.apple.com ...

  10. python中类的总结

    1. 类中的方法 在类里主要有三种方法: a.普通方法:在普通方法定义的时候,需要一个对象的实例参数,从而在类中定义普通方法的时候,都必须传送一个参数self,那么这个参数也就是object b.类方 ...