/// <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;
        }
Exemple #2
0
        private void m_pImapServer_Session_Copy(object sender,IMAP_e_Copy e)
        {
            /* RFC 3501 6.4.7. COPY Command.
                If the COPY command is unsuccessful for any reason, server
                implementations MUST restore the destination mailbox to its state
                before the COPY attempt.
            */

            try{
                IMAP_Session ses = (IMAP_Session)sender;                  

                List<IMAP_MessageInfo> copiedMessageInfos = new List<IMAP_MessageInfo>();
                try{
                    foreach(IMAP_MessageInfo msgInfo in e.MessagesInfo){
                        m_pApi.CopyMessage(
                            ses.AuthenticatedUserIdentity.Name,
                            ses.AuthenticatedUserIdentity.Name,
                            e.SourceFolder,
                            ses.AuthenticatedUserIdentity.Name,
                            e.TargetFolder,
                            msgInfo
                        );
                        copiedMessageInfos.Add(msgInfo);
                    }
                }
                catch(Exception x){
                    // Delete copied messages.
                    foreach(IMAP_MessageInfo msgInfo in copiedMessageInfos){
                        try{
                            m_pApi.DeleteMessage(
                                ses.AuthenticatedUserIdentity.Name,
                                ses.AuthenticatedUserIdentity.Name,
                                e.TargetFolder,
                                msgInfo.ID,
                                (int)msgInfo.UID
                            );
                        }
                        catch{
                            // We don't care about deleting errors here.
                        }
                    }

                    throw x;
                }
            }
            catch(Exception x){
                e.Response = new IMAP_r_ServerStatus(e.Response.CommandTag,"NO","Error: " + x.Message);
            }            
        }