Пример #1
0
 /// <summary>
 /// Raises <b>NewMessageData</b> event.
 /// </summary>
 /// <param name="msgInfo">IMAP message info which message data it is.</param>
 /// <param name="msgData">Message data. NOTE: This value must be as specified by <see cref="IMAP_e_Fetch.FetchDataType"/>.</param>
 private void OnNewMessageData(IMAP_MessageInfo msgInfo, Mail_Message msgData)
 {
     if (this.NewMessageData != null)
     {
         this.NewMessageData(this, new e_NewMessageData(msgInfo, msgData));
     }
 }
Пример #2
0
            /// <summary>
            /// Default constructor.
            /// </summary>
            /// <param name="msgInfo">Message info.</param>
            /// <param name="msgData">Message data stream.</param>
            /// <exception cref="ArgumentNullException">Is raised when <b>msgInfo</b> is null reference.</exception>
            public e_NewMessageData(IMAP_MessageInfo msgInfo,Mail_Message msgData)
            {
                if(msgInfo == null){
                    throw new ArgumentNullException("msgInfo");
                }

                m_pMsgInfo = msgInfo;
                m_pMsgData = msgData;
            }
Пример #3
0
            /// <summary>
            /// Default constructor.
            /// </summary>
            /// <param name="msgInfo">Message info.</param>
            /// <param name="msgData">Message data stream.</param>
            /// <exception cref="ArgumentNullException">Is raised when <b>msgInfo</b> is null reference.</exception>
            public e_NewMessageData(IMAP_MessageInfo msgInfo, Mail_Message msgData)
            {
                if (msgInfo == null)
                {
                    throw new ArgumentNullException("msgInfo");
                }

                m_pMsgInfo = msgInfo;
                m_pMsgData = msgData;
            }
Пример #4
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="messagesInfo">Messages info.</param>
        /// <param name="fetchDataType">Fetch data type(Specifies what data AddData method expects).</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>messagesInfo</b> or <b>response</b> is null reference.</exception>
        internal IMAP_e_Fetch(IMAP_MessageInfo[] messagesInfo,IMAP_Fetch_DataType fetchDataType,IMAP_r_ServerStatus response)
        {
            if(messagesInfo == null){
                throw new ArgumentNullException("messagesInfo");
            }
            if(response == null){
                throw new ArgumentNullException("response");
            }

            m_pMessagesInfo = messagesInfo;
            m_FetchDataType = fetchDataType;
            m_pResponse     = response;
        }
Пример #5
0
        /// <summary>
        /// Adds specified message for FETCH response processing.
        /// </summary>
        /// <param name="msgInfo">IMAP message info which message data it is.</param>
        /// <param name="msgData">Message data. NOTE: This value must be as specified by <see cref="IMAP_e_Fetch.FetchDataType"/>.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>msgInfo</b> or <b>msgData</b> is null reference.</exception>
        public void AddData(IMAP_MessageInfo msgInfo, Mail_Message msgData)
        {
            if (msgInfo == null)
            {
                throw new ArgumentNullException("msgInfo");
            }
            if (msgData == null)
            {
                throw new ArgumentNullException("msgData");
            }

            OnNewMessageData(msgInfo, msgData);
        }
Пример #6
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 /// <param name="folder">Folder name with optional path.</param>
 /// <param name="msgInfo">Message info.</param>
 /// <param name="response">Default IMAP server response.</param>
 /// <exception cref="ArgumentNullException">Is riased when <b>folder</b>,<b>msgInfo</b> or <b>response</b> is null reference.</exception>
 internal IMAP_e_Expunge(string folder,IMAP_MessageInfo msgInfo,IMAP_r_ServerStatus response)
 {
     if(folder == null){
         throw new ArgumentNullException("folder");
     }
     if(msgInfo == null){
         throw new ArgumentNullException("msgInfo");
     }
     if(response == null){
         throw new ArgumentNullException("response");
     }
     
     m_pResponse = response;
     m_Folder    = folder;
     m_pMsgInfo  = msgInfo;
 }
