Click here to Skip to main content
15,885,546 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 321.7K   4.9K   74  
Full featured SMTP/POP3/IMAP server
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Data;

using LumiSoft.MailServer.API.UserAPI;

namespace LumiSoft.MailServer.UI
{
    /// <summary>
    /// System Logging settings window.
    /// </summary>
    public class wfrm_System_Logging : Form
    {
        //--- Common UI -------------------------------
        private TabControl    m_pTab            = null;
        private Button        m_pApply          = null;
        //--- Tabpage General UI ----------------------
        private CheckBox m_pLogSMTP             = null;
        private Label    mt_SMTPLogPath         = null;
        private TextBox  m_pSMTPLogPath         = null;
        private Button   m_pGetSMTPLogPath      = null;
        private CheckBox m_pLogPOP3             = null;
        private Label    mt_POP3LogPath         = null;
        private TextBox  m_pPOP3LogPath         = null;
        private Button   m_pGetPOP3LogPath      = null;
        private CheckBox m_pLogIMAP             = null;
        private Label    mt_IMAPLogPath         = null;
        private TextBox  m_pIMAPLogPath         = null;
        private Button   m_pGetIMAPLogPath      = null;
        private CheckBox m_pLogRelay            = null;
        private Label    mt_RelayLogPath        = null;
        private TextBox  m_pRelayLogPath        = null;
        private Button   m_pGetRelayLogPath     = null;
        private CheckBox m_pLogFetchPOP3        = null;
        private Label    mt_FetchPOP3LogPath    = null;
        private TextBox  m_pFetchPOP3LogPath    = null;
        private Button   m_pGetFetchPOP3LogPath = null;
        private CheckBox m_pLogServer           = null;
        private Label    mt_ServerLogPath       = null;
        private TextBox  m_pServerLogPath       = null;
        private Button   m_pGetServerLogPath    = null;
        //---------------------------------------------

        private VirtualServer m_pVirtualServer = null;

        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="virtualServer">Virtual server.</param>
        public wfrm_System_Logging(VirtualServer virtualServer)
        {
            m_pVirtualServer = virtualServer;

            InitUI();

            LoadData();
        }

        #region method InitUI

