Coder Social home page Coder Social logo

matrix-appservice-email's People

Contributors

maxidorius avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

matrix-appservice-email's Issues

Error when receiving transaction

Unknown cause.

java.lang.IllegalArgumentException: @:jki.re is not a valid Matrix ID
        at io.kamax.matrix.MatrixID.<init>(MatrixID.java:45) ~[matrix-java-sdk.jar!/:na]
        at io.kamax.matrix.client.MatrixHttpRoom.getJoinedUsers(MatrixHttpRoom.java:276) ~[matrix-java-sdk.jar!/:na]
        at io.kamax.matrix.bridge.email.model.matrix.MatrixApplicationService.pushMessageEvent(MatrixApplicationService.java:161) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.matrix.MatrixApplicationService.push(MatrixApplicationService.java:143) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.controller.ApplicationServiceController.getTransaction(ApplicationServiceController.java:143) ~[classes!/:na]
        at sun.reflect.GeneratedMethodAccessor45.invoke(Unknown Source) ~[na:na]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_131]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_131]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:883) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:664) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) [tomcat-embed-websocket-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [spring-web-4.3.8.RELEASE.jar!/:4.3.8.RELEASE]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.14.jar!/:8.5.14]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]

Notifications get marked as spam too easily by SpamAssassin

Notification for a new message in room:

X-Spam-Status: Yes, score=5.036 tagged_above=-999 required=5
	tests=[DKIM_SIGNED=0.1, HTML_IMAGE_ONLY_08=1.781, HTML_MESSAGE=0.001,
	MISSING_HEADERS=1.207, REPLYTO_WITHOUT_TO_CC=1.946,
	T_DKIM_INVALID=0.01, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001]

Leave rooms where only bridge users remain

After a user leave, if only bridge virtual users remain, belonging to the bridge, all the subscription should be terminated and all virtual users should leave the room.

Keep one room's messages in a single email thread.

As it is, in my experience anyway, emails are coming in independently. So I can't reasonably just enter a thread and click the left-arrow to get to the next message. That might take me to a different thread, or it might take me to some other unrelated email. It'd be a great convenience to email users if rooms would thread together.

Ask for approval before sending messages to email

To reduce the chance of spam from a bridge, there should be a way for email users to approve/deny their participation in a room.

The new flow would be:

  • Email invited to room
  • Email gets asked for permission to participate
  • If accepted, send messages

I wouldn't make this configurable, because having it be an option reduces the effort required for a spammer.

Support the bridge being a mailserver

This could lead to simpler deployments, as all you'd have to do is set up an MX record.

Additionally, it would mean that inbound mail to a room (ie: mailing lists) could be handled more gracefully, as you could manage the email address for a specific room.

Provisioning API

This would normally be used by Scalar (matrix.org), however it also allows for third-party bridge runners to more easily operate their bridge.

There's no set standard for provisioning APIs on bridges: it's just a collection of (normally) web endpoints that control various functions. For example /_matrix/provision/:roomId/:emailAddress could invite the email address into the given room.

Tightloop when mail sent from unrecognized address

It repeats this hundreds of times per second:

2017-10-03 00:31:39.420  INFO 18441 --- [receiver-daemon] i.k.m.b.email.model.email.EmailFetcher   : Got email with key TOKEN
2017-10-03 00:31:39.420  INFO 18441 --- [receiver-daemon] i.k.m.b.e.m.email.EmailFormatterInbound  : Email is from [email protected]
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.m.b.e.m.email.EmailFormatterInbound  : Transfer encoding is quoted-printable, decoding
2017-10-03 00:31:39.427  WARN 18441 --- [receiver-daemon] i.k.m.b.e.m.email.EmailFormatterInbound  : Content transfer encoding is set to quoted-printable but enable to decode: Invalid URL encoding: not a valid digit (radix 16): 34
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.m.b.e.m.email.EmailFormatterInbound  : Found HTML content
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.m.b.e.m.email.EmailFormatterInbound  : Inbound formatter gmail did not match
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.m.b.e.m.email.EmailFormatterInbound  : Inbound formatter thunderbird did not match
2017-10-03 00:31:39.427  WARN 18441 --- [receiver-daemon] i.k.m.b.email.model.email.EmailManager   : DROP: Received e-mail with invalid sender: from [email protected] but supposed to be [email protected]
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.m.b.email.model.email.EmailManager   : Injecting e-mail from [email protected] with key TOKEN
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.m.b.email.model.email.EmailEndPoint  : Email message was injected into end point TOKEN - [email protected] - TOKEN
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.matrix.bridge.email.model.AEndPoint  : Sending message event to 1 listeners
2017-10-03 00:31:39.427  INFO 18441 --- [receiver-daemon] i.k.m.b.e.model.matrix.MatrixEndPoint    : Forwarding e-mail TOKEN to Matrix from [email protected] with plain content
2017-10-03 00:31:39.427 ERROR 18441 --- [receiver-daemon] i.k.m.b.email.model.email.EmailFetcher   : Error in e-mail fetcher

