[ 
https://issues.apache.org/jira/browse/JAMES-964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17709190#comment-17709190
 ] 

Benoit Tellier commented on JAMES-964:
--------------------------------------

A little wrap up on this topic.

I did start contributing to smtp-nio:

 - Missing email commands
 - DATA command without javax.mail dependency and allowing streaming of 
InputStream
 - Removed logback dependency

I did experiment with it locally and it works great.

To be fully satisfied I miss still some features: pipelining, opportunistic 
STARTTLS.

But my believe is that this is a GREAT candidate to rework RemoteDelivery and 
do a "javax.mail-free" version of it.

My approach would be to :
 - 1/ Split Gatewaying from direct delivery: two dedicated distinct mailets 
`GatewayDelivery` and `DirectDelivery`. This will make the overall set up 
cleaner and more straightforward for the user with use-case-driven defaults 
(connection reuse, ssl set up, etc...) and enhanced performance (avoid 
per-domain email split?).
 - 2/ Set up those mailets into a dedicated maven module 
`james-server-smtp-delivery` in `server/mailet`.
 - 3/ Fully reactive remote delivery
 - 4/ Deliver experimental mailets first, then remove experiment  tag, 
eventually deprecate RemoteDelivery to be removed on a future 4.0 release.
 - 5/ Start with `GatewayDelivery` first...

Why this move:
 - Javax.mail maintainance is questionnable at best and switching to 
jakarta.mail did fail CF https://github.com/apache/james-project/pull/923 
https://github.com/apache/james-project/pull/939. Getting rid of Javax.mail in 
remote delivery would be a move in the right direction
 - Performance: Connection reuse for gatewaying... Reactive remote delivery.
 - Fined grained control on outgoing DSN parameters.
 - Error management with javax.mail is a mess.

Uncertainties:
 - Liveness of the smtp-nio project: unusable as is, all commands are missing, 
and contributing upstream is hard (breaking changes might be refused despite 
being necessary), not vendor neutral. If needed we can fork it and include it 
as `server/protocols/smtp-client-netty`...
 - Supporting as many options as `javax.mail` might be a pain...
 - Reactive DSN resolution? :-)

Next steps:

 - Open a draft pull request for Proof of Concept.
 - Open an Architecture Decision Record on this topic.

Disclaimer: this is to be a personal effort, distinct for the interest of my 
employer.

> Write a NIO based RemoteDelivery replacement
> --------------------------------------------
>
>                 Key: JAMES-964
>                 URL: https://issues.apache.org/jira/browse/JAMES-964
>             Project: James Server
>          Issue Type: Task
>          Components: Remote Delivery
>            Reporter: Norman Maurer
>            Assignee: Norman Maurer
>            Priority: Major
>             Fix For: 3.0.0
>
>
> Currently we use javamail to send our emails. I think it would be better to 
> roll our own based on NIO for delivery. This will prolly improve performance. 
> And will help to be not tied on javamail in the future



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to