        /// <summary>
        /// Creates and initializes window UI.
        /// </summary>
        private void InitUI()
        {
            //--- Common UI -------------------------------------//
            m_pTab = new TabControl();
            m_pTab.Size = new Size(515,490);
            m_pTab.Location = new Point(5,0);
            m_pTab.TabPages.Add(new TabPage("General"));

            m_pApply = new Button();
            m_pApply.Size = new Size(70,20);
            m_pApply.Location = new Point(450,500);
            m_pApply.Text = "Apply";
            m_pApply.Click += new EventHandler(m_pApply_Click);
            //---------------------------------------------------//

            //--- Tabpage General UI ----------------------------//
            m_pLogSMTP = new CheckBox();
            m_pLogSMTP.Size = new Size(150,20);
            m_pLogSMTP.Location = new Point(10,20);
            m_pLogSMTP.Text = "Log SMTP";

            mt_SMTPLogPath = new Label();
            mt_SMTPLogPath.Size = new Size(50,20);
            mt_SMTPLogPath.Location = new Point(10,45);
            mt_SMTPLogPath.TextAlign = ContentAlignment.MiddleRight;
            mt_SMTPLogPath.Text = "Path:";

            m_pSMTPLogPath = new TextBox();
            m_pSMTPLogPath.Size = new Size(400,20);
            m_pSMTPLogPath.Location = new Point(65,45);
            m_pSMTPLogPath.ReadOnly = true;

            m_pGetSMTPLogPath = new Button();            
            m_pGetSMTPLogPath.Size = new Size(25,20);
            m_pGetSMTPLogPath.Location = new Point(470,45);
            m_pGetSMTPLogPath.Text = "...";
            m_pGetSMTPLogPath.Click += new EventHandler(m_pGetSMTPLogPath_Click);

            m_pLogPOP3 = new CheckBox();
            m_pLogPOP3.Size = new Size(150,20);
            m_pLogPOP3.Location = new Point(10,70);
            m_pLogPOP3.Text = "Log POP3";

            mt_POP3LogPath = new Label();
            mt_POP3LogPath.Size = new Size(50,20);
            mt_POP3LogPath.Location = new Point(10,90);
            mt_POP3LogPath.TextAlign = ContentAlignment.MiddleRight;
            mt_POP3LogPath.Text = "Path:";

            m_pPOP3LogPath = new TextBox();
            m_pPOP3LogPath.Size = new Size(400,20);
            m_pPOP3LogPath.Location = new Point(65,90);
            m_pPOP3LogPath.ReadOnly = true;

            m_pGetPOP3LogPath = new Button();            
            m_pGetPOP3LogPath.Size = new Size(25,20);
            m_pGetPOP3LogPath.Location = new Point(470,90);
            m_pGetPOP3LogPath.Text = "...";
            m_pGetPOP3LogPath.Click += new EventHandler(m_pGetPOP3LogPath_Click);

            m_pLogIMAP = new CheckBox();
            m_pLogIMAP.Size = new Size(150,20);
            m_pLogIMAP.Location = new Point(10,120);
            m_pLogIMAP.Text = "Log IMAP";

            mt_IMAPLogPath = new Label();
            mt_IMAPLogPath.Size = new Size(50,20);
            mt_IMAPLogPath.Location = new Point(10,140);
            mt_IMAPLogPath.TextAlign = ContentAlignment.MiddleRight;
            mt_IMAPLogPath.Text = "Path:";

            m_pIMAPLogPath = new TextBox();
            m_pIMAPLogPath.Size = new Size(400,20);
            m_pIMAPLogPath.Location = new Point(65,140);
            m_pIMAPLogPath.ReadOnly = true;

            m_pGetIMAPLogPath = new Button();            
            m_pGetIMAPLogPath.Size = new Size(25,20);
            m_pGetIMAPLogPath.Location = new Point(470,140);
            m_pGetIMAPLogPath.Text = "...";
            m_pGetIMAPLogPath.Click += new EventHandler(m_pGetIMAPLogPath_Click);

            m_pLogRelay = new CheckBox();
            m_pLogRelay.Size = new Size(150,20);
            m_pLogRelay.Location = new Point(10,170);
            m_pLogRelay.Text = "Log Relay";

            mt_RelayLogPath = new Label();
            mt_RelayLogPath.Size = new Size(50,20);
            mt_RelayLogPath.Location = new Point(10,190);
            mt_RelayLogPath.TextAlign = ContentAlignment.MiddleRight;
            mt_RelayLogPath.Text = "Path:";

            m_pRelayLogPath = new TextBox();
            m_pRelayLogPath.Size = new Size(400,20);
            m_pRelayLogPath.Location = new Point(65,190);
            m_pRelayLogPath.ReadOnly = true;

            m_pGetRelayLogPath = new Button();            
            m_pGetRelayLogPath.Size = new Size(25,20);
            m_pGetRelayLogPath.Location = new Point(470,190);
            m_pGetRelayLogPath.Text = "...";
            m_pGetRelayLogPath.Click += new EventHandler(m_pGetRelayLogPath_Click);

            m_pLogFetchPOP3 = new CheckBox();
            m_pLogFetchPOP3.Size = new Size(150,20);
            m_pLogFetchPOP3.Location = new Point(10,220);
            m_pLogFetchPOP3.Text = "Log Fetch POP3";

            mt_FetchPOP3LogPath = new Label();
            mt_FetchPOP3LogPath.Size = new Size(50,20);
            mt_FetchPOP3LogPath.Location = new Point(10,240);
            mt_FetchPOP3LogPath.TextAlign = ContentAlignment.MiddleRight;
            mt_FetchPOP3LogPath.Text = "Path:";

            m_pFetchPOP3LogPath = new TextBox();
            m_pFetchPOP3LogPath.Size = new Size(400,20);
            m_pFetchPOP3LogPath.Location = new Point(65,240);
            m_pFetchPOP3LogPath.ReadOnly = true;

            m_pGetFetchPOP3LogPath = new Button();            
            m_pGetFetchPOP3LogPath.Size = new Size(25,20);
            m_pGetFetchPOP3LogPath.Location = new Point(470,240);
            m_pGetFetchPOP3LogPath.Text = "...";
            m_pGetFetchPOP3LogPath.Click += new EventHandler(m_pGetFetchPOP3LogPath_Click);

            m_pLogServer = new CheckBox();
            m_pLogServer.Size = new Size(150,20);
            m_pLogServer.Location = new Point(10,270);
            m_pLogServer.Text = "Log Server";
            m_pLogServer.Checked = true;
            m_pLogServer.Enabled = false;

            mt_ServerLogPath = new Label();
            mt_ServerLogPath.Size = new Size(50,20);
            mt_ServerLogPath.Location = new Point(10,290);
            mt_ServerLogPath.TextAlign = ContentAlignment.MiddleRight;
            mt_ServerLogPath.Text = "Path:";

            m_pServerLogPath = new TextBox();
            m_pServerLogPath.Size = new Size(400,20);
            m_pServerLogPath.Location = new Point(65,290);
            m_pServerLogPath.ReadOnly = true;

            m_pGetServerLogPath = new Button();         
            m_pGetServerLogPath.Size = new Size(25,20);
            m_pGetServerLogPath.Location = new Point(470,290);
            m_pGetServerLogPath.Text = "...";

            // Tabpage General UI
            m_pTab.TabPages[0].Controls.Add(m_pLogSMTP);
            m_pTab.TabPages[0].Controls.Add(mt_SMTPLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pSMTPLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pGetSMTPLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pLogPOP3);
            m_pTab.TabPages[0].Controls.Add(mt_POP3LogPath);
            m_pTab.TabPages[0].Controls.Add(m_pPOP3LogPath);
            m_pTab.TabPages[0].Controls.Add(m_pGetPOP3LogPath);
            m_pTab.TabPages[0].Controls.Add(m_pLogIMAP);
            m_pTab.TabPages[0].Controls.Add(mt_IMAPLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pIMAPLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pGetIMAPLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pLogRelay);
            m_pTab.TabPages[0].Controls.Add(mt_RelayLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pRelayLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pGetRelayLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pLogFetchPOP3);
            m_pTab.TabPages[0].Controls.Add(mt_FetchPOP3LogPath);
            m_pTab.TabPages[0].Controls.Add(m_pFetchPOP3LogPath);
            m_pTab.TabPages[0].Controls.Add(m_pGetFetchPOP3LogPath);
            m_pTab.TabPages[0].Controls.Add(m_pLogServer);
            m_pTab.TabPages[0].Controls.Add(mt_ServerLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pServerLogPath);
            m_pTab.TabPages[0].Controls.Add(m_pGetServerLogPath);
            //-------------------------------------------------//

            // Common UI
            this.Controls.Add(m_pTab);
            this.Controls.Add(m_pApply);
        }
                                                                                
