Skip to content

Latest commit

 

History

History
213 lines (157 loc) · 6.13 KB

README.md

File metadata and controls

213 lines (157 loc) · 6.13 KB

Chatmail logo

Rust CI dependency status

The chatmail core library implements low-level network and encryption protocols, integrated by many chat bots and higher level applications, allowing to securely participate in the globally scaled e-mail server network. We provide reproducibly-built deltachat-rpc-server static binaries that offer a stdio-based high-level JSON-RPC API for instant messaging purposes.

The following protocols are handled without requiring API users to know much about them:

Installing Rust and Cargo

To download and install the official compiler for the Rust programming language, and the Cargo package manager, run the command in your user environment:

$ curl https://sh.rustup.rs -sSf | sh

On Windows, you may need to also install Perl to be able to compile deltachat-core.

Using the CLI client

Compile and run the command line utility, using cargo:

$ cargo run --locked -p deltachat-repl -- ~/profile-db

where ~/profile-db is the database file. The utility will create it if it does not exist.

Optionally, install deltachat-repl binary with

$ cargo install --locked --path deltachat-repl/

and run as

$ deltachat-repl ~/profile-db

Configure your account (if not already configured):

Chatmail is awaiting your commands.
> set addr your@email.org
> set mail_pw yourpassword
> configure

Connect to your mail server (if already configured):

> connect

Create a contact:

> addcontact yourfriends@email.org
Command executed successfully.

List contacts:

> listcontacts
Contact#10: <name unset> <yourfriends@email.org>
Contact#1: Me √√ <your@email.org>

Create a chat with your friend and send a message:

> createchat 10
Single#10 created successfully.
> chat 10
Single#10: yourfriends@email.org [yourfriends@email.org]
> send hi
Message sent.

List messages when inside a chat:

> chat

For more commands type:

> help

Installing libdeltachat system wide

$ git clone https://github.com/chatmail/core.git
$ cd deltachat-core-rust
$ cmake -B build . -DCMAKE_INSTALL_PREFIX=/usr
$ cmake --build build
$ sudo cmake --install build

Development

# run tests
$ cargo test --all
# build c-ffi
$ cargo build -p deltachat_ffi --release

Debugging environment variables

  • DCC_MIME_DEBUG: if set outgoing and incoming message will be printed

  • RUST_LOG=async_imap=trace,async_smtp=trace: enable IMAP and SMTP tracing in addition to info messages.

Expensive tests

Some tests are expensive and marked with #[ignore], to run these use the --ignored argument to the test binary (not to cargo itself):

$ cargo test -- --ignored

Fuzzing

Install cargo-bolero with

$ cargo install cargo-bolero@0.8.0

Run fuzzing tests with

$ cd fuzz
$ cargo bolero test fuzz_mailparse --release=false -s NONE

Corpus is created at fuzz/fuzz_targets/corpus, you can add initial inputs there. For fuzz_mailparse target corpus can be populated with ../test-data/message/*.eml.

To run with AFL instead of libFuzzer:

$ cargo bolero test fuzz_format_flowed --release=false -e afl -s NONE

Features

  • vendored: When using Openssl for TLS, this bundles a vendored version.

Update Provider Data

To add the updates from the provider-db to the core, check line REV= inside ./scripts/update-provider-database.sh and then run the script.

Language bindings and frontend projects

Language bindings are available for:

The following "frontend" projects make use of the Rust-library or its language bindings:

Footnotes

  1. Out of date / unmaintained, if you like those languages feel free to start maintaining them. If you have questions we'll help you, please ask in the issues. 2