Click here to Skip to main content
15,891,253 members
Articles / Programming Languages / C#

LumiSoft MailServer

Rate me:
Please Sign up or sign in to vote.
3.79/5 (22 votes)
17 Nov 2006CPOL1 min read 322.8K   4.9K   74  
Full featured SMTP/POP3/IMAP server
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using System.Data;

namespace LumiSoft.MailServer
{
    /// <summary>
    /// Provides API implementation helper methods.
    /// </summary>
    public class API_Utlis
    {
        #region static method NormalizeFolder

        /// <summary>
        /// Normalizes folder value. Replaces \ to /, removes duplicate //, removes / from folder start and end.
        /// </summary>
        /// <param name="folder">Folder to normalize.</param>
        /// <returns></returns>
        public static string NormalizeFolder(string folder)
        {
            // API uses only / as path separator.
            folder = folder.Replace("\\","/");

            // Remove // duplicate continuos path separators, if any.
            while(folder.IndexOf("//") > -1){
                folder = folder.Replace("//","/");
            }

            // Remove from folder start, if any.
            if(folder.StartsWith("/")){
                folder = folder.Substring(1);
            }

            // Remove from folder end, if any.
            if(folder.EndsWith("/")){
                folder = folder.Substring(0,folder.Length - 1);
            }

            return folder;
        }

        #endregion

        #region static method PathFix

        /// <summary>
        /// Fixes path separator, replaces / \ with platform separator char.
        /// </summary>
        /// <param name="path">Path to fix.</param>
        /// <returns></returns>
        public static string PathFix(string path)
        {
            return path.Replace('\\',Path.DirectorySeparatorChar).Replace('/',Path.DirectorySeparatorChar);
        }

        #endregion

        #region static method DirectoryExists

        /// <summary>
        /// Checks if directory exists. If linux, checks with case-insenstively (linux is case-sensitive). 
        /// Returns actual dir (In linux it may differ from requested directory, because of case-sensitivity.)
        /// or null if directory doesn't exist.
        /// </summary>
        /// <param name="dirName">Directory to check.</param>
        /// <returns></returns>
        public static string DirectoryExists(string dirName)
		{
			// Windows we can use Directory.Exists
			if(Environment.OSVersion.Platform.ToString().ToLower().IndexOf("win") > -1){
				if(Directory.Exists(dirName)){
					return dirName;
				}
			}
			// Unix,Linux we can't trust Directory.Exists value because of case-sensitive file system
			else{
				if(Directory.Exists(dirName)){
					return dirName;
				}
				else{
                    // Remove / if path starts with /.
                    if(dirName.StartsWith("/")){
                        dirName = dirName.Substring(1);
                    }
                    // Remove / if path ends with /.
                    //if(dirName.EndsWith("/")){
                    //    dirName = dirName.Substring(0,dirName.Length - 1);
                    //}

					string[] pathParts   = dirName.Split('/');
					string   currentPath = "/";
				
					// See if dirs path is valid
					for(int i=0;i<pathParts.Length;i++){
						bool dirExists = false;
						string[] dirs = Directory.GetDirectories(currentPath);
						foreach(string dir in dirs){
							string[] dirParts = dir.Split('/');
							if(pathParts[i].ToLower() == dirParts[dirParts.Length - 1].ToLower()){
								currentPath = dir;
								dirExists = true;
								break;
							}
						}				
						if(!dirExists){
							return null;
						}				
					}
					
					return currentPath;
				}
			}
			
			return null;
        }

        #endregion

        #region static method EnsureDirectory

        /// <summary>
        /// Ensures that specified folder exists, if not it will be created.
        /// Returns actual dir (In linux it may differ from requested directory, because of case-sensitivity.).
        /// </summary>
        /// <param name="folder">Folder name with path.</param>
        public static string EnsureFolder(string folder)
        {
            string normalizedFolder = DirectoryExists(folder);
            if(normalizedFolder == null){
                Directory.CreateDirectory(folder);

                return folder;
            }
            else{
                return normalizedFolder;
            }
        }

        #endregion

        #region static method FileExists

