/// <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; }
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); } }