        #endregion


        #region Events Handling

        #region method OnVisibleChanged

        protected override void OnVisibleChanged(EventArgs e)
        {
            base.OnVisibleChanged(e);

            if(!this.Visible){
                SaveData(true); 
            }
        }

        #endregion


        #region method m_pGetSMTPLogPath_Click

        private void m_pGetSMTPLogPath_Click(object sender, EventArgs e)
        {
            using(FolderBrowserDialog dlg = new FolderBrowserDialog()){
				dlg.SelectedPath = m_pSMTPLogPath.Text;
				if(dlg.ShowDialog() == DialogResult.OK){
					m_pSMTPLogPath.Text = dlg.SelectedPath;
					if(m_pSMTPLogPath.Text.ToLower() == (Application.StartupPath + "\\Logs\\Smtp").ToLower()){
						m_pSMTPLogPath.Text = "";
					}
				}
			}
        }

        #endregion

        #region method m_pGetPOP3LogPath_Click

        private void m_pGetPOP3LogPath_Click(object sender, EventArgs e)
        {
            using(FolderBrowserDialog dlg = new FolderBrowserDialog()){
				dlg.SelectedPath = m_pPOP3LogPath.Text;
				if(dlg.ShowDialog() == DialogResult.OK){
					m_pPOP3LogPath.Text = dlg.SelectedPath;
					if(m_pPOP3LogPath.Text.ToLower() == (Application.StartupPath + "\\Logs\\Pop3").ToLower()){
						m_pPOP3LogPath.Text = "";
					}
				}
			}
        }

        #endregion

        #region method m_pGetIMAPLogPath_Click

        private void m_pGetIMAPLogPath_Click(object sender, EventArgs e)
        {
            using(FolderBrowserDialog dlg = new FolderBrowserDialog()){
				dlg.SelectedPath = m_pIMAPLogPath.Text;
				if(dlg.ShowDialog() == DialogResult.OK){
					m_pIMAPLogPath.Text = dlg.SelectedPath;
					if(m_pIMAPLogPath.Text.ToLower() == (Application.StartupPath + "\\Logs\\IMAP").ToLower()){
						m_pIMAPLogPath.Text = "";
					}
				}
			}
        }

