tmail-flutter icon indicating copy to clipboard operation
tmail-flutter copied to clipboard

How to enable multi accounts?

Open cloudwishcom opened this issue 8 months ago • 1 comments

Hello

Is there any way to enable multi-account support so I will be able to connect multiple JMAP accounts or so?

Thank you.

cloudwishcom avatar Apr 09 '25 14:04 cloudwishcom

Do you mean on JMAP Server (and Login) with multiple JMAP Account (in this session). Or multiple Logins (on the same Server or different)?

The first one is really nice stalwart support Group and Lists and this is listed in the same JMAP-Session as different accounts.

{
  "capabilities": {
    "urn:ietf:params:jmap:core": {
      "maxSizeUpload": 50000000,
      "maxConcurrentUpload": 4,
      "maxSizeRequest": 10000000,
      "maxConcurrentRequests": 4,
      "maxCallsInRequest": 16,
      "maxObjectsInGet": 500,
      "maxObjectsInSet": 500,
      "collationAlgorithms": [
        "i;ascii-numeric",
        "i;ascii-casemap",
        "i;unicode-casemap"
      ]
    },
    "urn:ietf:params:jmap:mail": {},
    "urn:ietf:params:jmap:calendars": {},
    "urn:ietf:params:jmap:calendars:parse": {},
    "urn:ietf:params:jmap:contacts": {},
    "urn:ietf:params:jmap:contacts:parse": {},
    "urn:ietf:params:jmap:filenode": {},
    "urn:ietf:params:jmap:principals": {},
    "urn:ietf:params:jmap:principals:availability": {},
    "urn:ietf:params:jmap:submission": {},
    "urn:ietf:params:jmap:vacationresponse": {},
    "urn:ietf:params:jmap:sieve": {
      "implementation": "Stalwart v1.0.0"
    },
    "urn:ietf:params:jmap:blob": {},
    "urn:ietf:params:jmap:quota": {},
    "urn:ietf:params:jmap:websocket": {
      "url": "wss://mail.example.org/jmap/ws",
      "supportsPush": true
    }
  },
  "accounts": {
    "dk": {
      "name": "[email protected]",
      "isPersonal": true,
      "isReadOnly": false,
      "accountCapabilities": {
        "urn:ietf:params:jmap:mail": {
          "maxMailboxesPerEmail": null,
          "maxMailboxDepth": 10,
          "maxSizeMailboxName": 255,
          "maxSizeAttachmentsPerEmail": 50000000,
          "emailQuerySortOptions": [
            "receivedAt",
            "size",
            "from",
            "to",
            "subject",
            "sentAt",
            "hasKeyword",
            "allInThreadHaveKeyword",
            "someInThreadHaveKeyword"
          ],
          "mayCreateTopLevelMailbox": true
        },
        "urn:ietf:params:jmap:submission": {
          "maxDelayedSend": 2592000,
          "submissionExtensions": {
            "FUTURERELEASE": [],
            "SIZE": [],
            "DSN": [],
            "DELIVERYBY": [],
            "MT-PRIORITY": [
              "MIXER"
            ],
            "REQUIRETLS": []
          }
        },
        "urn:ietf:params:jmap:vacationresponse": {},
        "urn:ietf:params:jmap:contacts": {
          "maxAddressBooksPerCard": null,
          "mayCreateAddressBook": true
        },
        "urn:ietf:params:jmap:contacts:parse": {},
        "urn:ietf:params:jmap:calendars": {
          "maxCalendarsPerEvent": null,
          "minDateTime": "0001-01-01T00:00:00Z",
          "maxDateTime": "65534-12-31T23:59:59Z",
          "maxExpandedQueryDuration": "P52W1D",
          "maxParticipantsPerEvent": 20,
          "mayCreateCalendar": true
        },
        "urn:ietf:params:jmap:calendars:parse": {},
        "urn:ietf:params:jmap:websocket": {},
        "urn:ietf:params:jmap:sieve": {
          "maxSizeScriptName": 512,
          "maxSizeScript": 1048576,
          "maxNumberScripts": 100,
          "maxNumberRedirects": 1,
          "sieveExtensions": [
            "body",
            "comparator-elbonia",
            "comparator-i;ascii-casemap",
            "comparator-i;ascii-numeric",
            "comparator-i;octet",
            "convert",
            "copy",
            "date",
            "duplicate",
            "editheader",
            "enclose",
            "encoded-character",
            "enotify",
            "envelope",
            "envelope-deliverby",
            "envelope-dsn",
            "environment",
            "ereject",
            "extlists",
            "extracttext",
            "fcc",
            "fileinto",
            "foreverypart",
            "ihave",
            "imap4flags",
            "imapsieve",
            "include",
            "index",
            "mailbox",
            "mailboxid",
            "mboxmetadata",
            "mime",
            "redirect-deliverby",
            "redirect-dsn",
            "regex",
            "reject",
            "relational",
            "replace",
            "servermetadata",
            "spamtest",
            "spamtestplus",
            "special-use",
            "subaddress",
            "vacation",
            "vacation-seconds",
            "variables",
            "virustest"
          ],
          "notificationMethods": [
            "mailto"
          ],
          "externalLists": null
        },
        "urn:ietf:params:jmap:blob": {
          "maxSizeBlobSet": 7499488,
          "maxDataSources": 16,
          "supportedTypeNames": [
            "Email",
            "Thread",
            "SieveScript"
          ],
          "supportedDigestAlgorithms": [
            "sha",
            "sha-256",
            "sha-512"
          ]
        },
        "urn:ietf:params:jmap:quota": {},
        "urn:ietf:params:jmap:principals": {
          "currentUserPrincipalId": "dk"
        },
        "urn:ietf:params:jmap:principals:availability": {
          "maxAvailabilityDuration": "P52W1D"
        },
        "urn:ietf:params:jmap:filenode": {
          "maxFileNodeDepth": null,
          "maxSizeFileNodeName": 255,
          "fileNodeQuerySortOptions": [],
          "mayCreateTopLevelFileNode": true
        }
      }
    },
    "di": {
      "name": "extra-group",
      "isPersonal": false,
      "isReadOnly": false,
      "accountCapabilities": {
        "urn:ietf:params:jmap:websocket": {},
        "urn:ietf:params:jmap:principals": {
          "currentUserPrincipalId": "di"
        },
        "urn:ietf:params:jmap:principals:availability": {
          "maxAvailabilityDuration": "P52W1D"
        }
      }
    }
  },
  "primaryAccounts": {
    "urn:ietf:params:jmap:mail": "dk",
    "urn:ietf:params:jmap:submission": "dk",
    "urn:ietf:params:jmap:vacationresponse": "dk",
    "urn:ietf:params:jmap:contacts": "dk",
    "urn:ietf:params:jmap:contacts:parse": "dk",
    "urn:ietf:params:jmap:calendars": "dk",
    "urn:ietf:params:jmap:calendars:parse": "dk",
    "urn:ietf:params:jmap:websocket": "dk",
    "urn:ietf:params:jmap:sieve": "dk",
    "urn:ietf:params:jmap:blob": "dk",
    "urn:ietf:params:jmap:quota": "dk",
    "urn:ietf:params:jmap:principals": "dk",
    "urn:ietf:params:jmap:principals:availability": "dk",
    "urn:ietf:params:jmap:filenode": "dk"
  },
  "username": "[email protected]",
  "apiUrl": "https://mail.example.org/jmap/",
  "downloadUrl": "https://mail.example.org/jmap/download/{accountId}/{blobId}/{name}?accept={type}",
  "uploadUrl": "https://mail.example.org/jmap/upload/{accountId}/",
  "eventSourceUrl": "https://mail.example.org/jmap/eventsource/?types={types}&closeafter={closeafter}&ping={ping}",
  "state": "e90d64d"
}

here in line 179 the account with the id di and name extra-group

wrenix avatar Nov 07 '25 23:11 wrenix