Butterfly mail daemon
Go to file
Tristan B. Kildaire 5a9896613c Added documentation on setting it up 2021-01-23 17:29:11 +02:00
source Fixed missing import 2021-01-23 12:34:30 +02:00
testing WIP: Testing configurations for server-to-server tests 2021-01-20 18:44:53 +02:00
.gitignore Updated .gitignore 2020-06-18 21:30:56 +02:00
.travis.yml Added travis build file. 2020-05-03 17:28:36 +02:00
LICENSE Initial commit 2020-05-03 16:21:41 +02:00
README.md Changed command `listFolder` to `listMail` 2020-06-19 16:05:41 +02:00
butterflyd.json Updated testing ports 2021-01-21 17:44:54 +02:00
dub.json Added gogga 2021-01-23 12:30:54 +02:00
dub.selections.json Added gogga 2021-01-23 12:30:54 +02:00
mailstore.md Added mailbox spec. 2020-06-18 11:16:54 +02:00
tutorial.md Added documentation on setting it up 2021-01-23 17:29:11 +02:00

README.md

butterflyd

Build Status

Butterfly is an easy-to-use email protocol replacement. It aims at being easy to extend on the client end by using JSON as the basis for the majority of the protocol.

Protocol

Authentication

To connect to a Butterfly server one must first autheticate themselves with the server. The JSON provided and returned for this are shown below:

JSON sent:

{
	"command" : "authenticate",
	"request" : {
		"username" : "<username>",
		"password" : "<password>"
	}
}

JSON received:

{
	"status" : <status>,
}

Registration

To register a new account on the server one must provide the username (<username>) and password (<password>) wanting to be used as shown below:

JSON sent:

{
	"command" : "register",
	"request" : {
		"username" : "<username>",
		"password" : "<password>"
	}
}

JSON received:

{
	"status" : <statusCode>
}

Sending mail

To send mail the following TODO

JSON sent:

{
	"command" : "sendMail",
	"request" : {
		"mail" : {
			"recipients" : [],
			"message" : ...
		}
	}
}

JSON received:

{
	"status" : <statusCode>
}

Storing a mail message

You might want to simply save a mail message into a folder, perhaps for later editing.

JSON sent:

{
	"command" : "storeMail",
	"request" : {
		"mail" : {
			"recipients" : [],
			"message" : ...
		},
		"folder" : "<folderName>"
	}
}

JSON received:

{
	"status" : <statusCode>
}

Transporting mail

This is done by the server to forward mail to recipients not on the local server.

JSON sent:

{
	"command" : "deliverMail",
	"request" : {
		"mail" : {
			"recipients" : [],
			"message" : ...
		}
	}
}

JSON received:

{
	"status" : <statusCode>
}

Receiving mail

Receiving a message from the mail box, given the mail ID.

JSON sent:

{
	"command" : "fetchMail",
	"request" : {
		"id" : <mailID>
	}
}

JSON received:

{
	"status" : <statusCode>,
	"mail" : {
		"recipients" : [],
		"message" : ...
	}
}

Managing your mailbox

Adding a folder

JSON sent:

{
	"command" : "createFolder",
	"request" : {
		"folderName" : "<newFolderName>"
	}
}

TODO: received

Removing a folder

JSON sent:

{
	"command" : "deleteFolder",
	"request" : {
		"folderName" : "<folderName>"
	}
}

TODO: received

Adding a mail message to a folder

Binds a message by "mailID" to the given folder "<folderName>".

JSON sent:

{
	"command" : "addToFolder",
	"request" : {
		"folderName" : "<folderName>",
		"mailID" : <mailID>
	}
}

TODO: received

Removing a mail message from a folder

Unbinds a message by "mailID" to the given folder "<folderName>".

JSON sent:

{
	"command" : "removeFromFolder",
	"request" : {
		"folderName" : "<folderName>",
		"mailID" : <mailID>
	}
}

TODO: received

Getting a list of all mailIDs in a folder

Retrieves a list of mail IDs on the given folder "<folderName>".

JSON sent:

{
	"command" : "listMail",
	"request" : {
		"folderName" : "<folderName>"
	}
}

TODO: received

Deleting mail

Mail messages just exist but are bound to folders. As soon as it has no references, it gets deleted.

JSON sent:

etc. TODO

Later TODO: Since we going to do push too, we will therefore need to have eventIDs on send to do matching up.