java.util.NoSuchElementException: No value present
        at java.util.Optional.get(Optional.java:135) ~[na:1.8.0_144]
        at io.kamax.matrix.bridge.email.model.matrix.MatrixEndPoint.sendMessageImpl(MatrixEndPoint.java:91) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.matrix.MatrixEndPoint.sendMessageImpl(MatrixEndPoint.java:39) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.AEndPoint.sendMessage(AEndPoint.java:91) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.subscription.BridgeSubscription.lambda$new$1(BridgeSubscription.java:58) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.AEndPoint.fireMessageEvent(AEndPoint.java:123) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.email.EmailEndPoint.inject(EmailEndPoint.java:123) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.email.EmailManager.lambda$afterPropertiesSet$0(EmailManager.java:75) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.email.EmailFetcher.lambda$connect$0(EmailFetcher.java:137) ~[classes!/:na]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_144]

NPE in EmailFormatterInbound prevents all mail from being read

java.lang.NullPointerException: null
        at io.kamax.matrix.bridge.email.model.email.EmailFormatterInbound.get(EmailFormatterInbound.java:126) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.email.EmailManager.lambda$afterPropertiesSet$0(EmailManager.java:57) ~[classes!/:na]
        at io.kamax.matrix.bridge.email.model.email.EmailFetcher.lambda$connect$0(EmailFetcher.java:137) ~[classes!/:na]
        at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_192]

SMTP Postfix MTA rejects mails

Hey,
i am trying to test the email bridge and made it working 50%. Inviting a person who is not registered works. The person gets an email and i am able to send messages to him. I am also able to manage the subscriptions. But repyling from Mail to Matrix does not work. My SMTP rejects it.

How does this thing work in general? As far as i understand it, matrix-appservice-email should create a mailbox for the specific user matrix-appservice-email+%KEY%@domain.tld to receive mails from external, right? The SMTP server ignored it because it does not exist:

warning: 19.15.227.212.combined.njabl.org: RBL lookup error: Host or domain name not found. Name service error for name=19.15.227.212.combined.njabl.org type=A: Host not found, try again
Mar 5 17:25:48 h2606131 postfix/smtpd[7893]: NOQUEUE: reject: RCPT from [212.227.15.19]: 550 5.1.1 [email protected]: Recipient address rejected: User unknown in virtual mailbox table; from=[email protected] to=[email protected] proto=ESMTP helo=

grafik

I know that this should work like some virtual mailbox lookup because i understand that it would make no sense to create a real mailbox for each request.

Do you have some hint how to configure MTA accordingly? I am using Postfix. It provides different options on how to handle unknown mails: redirect them to another mailbox, bounce them, ignore them. But none of these 3 options makes sense on how to deal with virtual.

kind regards and thanks for this great module! It definetely will help to make longterm bindings from mail-only yet users to Matrix users :-)

Certain text getting stripped

I'm in a room, #_ircnet_#Christ:irc.snt.utwente.nl where there is a relay bot which formats usernames as <username@network>. The email bridge strips these out so the emails don't specify who's speaking in this room. Pretty nonstandard scenario, I understand.

Mailing list subscription type (Plumbed rooms)

Currently, the bridge treats each user individually when processing events, regardless of which room users are in.
Incoming e-mails require a token and an active subscription to accept incoming bridge message which will be posted in Matrix.
Therefore, it is not possible to simulate the behavior of a mailing list, where people can just subscribe with their e-mail address and reach other people also subscribed to that list.

This feature will map an e-mail address to a Matrix room and forward messages between the two.
Only Plumbed functional mode will be supported: The bridge has ownership of the mailing list, which means it has the responsibility to direct forward Matrix messages to subscribed e-mail users.

Once Matrix has a way to support some kind of thread mechanism within a single room, Portal rooms will be considered.


Edit: Include comments feedback and only support Plumbed rooms.

Don't spam /joined_members endpoint

In higher population rooms, spamming joined_members every couple milliseconds leads to higher than normal load on the server.

Here's a snippet from the log:

