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
|
||||
|
||||
- _MongoDB_ to store all data
|
||||
- _Redis_ for pubsub and counters
|
||||
- _Node.js_ at least version 8.0.0
|
||||
* _MongoDB_ to store all data
|
||||
* _Redis_ for pubsub and counters
|
||||
* _Node.js_ at least version 8.0.0
|
||||
|
||||
**Optional requirements**
|
||||
|
||||
- Redis Sentinel for automatic Redis failover
|
||||
- Build tools to install optional dependencies that need compiling
|
||||
* Redis Sentinel for automatic Redis failover
|
||||
* Build tools to install optional dependencies that need compiling
|
||||
|
||||
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)
|
||||
|
||||
- Web interface at https://wildduck.email that uses WildDuck API
|
||||
* Web interface at https://wildduck.email that uses WildDuck API
|
||||
|
||||
### 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:
|
||||
|
||||
- [DBMail](http://www.dbmail.org/) (MySQL, IMAP)
|
||||
- [Archiveopteryx](http://archiveopteryx.org/) (PostgreSQL, IMAP)
|
||||
- [ElasticInbox](http://www.elasticinbox.com/) (Cassandra, POP3)
|
||||
* [DBMail](http://www.dbmail.org/) (MySQL, IMAP)
|
||||
* [Archiveopteryx](http://archiveopteryx.org/) (PostgreSQL, IMAP)
|
||||
* [ElasticInbox](http://www.elasticinbox.com/) (Cassandra, POP3)
|
||||
|
||||
### 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:
|
||||
|
||||
- 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
|
||||
- **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,
|
||||
* **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,
|
||||
except metadata stuff which is ignored
|
||||
- **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
|
||||
- **UNSELECT** ([RFC3691](https://tools.ietf.org/html/rfc3691))
|
||||
- **UIDPLUS** ([RFC4315](https://tools.ietf.org/html/rfc4315))
|
||||
- **SPECIAL-USE** ([RFC6154](https://tools.ietf.org/html/rfc6154))
|
||||
- **ID** ([RFC2971](https://tools.ietf.org/html/rfc2971))
|
||||
- **MOVE** ([RFC6851](https://tools.ietf.org/html/rfc6851))
|
||||
- **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
|
||||
- **UTF8=ACCEPT** ([RFC6855](https://tools.ietf.org/html/rfc6855)) – this also means that WildDuck natively supports unicode email usernames. For example
|
||||
* **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
|
||||
* **UNSELECT** ([RFC3691](https://tools.ietf.org/html/rfc3691))
|
||||
* **UIDPLUS** ([RFC4315](https://tools.ietf.org/html/rfc4315))
|
||||
* **SPECIAL-USE** ([RFC6154](https://tools.ietf.org/html/rfc6154))
|
||||
* **ID** ([RFC2971](https://tools.ietf.org/html/rfc2971))
|
||||
* **MOVE** ([RFC6851](https://tools.ietf.org/html/rfc6851))
|
||||
* **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
|
||||
* **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
|
||||
- **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.
|
||||
- **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
|
||||
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:
|
||||
|
||||
- **UIDL**
|
||||
- **USER**
|
||||
- **PASS**
|
||||
- **SASL PLAIN**
|
||||
- **PIPELINING**
|
||||
- **TOP**
|
||||
* **UIDL**
|
||||
* **USER**
|
||||
* **PASS**
|
||||
* **SASL PLAIN**
|
||||
* **PIPELINING**
|
||||
* **TOP**
|
||||
|
||||
#### POP3 command behaviors
|
||||
|
||||
|
@ -300,22 +300,28 @@ database.
|
|||
|
||||
## Future considerations
|
||||
|
||||
- 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.
|
||||
- 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
|
||||
* 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.
|
||||
* 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
|
||||
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.
|
||||
- LIST-STATUS ([RFC5819](https://tools.ietf.org/html/rfc5819))
|
||||
- _What else?_ (definitely not NOTIFY nor QRESYNC)
|
||||
* LIST-STATUS ([RFC5819](https://tools.ietf.org/html/rfc5819))
|
||||
* _What else?_ (definitely not NOTIFY nor QRESYNC)
|
||||
|
||||
## Operating WildDuck
|
||||
|
||||
### 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
|
||||
|
||||
|
|
Loading…
Reference in a new issue