• ASP.NET读取配置文件发送邮件


    之前写过一篇文章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("异常描述:	" + ex.Message);
                    //logger.Error("异常方法:	" + ex.TargetSite);
                    //logger.Error("异常堆栈:	" + 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("异常描述:	" + ex.Message);
                    //logger.Error("异常方法:	" + ex.TargetSite);
                    //logger.Error("异常堆栈:	" + 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("异常描述:	" + ex.Message);
                    //logger.Error("引发异常的方法:	" + ex.TargetSite);
                    //logger.Error("异常堆栈:	" + 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("异常描述:	" + ex.Message);
                        //logger.Error("引发异常的方法:	" + ex.TargetSite);
                        //logger.Error("异常堆栈:	" + 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>
  • 相关阅读:
    5、视图
    4、数据更新
    3、聚合与排序
    2、查询基础
    1、数据库和SQL
    Day-13:组合查询
    Day-12:创建高级联结
    Day-11:联结表
    Day-10:使用子查询
    Day-9:分组数据
  • 原文地址:https://www.cnblogs.com/xuezhizhang/p/3421437.html
Copyright © 2020-2023  润新知