protected List<ProtocolHandler> initDefaultHandlers() { List<ProtocolHandler> defaultHandlers = new ArrayList<>(); defaultHandlers.add(new CommandDispatcher<SMTPSession>()); defaultHandlers.add(new ExpnCmdHandler()); defaultHandlers.add(new EhloCmdHandler(metricFactory)); defaultHandlers.add(new HeloCmdHandler(metricFactory)); defaultHandlers.add(new HelpCmdHandler()); defaultHandlers.add(new MailCmdHandler(metricFactory)); defaultHandlers.add(new NoopCmdHandler()); defaultHandlers.add(new QuitCmdHandler(metricFactory)); defaultHandlers.add(new RcptCmdHandler(metricFactory)); defaultHandlers.add(new RsetCmdHandler()); defaultHandlers.add(new VrfyCmdHandler()); defaultHandlers.add(new DataCmdHandler(metricFactory)); defaultHandlers.add(new MailSizeEsmtpExtension()); defaultHandlers.add(new WelcomeMessageHandler()); defaultHandlers.add(new PostmasterAbuseRcptHook()); defaultHandlers.add(new ReceivedDataLineFilter()); defaultHandlers.add(new DataLineMessageHookHandler()); defaultHandlers.add(new StartTlsCmdHandler()); defaultHandlers.add(new UnknownCmdHandler(metricFactory)); defaultHandlers.add(new CommandHandlerResultLogger()); return defaultHandlers; }
/** * Handler method called upon receipt of a DATA command. * Reads in message data, creates header, and delivers to * mail server service for delivery. * * @param session SMTP session object * @param argument the argument passed in with the command by the SMTP client */ @SuppressWarnings("unchecked") protected Response doDATA(SMTPSession session, String argument) { MaybeSender sender = (MaybeSender) session.getAttachment(SMTPSession.SENDER, ProtocolSession.State.Transaction); MailEnvelope env = createEnvelope(session, sender, new ArrayList<>((Collection<MailAddress>) session.getAttachment(SMTPSession.RCPT_LIST, ProtocolSession.State.Transaction))); session.setAttachment(MAILENV, env,ProtocolSession.State.Transaction); session.pushLineHandler(lineHandler); return DATA_READY; }
/** * process DATA command * */ @Override public Response onCommand(SMTPSession session, Request request) { TimeMetric timeMetric = metricFactory.timer("SMTP-" + request.getCommand()); session.stopDetectingCommandInjection(); try (Closeable closeable = MDCBuilder.create() .addContext(MDCBuilder.ACTION, request.getCommand()) .build()) { String parameters = request.getArgument(); Response response = doDATAFilter(session, parameters); if (response == null) { return doDATA(session, parameters); } else { return response; } } catch (IOException e) { throw new RuntimeException(e); } finally { timeMetric.stopAndPublish(); session.needsCommandInjectionDetection(); } }
@Override protected List<ProtocolHandler> initDefaultHandlers() { List<ProtocolHandler> defaultHandlers = new ArrayList<>(); defaultHandlers.add(new CommandDispatcher<SMTPSession>()); defaultHandlers.add(new ExpnCmdHandler()); defaultHandlers.add(new LhloCmdHandler(new NoopMetricFactory())); defaultHandlers.add(new HelpCmdHandler()); defaultHandlers.add(new MailCmdHandler(new NoopMetricFactory())); defaultHandlers.add(new NoopCmdHandler()); defaultHandlers.add(new QuitCmdHandler(new NoopMetricFactory())); defaultHandlers.add(new RcptCmdHandler(new NoopMetricFactory())); defaultHandlers.add(new RsetCmdHandler()); defaultHandlers.add(new VrfyCmdHandler()); defaultHandlers.add(new DataCmdHandler(new NoopMetricFactory())); defaultHandlers.add(new MailSizeEsmtpExtension()); defaultHandlers.add(new WelcomeMessageHandler()); defaultHandlers.add(new ReceivedDataLineFilter()); defaultHandlers.add(new DataLineMessageHookHandler()); defaultHandlers.add(new StartTlsCmdHandler()); defaultHandlers.add(new UnknownCmdHandler(new NoopMetricFactory())); defaultHandlers.add(new CommandHandlerResultLogger()); return defaultHandlers; }