        /// <summary>
        /// Checks if file exists. If linux, checks with case-insenstively (linux is case-sensitive). 
        /// Returns actual file (In linux it may differ from requested file, because of case-sensitivity.)
        /// or null if file doesn't exist.
        /// </summary>
        /// <param name="fileName">File to check.</param>
        /// <returns></returns>
		public static string FileExists(string fileName)
		{
			// Windows we can use File.Exists
			if(Environment.OSVersion.Platform.ToString().ToLower().IndexOf("win") > -1){
				if(File.Exists(fileName)){
					return fileName;
				}
			}
			// Unix,Linux we can't trust File.Exists value because of case-sensitive file system
			else{
				if(File.Exists(fileName)){
					return fileName;
				}
				else{
                    // Remove / if path starts with /.
                    if(fileName.StartsWith("/")){
                        fileName = fileName.Substring(1);
                    }

					string[] pathParts   = fileName.Split('/');
					string   currentPath = "/";
					
					// See if dirs path is valid
					for(int i=0;i<pathParts.Length - 1;i++){
						bool dirExists = false;
						string[] dirs = Directory.GetDirectories(currentPath);
						foreach(string dir in dirs){
							string[] dirParts = dir.Split('/');
							if(pathParts[i].ToLower() == dirParts[dirParts.Length - 1].ToLower()){
								currentPath = dir;
								dirExists = true;
								break;
							}
						}				
						if(!dirExists){
							return null;
						}				
					}
					
					// Check that file exists
					string[] files = Directory.GetFiles(currentPath);
					foreach(string file in files){
						if(pathParts[pathParts.Length - 1].ToLower() == Path.GetFileName(file).ToLower()){
							return file;
						}			
					}
				}
			}
			
			return null;
        }

        #endregion

        #region static method StreamCopy

        /// <summary>
        /// Copies all data from source stream to destination stream.
        /// Copy starts from source stream current position and will be copied to the end of source stream.
        /// </summary>
        /// <param name="source">Source stream.</param>
        /// <param name="destination">Destination stream.</param>
        public static void StreamCopy(Stream source,Stream destination)
        {
            byte[] buffer = new byte[8000];
            int readedCount = source.Read(buffer,0,buffer.Length);
            while(readedCount > 0){
                destination.Write(buffer,0,readedCount);

                readedCount = source.Read(buffer,0,buffer.Length);
            }
        }

        #endregion


        #region method CreateSettingsSchema

