stalwartlabs / mail-server

Secure & Modern All-in-One Mail Server (IMAP, JMAP, POP3, SMTP)
https://stalw.art
5.29k stars 222 forks source link

[enhancement]: Webmail client #513

Open samwell-ho opened 5 months ago

samwell-ho commented 5 months ago

Which feature or improvement would you like to request?

I'd like to see this feature: A web client like SOGo or Roundcube.

Is your feature request related to a problem?

I'm having a problem with...

Code of Conduct

ruohki commented 5 months ago

Please, if such things get added, make it optional. Those clients are terrible.

williamdes commented 5 months ago

Related to https://github.com/stalwartlabs/mail-server/issues/279 IMO this project's goal is not writing another webmail client. The JMAP support unlocks quite great new webmails.

alvinpeters commented 4 months ago

Related to #279 IMO this project's goal is not writing another webmail client. The JMAP support unlocks quite great new webmails.

Can we get an example of those? I couldn't find any lightweight JMAP webmail clients around.

ruohki commented 4 months ago

Related to #279 IMO this project's goal is not writing another webmail client. The JMAP support unlocks quite great new webmails.

Can we get an example of those? I couldn't find any lightweight JMAP webmail clients around.

afaik there is only a terminal mail client that supports it really

X-Ryl669 commented 4 months ago

Look for Twake, (flutter version). They have a webmail, but not everything works for now (like push notifications).

chibenwa commented 4 months ago

Look for Twake, (flutter version). They have a webmail, but not everything works for now (like push notifications).

https://github.com/linagora/tmail-flutter

Happy the project is useful to the Stallwart labs community!

I think contributions are welcome on twake mail. Notification topic is a hard one. For web we definitly should have a websocket implementation. For mobile, we could implement webpush but from what I saw it requires customization on the device... I wonder how other JMAP apps did implement push in a generic fashion, if any... From what I recall Daniel from LTT.RS did do some cheating with webpush and vapid key for firebase... To be fairly honnest having a proof of concept on the topic for Twake mail would be invaluable ;-)

nomadturk commented 4 months ago

@chibenwa

I forgot that I tried using it with Stalwart on my Android but...

Also, Stalwart has Push Notifications for JMAP, but they're not getting triggered either: https://stalw.art/docs/jmap/push/

chibenwa commented 4 months ago

Never updates in the back

That is a deliberate choice not to use polling and instead rely on push instead.

Twake Mail backend (in addition to event source, web push and websockets) relies on a Firebase extension for push.

Again, push is a complex topic and I would be curious to see what other apps did.

When I manually tried to run an update 16 days later, I get: "The number of ids requested by the client exceeds the maximum number the server is willing to process in a single method call." error.

That's a real issue... https://github.com/linagora/tmail-flutter/issues/3011

ruohki commented 4 months ago

Look for Twake, (flutter version). They have a webmail, but not everything works for now (like push notifications).

Looked at it briefly, heavylie branded and also the app menu links to the vendors apps. But it indeed looks better, designwise, than the other open-source clients.

v9n commented 2 months ago

For push notiofication, ActiveSync maybe a workaround. It's essentially we need to run a HTTPS server where the mobile device do a long polling, then the app can show a local notifcation. Still not as good as native push notification.

But to truely support push notification, we need to control a backend somewhere that read the email and send the push, together with being tie to GCM/APNS infra, which destroy purpose of self-hosted.

X-Ryl669 commented 2 months ago

No, I don't think so. The JMAP push specification is based on either Whatwg standard (EventSource) where the HTTP client (your browser or your mobile) connect on a never ending URL. The webserver (Stalwart in that case), simply send text messages whenever an event happens (like receiving a mail or a change to your mailbox by some other client...). It's over TLS so it's safe, but from an energy perspective, it forces the client to maintain a TCP (or Quic) connection alive to the server, so it'll consume some battery.

The other mechanism in JMAP is to tell the server some URL where it'll connect and send a push notification. Usually, the URL will be a common service that's gathering notifications from many source and merge them to the client. It can be a FCM (Google server) or a UnifiedPush (self hosted). The idea here is to avoid that each app maintains a TCP connection to their respective server and only one is used. On your mobile phone, you'll have a single app (ntfy) that'll collect the notification and wakeup the respective app. That's exactly how FCM / Google does but without the snooping/MITM in between.

So for a web client, the former is exactly the way to go and for a mobile either the former or the latter can/should be used.