Issue Description
I try to import an exported ics calendar file to stalwart. It fails with the error “Invalid calendar file format” in bulwark. I also tried to export the calendar and calenderevent using vandelay import and export function. For testing I created an empty calendar with a single event.
Expected Behavior
Import calenderevent from jmap exported stalwart server
Actual Behavior
warning: CalendarEvent local 1 skipped: connection error: malformed jmap response: unresolved local Calendar id 1 on export
Reproduction Steps
-
Export calendar using vandelay
./vandelay import jmap --url https://mail.domain.private --auth-basic [email protected] --account-name [email protected] --objects calendar rene_test.sqlite -v
import: Calendar …
import: Calendar done (fetched=1 deleted=0 skipped=0 failed=0)
Calendar: created=0 fetched=1 updated=0 deleted=0 skipped=0 failed=0 -
Import calendarevents using vandelay
./vandelay import jmap --url https://mail.domain.private --auth-basic [email protected] --account-name [email protected] --objects calendarevent rene_test.sqlite
import: CalendarEvent …
import: CalendarEvent done (fetched=1 deleted=0 skipped=0 failed=0)
CalendarEvent: created=0 fetched=1 updated=0 deleted=0 skipped=0 failed=0 -
Remove calendarevent
-
Export calendar and calendarevents using vandelay
Relevant Log Output
./vandelay export --url https://mail.domain.private --auth-basic [email protected] --account-name [email protected] --objects calendarevent rene_test.sqlite -vvv
JMAP GET https://mail.domain.private → 200 (51 ms)
Portal HTML
JMAP GET https://mail.domain.private/.well-known/jmap → 200 (3 ms)
< {
< “accounts”: {
< “d”: {
< “accountCapabilities”: {
< “urn:ietf:params:jmap:blob”: {
< “maxDataSources”: 160,
< “maxSizeBlobSet”: 23230689,
< “supportedDigestAlgorithms”: [
< “sha”,
< “sha-256”,
< “sha-512”
< ],
< “supportedTypeNames”: [
< “Email”,
< “Thread”,
< “SieveScript”
< ]
< },
< “urn:ietf:params:jmap:calendars”: {
< “maxCalendarsPerEvent”: null,
< “maxDateTime”: “9999-12-31T23:59:59Z”,
< “maxExpandedQueryDuration”: “P52W1D”,
< “maxParticipantsPerEvent”: 20,
< “mayCreateCalendar”: true,
< “minDateTime”: “0001-01-01T00:00:00Z”
< },
< “urn:ietf:params:jmap:calendars:parse”: {},
< “urn:ietf:params:jmap:contacts”: {
< “maxAddressBooksPerCard”: null,
< “mayCreateAddressBook”: true
< },
< “urn:ietf:params:jmap:contacts:parse”: {},
< “urn:ietf:params:jmap:emailpush”: {},
< “urn:ietf:params:jmap:filenode”: {
< “caseInsensitiveNames”: false,
< “fileNodeQuerySortOptions”: [
< “name”,
< “size”,
< “nodeType”
< ],
< “forbiddenNameChars”: “/<>:"\|?*”,
< “forbiddenNodeNames”: [
< “.”,
< “..”,
< “CON”,
< “PRN”,
< “AUX”,
< “NUL”,
< “COM0”,
< “COM1”,
< “COM2”,
< “COM3”,
< “COM4”,
< “COM5”,
< “COM6”,
< “COM7”,
< “COM8”,
< “COM9”,
< “LPT0”,
< “LPT1”,
< “LPT2”,
< “LPT3”,
< “LPT4”,
< “LPT5”,
< “LPT6”,
< “LPT7”,
< “LPT8”,
< “LPT9”
< ],
< “maxFileNodeDepth”: null,
< “maxSizeFileNodeName”: 255,
< “mayCreateTopLevelFileNode”: true,
< “webTrashUrl”: null,
< “webUrlTemplate”: null,
< “webWriteUrlTemplate”: null
< },
< “urn:ietf:params:jmap:mail”: {
< “emailQuerySortOptions”: [
< “receivedAt”,
< “size”,
< “from”,
< “to”,
< “subject”,
< “sentAt”,
< “hasKeyword”,
< “allInThreadHaveKeyword”,
< “someInThreadHaveKeyword”
< ],
< “maxMailboxDepth”: 10,
< “maxMailboxesPerEmail”: null,
< “maxSizeAttachmentsPerEmail”: 50000000,
< “maxSizeMailboxName”: 255,
< “mayCreateTopLevelMailbox”: true
< },
< “urn:ietf:params:jmap:mail:share”: {},
< “urn:ietf:params:jmap:principals”: {
< “currentUserPrincipalId”: “d”
< },
< “urn:ietf:params:jmap:principals:availability”: {
< “maxAvailabilityDuration”: “P52W1D”
< },
< “urn:ietf:params:jmap:quota”: {},
< “urn:ietf:params:jmap:sieve”: {
< “externalLists”: null,
< “maxNumberRedirects”: 1,
< “maxNumberScripts”: 100,
< “maxSizeScript”: 102400,
< “maxSizeScriptName”: 512,
< “notificationMethods”: [
< “mailto”
< ],
< “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”
< ]
< },
< “urn:ietf:params:jmap:submission”: {
< “maxDelayedSend”: 2592000,
< “submissionExtensions”: {
< “DELIVERYBY”: ,
< “DSN”: ,
< “FUTURERELEASE”: ,
< “MT-PRIORITY”: [
< “MIXER”
< ],
< “REQUIRETLS”: ,
< “SIZE”:
< }
< },
< “urn:ietf:params:jmap:vacationresponse”: {},
< “urn:ietf:params:jmap:websocket”: {},
< “urn:stalwart:jmap”: {}
< },
< “isPersonal”: true,
< “isReadOnly”: false,
< “name”: “[email protected]”
< }
< },
< “apiUrl”: “https://mail.domain.private/jmap/”,
< “capabilities”: {
< “urn:ietf:params:jmap:blob”: {},
< “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:core”: {
< “collationAlgorithms”: [
< “i;ascii-numeric”,
< “i;ascii-casemap”,
< “i;unicode-casemap”
< ],
< “maxCallsInRequest”: 160,
< “maxConcurrentRequests”: 40,
< “maxConcurrentUpload”: 40,
< “maxObjectsInGet”: 5000,
< “maxObjectsInSet”: 5000,
< “maxSizeRequest”: 30974935,
< “maxSizeUpload”: 50000000000
< },
< “urn:ietf:params:jmap:emailpush”: {},
< “urn:ietf:params:jmap:filenode”: {},
< “urn:ietf:params:jmap:mail”: {},
< “urn:ietf:params:jmap:principals”: {},
< “urn:ietf:params:jmap:principals:availability”: {},
< “urn:ietf:params:jmap:quota”: {},
< “urn:ietf:params:jmap:sieve”: {
< “implementation”: “Stalwart v1.0.0”
< },
< “urn:ietf:params:jmap:submission”: {},
< “urn:ietf:params:jmap:vacationresponse”: {},
< “urn:ietf:params:jmap:webpush-vapid”: {
< “applicationServerKey”: “secret”
< },
< “urn:ietf:params:jmap:websocket”: {
< “supportsPush”: true,
< “url”: “wss://mail.domain.private/jmap/ws”
< }
< },
< “downloadUrl”: “https://mail.domain.private/jmap/download/{accountId}/{blobId}/{name}?accept={type}”,
< “eventSourceUrl”: “https://mail.domain.private/jmap/eventsource/?types={types}&closeafter={closeafter}&ping={ping}”,
< “primaryAccounts”: {
< “urn:ietf:params:jmap:blob”: “d”,
< “urn:ietf:params:jmap:calendars”: “d”,
< “urn:ietf:params:jmap:calendars:parse”: “d”,
< “urn:ietf:params:jmap:contacts”: “d”,
< “urn:ietf:params:jmap:contacts:parse”: “d”,
< “urn:ietf:params:jmap:emailpush”: “d”,
< “urn:ietf:params:jmap:filenode”: “d”,
< “urn:ietf:params:jmap:mail”: “d”,
< “urn:ietf:params:jmap:mail:share”: “d”,
< “urn:ietf:params:jmap:principals”: “d”,
< “urn:ietf:params:jmap:principals:availability”: “d”,
< “urn:ietf:params:jmap:quota”: “d”,
< “urn:ietf:params:jmap:sieve”: “d”,
< “urn:ietf:params:jmap:submission”: “d”,
< “urn:ietf:params:jmap:vacationresponse”: “d”,
< “urn:ietf:params:jmap:websocket”: “d”,
< “urn:stalwart:jmap”: “d”
< },
< “state”: “8505448d”,
< “uploadUrl”: “https://mail.domain.private/jmap/upload/{accountId}/”,
< “username”: “[email protected]”
< }
export: CalendarEvent …
JMAP POST https://mail.domain.private/jmap/ → 200 (2 ms)
{
“methodCalls”: [
[
“CalendarEvent/query”,
{
“accountId”: “d”,
“limit”: 5000
},
“q”
]
],
“using”: [
“urn:ietf:params:jmap:core”,
“urn:ietf:params:jmap:calendars”
]
}
< {
< “methodResponses”: [
< [
< “CalendarEvent/query”,
< {
< “accountId”: “d”,
< “canCalculateChanges”: true,
< “ids”: ,
< “position”: 0,
< “queryState”: “swg0qe”
< },
< “q”
< ]
< ],
< “sessionState”: “8505448d”
< }
warning: CalendarEvent local 1 skipped: connection error: malformed jmap response: unresolved local Calendar id 1 on export
CalendarEvent: created=0 fetched=0 updated=0 deleted=0 skipped=0 failed=1
error: some objects failed; the archive is consistent and resumable
Stalwart Version
v0.16.x
Installation Method
Binary (Linux)
Database Backend
MySQL
Blob Storage
MySQL
Search Engine
MySQL
Directory Backend
Internal
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on