Пример #7
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="folder">Folder name with optional path.</param>
        /// <param name="msgInfo">Message info.</param>
        /// <param name="flagsSetType">Flags set type.</param>
        /// <param name="flags">Flags.</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>folder</b>,<b>msgInfo</b>,<b>flags</b> or <b>response</b> is null reference.</exception>
        internal IMAP_e_Store(string folder,IMAP_MessageInfo msgInfo,IMAP_Flags_SetType flagsSetType,string[] flags,IMAP_r_ServerStatus response)
        {
            if(folder == null){
                throw new ArgumentNullException("folder");
            }
            if(msgInfo == null){
                throw new ArgumentNullException("msgInfo");
            }
            if(flags == null){
                throw new ArgumentNullException("flags");
            }

            m_pResponse = response;
            m_Folder    = folder;
            m_pMsgInfo  = msgInfo;
            m_SetType   = flagsSetType;
            m_pFlags    = flags;
        }
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="folder">Folder name with optional path.</param>
        /// <param name="msgInfo">Message info.</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <exception cref="ArgumentNullException">Is riased when <b>folder</b>,<b>msgInfo</b> or <b>response</b> is null reference.</exception>
        internal IMAP_e_Expunge(string folder, IMAP_MessageInfo msgInfo, IMAP_r_ServerStatus response)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }
            if (msgInfo == null)
            {
                throw new ArgumentNullException("msgInfo");
            }
            if (response == null)
            {
                throw new ArgumentNullException("response");
            }

            m_pResponse = response;
            m_Folder    = folder;
            m_pMsgInfo  = msgInfo;
        }
Пример #9
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="sourceFolder">Source folder name with optional path.</param>
        /// <param name="targetFolder">Target folder name </param>
        /// <param name="messagesInfo">Messages info.</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>sourceFolder</b>,<b>targetFolder</b>,<b>messagesInfo</b> or <b>response</b> is null reference.</exception>
        internal IMAP_e_Copy(string sourceFolder,string targetFolder,IMAP_MessageInfo[] messagesInfo,IMAP_r_ServerStatus response)
        {
            if(sourceFolder == null){
                throw new ArgumentNullException("sourceFolder");
            }
            if(targetFolder == null){
                throw new ArgumentNullException("targetFolder");
            }
            if(messagesInfo == null){
                throw new ArgumentNullException("messagesInfo");
            }
            if(response == null){
                throw new ArgumentNullException("response");
            }

            m_pResponse     = response;
            m_SourceFolder  = sourceFolder;
            m_TargetFolder  = targetFolder;
            m_pMessagesInfo = messagesInfo;
        }
Пример #10
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="folder">Folder name with optional path.</param>
        /// <param name="msgInfo">Message info.</param>
        /// <param name="flagsSetType">Flags set type.</param>
        /// <param name="flags">Flags.</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>folder</b>,<b>msgInfo</b>,<b>flags</b> or <b>response</b> is null reference.</exception>
        internal IMAP_e_Store(string folder, IMAP_MessageInfo msgInfo, IMAP_Flags_SetType flagsSetType, string[] flags, IMAP_r_ServerStatus response)
        {
            if (folder == null)
            {
                throw new ArgumentNullException("folder");
            }
            if (msgInfo == null)
            {
                throw new ArgumentNullException("msgInfo");
            }
            if (flags == null)
            {
                throw new ArgumentNullException("flags");
            }

            m_pResponse = response;
            m_Folder    = folder;
            m_pMsgInfo  = msgInfo;
            m_SetType   = flagsSetType;
            m_pFlags    = flags;
        }
Пример #11
0
 public void CopyMessage(string accessingUser, string folderOwnerUser, string folder, string destFolderUser, string destFolder, IMAP_MessageInfo messageInfo)
 {
     ArgsValidator.ValidateUserName(folderOwnerUser);
     ArgsValidator.ValidateFolder(folder);
     ArgsValidator.ValidateUserName(destFolderUser);
     ArgsValidator.ValidateFolder(destFolder);
     ArgsValidator.ValidateNotNull(messageInfo);
     EmailMessageItems emailMessageItems = new EmailMessageItems(messageInfo.ID, IMAP_MessageItems_enum.Message);
     this.GetMessageItems(accessingUser, folderOwnerUser, folder, emailMessageItems);
     this.StoreMessage("system", destFolderUser, destFolder, emailMessageItems.MessageStream, messageInfo.InternalDate, messageInfo.Flags);
     emailMessageItems.MessageStream.Dispose();
 }