        #endregion

        #region method m_pGetRelayLogPath_Click

        private void m_pGetRelayLogPath_Click(object sender, EventArgs e)
        {
            using(FolderBrowserDialog dlg = new FolderBrowserDialog()){
				dlg.SelectedPath = m_pRelayLogPath.Text;
				if(dlg.ShowDialog() == DialogResult.OK){
					m_pRelayLogPath.Text = dlg.SelectedPath;
					if(m_pRelayLogPath.Text.ToLower() == (Application.StartupPath + "\\Logs\\Relay").ToLower()){
						m_pRelayLogPath.Text = "";
					}
				}
			}
        }

        #endregion

        #region method m_pGetFetchPOP3LogPath_Click

        private void m_pGetFetchPOP3LogPath_Click(object sender, EventArgs e)
        {
            using(FolderBrowserDialog dlg = new FolderBrowserDialog()){
				dlg.SelectedPath = m_pFetchPOP3LogPath.Text;
				if(dlg.ShowDialog() == DialogResult.OK){
					m_pFetchPOP3LogPath.Text = dlg.SelectedPath;
					if(m_pFetchPOP3LogPath.Text.ToLower() == (Application.StartupPath + "\\Logs\\FetchPOP3").ToLower()){
						m_pFetchPOP3LogPath.Text = "";
					}
				}
			}
        }

        #endregion


        #region method m_pApply_Click

        private void m_pApply_Click(object sender, EventArgs e)
        {
            SaveData(false); 
        }

        #endregion

        #endregion


        #region method LoadData

        /// <summary>
        /// Loads data to UI.
        /// </summary>
        private void LoadData()
        {            
            try{
				Logging_Settings settings = m_pVirtualServer.SystemSettings.Logging;

				m_pLogSMTP.Checked       = settings.LogSMTP;
				m_pSMTPLogPath.Text      = settings.SmtpLogsPath;
				m_pLogPOP3.Checked       = settings.LogPOP3;
				m_pPOP3LogPath.Text      = settings.Pop3LogsPath;
				m_pLogIMAP.Checked       = settings.LogIMAP;
				m_pIMAPLogPath.Text      = settings.ImapLogsPath;
				m_pLogRelay.Checked      = settings.LogRelay;
				m_pRelayLogPath.Text     = settings.RelayLogsPath;
				m_pLogFetchPOP3.Checked  = settings.LogFetchMessages;
				m_pFetchPOP3LogPath.Text = settings.FetchMessagesLogsPath;
				//m_pServerLogPath.Text    = dr["Server_LogPath"].ToString();
			}
			catch(Exception x){
				wfrm_sys_Error frm = new wfrm_sys_Error(x,new System.Diagnostics.StackTrace());
				frm.ShowDialog(this);
			}
        }

        #endregion

        #region method SaveData

        /// <summary>
        /// Saves data.
        /// </summary>
        /// <param name="confirmSave">Specifies is save confirmation UI is showed.</param>
        private void SaveData(bool confirmSave)
        {
            try{
                Logging_Settings settings = m_pVirtualServer.SystemSettings.Logging;

				settings.LogSMTP               = m_pLogSMTP.Checked;
				settings.SmtpLogsPath          = m_pSMTPLogPath.Text;
				settings.LogPOP3               = m_pLogPOP3.Checked;
				settings.Pop3LogsPath          = m_pPOP3LogPath.Text;
				settings.LogIMAP               = m_pLogIMAP.Checked;
				settings.ImapLogsPath          = m_pIMAPLogPath.Text;
				settings.LogRelay              = m_pLogRelay.Checked;
				settings.RelayLogsPath         = m_pRelayLogPath.Text;
				settings.LogFetchMessages      = m_pLogFetchPOP3.Checked;
				settings.FetchMessagesLogsPath = m_pFetchPOP3LogPath.Text;
                
                if(m_pVirtualServer.SystemSettings.HasChanges){
                    if(!confirmSave || MessageBox.Show(this,"You have changes settings, do you want to save them ?","Confirm:",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes){
                        m_pVirtualServer.SystemSettings.Commit();
                    }
                }
            }
			catch(Exception x){
				wfrm_sys_Error frm = new wfrm_sys_Error(x,new System.Diagnostics.StackTrace());
				frm.ShowDialog(this);
			}
        }

        #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