@Override
		Action afterReadingFromServer(ClientSession session) {
			
			if(!this.hasRestrictions) {
				Action r = super.afterReadingFromServer(session);
				if(BufferUtils.byteBufferToString(r.getBuffers()).startsWith("+OK")) {
					session.getClient().dropMail();
				}
				return r;
			}
			
			if(this.retrievalError) {
				this.hasRestrictions = false;
				this.alreadyChecked = true;
				Action r = this.afterReadingFromClient(session);
				r.getBuffers().clear();
				r.getBuffers().put(("DELE "+args+"\r\n").getBytes());
				r.getBuffers().flip();
				return r;
			}
			
			if(this.mailToCheck == null) {
				MailParser parser = null;
				try {
					parser = new MailParser(new RandomAccessFile(inputFile, "rw"), new RandomAccessFile(outputFile, "rw"), session.getClient());
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				if(this.checkOnlyHeaders) {
					try {
						parser.parseOnlyHeadersMessage();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				} else {
					try {
						parser.parseMessage();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				this.mailToCheck = parser.getMail();
				
			}
			
			if(session.getClient().passDeletionFilters(mailToCheck)) {
				this.hasRestrictions = false;
				this.alreadyChecked = true;
				Action r = this.afterReadingFromClient(session);
				r.getBuffers().clear();
				r.getBuffers().put(("DELE "+args+"\r\n").getBytes());
				r.getBuffers().flip();
				session.getClient().dropMail();
				return r;
			}
			
			Action r = new Action();
			
			r.setBuffers(session.getFirstServerBuffer());
			r.getBuffers().clear();
			r.getBuffers().put(("+OK You cannot delete that message\r\n").getBytes());
			r.getBuffers().flip();
			r.setState(this);
			r.setChannel(session.getClientSocket());
			r.setOperation(SelectionKey.OP_WRITE);
			this.setFlowToWriteClient();
			
			return r;
		}