Пример #12
0
 /// <summary>
 /// Adds specified message for FETCH response processing.
 /// </summary>
 /// <param name="msgInfo">IMAP message info.</param>
 internal void AddData(IMAP_MessageInfo msgInfo)
 {
     OnNewMessageData(msgInfo,null);
 }
Пример #13
0
        /// <summary>
        /// Adds specified message for FETCH response processing.
        /// </summary>
        /// <param name="msgInfo">IMAP message info which message data it is.</param>
        /// <param name="msgData">Message data. NOTE: This value must be as specified by <see cref="IMAP_e_Fetch.FetchDataType"/>.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>msgInfo</b> or <b>msgData</b> is null reference.</exception>
        public void AddData(IMAP_MessageInfo msgInfo,Mail_Message msgData)
        {
            if(msgInfo == null){
                throw new ArgumentNullException("msgInfo");
            }
            if(msgData == null){
                throw new ArgumentNullException("msgData");
            }

            OnNewMessageData(msgInfo,msgData);
        }
Пример #14
0
 /// <summary>
 /// Adds specified message for FETCH response processing.
 /// </summary>
 /// <param name="msgInfo">IMAP message info.</param>
 internal void AddData(IMAP_MessageInfo msgInfo)
 {
     OnNewMessageData(msgInfo, null);
 }
Пример #15
0
            /// <summary>
            /// Removes specified message from messages info.
            /// </summary>
            /// <param name="message">Message info.</param>
            /// <exception cref="ArgumentNullException">Is raised when <b>message</b> is null reference.</exception>
            internal void RemoveMessage(IMAP_MessageInfo message)
            {
                if(message == null){
                    throw new ArgumentNullException("message");
                }

                m_pMessagesInfo.Remove(message);
            }
Пример #16
0
        /// <summary>
        /// Raises <b>Expunge</b> event.
        /// </summary>
        /// <param name="msgInfo">Messgae info.</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <returns>Returns event args.</returns>
        private IMAP_e_Expunge OnExpunge(IMAP_MessageInfo msgInfo,IMAP_r_ServerStatus response)
        {
            IMAP_e_Expunge eArgs = new IMAP_e_Expunge(m_pSelectedFolder.Folder,msgInfo,response);
            if(this.Expunge != null){
                this.Expunge(this,eArgs);
            }

            return eArgs;
        }
Пример #17
0
        /// <summary>
        /// Raises <b>Copy</b> event.
        /// </summary>
        /// <param name="targetFolder">Target folder name with optional path.</param>
        /// <param name="messagesInfo">Messages info.</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <returns>Returns event args.</returns>
        private IMAP_e_Copy OnCopy(string targetFolder,IMAP_MessageInfo[] messagesInfo,IMAP_r_ServerStatus response)
        {
            IMAP_e_Copy eArgs = new IMAP_e_Copy(m_pSelectedFolder.Folder,targetFolder,messagesInfo,response);
            if(this.Copy != null){
                this.Copy(this,eArgs);
            }

            return eArgs;
        }
Пример #18
0
        /// <summary>
        /// Raises <b>Store</b> event.
        /// </summary>
        /// <param name="msgInfo">Message info.</param>
        /// <param name="setType">Flags set type.</param>
        /// <param name="flags">Flags.</param>
        /// <param name="response">Default IMAP server response.</param>
        /// <returns>Returns event args.</returns>
        private IMAP_e_Store OnStore(IMAP_MessageInfo msgInfo,IMAP_Flags_SetType setType,string[] flags,IMAP_r_ServerStatus response)
        {
            IMAP_e_Store eArgs = new IMAP_e_Store(m_pSelectedFolder.Folder,msgInfo,setType,flags,response);
            if(this.Store != null){
                this.Store(this,eArgs);
            }

            return eArgs;
        }
Пример #19
0
            /// <summary>
            /// Gets specified message info IMAP 1-based sequence number.
            /// </summary>
            /// <param name="msgInfo">Message info.</param>
            /// <returns>Returns specified message info IMAP 1-based sequence number.</returns>
            /// <exception cref="ArgumentNullException">Is raised when <b>msgInfo</b> is null reference.</exception>
            internal int GetSeqNo(IMAP_MessageInfo msgInfo)
            {
                if(msgInfo == null){
                    throw new ArgumentNullException("msgInfo");
                }

                return m_pMessagesInfo.IndexOf(msgInfo) + 1;
            }