2017-10-03 00:11:16,995 - synapse.access.http.8008 - 91 - INFO - GET-3042- - - 8008 - {@_email:t2bot.io} Processed request: 5ms (7ms, 0ms) (0ms/0) 20864B 200 "GET /_matrix/client/r0/rooms/!UcYsUzyxTGDxLBEvLz:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:17,023 - synapse.access.http.8008 - 91 - INFO - GET-3043- - - 8008 - {@_email:t2bot.io} Processed request: 6ms (0ms, 0ms) (0ms/0) 20864B 200 "GET /_matrix/client/r0/rooms/!UcYsUzyxTGDxLBEvLz:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:17,033 - synapse.access.http.8008 - 91 - INFO - GET-3044- - - 8008 - {@_email:t2bot.io} Processed request: 5ms (0ms, 3ms) (0ms/0) 20864B 200 "GET /_matrix/client/r0/rooms/!UcYsUzyxTGDxLBEvLz:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:17,159 - synapse.access.http.8008 - 91 - INFO - GET-3032- - - 8008 - {@_email:t2bot.io} Processed request: 503ms (56ms, 0ms) (115ms/12) 85749B 200 "GET /_matrix/client/r0/rooms/!DgvjtOljKujDBrxyHk:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:17,588 - synapse.access.http.8008 - 91 - INFO - GET-3050- - - 8008 - {@_email:t2bot.io} Processed request: 5ms (8ms, 0ms) (0ms/0) 20864B 200 "GET /_matrix/client/r0/rooms/!UcYsUzyxTGDxLBEvLz:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:17,799 - synapse.access.http.8008 - 91 - INFO - GET-3047- - - 8008 - {@_email:t2bot.io} Processed request: 569ms (60ms, 7ms) (163ms/12) 85749B 200 "GET /_matrix/client/r0/rooms/!DgvjtOljKujDBrxyHk:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:17,867 - synapse.access.http.8008 - 91 - INFO - GET-3053- - - 8008 - {@_email:t2bot.io} Processed request: 5ms (4ms, 0ms) (0ms/0) 20864B 200 "GET /_matrix/client/r0/rooms/!UcYsUzyxTGDxLBEvLz:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:18,182 - synapse.access.http.8008 - 91 - INFO - GET-3056- - - 8008 - {@_email:t2bot.io} Processed request: 6ms (4ms, 0ms) (0ms/0) 20864B 200 "GET /_matrix/client/r0/rooms/!UcYsUzyxTGDxLBEvLz:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:18,552 - synapse.access.http.8008 - 91 - INFO - GET-3058- - - 8008 - {@_email:t2bot.io} Processed request: 6ms (4ms, 0ms) (0ms/0) 20864B 200 "GET /_matrix/client/r0/rooms/!UcYsUzyxTGDxLBEvLz:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"
2017-10-03 00:11:18,616 - synapse.access.http.8008 - 91 - INFO - GET-3054- - - 8008 - {@_email:t2bot.io} Processed request: 732ms (55ms, 0ms) (555ms/12) 85749B 200 "GET /_matrix/client/r0/rooms/!DgvjtOljKujDBrxyHk:matrix.org/joined_members?access_token=<redacted> HTTP/1.1" "Apache-HttpClient/4.5.3 (Java/1.8.0_144)"

Enabling encryption breaks communication

HI, i just played around a little bit in Riot and enabled encrytion for a room. After enabling the communication was broken. The log:

Processing /transactions/114
22.883  INFO 963 --- [nio-8091-exec-5] i.k.m.b.e.m.m.MatrixApplicationService   : HS provided valid credentials
22.883  INFO 963 --- [nio-8091-exec-5] i.k.m.b.e.m.m.MatrixApplicationService   : Unknown event type m.room.encryption from @vmario89:matrix.fablabchemnitz.de
27.760  INFO 963 --- [nio-8091-exec-6] i.k.m.b.e.c.ApplicationServiceController : Processing /transactions/115
27.761  INFO 963 --- [nio-8091-exec-6] i.k.m.b.e.m.m.MatrixApplicationService   : HS provided valid credentials
27.761  INFO 963 --- [nio-8091-exec-6] i.k.m.b.e.m.m.MatrixApplicationService   : Unknown event type m.room.encrypted from @vmario89:matrix.fablabchemnitz.de

i was able to reset the communication by leaving the room and reinvite the email user.

I think the encryption enable button should be disabled like mautrix-whatsapp does it too (there the button in Riot is grey/forbidden). Or at least it maybe should be documented that its not a good idea to use.

kind regards, Mario

Retry accepting invites if it initially fails

Synapse has an annoying bug where the invite can hit the appservice/client before it is capable of responding to that invite, and often throws back either a 500 or "You are not invited to that room" error. To work around this, the best approach is to retry accepting the invite on some sort of schedule. I'd recommend max 5 retries, 30 seconds apart.

Include some room history

It's easy to grasp the context and follow the conversation in Riot because you can see several messages at once and in order. It'd be nice if each email included some message history, maybe 8-12 messages, so the email user can better grasp what's happening. It really sucks to only see one message at a time, and then have to back out and select the next message, especially on a mobile client.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.