Click here to Skip to main content
15,896,154 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 323.3K   4.9K   74  
Full featured SMTP/POP3/IMAP server
using System;
using System.Collections.Generic;
using System.Text;

using LumiSoft.Net;

namespace LumiSoft.MailServer.API.UserAPI
{
    /// <summary>
    /// The UserRemoteServer object represents remote server in user.
    /// </summary>
    public class UserRemoteServer
    {
        private User                       m_pUser         = null;
        private UserRemoteServerCollection m_pOwner        = null;
        private string                     m_ID            = "";
        private string                     m_Description   = "";
        private string                     m_Host          = "";
        private int                        m_Port          = 110;
        private bool                       m_SSL           = false;
        private string                     m_UserName      = "";
        private string                     m_Password      = "";
        private bool                       m_Enabled       = true;
        private bool                       m_ValuesChanged = false;

        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="ownerUser">User that owns specified remote server.</param>
        /// <param name="owner">Owner UserRemoteServerCollection collection that owns this remote server.</param>
        /// <param name="id">Remote server ID.</param>
        /// <param name="description">Remote server description.</param>
        /// <param name="host">Remote server name or IP.</param>
        /// <param name="port">Remote server port.</param>
        /// <param name="ssl">Specifies if connected to remote server via SSL.</param>
        /// <param name="userName">Remote server user name.</param>
        /// <param name="password">Remote server password.</param>
        /// <param name="enabled">Specifies if remote server is enabled.</param>
        internal UserRemoteServer(User ownerUser,UserRemoteServerCollection owner,string id,string description,string host,int port,bool ssl,string userName,string password,bool enabled)
        {
            m_pUser       = ownerUser;
            m_pOwner      = owner;
            m_ID          = id;
            m_Description = description;
            m_Host        = host;
            m_Port        = port;
            m_SSL         = ssl;
            m_UserName    = userName;
            m_Password    = password;
            m_Enabled     = enabled;
        }

        
        #region method Commit

        /// <summary>
        /// Tries to save all changed values to server. Throws Exception if fails.
        /// </summary>
        public void Commit()
        {
            // Values haven't chnaged, so just skip saving.
            if(!m_ValuesChanged){
                return;
            }

            /* UpdateUserRemoteServer <virtualServerID> "<remoteServerID>" "<userName>" "<description>" "<remoteHost>" <remoteHostPort> "<remoteHostUserName>" "<remoteHostPassword>" <ssl> <enabled>
                  Responses:
                    +OK                     
                    -ERR <errorText>
            */

            // Call TCP UpdateUserRemoteServer
            m_pUser.VirtualServer.Server.Socket.WriteLine("UpdateUserRemoteServer " + 
                m_pUser.VirtualServer.VirtualServerID + " " + 
                TextUtils.QuoteString(m_ID) + " " + 
                TextUtils.QuoteString(m_pUser.UserName) + " " + 
                TextUtils.QuoteString(m_Description) + " " + 
                TextUtils.QuoteString(m_Host) + " " + 
                m_Port + " " + 
                TextUtils.QuoteString(m_UserName) + " " + 
                TextUtils.QuoteString(m_Password) + " " +
                m_SSL + " " +
                m_Enabled
            );
                        
            string response = m_pUser.VirtualServer.Server.Socket.ReadLine();
            if(!response.ToUpper().StartsWith("+OK")){
                throw new Exception(response);
            }

            m_ValuesChanged = false;
        }

        #endregion


        #region Properties Implementation

        /// <summary>
        /// Gets onwer UserRemoteServerCollection that owns this remote server.
        /// </summary>
        public UserRemoteServerCollection Owner
        {
            get{ return m_pOwner; }
        }

        /// <summary>
        /// Gets remote server id.
        /// </summary>
        public string ID
        {
            get{ return m_ID; }
        }

        /// <summary>
        /// Gets or sets remote server description.
        /// </summary>
        public string Description
        {
            get{ return m_Description; }

            set{
                if(m_Description != value){
                    m_Description = value;

                    m_ValuesChanged = true;
                }
            }
        }

        /// <summary>
        /// Gets or sets remote server name or IP.
        /// </summary>
        public string Host
        {
            get{ return m_Host; }

            set{
                if(m_Host != value){
                    m_Host = value;

                    m_ValuesChanged = true;
                }
            }
        }

        /// <summary>
        /// Gets or sets remote server port.
        /// </summary>
        public int Port
        {
            get{ return m_Port; }

            set{
                if(m_Port != value){
                    m_Port = value;

                    m_ValuesChanged = true;
                }
            }
        }

        /// <summary>
        /// Gets or sets if connection is madet to remote server via SSL.
        /// </summary>
        public bool SSL
        {
            get{ return m_SSL; }

            set{
                if(m_SSL != value){
                    m_SSL = value;

                    m_ValuesChanged = true;
                }
            }
        }

        /// <summary>
        /// Gets or sets remote server user name.
        /// </summary>
        public string UserName
        {
            get{ return m_UserName; }

            set{
                if(m_UserName != value){
                    m_UserName = value;

                    m_ValuesChanged = true;
                }
            }
        }

        /// <summary>
        /// Gets or sets remote server password.
        /// </summary>
        public string Password
        {
            get{ return m_Password; }

            set{
                if(m_Password != value){
                    m_Password = value;

                    m_ValuesChanged = true;
                }
            }
        }

        /// <summary>
        /// Gets or sets if remote server is enabled.
        /// </summary>
        public bool Enabled
        {
            get{ return m_Enabled; }

            set{
                if(m_Enabled != value){
                    m_Enabled = value;

                    m_ValuesChanged = true;
                }
            }
        }

        #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