Пример #20
0
 /// <summary>
 /// Raises <b>NewMessageData</b> event.
 /// </summary>
 /// <param name="msgInfo">IMAP message info which message data it is.</param>
 /// <param name="msgData">Message data. NOTE: This value must be as specified by <see cref="IMAP_e_Fetch.FetchDataType"/>.</param>
 private void OnNewMessageData(IMAP_MessageInfo msgInfo,Mail_Message msgData)
 {
     if(this.NewMessageData != null){
         this.NewMessageData(this,new e_NewMessageData(msgInfo,msgData));
     }
 }
Пример #21
0
        /// <summary>
		/// Stores IMAP message flags (\seen,\draft, ...).
		/// </summary>
        /// <param name="accessingUser">User who accesses this method. 
        /// User needs r permission to call this method or Exception is thrown. 
        /// There is special user 'system' for which permission check is skipped.</param>
        /// <param name="folderOwnerUser">User who's folder it is.</param>
        /// <param name="folder">Folder which message flags to store. For example: Inbox,Public Folders/Documnets .</param>
		/// <param name="messageInfo">IMAP message info.</param>
		/// <param name="flags">Message flags.</param>
		public void StoreMessageFlags(string accessingUser,string folderOwnerUser,string folder,IMAP_MessageInfo messageInfo,string[] flags)
		{
            /* Implementation notes:
                *) Validate values. Throw ArgumnetExcetion if invalid values.
                *) Ensure that user exists.
                *) Normalize folder. Remove '/' from folder start and end, ... .
                *) Do Shared Folders mapping.
                *) Ensure that folder exists. Throw Exception if don't.
                *) Remove all message flags which permissions user doesn't have.
                *) Store message flags.
            */

            //--- Validate values -------------------//
            ArgsValidator.ValidateUserName(folderOwnerUser);
            ArgsValidator.ValidateFolder(folder);
            //---------------------------------------//

            // Ensure that user exists.
            if(!UserExists(folderOwnerUser)){
                throw new Exception("User '" + folderOwnerUser + "' doesn't exist !");
            }

            // Normalize folder. Remove '/' from folder start and end.
            folder = API_Utlis.NormalizeFolder(folder);

            // Do Shared Folders mapping.
            string originalFolder = folder;
            SharedFolderMapInfo mappedFolder = MapSharedFolder(originalFolder);
            if(mappedFolder.IsSharedFolder){
                folderOwnerUser = mappedFolder.FolderOnwer;
                folder = mappedFolder.Folder;

                if(folderOwnerUser == "" || folder == ""){
                    throw new ArgumentException("Specified root folder '" + originalFolder + "' isn't accessible !");
                }
            }

            // Ensure that folder exists. Throw Exception if don't.
            if(!FolderExists(folderOwnerUser + "/" + folder)){
                throw new Exception("Folder '" + folder + "' doesn't exist !");
            }

            // Remove all message flags which permissions user doesn't have.
            if(accessingUser != "system"){
			    IMAP_ACL_Flags userACL = GetUserACL(folderOwnerUser,folder,accessingUser);					
			    if((userACL & IMAP_ACL_Flags.s) == 0){
                    flags = IMAP_Utils.MessageFlagsRemove(flags,new string[]{"Seen"});
			    }
			    else if((userACL & IMAP_ACL_Flags.d) == 0){
                    flags = IMAP_Utils.MessageFlagsRemove(flags,new string[]{"Deleted"});
			    }				
			    else if((userACL & IMAP_ACL_Flags.s) == 0){
                    flags = IMAP_Utils.MessageFlagsRemove(flags,new string[]{"Answered","Draft","Flagged"});
			    }
            }

            //--- Store flags
            using(SQLiteConnection sqlCon = GetMessagesInfoSqlCon(folderOwnerUser,folder)){
                using(SQLiteCommand cmd = sqlCon.CreateCommand()){
                    cmd.CommandText = "update MessagesInfo set flags='" + Net_Utils.ArrayToString(flags," ") + "' where ID='" + messageInfo.ID + "';";
                    cmd.ExecuteNonQuery();
                }
            } 
        }