        /// <summary>
		/// Creates system settings schema.
		/// </summary>
		/// <param name="ds">DataSet where to create schema.</param>
		public static void CreateSettingsSchema(DataSet ds)
		{
			if(!ds.Tables.Contains("Settings")){
				ds.Tables.Add("Settings");
			}

			if(!ds.Tables["Settings"].Columns.Contains("ErrorFile")){
				ds.Tables["Settings"].Columns.Add("ErrorFile").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_Threads")){
				ds.Tables["Settings"].Columns.Add("SMTP_Threads").DefaultValue = 100;
			}
			if(!ds.Tables["Settings"].Columns.Contains("POP3_Threads")){
				ds.Tables["Settings"].Columns.Add("POP3_Threads").DefaultValue = 100;
			}
			if(!ds.Tables["Settings"].Columns.Contains("SmartHost")){
				ds.Tables["Settings"].Columns.Add("SmartHost").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("SmartHostPort")){
				ds.Tables["Settings"].Columns.Add("SmartHostPort",typeof(int)).DefaultValue = 25;
			}
			if(!ds.Tables["Settings"].Columns.Contains("UseSmartHost")){
				ds.Tables["Settings"].Columns.Add("UseSmartHost").DefaultValue = false;
			}
			if(!ds.Tables["Settings"].Columns.Contains("Dns1")){
				ds.Tables["Settings"].Columns.Add("Dns1").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("Dns2")){
				ds.Tables["Settings"].Columns.Add("Dns2").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("LogServer")){
				ds.Tables["Settings"].Columns.Add("LogServer").DefaultValue = false;
			}
			if(!ds.Tables["Settings"].Columns.Contains("LogSMTPCmds")){
				ds.Tables["Settings"].Columns.Add("LogSMTPCmds").DefaultValue = false;
			}
			if(!ds.Tables["Settings"].Columns.Contains("LogPOP3Cmds")){
				ds.Tables["Settings"].Columns.Add("LogPOP3Cmds").DefaultValue = false;
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_SessionIdleTimeOut")){
				ds.Tables["Settings"].Columns.Add("SMTP_SessionIdleTimeOut").DefaultValue = 30;
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_CommandIdleTimeOut")){
				ds.Tables["Settings"].Columns.Add("SMTP_CommandIdleTimeOut").DefaultValue = 30;
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_MaxBadCommands")){
				ds.Tables["Settings"].Columns.Add("SMTP_MaxBadCommands").DefaultValue = 8;
			}
			if(!ds.Tables["Settings"].Columns.Contains("POP3_SessionIdleTimeOut")){
				ds.Tables["Settings"].Columns.Add("POP3_SessionIdleTimeOut").DefaultValue = 30;
			}
			if(!ds.Tables["Settings"].Columns.Contains("POP3_CommandIdleTimeOut")){
				ds.Tables["Settings"].Columns.Add("POP3_CommandIdleTimeOut").DefaultValue = 30;
			}
			if(!ds.Tables["Settings"].Columns.Contains("POP3_MaxBadCommands")){
				ds.Tables["Settings"].Columns.Add("POP3_MaxBadCommands").DefaultValue = 8;
			}
			if(!ds.Tables["Settings"].Columns.Contains("MaxMessageSize")){
				ds.Tables["Settings"].Columns.Add("MaxMessageSize").DefaultValue = 1000;
			}
			if(!ds.Tables["Settings"].Columns.Contains("MaxRecipients")){
				ds.Tables["Settings"].Columns.Add("MaxRecipients").DefaultValue = 100;
			}
			if(!ds.Tables["Settings"].Columns.Contains("MaxRelayThreads")){
				ds.Tables["Settings"].Columns.Add("MaxRelayThreads").DefaultValue = 100;
			}
			if(!ds.Tables["Settings"].Columns.Contains("RelayInterval")){
				ds.Tables["Settings"].Columns.Add("RelayInterval").DefaultValue = 15;
			}
			if(!ds.Tables["Settings"].Columns.Contains("RelayRetryInterval")){
				ds.Tables["Settings"].Columns.Add("RelayRetryInterval").DefaultValue = 300;
			}
			if(!ds.Tables["Settings"].Columns.Contains("RelayUndeliveredWarning")){
				ds.Tables["Settings"].Columns.Add("RelayUndeliveredWarning").DefaultValue = 300;
			}
			if(!ds.Tables["Settings"].Columns.Contains("RelayUndelivered")){
				ds.Tables["Settings"].Columns.Add("RelayUndelivered").DefaultValue = 1;
			}
			if(!ds.Tables["Settings"].Columns.Contains("StoreUndeliveredMessages")){
				ds.Tables["Settings"].Columns.Add("StoreUndeliveredMessages").DefaultValue = false;
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_LogPath")){
				ds.Tables["Settings"].Columns.Add("SMTP_LogPath").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("POP3_LogPath")){
				ds.Tables["Settings"].Columns.Add("POP3_LogPath").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("Server_LogPath")){
				ds.Tables["Settings"].Columns.Add("Server_LogPath").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("IMAP_LogPath")){
				ds.Tables["Settings"].Columns.Add("IMAP_LogPath").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("IMAP_SessionIdleTimeOut")){
				ds.Tables["Settings"].Columns.Add("IMAP_SessionIdleTimeOut").DefaultValue = 800;
			}
			if(!ds.Tables["Settings"].Columns.Contains("IMAP_CommandIdleTimeOut")){
				ds.Tables["Settings"].Columns.Add("IMAP_CommandIdleTimeOut").DefaultValue = 60;
			}
			if(!ds.Tables["Settings"].Columns.Contains("IMAP_MaxBadCommands")){
				ds.Tables["Settings"].Columns.Add("IMAP_MaxBadCommands").DefaultValue = 10;
			}
			if(!ds.Tables["Settings"].Columns.Contains("LogIMAPCmds")){
				ds.Tables["Settings"].Columns.Add("LogIMAPCmds").DefaultValue = "false";
			}
			if(!ds.Tables["Settings"].Columns.Contains("IMAP_Threads")){
				ds.Tables["Settings"].Columns.Add("IMAP_Threads").DefaultValue = 100;
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_Enabled")){
				ds.Tables["Settings"].Columns.Add("SMTP_Enabled").DefaultValue = "false";
			}
			if(!ds.Tables["Settings"].Columns.Contains("POP3_Enabled")){
				ds.Tables["Settings"].Columns.Add("POP3_Enabled").DefaultValue = "false";
			}
			if(!ds.Tables["Settings"].Columns.Contains("IMAP_Enabled")){
				ds.Tables["Settings"].Columns.Add("IMAP_Enabled").DefaultValue = "false";
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_DefaultDomain")){
				ds.Tables["Settings"].Columns.Add("SMTP_DefaultDomain").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("RelayStore")){
				ds.Tables["Settings"].Columns.Add("RelayStore").DefaultValue = "c:\\MailStore\\";
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_HostName")){
				ds.Tables["Settings"].Columns.Add("SMTP_HostName").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("POP3_HostName")){
				ds.Tables["Settings"].Columns.Add("POP3_HostName").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("IMAP_HostName")){
				ds.Tables["Settings"].Columns.Add("IMAP_HostName").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("LogRelayCmds")){
				ds.Tables["Settings"].Columns.Add("LogRelayCmds").DefaultValue = false;
			}
			if(!ds.Tables["Settings"].Columns.Contains("Relay_LogPath")){
				ds.Tables["Settings"].Columns.Add("Relay_LogPath").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("SmartHostUserName")){
				ds.Tables["Settings"].Columns.Add("SmartHostUserName").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("SmartHostPassword")){
				ds.Tables["Settings"].Columns.Add("SmartHostPassword").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("RelayLocalIP")){
				ds.Tables["Settings"].Columns.Add("RelayLocalIP").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("LogFetchPOP3Cmds")){
				ds.Tables["Settings"].Columns.Add("LogFetchPOP3Cmds").DefaultValue = "false";
			}
			if(!ds.Tables["Settings"].Columns.Contains("FetchPOP3_LogPath")){
				ds.Tables["Settings"].Columns.Add("FetchPOP3_LogPath").DefaultValue = "";
			}
			if(!ds.Tables["Settings"].Columns.Contains("SMTP_RequireAuth")){
				ds.Tables["Settings"].Columns.Add("SMTP_RequireAuth").DefaultValue = "false";
            }
            if(!ds.Tables["Settings"].Columns.Contains("Relay_SmartHost_UseSSL")){
				ds.Tables["Settings"].Columns.Add("Relay_SmartHost_UseSSL").DefaultValue = "false";
            }
            if(!ds.Tables["Settings"].Columns.Contains("FetchPOP3_Interval")){
				ds.Tables["Settings"].Columns.Add("FetchPOP3_Interval").DefaultValue = 300;
            }
            if(!ds.Tables["Settings"].Columns.Contains("SMTP_GreetingText")){
				ds.Tables["Settings"].Columns.Add("SMTP_GreetingText").DefaultValue = "";
            }
            if(!ds.Tables["Settings"].Columns.Contains("POP3_GreetingText")){
				ds.Tables["Settings"].Columns.Add("POP3_GreetingText").DefaultValue = "";
            }
            if(!ds.Tables["Settings"].Columns.Contains("IMAP_GreetingText")){
				ds.Tables["Settings"].Columns.Add("IMAP_GreetingText").DefaultValue = "";
            }
            if(!ds.Tables["Settings"].Columns.Contains("ServerAuthenticationType")){
				ds.Tables["Settings"].Columns.Add("ServerAuthenticationType").DefaultValue = 1;
            }
            if(!ds.Tables["Settings"].Columns.Contains("ServerAuthWinDomain")){
				ds.Tables["Settings"].Columns.Add("ServerAuthWinDomain").DefaultValue = "";
            }
            if(!ds.Tables["Settings"].Columns.Contains("FetchPop3_Enabled")){
				ds.Tables["Settings"].Columns.Add("FetchPop3_Enabled").DefaultValue = "true";
            }
            if(!ds.Tables["Settings"].Columns.Contains("Relay_HostName")){
				ds.Tables["Settings"].Columns.Add("Relay_HostName").DefaultValue = "";
            }
            if(!ds.Tables["Settings"].Columns.Contains("Relay_SessionIdleTimeOut")){
				ds.Tables["Settings"].Columns.Add("Relay_SessionIdleTimeOut").DefaultValue = "30";
            }
            if(!ds.Tables["Settings"].Columns.Contains("SMTP_MaxConnectionsPerIP")){
				ds.Tables["Settings"].Columns.Add("SMTP_MaxConnectionsPerIP").DefaultValue = "0";
            }
            if(!ds.Tables["Settings"].Columns.Contains("POP3_MaxConnectionsPerIP")){
				ds.Tables["Settings"].Columns.Add("POP3_MaxConnectionsPerIP").DefaultValue = "0";
            }
            if(!ds.Tables["Settings"].Columns.Contains("IMAP_MaxConnectionsPerIP")){
				ds.Tables["Settings"].Columns.Add("IMAP_MaxConnectionsPerIP").DefaultValue = "0";
            }
            if(!ds.Tables["Settings"].Columns.Contains("SmartHostUseSSL")){
				ds.Tables["Settings"].Columns.Add("SmartHostUseSSL").DefaultValue = false;
			}
            if(!ds.Tables["Settings"].Columns.Contains("SIP_Enabled")){
				ds.Tables["Settings"].Columns.Add("SIP_Enabled").DefaultValue = false;
			}
            if(!ds.Tables["Settings"].Columns.Contains("SIP_HostName")){
				ds.Tables["Settings"].Columns.Add("SIP_HostName").DefaultValue = "";
			}
            if(!ds.Tables["Settings"].Columns.Contains("Relay_MaxConnectionsPerIP")){
				ds.Tables["Settings"].Columns.Add("Relay_MaxConnectionsPerIP").DefaultValue = "10";
            }
            if(!ds.Tables["Settings"].Columns.Contains("SIP_MinExpries")){
				ds.Tables["Settings"].Columns.Add("SIP_MinExpires").DefaultValue = 60;
            }

            #region table SMTP_Bindings

            if(!ds.Tables.Contains("SMTP_Bindings")){
                ds.Tables.Add("SMTP_Bindings");
            }            
            if(!ds.Tables["SMTP_Bindings"].Columns.Contains("Protocol")){
                ds.Tables["SMTP_Bindings"].Columns.Add("Protocol").DefaultValue = "TCP";
            }
            if(!ds.Tables["SMTP_Bindings"].Columns.Contains("IP")){
                ds.Tables["SMTP_Bindings"].Columns.Add("IP").DefaultValue = "0.0.0.0";
            }
            if(!ds.Tables["SMTP_Bindings"].Columns.Contains("Port")){
                ds.Tables["SMTP_Bindings"].Columns.Add("Port").DefaultValue = "25";
            }
            if(!ds.Tables["SMTP_Bindings"].Columns.Contains("SSL")){
                ds.Tables["SMTP_Bindings"].Columns.Add("SSL",typeof(bool)).DefaultValue = false;
            }
            if(!ds.Tables["SMTP_Bindings"].Columns.Contains("SSL_Certificate")){
                ds.Tables["SMTP_Bindings"].Columns.Add("SSL_Certificate",typeof(byte[]));
            }

            #endregion

            #region table POP3_Bindings

            if(!ds.Tables.Contains("POP3_Bindings")){
                ds.Tables.Add("POP3_Bindings");
            }
            if(!ds.Tables["POP3_Bindings"].Columns.Contains("Protocol")){
                ds.Tables["POP3_Bindings"].Columns.Add("Protocol").DefaultValue = "TCP";
            }
            if(!ds.Tables["POP3_Bindings"].Columns.Contains("IP")){
                ds.Tables["POP3_Bindings"].Columns.Add("IP").DefaultValue = "0.0.0.0";
            }
            if(!ds.Tables["POP3_Bindings"].Columns.Contains("Port")){
                ds.Tables["POP3_Bindings"].Columns.Add("Port").DefaultValue = "110";
            }
            if(!ds.Tables["POP3_Bindings"].Columns.Contains("SSL")){
                ds.Tables["POP3_Bindings"].Columns.Add("SSL",typeof(bool)).DefaultValue = false;
            }
            if(!ds.Tables["POP3_Bindings"].Columns.Contains("SSL_Certificate")){
                ds.Tables["POP3_Bindings"].Columns.Add("SSL_Certificate",typeof(byte[]));
            }

            #endregion

            #region table IMAP_Bindings

            if(!ds.Tables.Contains("IMAP_Bindings")){
                ds.Tables.Add("IMAP_Bindings");
            }
            if(!ds.Tables["IMAP_Bindings"].Columns.Contains("Protocol")){
                ds.Tables["IMAP_Bindings"].Columns.Add("Protocol").DefaultValue = "TCP";
            }
            if(!ds.Tables["IMAP_Bindings"].Columns.Contains("IP")){
                ds.Tables["IMAP_Bindings"].Columns.Add("IP").DefaultValue = "0.0.0.0";
            }
            if(!ds.Tables["IMAP_Bindings"].Columns.Contains("Port")){
                ds.Tables["IMAP_Bindings"].Columns.Add("Port").DefaultValue = "143";
            }
            if(!ds.Tables["IMAP_Bindings"].Columns.Contains("SSL")){
                ds.Tables["IMAP_Bindings"].Columns.Add("SSL",typeof(bool)).DefaultValue = false;
            }
            if(!ds.Tables["IMAP_Bindings"].Columns.Contains("SSL_Certificate")){
                ds.Tables["IMAP_Bindings"].Columns.Add("SSL_Certificate",typeof(byte[]));
            }

            #endregion

            #region table SIP_Bindings

            if(!ds.Tables.Contains("SIP_Bindings")){
                ds.Tables.Add("SIP_Bindings");
            }
            if(!ds.Tables["SIP_Bindings"].Columns.Contains("Protocol")){
                ds.Tables["SIP_Bindings"].Columns.Add("Protocol").DefaultValue = "UDP";
            }
            if(!ds.Tables["SIP_Bindings"].Columns.Contains("IP")){
                ds.Tables["SIP_Bindings"].Columns.Add("IP").DefaultValue = "0.0.0.0";
            }
            if(!ds.Tables["SIP_Bindings"].Columns.Contains("Port")){
                ds.Tables["SIP_Bindings"].Columns.Add("Port").DefaultValue = "5060";
            }
            if(!ds.Tables["SIP_Bindings"].Columns.Contains("SSL")){
                ds.Tables["SIP_Bindings"].Columns.Add("SSL",typeof(bool)).DefaultValue = false;
            }
            if(!ds.Tables["SIP_Bindings"].Columns.Contains("SSL_Certificate")){
                ds.Tables["SIP_Bindings"].Columns.Add("SSL_Certificate",typeof(byte[]));
            }

            #endregion

            #region table ServerReturnMessages

            if(!ds.Tables.Contains("ServerReturnMessages")){
                ds.Tables.Add("ServerReturnMessages");
            }
            if(!ds.Tables["ServerReturnMessages"].Columns.Contains("MessageType")){
                ds.Tables["ServerReturnMessages"].Columns.Add("MessageType");
            }
            if(!ds.Tables["ServerReturnMessages"].Columns.Contains("Subject")){
                ds.Tables["ServerReturnMessages"].Columns.Add("Subject");
            }
            if(!ds.Tables["ServerReturnMessages"].Columns.Contains("BodyTextRtf")){
                ds.Tables["ServerReturnMessages"].Columns.Add("BodyTextRtf");
            }

            #endregion

        }

		#endregion

    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Estonia Estonia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions