Benoit Tellier created JAMES-3708: ------------------------------------- Summary: NPE in remote delivery Key: JAMES-3708 URL: https://issues.apache.org/jira/browse/JAMES-3708 Project: James Server Issue Type: Bug Components: James Core, Remote Delivery Affects Versions: master Reporter: Benoit Tellier
h2. What {code:java} 14:18:14.713 [ERROR] o.a.j.t.m.r.d.MailDelivrer - Generic exception = permanent failure: null java.lang.NullPointerException: null at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:889) at com.google.common.collect.ImmutableSet$Builder.add(ImmutableSet.java:517) at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) at java.base/java.util.Collections$2.tryAdvance(Collections.java:4747) at java.base/java.util.Collections$2.forEachRemaining(Collections.java:4755) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at org.apache.james.transport.mailets.remote.delivery.InternetAddressConverter.convert(InternetAddressConverter.java:36) at org.apache.james.transport.mailets.remote.delivery.MailDelivrer.tryDeliver(MailDelivrer.java:118) at org.apache.james.transport.mailets.remote.delivery.MailDelivrer.deliver(MailDelivrer.java:87) at org.apache.james.transport.mailets.remote.delivery.DeliveryRunnable.attemptDelivery(DeliveryRunnable.java:146) at org.apache.james.transport.mailets.remote.delivery.DeliveryRunnable.lambda$processMail$3(DeliveryRunnable.java:123) at reactor.core.publisher.MonoCreate.subscribe(MonoCreate.java:57) at reactor.core.publisher.Mono.subscribe(Mono.java:4400) at reactor.core.publisher.MonoSubscribeOn$SubscribeOnSubscriber.run(MonoSubscribeOn.java:126) at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84) at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:829) {code} h2. Why ? Due to too relaxed parsing rules in MailAdress we end up accepting invalid email addresses as part of incoming SMTP addresses. Example: {code:java} a...@domain.com a@#b.com a\.@b.com {code} However javax.mail is not able to work with such addresses. This is problematic when: - We compose a message based on SMTP envelope (eg: bounces) - We rely on javax mail when we send emails to remote SMTP servers (remote delivery) h2. Proposed solution Stricter parsing in MailAddress POJO. Reject those invalid addresses that we don't know how to handle. -- This message was sent by Atlassian Jira (v8.20.1#820001) --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org