Пример #22
0
        public void StoreMessageFlags(string accessingUser, string folderOwnerUser, string folder, IMAP_MessageInfo messageInfo, string[] flags)
        {
            ArgsValidator.ValidateUserName(folderOwnerUser);
            ArgsValidator.ValidateFolder(folder);
            if (!this.UserExists(folderOwnerUser))
            {
                throw new Exception("User '" + folderOwnerUser + "' doesn't exist !");
            }
            folder = API_Utlis.NormalizeFolder(folder);
            string text = folder;
            xml_API.SharedFolderMapInfo sharedFolderMapInfo = this.MapSharedFolder(text);
            if (sharedFolderMapInfo.IsSharedFolder)
            {
                folderOwnerUser = sharedFolderMapInfo.FolderOnwer;
                folder = sharedFolderMapInfo.Folder;
                if (folderOwnerUser == "" || folder == "")
                {
                    throw new ArgumentException("Specified root folder '" + text + "' isn't accessible !");
                }
            }
            if (!this.FolderExists(folderOwnerUser + "/" + folder))
            {
                throw new Exception("Folder '" + folder + "' doesn't exist !");
            }
            if (accessingUser != "system")
            {
                IMAP_ACL_Flags userACL = this.GetUserACL(folderOwnerUser, folder, accessingUser);
                if ((userACL & IMAP_ACL_Flags.s) == IMAP_ACL_Flags.None)
                {
                    flags = IMAP_Utils.MessageFlagsRemove(flags, new string[]
					{
						"Seen"
					});
                }
                else
                {
                    if ((userACL & IMAP_ACL_Flags.d) == IMAP_ACL_Flags.None)
                    {
                        flags = IMAP_Utils.MessageFlagsRemove(flags, new string[]
						{
							"Deleted"
						});
                    }
                    else
                    {
                        if ((userACL & IMAP_ACL_Flags.s) == IMAP_ACL_Flags.None)
                        {
                            flags = IMAP_Utils.MessageFlagsRemove(flags, new string[]
							{
								"Answered",
								"Draft",
								"Flagged"
							});
                        }
                    }
                }
            }
            using (SQLiteConnection messagesInfoSqlCon = this.GetMessagesInfoSqlCon(folderOwnerUser, folder))
            {
                using (SQLiteCommand sQLiteCommand = messagesInfoSqlCon.CreateCommand())
                {
                    sQLiteCommand.CommandText = string.Concat(new string[]
					{
						"update MessagesInfo set flags='",
						Net_Utils.ArrayToString(flags, " "),
						"' where ID='",
						messageInfo.ID,
						"';"
					});
                    sQLiteCommand.ExecuteNonQuery();
                }
            }
        }
Пример #23
0
		/// <summary>
		/// Creates copy of message to destination IMAP folder.
		/// </summary>
        /// <param name="accessingUser">User who accesses this method. 
        /// User needs r permission to call this method or Exception is thrown. 
        /// There is special user 'system' for which permission check is skipped.</param>
        /// <param name="folderOwnerUser">User who's folder it is.</param>
        /// <param name="folder">Folder what contains message to copy. For example: Inbox,Public Folders/Documnets .</param>
		/// <param name="destFolderUser">Destination IMAP folder owner user name.</param>
		/// <param name="destFolder">Destination IMAP folder name.</param>
		/// <param name="messageInfo">IMAP message info.</param>
		public void CopyMessage(string accessingUser,string folderOwnerUser,string folder,string destFolderUser,string destFolder,IMAP_MessageInfo messageInfo)
		{
            /* Implementation notes:
                *) Validate values. Throw ArgumnetExcetion if invalid values.
                *) We don't need to map shared folder, check security, it done by GetMessage and StoreMessage methods.
                *) Copy message.               
            */

            //--- Validate values -------------------//
            ArgsValidator.ValidateUserName(folderOwnerUser);
            ArgsValidator.ValidateFolder(folder);
            ArgsValidator.ValidateUserName(destFolderUser);
            ArgsValidator.ValidateFolder(destFolder);
            ArgsValidator.ValidateNotNull(messageInfo);
            //---------------------------------------//
            
            //--- Copy message
            EmailMessageItems msgItems = new EmailMessageItems(messageInfo.ID,IMAP_MessageItems_enum.Message);            
            GetMessageItems(accessingUser,folderOwnerUser,folder,msgItems);
            StoreMessage("system",destFolderUser,destFolder,msgItems.MessageStream,messageInfo.InternalDate,messageInfo.Flags);
            msgItems.MessageStream.Dispose();
		}