之前写过一篇文章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. Android用自己的app替换Launcher

    /*********************************************************************** * Android用自己的app替换Launcher ...

  2. Jave 鼠标点击画太极 PaintTaiji (整理)

    package demo; /** * Jave 鼠标点击画太极 PaintTaiji (整理) * 声明: * 又是一份没有注释的代码,而且时间已经久远了,不过代码很短,解读起来应该 * 不会很麻烦 ...

  3. 解决Eclipse快捷键被其他软件占用

    做为一个java攻城狮,eclipse是我最常用的攻城设备,eclipse快捷键 极大的提高了我的开发效率!!!! 前段时间升级了一下我的战斗装备——给电脑的系统盘换成了一个固态硬盘,因此需要重装系统 ...

  4. php的setcookie

    不同浏览器对cookie的原理不同,导致cookie的过期时间有些模糊. 经测试:火狐浏览器的cookie过期时间设置是根据增量原则.服务器端设置time()+num,或者time()-num,传递到 ...

  5. ssl创建自签名的https通信

    ssl协议:ssl在tcp之上,http之下.兼容底层协议.所以推广起来很容易. create a self-signed server certificate -- for test purpose ...

  6. ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

    不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册.与单实例相同,RAC非缺省端口的监听器也是通过设置参数 ...

  7. adb shell 查找并删除文件

    # -*- coding: cp936 -*- ## function: remove file ## remark: python version -- import os,sys import l ...

  8. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.3.Oracle 集群节点间连通失败

    1.检查节点连通性的错误 [grid@linuxrac1 grid]$ ./runcluvfy.sh stage -post hwos -n linuxrac1,linuxrac2 -verbose ...

  9. hdu 1023(java实现进度计算)

    题意:就是问你火车出战的方案数. 分析:卡特兰数的模板题,递推公式:a[n]=a[n-1]*(4*n-2)/(n+1). java代码实现: import java.util.*; import ja ...

  10. API指南----application

    <application android:allowTaskReparenting=["true" | "false"]    android:allow ...