/// <summary> /// Default constructor. /// </summary> /// <param name="sysSettings">Reference to system settings.</param> /// <param name="enabled">Specifies if IMAP service is enabled.</param> /// <param name="hostName">SIP host name.</param> /// <param name="minExpires">SIP minimum content expire time in seconds.</param> /// <param name="bindings">Specifies SIP listening info.</param> internal SIP_Settings(System_Settings sysSettings,bool enabled,string hostName,int minExpires,BindInfo[] bindings) { m_pSysSettings = sysSettings; m_Enabled = enabled; m_HostName = hostName; m_MinExpires = minExpires; m_pBinds = bindings; }
/// <summary> /// Default constructor. /// </summary> /// <param name="sysSettings">Reference to system settings.</param> /// <param name="enabled">Specifies if IMAP service is enabled.</param> /// <param name="hostName">Host name.</param> /// <param name="greeting">Greeting text.</param> /// <param name="idleTimeout">Session idle timeout seconds.</param> /// <param name="maxConnections">Maximum conncurent connections.</param> /// <param name="maxConnectionsPerIP">Maximum conncurent connections fro 1 IP address.</param> /// <param name="maxBadCommands">Maximum bad commands per session.</param> /// <param name="bindings">Specifies IMAP listening info.</param> internal IMAP_Settings(System_Settings sysSettings,bool enabled,string hostName,string greeting,int idleTimeout,int maxConnections,int maxConnectionsPerIP,int maxBadCommands,BindInfo[] bindings) { m_pSysSettings = sysSettings; m_Enabled = enabled; m_HostName = hostName; m_Greeting = greeting; m_IdleTimeout = idleTimeout; m_MaxConnections = maxConnections; m_MaxConnsPerIP = maxConnectionsPerIP; m_MaxBadCommands = maxBadCommands; m_pBinds = bindings; }
/// <summary> /// Default constructor. /// </summary> /// <param name="sysSettings">Reference to system settings.</param> /// <param name="enabled">Specifies if SMTP service is enabled.</param> /// <param name="hostName">SMTP host name.</param> /// <param name="greeting">Greeting text.</param> /// <param name="defaultDomain">Default domain.</param> /// <param name="idleTimeOut">Session idle timeout seconds.</param> /// <param name="maxConnections">Maximum conncurent connections.</param> /// <param name="maxConnectionsPerIP">Maximum conncurent connections fro 1 IP address.</param> /// <param name="maxBadCommands">Maximum bad commands per session.</param> /// <param name="maxRecipients">Maximum recipients per message.</param> /// <param name="maxMessageSize">Maximum allowed message size.</param> /// <param name="requireAuth">Specifies if SMTP server is private server and requires authentication.</param> /// <param name="bindings">Specifies SMTP listening info.</param> internal SMTP_Settings(System_Settings sysSettings,bool enabled,string hostName,string greeting,string defaultDomain,int idleTimeOut,int maxConnections,int maxConnectionsPerIP,int maxBadCommands,int maxRecipients,int maxMessageSize,bool requireAuth,BindInfo[] bindings) { m_pSysSettings = sysSettings; m_Enabled = enabled; m_HostName = hostName; m_GreetingText = greeting; m_DefaultDomain = defaultDomain; m_SessionIdleTimeOut = idleTimeOut; m_MaxConnections = maxConnections; m_MaxConnsPerIP = maxConnectionsPerIP; m_MaxBadCommnads = maxBadCommands; m_MaxRecipientPerMsg = maxRecipients; m_MaxMessageSize = maxMessageSize; m_RequireAuth = requireAuth; m_pBinds = bindings; }
/// <summary> /// Gets server settings and binds them to this. /// </summary> private void Bind() { /* GetSettings <virtualServerID> Responses: +OK <sizeOfData> <data> -ERR <errorText> */ // Call TCP GetSettings m_pVirtualServer.Server.Socket.WriteLine("GetSettings " + m_pVirtualServer.VirtualServerID); string response = m_pVirtualServer.Server.Socket.ReadLine(); if(!response.ToUpper().StartsWith("+OK")){ throw new Exception(response); } int sizeOfData = Convert.ToInt32(response.Split(new char[]{' '},2)[1]); MemoryStream ms = new MemoryStream(); m_pVirtualServer.Server.Socket.ReadSpecifiedLength(sizeOfData,ms); ms.Position = 0; DataSet ds = new DataSet(); CreateSettingsSchema(ds); ds.Clear(); ds.ReadXml(ms); DataRow dr = ds.Tables["Settings"].Rows[0]; //--- AUTH -------------------------------------------// m_pAuth = new Auth_Settings( this, (ServerAuthenticationType_enum)Convert.ToInt32(dr["ServerAuthenticationType"]), dr["ServerAuthWinDomain"].ToString() ); //--- SMTP -------------------------------------------// // Get bindings BindInfo[] smtpBinds = new BindInfo[ds.Tables["SMTP_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["SMTP_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["SMTP_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["SMTP_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } smtpBinds[i] = new BindInfo( "TCP", IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } m_pSMTP = new SMTP_Settings( this, Convert.ToBoolean(dr["SMTP_Enabled"]), dr["SMTP_HostName"].ToString(), dr["SMTP_GreetingText"].ToString(), dr["SMTP_DefaultDomain"].ToString(), Convert.ToInt32(dr["SMTP_SessionIdleTimeOut"]), Convert.ToInt32(dr["SMTP_Threads"]), Convert.ToInt32(dr["SMTP_MaxConnectionsPerIP"]), Convert.ToInt32(dr["SMTP_MaxBadCommands"]), Convert.ToInt32(dr["MaxRecipients"]), Convert.ToInt32(dr["MaxMessageSize"]), Convert.ToBoolean(dr["SMTP_RequireAuth"]), smtpBinds ); //--- POP3 ------------------------------------------// // Get bindings BindInfo[] pop3Binds = new BindInfo[ds.Tables["POP3_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["POP3_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["POP3_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["POP3_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } pop3Binds[i] = new BindInfo( "TCP", IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } m_pPOP3 = new POP3_Settings( this, Convert.ToBoolean(dr["POP3_Enabled"]), dr["POP3_HostName"].ToString(), dr["POP3_GreetingText"].ToString(), Convert.ToInt32(dr["POP3_SessionIdleTimeOut"]), Convert.ToInt32(dr["POP3_Threads"]), Convert.ToInt32(dr["POP3_MaxConnectionsPerIP"]), Convert.ToInt32(dr["POP3_MaxBadCommands"]), pop3Binds ); //--- IMAP ------------------------------------------// // Get bindings BindInfo[] imapBinds = new BindInfo[ds.Tables["IMAP_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["IMAP_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["IMAP_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["IMAP_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } imapBinds[i] = new BindInfo( "TCP", IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } m_pIMAP = new IMAP_Settings( this, Convert.ToBoolean(dr["IMAP_Enabled"]), dr["IMAP_HostName"].ToString(), dr["IMAP_GreetingText"].ToString(), Convert.ToInt32(dr["IMAP_SessionIdleTimeOut"]), Convert.ToInt32(dr["IMAP_Threads"]), Convert.ToInt32(dr["IMAP_MaxConnectionsPerIP"]), Convert.ToInt32(dr["IMAP_MaxBadCommands"]), imapBinds ); //--- Relay ----------------------------------------// m_pRelay = new Relay_Settings( this, Convert.ToBoolean(dr["UseSmartHost"]), dr["SmartHost"].ToString(), Convert.ToInt32(dr["SmartHostPort"]), Convert.ToBoolean(dr["Relay_SmartHost_UseSSL"]), dr["SmartHostUserName"].ToString(), dr["SmartHostPassword"].ToString(), dr["Dns1"].ToString(), dr["Dns2"].ToString(), dr["Relay_HostName"].ToString(), Convert.ToInt32(dr["Relay_SessionIdleTimeOut"]), Convert.ToInt32(dr["MaxRelayThreads"]), Convert.ToInt32(dr["Relay_MaxConnectionsPerIP"]), Convert.ToInt32(dr["RelayInterval"]), Convert.ToInt32(dr["RelayRetryInterval"]), Convert.ToInt32(dr["RelayUndeliveredWarning"]), Convert.ToInt32(dr["RelayUndelivered"]), Convert.ToBoolean(dr["StoreUndeliveredMessages"]), dr["RelayLocalIP"].ToString() ); //--- Fetch messages ------------------------------// m_pFetchMessages = new FetchMessages_Settings( this, Convert.ToBoolean(dr["FetchPOP3_Enabled"]), Convert.ToInt32(dr["FetchPOP3_Interval"]) ); //--- SIP ----------------------------------------// // Get bindings BindInfo[] sipBinds = new BindInfo[ds.Tables["SIP_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["SIP_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["SIP_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["SIP_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } sipBinds[i] = new BindInfo( drBinding["Protocol"].ToString(), IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } m_pSIP = new SIP_Settings( this, Convert.ToBoolean(dr["SIP_Enabled"]), dr["SIP_HostName"].ToString(), Convert.ToInt32(dr["SIP_MinExpires"]), sipBinds ); //--- Logging ------------------------------------// m_pLogging = new Logging_Settings( this, ConvertEx.ToBoolean(dr["LogSMTPCmds"],false), dr["SMTP_LogPath"].ToString(), ConvertEx.ToBoolean(dr["LogPOP3Cmds"],false), dr["POP3_LogPath"].ToString(), ConvertEx.ToBoolean(dr["LogIMAPCmds"],false), dr["IMAP_LogPath"].ToString(), ConvertEx.ToBoolean(dr["LogRelayCmds"],false), dr["Relay_LogPath"].ToString(), ConvertEx.ToBoolean(dr["LogFetchPOP3Cmds"],false), dr["FetchPOP3_LogPath"].ToString() ); //--- Server return messages string delayedNotifyBodyRtf = "" + "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Verdana;}{\\f1\\fnil\\fcharset186 Verdana;}{\\f2\\fswiss\\fcharset186{\\*\\fname Arial;}Arial Baltic;}{\\f3\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n" + "{\\colortbl ;\\red0\\green64\\blue128;\\red255\\green0\\blue0;\\red0\\green128\\blue0;}\r\n" + "\\viewkind4\\uc1\\pard\\f0\\fs20 This e-mail is generated by the Server(\\cf1 <#relay.hostname>\\cf0 ) to notify you, \\par\r\n" + "\\lang1061\\f1 that \\lang1033\\f0 your message to \\cf1 <#relay.to>\\cf0 dated \\b\\fs16 <#message.header[\"Date:\"]>\\b0 \\fs20 could not be sent at the first attempt.\\par\r\n" + "\\par\r\n" + "Recipient \\i <#relay.to>'\\i0 s Server (\\cf1 <#relay.session_hostname>\\cf0 ) returned the following response: \\cf2 <#relay.error>\\cf0\\par\r\n" + "\\par\r\n" + "\\par\r\n" + "Please note Server will attempt to deliver this message for \\b <#relay.undelivered_after>\\b0 hours.\\par\r\n" + "\\par\r\n" + "--------\\par\r\n" + "\\par\r\n" + "Your original message is attached to this e-mail (\\b data.eml\\b0 )\\par\r\n" + "\\par\r\n" + "\\fs16 The tracking number for this message is \\cf3 <#relay.session_messageid>\\cf0\\fs20\\par\r\n" + "\\lang1061\\f2\\par\r\n" + "\\pard\\lang1033\\f3\\fs17\\par\r\n" + "}\r\n"; ServerReturnMessage delayedDeliveryWarning = new ServerReturnMessage("Delayed delivery notice: <#message.header[\"Subject:\"]>",delayedNotifyBodyRtf); string undeliveredNotifyBodyRtf = "" + "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Verdana;}{\\f1\\fswiss\\fprq2\\fcharset186 Verdana;}{\\f2\\fnil\\fcharset0 Verdana;}{\\f3\\fnil\\fcharset186 Verdana;}{\\f4\\fswiss\\fcharset0 Arial;}{\\f5\\fswiss\\fcharset186{\\*\\fname Arial;}Arial Baltic;}}\r\n" + "{\\colortbl ;\\red0\\green64\\blue128;\\red255\\green0\\blue0;\\red0\\green128\\blue0;}\r\n" + "\\viewkind4\\uc1\\pard\\f0\\fs20 Your message t\\lang1061\\f1 o \\cf1\\lang1033\\f2 <#relay.to>\\cf0\\f0 , dated \\b\\fs16 <#message.header[\"Date:\"]>\\b0\\fs20 , could not be delivered.\\par\r\n" + "\\par\r\n" + "Recipient \\i <#relay.to>'\\i0 s Server (\\cf1 <#relay.session_hostname>\\cf0 ) returned the following response: \\cf2 <#relay.error>\\cf0\\par\r\n" + "\\par\r\n" + "\\par\r\n" + "\\b * Server will not attempt to deliver this message anymore\\b0 .\\par\r\n" + "\\par\r\n" + "--------\\par\r\n" + "\\par\r\n" + "Your original message is attached to this e-mail (\\b data.eml\\b0 )\\par\r\n" + "\\par\r\n" + "\\fs16 The tracking number for this message is \\cf3 <#relay.session_messageid>\\cf0\\fs20\\par\r\n" + "\\lang1061\\f5\\par\r\n" + "\\lang1033\\f2\\par\r\n" + "}\r\n"; ServerReturnMessage undelivered = new ServerReturnMessage("Undelivered notice: <#message.header[\"Subject:\"]>",undeliveredNotifyBodyRtf); if(ds.Tables.Contains("ServerReturnMessages")){ foreach(DataRow dr1 in ds.Tables["ServerReturnMessages"].Rows){ if(dr1["MessageType"].ToString() == "delayed_delivery_warning"){ delayedDeliveryWarning = new ServerReturnMessage(dr1["Subject"].ToString(),dr1["BodyTextRtf"].ToString()); } else if(dr1["MessageType"].ToString() == "undelivered"){ undelivered = new ServerReturnMessage(dr1["Subject"].ToString(),dr1["BodyTextRtf"].ToString()); } } } m_pReturnMessages = new ServerReturnMessages( this, delayedDeliveryWarning, undelivered ); }
/// <summary> /// Loads settings from DataSet. /// </summary> /// <param name="dsSettings">DataSet what contains settings.</param> internal void LoadSettings(DataSet dsSettings) { DataSet ds = new DataSet(); CreateSettingsSchema(ds); ds.Clear(); MemoryStream ms = new MemoryStream(); dsSettings.WriteXml(ms); ms.Position = 0; ds.ReadXml(ms); DataRow dr = ds.Tables["Settings"].Rows[0]; //--- AUTH -------------------------------------------// m_pAuth.AuthenticationType = (ServerAuthenticationType_enum)Convert.ToInt32(dr["ServerAuthenticationType"]); m_pAuth.WinDomain = dr["ServerAuthWinDomain"].ToString(); //--- SMTP -------------------------------------------// // Get bindings BindInfo[] smtpBinds = new BindInfo[ds.Tables["SMTP_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["SMTP_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["SMTP_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["SMTP_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } smtpBinds[i] = new BindInfo( "TCP", IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } m_pSMTP.Enabled = Convert.ToBoolean(dr["SMTP_Enabled"]); m_pSMTP.HostName = dr["SMTP_HostName"].ToString(); m_pSMTP.GreetingText = dr["SMTP_GreetingText"].ToString(); m_pSMTP.DefaultDomain = dr["SMTP_DefaultDomain"].ToString(); m_pSMTP.SessionIdleTimeOut = Convert.ToInt32(dr["SMTP_SessionIdleTimeOut"]); m_pSMTP.MaximumConnections = Convert.ToInt32(dr["SMTP_Threads"]); m_pSMTP.MaximumConnectionsPerIP = Convert.ToInt32(dr["SMTP_MaxConnectionsPerIP"]); m_pSMTP.MaximumBadCommands = Convert.ToInt32(dr["SMTP_MaxBadCommands"]); m_pSMTP.MaximumRecipientsPerMessage = Convert.ToInt32(dr["MaxRecipients"]); m_pSMTP.MaximumMessageSize = Convert.ToInt32(dr["MaxMessageSize"]); m_pSMTP.RequireAuthentication = Convert.ToBoolean(dr["SMTP_RequireAuth"]); m_pSMTP.Binds = smtpBinds; //--- POP3 ------------------------------------------// // Get bindings BindInfo[] pop3Binds = new BindInfo[ds.Tables["POP3_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["POP3_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["POP3_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["POP3_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } pop3Binds[i] = new BindInfo( "TCP", IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } m_pPOP3.Enabled = Convert.ToBoolean(dr["POP3_Enabled"]); m_pPOP3.HostName = dr["POP3_HostName"].ToString(); m_pPOP3.GreetingText = dr["POP3_GreetingText"].ToString(); m_pPOP3.SessionIdleTimeOut = Convert.ToInt32(dr["POP3_SessionIdleTimeOut"]); m_pPOP3.MaximumConnections = Convert.ToInt32(dr["POP3_Threads"]); m_pPOP3.MaximumConnectionsPerIP = Convert.ToInt32(dr["POP3_MaxConnectionsPerIP"]); m_pPOP3.MaximumBadCommands = Convert.ToInt32(dr["POP3_MaxBadCommands"]); m_pPOP3.Binds = pop3Binds; //--- IMAP ------------------------------------------// // Get bindings BindInfo[] imapBinds = new BindInfo[ds.Tables["IMAP_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["IMAP_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["IMAP_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["IMAP_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } imapBinds[i] = new BindInfo( "TCP", IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } m_pIMAP.Enabled = Convert.ToBoolean(dr["IMAP_Enabled"]); m_pIMAP.HostName = dr["IMAP_HostName"].ToString(); m_pIMAP.GreetingText = dr["IMAP_GreetingText"].ToString(); m_pIMAP.SessionIdleTimeOut = Convert.ToInt32(dr["IMAP_SessionIdleTimeOut"]); m_pIMAP.MaximumConnections = Convert.ToInt32(dr["IMAP_Threads"]); m_pIMAP.MaximumConnectionsPerIP = Convert.ToInt32(dr["IMAP_MaxConnectionsPerIP"]); m_pIMAP.MaximumBadCommands = Convert.ToInt32(dr["IMAP_MaxBadCommands"]); m_pIMAP.Binds = imapBinds; //--- Relay ----------------------------------------// m_pRelay.UseSmartHost = Convert.ToBoolean(dr["UseSmartHost"]); m_pRelay.SmartHost = dr["SmartHost"].ToString(); m_pRelay.SmartHostPort = Convert.ToInt32(dr["SmartHostPort"]); m_pRelay.SmartHostSsl = Convert.ToBoolean(dr["Relay_SmartHost_UseSSL"]); m_pRelay.SmartHostUserName = dr["SmartHostUserName"].ToString(); m_pRelay.SmartHostPassword = dr["SmartHostPassword"].ToString(); m_pRelay.Dns1 = dr["Dns1"].ToString(); m_pRelay.Dns2 = dr["Dns2"].ToString(); m_pRelay.HostName = dr["Relay_HostName"].ToString(); m_pRelay.SessionIdleTimeOut = Convert.ToInt32(dr["Relay_SessionIdleTimeOut"]); m_pRelay.MaximumConnections = Convert.ToInt32(dr["MaxRelayThreads"]); m_pRelay.MaximumConnectionsPerIP = Convert.ToInt32(dr["Relay_MaxConnectionsPerIP"]); m_pRelay.RelayInterval = Convert.ToInt32(dr["RelayInterval"]); m_pRelay.RelayRetryInterval = Convert.ToInt32(dr["RelayRetryInterval"]); m_pRelay.SendUndeliveredWarningAfter = Convert.ToInt32(dr["RelayUndeliveredWarning"]); m_pRelay.SendUndeliveredAfter = Convert.ToInt32(dr["RelayUndelivered"]); m_pRelay.StoreUndeliveredMessages = Convert.ToBoolean(dr["StoreUndeliveredMessages"]); m_pRelay.BindIP = IPAddress.Parse(dr["RelayLocalIP"].ToString()); //--- Fetch messages ------------------------------// m_pFetchMessages.Enabled = Convert.ToBoolean(dr["FetchPOP3_Enabled"]); m_pFetchMessages.FetchInterval = Convert.ToInt32(dr["FetchPOP3_Interval"]); //--- SIP ----------------------------------------// m_pSIP.Enabled = Convert.ToBoolean(dr["SIP_Enabled"]); m_pSIP.HostName = dr["SIP_HostName"].ToString(); m_pSIP.MinimumExpires = Convert.ToInt32(dr["SIP_MinExpires"]); // Get bindings BindInfo[] sipBinds = new BindInfo[ds.Tables["SIP_Bindings"].Rows.Count]; for(int i=0;i<ds.Tables["SIP_Bindings"].Rows.Count;i++){ DataRow drBinding = ds.Tables["SIP_Bindings"].Rows[i]; byte[] certificate = null; if(ds.Tables["SIP_Bindings"].Columns.Contains("SSL_Certificate") && drBinding["SSL_Certificate"] != null && !drBinding.IsNull("SSL_Certificate")){ if(((byte[])drBinding["SSL_Certificate"]).Length > 0){ certificate = (byte[])drBinding["SSL_Certificate"]; } } sipBinds[i] = new BindInfo( "TCP", IPAddress.Parse(drBinding["IP"].ToString()), Convert.ToInt32(drBinding["Port"]), Convert.ToBoolean(drBinding["SSL"]), certificate ); } //--- Logging ------------------------------------// m_pLogging.LogSMTP = ConvertEx.ToBoolean(dr["LogSMTPCmds"],false); m_pLogging.SmtpLogsPath = dr["SMTP_LogPath"].ToString(); m_pLogging.LogPOP3 = ConvertEx.ToBoolean(dr["LogPOP3Cmds"],false); m_pLogging.Pop3LogsPath = dr["POP3_LogPath"].ToString(); m_pLogging.LogIMAP = ConvertEx.ToBoolean(dr["LogIMAPCmds"],false); m_pLogging.ImapLogsPath = dr["IMAP_LogPath"].ToString(); m_pLogging.LogRelay = ConvertEx.ToBoolean(dr["LogRelayCmds"],false); m_pLogging.RelayLogsPath = dr["Relay_LogPath"].ToString(); m_pLogging.LogFetchMessages = ConvertEx.ToBoolean(dr["LogFetchPOP3Cmds"],false); m_pLogging.FetchMessagesLogsPath = dr["FetchPOP3_LogPath"].ToString(); //--- Server return messages string delayedNotifyBodyRtf = "" + "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fnil\\fcharset0 Verdana;}{\\f1\\fnil\\fcharset186 Verdana;}{\\f2\\fswiss\\fcharset186{\\*\\fname Arial;}Arial Baltic;}{\\f3\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n" + "{\\colortbl ;\\red0\\green64\\blue128;\\red255\\green0\\blue0;\\red0\\green128\\blue0;}\r\n" + "\\viewkind4\\uc1\\pard\\f0\\fs20 This e-mail is generated by the Server(\\cf1 <#relay.hostname>\\cf0 ) to notify you, \\par\r\n" + "\\lang1061\\f1 that \\lang1033\\f0 your message to \\cf1 <#relay.to>\\cf0 dated \\b\\fs16 <#message.header[\"Date:\"]>\\b0 \\fs20 could not be sent at the first attempt.\\par\r\n" + "\\par\r\n" + "Recipient \\i <#relay.to>'\\i0 s Server (\\cf1 <#relay.session_hostname>\\cf0 ) returned the following response: \\cf2 <#relay.error>\\cf0\\par\r\n" + "\\par\r\n" + "\\par\r\n" + "Please note Server will attempt to deliver this message for \\b <#relay.undelivered_after>\\b0 hours.\\par\r\n" + "\\par\r\n" + "--------\\par\r\n" + "\\par\r\n" + "Your original message is attached to this e-mail (\\b data.eml\\b0 )\\par\r\n" + "\\par\r\n" + "\\fs16 The tracking number for this message is \\cf3 <#relay.session_messageid>\\cf0\\fs20\\par\r\n" + "\\lang1061\\f2\\par\r\n" + "\\pard\\lang1033\\f3\\fs17\\par\r\n" + "}\r\n"; ServerReturnMessage delayedDeliveryWarning = new ServerReturnMessage("Delayed delivery notice: <#message.header[\"Subject:\"]>",delayedNotifyBodyRtf); string undeliveredNotifyBodyRtf = "" + "{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Verdana;}{\\f1\\fswiss\\fprq2\\fcharset186 Verdana;}{\\f2\\fnil\\fcharset0 Verdana;}{\\f3\\fnil\\fcharset186 Verdana;}{\\f4\\fswiss\\fcharset0 Arial;}{\\f5\\fswiss\\fcharset186{\\*\\fname Arial;}Arial Baltic;}}\r\n" + "{\\colortbl ;\\red0\\green64\\blue128;\\red255\\green0\\blue0;\\red0\\green128\\blue0;}\r\n" + "\\viewkind4\\uc1\\pard\\f0\\fs20 Your message t\\lang1061\\f1 o \\cf1\\lang1033\\f2 <#relay.to>\\cf0\\f0 , dated \\b\\fs16 <#message.header[\"Date:\"]>\\b0\\fs20 , could not be delivered.\\par\r\n" + "\\par\r\n" + "Recipient \\i <#relay.to>'\\i0 s Server (\\cf1 <#relay.session_hostname>\\cf0 ) returned the following response: \\cf2 <#relay.error>\\cf0\\par\r\n" + "\\par\r\n" + "\\par\r\n" + "\\b * Server will not attempt to deliver this message anymore\\b0 .\\par\r\n" + "\\par\r\n" + "--------\\par\r\n" + "\\par\r\n" + "Your original message is attached to this e-mail (\\b data.eml\\b0 )\\par\r\n" + "\\par\r\n" + "\\fs16 The tracking number for this message is \\cf3 <#relay.session_messageid>\\cf0\\fs20\\par\r\n" + "\\lang1061\\f5\\par\r\n" + "\\lang1033\\f2\\par\r\n" + "}\r\n"; ServerReturnMessage undelivered = new ServerReturnMessage("Undelivered notice: <#message.header[\"Subject:\"]>",undeliveredNotifyBodyRtf); if(ds.Tables.Contains("ServerReturnMessages")){ foreach(DataRow dr1 in ds.Tables["ServerReturnMessages"].Rows){ if(dr1["MessageType"].ToString() == "delayed_delivery_warning"){ delayedDeliveryWarning = new ServerReturnMessage(dr1["Subject"].ToString(),dr1["BodyTextRtf"].ToString()); } else if(dr1["MessageType"].ToString() == "undelivered"){ undelivered = new ServerReturnMessage(dr1["Subject"].ToString(),dr1["BodyTextRtf"].ToString()); } } } m_pReturnMessages = new ServerReturnMessages( this, delayedDeliveryWarning, undelivered ); }