Click here to Skip to main content
15,886,025 members
Articles / Web Development / HTML

My own Mailinator in 5 minutes

Rate me:
Please Sign up or sign in to vote.
5.00/5 (6 votes)
19 Nov 2012CPOL6 min read 31.6K   405   13  
A simple Mailinator clone developed in five minutes with the NetFluid framework
using System;
using System.Collections.Generic;
using System.Text;

namespace LumiSoft.Net.IMAP.Server
{
    /// <summary>
    /// This class represents IMAP message info.
    /// </summary>
    public class IMAP_MessageInfo
    {
        private string   m_ID     = null;
        private long     m_UID    = 0;
        private string[] m_pFlags = null;
        private int      m_Size   = 0;
        private DateTime m_InternalDate;
        private int      m_SeqNo  = 1;

        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="id">Message ID.</param>
        /// <param name="uid">Message IMAP UID value.</param>
        /// <param name="flags">Message flags.</param>
        /// <param name="size">Message size in bytes.</param>
        /// <param name="internalDate">Message IMAP internal date.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>id</b> or <b>flags</b> is null reference.</exception>
        /// <exception cref="ArgumentException">Is raised when any of the arguments has invalid value.</exception>
        public IMAP_MessageInfo(string id,long uid,string[] flags,int size,DateTime internalDate)
        {
            if(id == null){
                throw new ArgumentNullException("id");
            }
            if(id == string.Empty){
                throw new ArgumentException("Argument 'id' value must be specified.","id");
            }
            if(uid < 1){
                throw new ArgumentException("Argument 'uid' value must be >= 1.","uid");
            }
            if(flags == null){
                throw new ArgumentNullException("flags");
            }

            m_ID           = id;
            m_UID          = uid;
            m_pFlags       = flags;
            m_Size         = size;
            m_InternalDate = internalDate;
        }


        #region method ContainsFlag

        /// <summary>
        /// Gets if this message info contains specified message flag.
        /// </summary>
        /// <param name="flag">Message flag.</param>
        /// <returns>Returns true if message info contains specified message flag.</returns>
        public bool ContainsFlag(string flag)
        {
            if(flag == null){
                throw new ArgumentNullException("flag");
            }

            foreach(string f in m_pFlags){
                if(string.Equals(f,flag,StringComparison.InvariantCultureIgnoreCase)){
                    return true;
                }
            }

            return false;
        }

        #endregion


        #region method FlagsToImapString

        /// <summary>
        /// Flags to IMAP flags string.
        /// </summary>
        /// <returns>Returns IMAP flags string.</returns>
        internal string FlagsToImapString()
        {
            StringBuilder retVal = new StringBuilder();
            retVal.Append("(");
            for(int i=0;i<m_pFlags.Length;i++){
                if(i > 0){
                    retVal.Append(" ");
                }

                retVal.Append("\\" + m_pFlags[i]);
            }
            retVal.Append(")");

            return retVal.ToString();
        }

        #endregion

        #region method UpdateFlags

        /// <summary>
        /// Updates IMAP message flags.
        /// </summary>
        /// <param name="setType">Flags set type.</param>
        /// <param name="flags">IMAP message flags.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>flags</b> is null reference.</exception>
        internal void UpdateFlags(IMAP_Flags_SetType setType,string[] flags)
        {
            if(flags == null){
                throw new ArgumentNullException("flags");
            }

            if(setType == IMAP_Flags_SetType.Add){
                m_pFlags = IMAP_Utils.MessageFlagsAdd(m_pFlags,flags);
            }
            else if(setType == IMAP_Flags_SetType.Remove){
                m_pFlags = IMAP_Utils.MessageFlagsRemove(m_pFlags,flags);
            }
            else{
                m_pFlags = flags;
            }
        }

        #endregion


        #region Properties implementation

        /// <summary>
        /// Gets message ID value.
        /// </summary>
        public string ID
        {
            get{ return m_ID; }
        }

        /// <summary>
        /// Gets message IMAP UID value.
        /// </summary>
        public long UID
        {
            get{ return m_UID; }
        }

        /// <summary>
        /// Gets message flags.
        /// </summary>
        public string[] Flags
        {
            get{ return m_pFlags; }
        }

        /// <summary>
        /// Gets message size in bytes.
        /// </summary>
        public int Size
        {
            get{ return m_Size; }
        }

        /// <summary>
        /// Gets message IMAP internal date.
        /// </summary>
        public DateTime InternalDate
        {
            get{ return m_InternalDate; }
        }


        /// <summary>
        /// Gets or sets message one-based sequnece number.
        /// </summary>
        internal int SeqNo
        {
            get{ return m_SeqNo; }

            set{ m_SeqNo = value; }
        }
        
        #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
Chief Technology Officer Genny Mobility
Italy Italy
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions