Hello, I had a quick look to the issue your report. I'm not understanding what is going on here, thus need more information in order to help:
- Can you share with us your smtp configuration file? - Specific EMLs triggering the bug might be helpfull as well. - Is there some specific SMTP 'client' triggering this issue? (what do you mean by 'outside'?) - If possible, a tcp dump of the smtp exchange up to the null pointer triggering... I'm not aware of changes between 3.0.1 to 3.3.0 that could lead to the issue you encounter. Cheers, Benoit On 05/08/2019 19:50, Matt Pryor wrote: > Hi Garry, thanks for the reply. > > Sorry I didn't specify, the upgrade was from 3.0.1. > I unzipped 3.3.0 into a new folder, deleted the old Windows service, and > copied the config .xml files across from 3.0.1. > All seemed to work okay, except for this error filling up the logs when > attempting to send email to James from the outside. > > For the time being I've revered to 3.0.1 until I can get to the bottom of > the issue. > > Best wishes > Matt > > > > > On Mon, 5 Aug 2019 at 13:10, Garry Hurley <garry.hurley...@gmail.com> wrote: > >> Matt, what did you upgrade from? If you jumped from 2.3.2 to 3.3 and have >> custom mailets, you MAY have to recompile your custom mailets. I suggest >> using at least James 3.2.0 in your maven build file James versions, if not >> 3.3.0. That might mitigate some of the problems (of course, it will take >> some surgery as there are deprecated classes in use from 2.3.2 that have >> not beencarried into the 3.x chain). >> >> Sent from my iPhone >> >>> On Aug 5, 2019, at 5:51 AM, Matt Pryor <pr...@international-presence.com> >> wrote: >>> >>> Here is the method going bang, with the problematic line highlighted in >>> yellow - I guess mmis object must be null. >>> >>> public Response onLine(SMTPSession session, ByteBuffer lineByteBuffer, >>> LineHandler<SMTPSession> next) { >>> >>> byte[] line = new byte[lineByteBuffer.remaining()]; >>> lineByteBuffer.get(line, 0, line.length); >>> >>> MimeMessageInputStreamSource mmiss = >> (MimeMessageInputStreamSource) >>> session.getAttachment(SMTPConstants.DATA_MIMEMESSAGE_STREAMSOURCE, >>> State.Transaction); >>> >>> try { >>> OutputStream out = mmiss.getWritableOutputStream(); >>> >>> // 46 is "." >>> // Stream terminated >>> if (line.length == 3 && line[0] == 46) { >>> out.flush(); >>> out.close(); >>> >>> @SuppressWarnings("unchecked") >>> List<MailAddress> recipientCollection = >> (List<MailAddress>) >>> session.getAttachment(SMTPSession.RCPT_LIST, State.Transaction); >>> MaybeSender sender = (MaybeSender) >>> session.getAttachment(SMTPSession.SENDER, State.Transaction); >>> >>> MailImpl mail = new MailImpl(MailImpl.getId(), >>> Optional.ofNullable(sender).flatMap(MaybeSender::asOptional), >>> recipientCollection); >>> >>> // store mail in the session so we can be sure it get >>> disposed later >>> session.setAttachment(SMTPConstants.MAIL, mail, >>> State.Transaction); >>> >>> MimeMessageCopyOnWriteProxy mimeMessageCopyOnWriteProxy = >>> null; >>> try { >>> mimeMessageCopyOnWriteProxy = new >>> MimeMessageCopyOnWriteProxy(mmiss); >>> mail.setMessage(mimeMessageCopyOnWriteProxy); >>> >>> Response response = processExtensions(session, mail); >>> >>> session.popLineHandler(); >>> return response; >>> >>> } catch (MessagingException e) { >>> // TODO probably return a temporary problem >>> LOGGER.info("Unexpected error handling DATA stream", >> e); >>> return new SMTPResponse(SMTPRetCode.LOCAL_ERROR, >>> "Unexpected error handling DATA stream."); >>> } finally { >>> LifecycleUtil.dispose(mimeMessageCopyOnWriteProxy); >>> LifecycleUtil.dispose(mmiss); >>> LifecycleUtil.dispose(mail); >>> } >>> >>> // DotStuffing. >>> } else if (line[0] == 46 && line[1] == 46) { >>> out.write(line, 1, line.length - 1); >>> // Standard write >>> } else { >>> // TODO: maybe we should handle the Header/Body >> recognition >>> here >>> // and if needed let a filter to cache the headers to >> apply >>> some >>> // transformation before writing them to output. >>> out.write(line); >>> } >>> } catch (IOException e) { >>> LifecycleUtil.dispose(mmiss); >>> SMTPResponse response = new >>> SMTPResponse(SMTPRetCode.LOCAL_ERROR, >>> DSNStatus.getStatus(DSNStatus.TRANSIENT, DSNStatus.UNDEFINED_STATUS) + " >>> Error processing message: " + e.getMessage()); >>> LOGGER.error("Unknown error occurred while processing DATA.", >>> e); >>> return response; >>> } >>> return null; >>> } >>> >>> On Mon, 5 Aug 2019 at 10:40, Matt Pryor < >> pr...@international-presence.com> >>> wrote: >>> >>>> Hi there >>>> >>>> I'm seeing the below NullPointerException when attempting to send email >> to >>>> James. This stacktrace / error is repeated many times in the >> wrapper.log. >>>> It appears that the message was received okay however. >>>> >>>> I'm about to delve into the source to look for clues, but wondered if >> this >>>> rings any bells. >>>> >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | ERROR 10:27:08,949 | >>>> org.apache.james.protocols.netty.BasicChannelUpstreamHandler | Unable to >>>> process request >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | java.lang.NullPointerException >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.smtpserver.DataLineJamesMessageHookHandler.onLine(DataLineJamesMessageHookHandler.java:93) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.DataCmdHandler$DataLineFilterWrapper.onLine(DataCmdHandler.java:101) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.DataCmdHandler$DataLineFilterWrapper.onLine(DataCmdHandler.java:88) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.SeparatingDataLineFilter.onHeadersLine(SeparatingDataLineFilter.java:94) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.AbstractAddHeadersFilter.onHeadersLine(AbstractAddHeadersFilter.java:73) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.SeparatingDataLineFilter.onLine(SeparatingDataLineFilter.java:63) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.DataCmdHandler$DataLineFilterWrapper.onLine(DataCmdHandler.java:101) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.DataCmdHandler$DataLineFilterWrapper.onLine(DataCmdHandler.java:88) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.esmtp.MailSizeEsmtpExtension.onLine(MailSizeEsmtpExtension.java:187) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.DataCmdHandler$DataLineFilterWrapper.onLine(DataCmdHandler.java:101) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.smtp.core.DataCmdHandler$DataLineFilterWrapper.onLine(DataCmdHandler.java:88) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.apache.james.protocols.netty.LineHandlerUpstreamHandler.messageReceived(LineHandlerUpstreamHandler.java:50) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.channel.SimpleChannelUpstreamHandler.messageReceived(SimpleChannelUpstreamHandler.java:124) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:70) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:43) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:67) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> >> org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$ChildExecutor.run(OrderedMemoryAwareThreadPoolExecutor.java:314) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) >>>> INFO | jvm 1 | 2019/08/05 10:27:08 | at >> java.lang.Thread.run(Unknown >>>> Source) >>>> >>>> >>>> Many thanks >>>> Mattt >>>> -- >>>> Matt Pryor >>>> Software Developer >>>> >>>> The International Presence Group of Companies >>>> EMAIL: pr...@presencebpm.com >>>> URL: www.International-presence.com >>>> >>>> >>>> >>> >>> -- >>> Matt Pryor >>> Software Developer >>> >>> The International Presence Group of Companies >>> EMAIL: pr...@presencebpm.com >>> URL: www.International-presence.com >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org >> For additional commands, e-mail: server-user-h...@james.apache.org >> >> > --------------------------------------------------------------------- To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org For additional commands, e-mail: server-user-h...@james.apache.org