mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-09-21 07:46:03 +08:00
Merge branch 'master' of github.com:nodemailer/wildduck
This commit is contained in:
commit
00e178e8d9
82
README.md
82
README.md
|
@ -11,14 +11,14 @@ WildDuck tries to follow Gmail in product design. If there's a decision to be ma
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
- _MongoDB_ to store all data
|
* _MongoDB_ to store all data
|
||||||
- _Redis_ for pubsub and counters
|
* _Redis_ for pubsub and counters
|
||||||
- _Node.js_ at least version 8.0.0
|
* _Node.js_ at least version 8.0.0
|
||||||
|
|
||||||
**Optional requirements**
|
**Optional requirements**
|
||||||
|
|
||||||
- Redis Sentinel for automatic Redis failover
|
* Redis Sentinel for automatic Redis failover
|
||||||
- Build tools to install optional dependencies that need compiling
|
* Build tools to install optional dependencies that need compiling
|
||||||
|
|
||||||
WildDuck can be installed on any Node.js compatible platform.
|
WildDuck can be installed on any Node.js compatible platform.
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ Tested on a 10$ DigitalOcean Ubuntu 16.04 instance.
|
||||||
|
|
||||||
![](https://cldup.com/TZoTfxPugm.png)
|
![](https://cldup.com/TZoTfxPugm.png)
|
||||||
|
|
||||||
- Web interface at https://wildduck.email that uses WildDuck API
|
* Web interface at https://wildduck.email that uses WildDuck API
|
||||||
|
|
||||||
### Manual install
|
### Manual install
|
||||||
|
|
||||||
|
@ -157,9 +157,9 @@ specific, so (at least in theory) it could be replaced with any object store.
|
||||||
|
|
||||||
Here's a list of alternative email servers that also use a database for storing email messages:
|
Here's a list of alternative email servers that also use a database for storing email messages:
|
||||||
|
|
||||||
- [DBMail](http://www.dbmail.org/) (MySQL, IMAP)
|
* [DBMail](http://www.dbmail.org/) (MySQL, IMAP)
|
||||||
- [Archiveopteryx](http://archiveopteryx.org/) (PostgreSQL, IMAP)
|
* [Archiveopteryx](http://archiveopteryx.org/) (PostgreSQL, IMAP)
|
||||||
- [ElasticInbox](http://www.elasticinbox.com/) (Cassandra, POP3)
|
* [ElasticInbox](http://www.elasticinbox.com/) (Cassandra, POP3)
|
||||||
|
|
||||||
### How does it work?
|
### How does it work?
|
||||||
|
|
||||||
|
@ -182,25 +182,25 @@ and the user continues to see the old state.
|
||||||
|
|
||||||
WildDuck IMAP server supports the following IMAP standards:
|
WildDuck IMAP server supports the following IMAP standards:
|
||||||
|
|
||||||
- The entire **IMAP4rev1** suite with some minor differences from the spec. See below for [IMAP Protocol Differences](#imap-protocol-differences) for a complete
|
* The entire **IMAP4rev1** suite with some minor differences from the spec. See below for [IMAP Protocol Differences](#imap-protocol-differences) for a complete
|
||||||
list
|
list
|
||||||
- **IDLE** ([RFC2177](https://tools.ietf.org/html/rfc2177)) – notfies about new and deleted messages and also about flag updates
|
* **IDLE** ([RFC2177](https://tools.ietf.org/html/rfc2177)) – notfies about new and deleted messages and also about flag updates
|
||||||
- **CONDSTORE** ([RFC4551](https://tools.ietf.org/html/rfc4551)) and **ENABLE** ([RFC5161](https://tools.ietf.org/html/rfc5161)) – supports most of the spec,
|
* **CONDSTORE** ([RFC4551](https://tools.ietf.org/html/rfc4551)) and **ENABLE** ([RFC5161](https://tools.ietf.org/html/rfc5161)) – supports most of the spec,
|
||||||
except metadata stuff which is ignored
|
except metadata stuff which is ignored
|
||||||
- **STARTTLS** ([RFC2595](https://tools.ietf.org/html/rfc2595))
|
* **STARTTLS** ([RFC2595](https://tools.ietf.org/html/rfc2595))
|
||||||
- **NAMESPACE** ([RFC2342](https://tools.ietf.org/html/rfc2342)) – minimal support, just lists the single user namespace with hierarchy separator
|
* **NAMESPACE** ([RFC2342](https://tools.ietf.org/html/rfc2342)) – minimal support, just lists the single user namespace with hierarchy separator
|
||||||
- **UNSELECT** ([RFC3691](https://tools.ietf.org/html/rfc3691))
|
* **UNSELECT** ([RFC3691](https://tools.ietf.org/html/rfc3691))
|
||||||
- **UIDPLUS** ([RFC4315](https://tools.ietf.org/html/rfc4315))
|
* **UIDPLUS** ([RFC4315](https://tools.ietf.org/html/rfc4315))
|
||||||
- **SPECIAL-USE** ([RFC6154](https://tools.ietf.org/html/rfc6154))
|
* **SPECIAL-USE** ([RFC6154](https://tools.ietf.org/html/rfc6154))
|
||||||
- **ID** ([RFC2971](https://tools.ietf.org/html/rfc2971))
|
* **ID** ([RFC2971](https://tools.ietf.org/html/rfc2971))
|
||||||
- **MOVE** ([RFC6851](https://tools.ietf.org/html/rfc6851))
|
* **MOVE** ([RFC6851](https://tools.ietf.org/html/rfc6851))
|
||||||
- **AUTHENTICATE PLAIN** ([RFC4959](https://tools.ietf.org/html/rfc4959)) and **SASL-IR**
|
* **AUTHENTICATE PLAIN** ([RFC4959](https://tools.ietf.org/html/rfc4959)) and **SASL-IR**
|
||||||
- **APPENDLIMIT** ([RFC7889](https://tools.ietf.org/html/rfc7889)) – maximum global allowed message size is advertised in CAPABILITY listing
|
* **APPENDLIMIT** ([RFC7889](https://tools.ietf.org/html/rfc7889)) – maximum global allowed message size is advertised in CAPABILITY listing
|
||||||
- **UTF8=ACCEPT** ([RFC6855](https://tools.ietf.org/html/rfc6855)) – this also means that WildDuck natively supports unicode email usernames. For example
|
* **UTF8=ACCEPT** ([RFC6855](https://tools.ietf.org/html/rfc6855)) – this also means that WildDuck natively supports unicode email usernames. For example
|
||||||
[андрис@уайлддак.орг](mailto:андрис@уайлддак.орг) is a valid email address that is hosted by a test instance of WildDuck
|
[андрис@уайлддак.орг](mailto:андрис@уайлддак.орг) is a valid email address that is hosted by a test instance of WildDuck
|
||||||
- **QUOTA** ([RFC2087](https://tools.ietf.org/html/rfc2087)) – Quota size is global for an account, using a single quota root. Be aware that quota size does not
|
* **QUOTA** ([RFC2087](https://tools.ietf.org/html/rfc2087)) – Quota size is global for an account, using a single quota root. Be aware that quota size does not
|
||||||
mean actual byte storage in disk, it is calculated as the sum of the [RFC822](https://tools.ietf.org/html/rfc822) sources of stored messages.
|
mean actual byte storage in disk, it is calculated as the sum of the [RFC822](https://tools.ietf.org/html/rfc822) sources of stored messages.
|
||||||
- **COMPRESS=DEFLATE** ([RFC4978](https://tools.ietf.org/html/rfc4978)) – Compress traffic between the client and the server
|
* **COMPRESS=DEFLATE** ([RFC4978](https://tools.ietf.org/html/rfc4978)) – Compress traffic between the client and the server
|
||||||
|
|
||||||
WildDuck more or less passes the [ImapTest](https://www.imapwiki.org/ImapTest/TestFeatures) Stress Testing run. Common errors that arise in the test are
|
WildDuck more or less passes the [ImapTest](https://www.imapwiki.org/ImapTest/TestFeatures) Stress Testing run. Common errors that arise in the test are
|
||||||
unknown labels (WildDuck doesn't send unsolicited `FLAGS` updates even though it does send unsolicited `FETCH FLAGS` updates) and sometimes NO for `STORE`
|
unknown labels (WildDuck doesn't send unsolicited `FLAGS` updates even though it does send unsolicited `FETCH FLAGS` updates) and sometimes NO for `STORE`
|
||||||
|
@ -218,12 +218,12 @@ clients.
|
||||||
|
|
||||||
In addition to the required POP3 commands ([RFC1939](https://tools.ietf.org/html/rfc1939)) WildDuck supports the following extensions:
|
In addition to the required POP3 commands ([RFC1939](https://tools.ietf.org/html/rfc1939)) WildDuck supports the following extensions:
|
||||||
|
|
||||||
- **UIDL**
|
* **UIDL**
|
||||||
- **USER**
|
* **USER**
|
||||||
- **PASS**
|
* **PASS**
|
||||||
- **SASL PLAIN**
|
* **SASL PLAIN**
|
||||||
- **PIPELINING**
|
* **PIPELINING**
|
||||||
- **TOP**
|
* **TOP**
|
||||||
|
|
||||||
#### POP3 command behaviors
|
#### POP3 command behaviors
|
||||||
|
|
||||||
|
@ -300,22 +300,28 @@ database.
|
||||||
|
|
||||||
## Future considerations
|
## Future considerations
|
||||||
|
|
||||||
- Optimize FETCH queries to load only partial data for BODY subparts
|
* Optimize FETCH queries to load only partial data for BODY subparts
|
||||||
- Parse incoming message into the mime tree as a stream. Currently the entire message is buffered in memory before being parsed.
|
* Parse incoming message into the mime tree as a stream. Currently the entire message is buffered in memory before being parsed.
|
||||||
- Maybe allow some kind of message manipulation through plugins
|
* Maybe allow some kind of message manipulation through plugins
|
||||||
- WildDuck does not plan to be the most feature-rich IMAP client in the world. Most IMAP extensions are useless because there aren't too many clients that are
|
* WildDuck does not plan to be the most feature-rich IMAP client in the world. Most IMAP extensions are useless because there aren't too many clients that are
|
||||||
able to benefit from these extensions. There are a few extensions though that would make sense to be added to WildDuck:
|
able to benefit from these extensions. There are a few extensions though that would make sense to be added to WildDuck:
|
||||||
|
|
||||||
- IMAP4 non-synchronizing literals, LITERAL- ([RFC7888](https://tools.ietf.org/html/rfc7888)). Synchronized literals are needed for APPEND to check mailbox
|
* IMAP4 non-synchronizing literals, LITERAL- ([RFC7888](https://tools.ietf.org/html/rfc7888)). Synchronized literals are needed for APPEND to check mailbox
|
||||||
quota, small values could go with the non-synchronizing version.
|
quota, small values could go with the non-synchronizing version.
|
||||||
- LIST-STATUS ([RFC5819](https://tools.ietf.org/html/rfc5819))
|
* LIST-STATUS ([RFC5819](https://tools.ietf.org/html/rfc5819))
|
||||||
- _What else?_ (definitely not NOTIFY nor QRESYNC)
|
* _What else?_ (definitely not NOTIFY nor QRESYNC)
|
||||||
|
|
||||||
## Operating WildDuck
|
## Operating WildDuck
|
||||||
|
|
||||||
### Logging
|
### Logging
|
||||||
|
|
||||||
WildDuck sends gelf-formatted log messages to a Graylog server
|
WildDuck sends gelf-formatted log messages to a Graylog server. Set `log.gelf.enabled=true` in [config](https://github.com/nodemailer/wildduck/blob/2019fd9db6bce1c3167f08e363ab4225b8c8a296/config/default.toml#L59-L66) to use it. Also make sure that the same Gelf settings are set for _zonemta-wildduck_ and _haraka-plugin-wildduck_ in order to get consistent logs about messages throughout the system.
|
||||||
|
|
||||||
|
> Graylog logging replaces previously used 'messagelog' database collection
|
||||||
|
|
||||||
|
### Import from maildir
|
||||||
|
|
||||||
|
There is a tool to import emails from an existing maildir to WildDuck email database. See the tool [here](https://github.com/nodemailer/import-maildir)
|
||||||
|
|
||||||
### Sharding
|
### Sharding
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue