private void checkRejectOneRecipientAfterData(AssertCheck check) throws Exception {
    int port = TestUtils.getFreePort();

    NettyServer smtpServer =
        create(
            new DeliverToRecipientHook() {

              @Override
              public HookResult deliver(
                  SMTPSession session, MailAddress address, MailEnvelope env) {
                if (address.toString().equals("*****@*****.**")) {
                  return new HookResult(HookReturnCode.DENY);
                }
                return new HookResult(HookReturnCode.OK);
              }
            });

    smtpServer.setListenAddresses(new InetSocketAddress(port));

    smtpServer.bind();

    SMTPClientTransport transport = createSMTPClient();
    SMTPDeliveryAgent c = createAgent(transport);

    try {
      SMTPDeliveryAgentConfigImpl conf = createConfig();
      SMTPDeliveryEnvelope transaction =
          new SMTPDeliveryEnvelopeImpl(
              "*****@*****.**",
              Arrays.asList(new String[] {"*****@*****.**", "*****@*****.**", "*****@*****.**"}),
              new SMTPMessageImpl(new ByteArrayInputStream("msg".getBytes())));

      SMTPClientFuture<Collection<FutureResult<Iterator<DeliveryRecipientStatus>>>> future =
          c.deliver(new InetSocketAddress(port), conf, transaction);
      check.onSMTPClientFuture(future);

    } finally {
      smtpServer.unbind();
      transport.destroy();
    }
  }
 @Override
 protected ProtocolServer createServer(Protocol protocol, InetSocketAddress address) {
   NettyServer server = new NettyServer(protocol);
   server.setListenAddresses(address);
   return server;
 }