Rename Wild Duck to WildDuck

This commit is contained in:
Andris Reinman 2018-01-02 15:04:01 +02:00
parent abc5bb0302
commit 8f2328a6d3
23 changed files with 100 additions and 96 deletions

View file

@ -1,13 +1,13 @@
# Wild Duck Mail Server
# WildDuck Mail Server
![](https://raw.githubusercontent.com/nodemailer/wildduck/master/public/duck.png)
Wild Duck is a scalable no-SPOF IMAP/POP3 mail server. Wild Duck uses a distributed database (sharded + replicated MongoDB) as a backend for storing all data,
WildDuck is a scalable no-SPOF IMAP/POP3 mail server. WildDuck uses a distributed database (sharded + replicated MongoDB) as a backend for storing all data,
including emails.
Wild Duck tries to follow Gmail in architectural design. If there's a decision to be made then usually the answer is to do whatever Gmail has done.
WildDuck tries to follow Gmail in architectural design. If there's a decision to be made then usually the answer is to do whatever Gmail has done.
> **NB!** Wild Duck is currently in **beta**. Use it on your own responsibility.
> **NB!** WildDuck is currently in **beta**. Use it on your own responsibility.
## Requirements
@ -20,11 +20,11 @@ Wild Duck tries to follow Gmail in architectural design. If there's a decision t
* Redis Sentinel for automatic Redis failover
* Build tools to install optional dependencies that need compiling
Wild Duck can be installed on any Node.js compatible platform.
WildDuck can be installed on any Node.js compatible platform.
## No-SPOF architecture
Every component of the Wild Duck mail server can be replicated which eliminates potential single point of failures.
Every component of the WildDuck mail server can be replicated which eliminates potential single point of failures.
![](https://raw.githubusercontent.com/nodemailer/wildduck/master/public/wd.png)
@ -42,13 +42,13 @@ If you have a blank VPS and a free domain name that you can point to that VPS th
[Installation instructions](./setup)
Install script installs and configures all required dependencies and services, including Let's Encrypt based certs, to run Wild Duck as a mail server.
Install script installs and configures all required dependencies and services, including Let's Encrypt based certs, to run WildDuck as a mail server.
Tested on a 10$ DigitalOcean Ubuntu 16.04 instance.
![](https://cldup.com/TZoTfxPugm.png)
* Web interface at https://wildduck.email that uses Wild Duck API
* Web interface at https://wildduck.email that uses WildDuck API
### Manual install
@ -105,7 +105,7 @@ Any IMAP or POP3 client will do. Use the credentials from step 4\. to log in.
# HTTP API
Users, mailboxes and messages can be managed with HTTP requests against Wild Duck API
Users, mailboxes and messages can be managed with HTTP requests against WildDuck API
**[API Docs](https://api.wildduck.email/)**
@ -117,17 +117,17 @@ Yes, it does. You can run the server and get working IMAP and POP3 servers for m
[HTTP API](https://api.wildduck.email/) server to create new users. All handled by Node.js, MongoDB and Redis, no additional dependencies needed. Provided
services can be disabled and enabled one by one so, for example you could process just IMAP in one host and LMTP in another.
### How is security implemented in Wild Duck?
### How is security implemented in WildDuck?
Read about Wild Duck security implementation from the [Wiki](https://github.com/nodemailer/wildduck/wiki/Security-implementation)
Read about WildDuck security implementation from the [Wiki](https://github.com/nodemailer/wildduck/wiki/Security-implementation)
### What are the killer features?
1. **Stateless.** Start as many instances as you want. You can start multiple Wild Duck instances in different machines and as long as they share the same
1. **Stateless.** Start as many instances as you want. You can start multiple WildDuck instances in different machines and as long as they share the same
MongoDB and Redis settings, users can connect to any instances. This is very different from the traditional IMAP servers where a single user always needs to
connect (or be proxied) to the same IMAP server. Wild Duck keeps all required state information in MongoDB, so it does not matter which IMAP instance you
connect (or be proxied) to the same IMAP server. WildDuck keeps all required state information in MongoDB, so it does not matter which IMAP instance you
use.
2. **Scalable** as Wild Duck uses sharded MongoDB cluster for the backend storage. If you're running out of space, add a new shard.
2. **Scalable** as WildDuck uses sharded MongoDB cluster for the backend storage. If you're running out of space, add a new shard.
3. **No SPOF.** You can run multiple instances of every required service.
4. **Centralized authentication** which allows modern features like 2FA, application specific passwords, authentication scopes, revoking authentication tokens,
audit logging and even profile files to auto-configure Apple email clients without master password
@ -163,12 +163,12 @@ Here's a list of alternative email servers that also use a database for storing
### How does it work?
Whenever a message is received Wild Duck parses it into a tree-like structure based on the MIME tree and stores this tree to MongoDB. Attachments are removed
from the tree and stored separately in GridStore. If a message needs to be loaded then Wild Duck fetches the tree structure first and, if needed, loads
Whenever a message is received WildDuck parses it into a tree-like structure based on the MIME tree and stores this tree to MongoDB. Attachments are removed
from the tree and stored separately in GridStore. If a message needs to be loaded then WildDuck fetches the tree structure first and, if needed, loads
attachments from GridStore and then compiles it back into the original RFC822 message. The result should be identical to the original messages unless the
original message used unix newlines, these might be partially replaced with windows newlines.
Wild Duck tries to keep minimal state for sessions (basically just a list of currently known UIDs and latest MODSEQ value) to be able to distribute sessions
WildDuck tries to keep minimal state for sessions (basically just a list of currently known UIDs and latest MODSEQ value) to be able to distribute sessions
between different hosts. Whenever a mailbox is opened the entire message list is loaded as an array of UID values. The first UID in the array element points to
the message nr. 1 in IMAP, second one points to message nr. 2 etc.
@ -180,7 +180,7 @@ and the user continues to see the old state.
## E-Mail Protocol support
Wild Duck 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
list
@ -196,27 +196,27 @@ Wild Duck IMAP server supports the following IMAP standards:
* **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 Wild Duck natively supports unicode email usernames. For example
[андрис@уайлддак.орг](mailto:андрис@уайлддак.орг) is a valid email address that is hosted by a test instance of Wild Duck
* **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
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
Wild Duck 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 (Wild Duck doesn't send unsolicited `FLAGS` updates even though it does send unsolicited `FETCH FLAGS` updates) and sometimes NO for `STORE`
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`
(messages deleted in one session can not be updated in another).
In comparison Wild Duck is slower in processing single user than Dovecot. Especially when fetching messages, which is expected as Dovecot is reading directly
from filesystem while Wild Duck is recomposing messages from different parts.
In comparison WildDuck is slower in processing single user than Dovecot. Especially when fetching messages, which is expected as Dovecot is reading directly
from filesystem while WildDuck is recomposing messages from different parts.
Raw read/write speed for a single user is usually not relevant anyway as fetching entire mailbox content is not something that happens often. Wild Duck offers
Raw read/write speed for a single user is usually not relevant anyway as fetching entire mailbox content is not something that happens often. WildDuck offers
better parallelization through MongoDB sharding, so more users should not mean slower response times. It is also more important to offer fast synchronization
speeds between clients (eg. notifications about new email and such) where Wild Duck excels due to the write ahead log and the ability to push this log to
speeds between clients (eg. notifications about new email and such) where WildDuck excels due to the write ahead log and the ability to push this log to
clients.
### POP3 Support
In addition to the required POP3 commands ([RFC1939](https://tools.ietf.org/html/rfc1939)) Wild Duck supports the following extensions:
In addition to the required POP3 commands ([RFC1939](https://tools.ietf.org/html/rfc1939)) WildDuck supports the following extensions:
* **UIDL**
* **USER**
@ -236,7 +236,7 @@ POP3 listing displays the newest 250 messages in INBOX (configurable)
##### UIDL
Wild Duck uses message `_id` value (24 byte hex) as the unique ID. If a message is moved from one mailbox to another then it might _re-appear_ in the listing.
WildDuck uses message `_id` value (24 byte hex) as the unique ID. If a message is moved from one mailbox to another then it might _re-appear_ in the listing.
##### RETR
@ -248,9 +248,9 @@ If a messages is deleted by a client this message gets marked as Seen and moved
## Message filtering
Wild Duck has built-in message filtering in LMTP server. This is somewhat similar to Sieve even though the filters are not scripts.
WildDuck has built-in message filtering in LMTP server. This is somewhat similar to Sieve even though the filters are not scripts.
Filters can be managed via the [Wild Duck API](https://api.wildduck.email/#api-Filters).
Filters can be managed via the [WildDuck API](https://api.wildduck.email/#api-Filters).
## IMAP Protocol Differences
@ -258,10 +258,10 @@ This is a list of known differences from the IMAP specification. Listed differen
1. `\Recent` flags is not implemented and most probably never will be (RFC3501 2.3.2.)
2. `RENAME` does not touch subfolders which is against the spec (RFC3501 6.3.5\. _If the name has inferior hierarchical names, then the inferior hierarchical
names MUST also be renamed._). Wild Duck stores all folders using flat hierarchy, the "/" separator is fake and only used for listing mailboxes
3. Unsolicited `FLAGS` responses (RFC3501 7.2.6.) and `PERMANENTFLAGS` are not sent (except for as part of `SELECT` and `EXAMINE` responses). Wild Duck notifies
names MUST also be renamed._). WildDuck stores all folders using flat hierarchy, the "/" separator is fake and only used for listing mailboxes
3. Unsolicited `FLAGS` responses (RFC3501 7.2.6.) and `PERMANENTFLAGS` are not sent (except for as part of `SELECT` and `EXAMINE` responses). WildDuck notifies
about flag updates only with unsolicited FETCH updates.
4. Wild Duck responds with `NO` for `STORE` if matching messages were deleted in another session
4. WildDuck responds with `NO` for `STORE` if matching messages were deleted in another session
5. `CHARSET` argument for the `SEARCH` command is ignored (RFC3501 6.4.4.)
6. Metadata arguments for `SEARCH MODSEQ` are ignored (RFC7162 3.1.5.). You can define `<entry-name>` and `<entry-type-req>` values but these are not used for
anything
@ -288,14 +288,14 @@ you should promptly see the new message.
Use [WildDuck MTA](https://github.com/nodemailer/wildduck-mta) (which under the hood is [ZoneMTA](https://github.com/zone-eu/zone-mta) with the
[ZoneMTA-WildDuck](https://github.com/nodemailer/zonemta-wildduck) plugin).
This gives you an outbound SMTP server that uses Wild Duck accounts for authentication. The plugin authenticates user credentials and also rewrites headers if
This gives you an outbound SMTP server that uses WildDuck accounts for authentication. The plugin authenticates user credentials and also rewrites headers if
needed (if the header From: address does not match user address or aliases then it is rewritten). Additionally a copy of the sent message is uploaded to the
Sent Mail folder. Local delivery is done directly to Wild Duck LMTP.
Sent Mail folder. Local delivery is done directly to WildDuck LMTP.
## Inbound SMTP
Use [Haraka](http://haraka.github.io/) with [queue/lmtp](http://haraka.github.io/manual/plugins/queue/lmtp.html) plugin to deliver messages to Wild Duck and
[haraka-plugins-wildduck](https://github.com/nodemailer/haraka-plugin-wildduck) to validate recipient addresses and quota usage against the Wild Duck users
Use [Haraka](http://haraka.github.io/) with [queue/lmtp](http://haraka.github.io/manual/plugins/queue/lmtp.html) plugin to deliver messages to WildDuck and
[haraka-plugins-wildduck](https://github.com/nodemailer/haraka-plugin-wildduck) to validate recipient addresses and quota usage against the WildDuck users
database.
## Future considerations
@ -303,19 +303,19 @@ database.
* 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
* Wild Duck 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 Wild Duck:
* 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
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)
## Operating Wild Duck
## Operating WildDuck
### Sharding
Wild Duck supports MongoDB sharding. Consider using sharding only if you know that your data storage is large enough to outgrow single replica. Some actions
WildDuck supports MongoDB sharding. Consider using sharding only if you know that your data storage is large enough to outgrow single replica. Some actions
require scattered queries to be made that might be a hit on performance on a large cluster but most queries include the shard key by default.
Shard the following collections by these keys (assuming you keep attachments in a separate database):
@ -350,11 +350,11 @@ MongoDB does not complain about existing folders so you can prepare the mount be
### Redis Sentinel
Wild Duck is able to use Redis Sentinel instead of single Redis master for automatic failover. When using Sentinel and the Redis master fails then it might take
WildDuck is able to use Redis Sentinel instead of single Redis master for automatic failover. When using Sentinel and the Redis master fails then it might take
a moment until new master is elected. Pending requests are cached during that window, so most operations should succeed eventually. You might want to test
failover under load though, to see how it behaves.
Redis Sentinel failover does not guarantee consistency. Wild Duck does not store critical information in Redis, so even if some data loss occurs, it should not
Redis Sentinel failover does not guarantee consistency. WildDuck does not store critical information in Redis, so even if some data loss occurs, it should not
be noticeable.
### HAProxy
@ -380,8 +380,8 @@ You can live-reload updated certificates by sending SIGHUP to the master process
only affects only some settings, for example all TLS certificates are loaded and updated. In this case existing processes continue as is, while new ones use the
updated certs.
Beware though that if configuration loading fails, then it ends with an exception. Make sure that TLS certificate files are readable for the Wild Duck user.
Beware though that if configuration loading fails, then it ends with an exception. Make sure that TLS certificate files are readable for the WildDuck user.
## License
Wild Duck Mail Agent is licensed under the [European Union Public License 1.1](http://ec.europa.eu/idabc/eupl.html) or later.
WildDuck Mail Agent is licensed under the [European Union Public License 1.1](http://ec.europa.eu/idabc/eupl.html) or later.

2
api.js
View file

@ -27,7 +27,7 @@ const domainaliasRoutes = require('./lib/api/domainaliases');
const dkimRoutes = require('./lib/api/dkim');
const serverOptions = {
name: 'Wild Duck API',
name: 'WildDuck API',
strictRouting: true,
formatters: {
'application/json; q=0.4': (req, res, body) => {

View file

@ -24,16 +24,16 @@ secure=false
identifier="com.email.wildduck"
# A human-readable name for the profile. This value is displayed on the Detail screen. It does not have to be unique.
displayName="Wild Duck Mail"
displayName="WildDuck Mail"
# A human-readable string containing the name of the organization that provided the profile.
organization="Wild Duck Mail Services"
organization="WildDuck Mail Services"
# A description of the profile, shown on the Detail screen for the profile. This should be descriptive enough to help the user decide whether to install the profile.
displayDescription="Install this profile to setup {email}"
# A user-visible description of the email account, shown in the Mail and Settings applications.
accountDescription="Wild Duck ({email})"
accountDescription="WildDuck ({email})"
[mobileconfig.tls]
# If certificate path is not defined, use global or built-in self-signed certs

View file

@ -4,7 +4,7 @@ mongo="mongodb://127.0.0.1:27017/wildduck"
# redis connection string to connect to a single master (see below for Sentinel example)
redis="redis://127.0.0.1:6379/3"
# Wild Duck allows using different kind of data in different databases
# WildDuck allows using different kind of data in different databases
# If you do not provide a database config value, then main database connection
# is used for everything
# You can either use a database name (uses shared connection) or a configutaion

View file

@ -21,9 +21,12 @@ maxForwards=2000
# If usernames are not email addresses then use this domain as hostname part
#emailDomain="mydomain.info"
# Bugsnag API key
# If set then reports errors to Bugsnag
bugsnagCode=""
# Header rules for routing spam
# This does not affect WildDuck plugin for Haraka
# @include "spamheaders.toml"
[dbs]

View file

@ -1,10 +1,10 @@
# If enabled then Wild Duck exposes an IMAP interface for listing and fetching emails
# If enabled then WildDuck exposes an IMAP interface for listing and fetching emails
enabled=true
port=9993
host="0.0.0.0"
# Use `true` for port 993 and `false` for 143. If connection is not secured
# on connection then Wild Duck enables STARTTLS extension
# on connection then WildDuck enables STARTTLS extension
secure=true
# Max size for messages uploaded via APPEND
@ -37,9 +37,9 @@ useProxy=false
# an array of IP addresses to ignore (not logged)
ignoredHosts=[]
#name="Wild Duck IMAP"
#name="WildDuck IMAP"
#version="1.0.0"
#vendor="Wild Duck"
#vendor="WildDuck"
# Add extra IMAP interfaces
#[[interface]]

View file

@ -1,4 +1,5 @@
# If enabled then Wild Duck exposes a LMTP interface for pushing messages to mail store
# If enabled then WildDuck exposes a LMTP interface for pushing messages to mail store
# NB! If you are using WildDuck plugin for Haraka then LMTP is not needed
enabled=true
port=2424
@ -12,7 +13,7 @@ maxMB=25
disableSTARTTLS=true
# Greeting message for connecting client
banner="Welcome to Wild Duck Mail Server"
banner="Welcome to WildDuck Mail Server"
# Server hostname. Defaults to os.hostname() if false
name=false

View file

@ -1,4 +1,4 @@
# If enabled then Wild Duck exposes a limited POP3 interface for listing and fetching emails
# If enabled then WildDuck exposes a limited POP3 interface for listing and fetching emails
enabled=true
port=9995
# by default bind to localhost only
@ -23,7 +23,7 @@ useProxy=false
# an array of IP addresses to ignore (not logged)
ignoredHosts=[]
#name="Wild Duck POP3"
#name="WildDuck POP3"
#version="1.0.0"
[tls]

View file

@ -1,6 +1,6 @@
# HTTP API
Wild Duck Mail Server is a scalable IMAP / POP3 server that natively exposes internal data through an HTTP API.
WildDuck Mail Server is a scalable IMAP / POP3 server that natively exposes internal data through an HTTP API.
This API is not meant to be used by end users but your application.
@ -159,7 +159,7 @@ All failed responses look like the following:
### Paging
For paging lists longer than allowed limit, Wild Duck API returns cursors for `next` and `previous` pages.
For paging lists longer than allowed limit, WildDuck API returns cursors for `next` and `previous` pages.
```json
{
@ -316,10 +316,10 @@ Creates a new user, returns the ID upon success.
* **quota** is the maximum storage in bytes allowed for this user. If not set then the default value is used
* **retention** is the default retention time in ms for mailboxes. Messages in Trash and Junk folders have a capped retention time of 30 days.
* **language** is the language code for the user, eg. "en" or "et". Mailbox names for the default mailboxes (eg. "Trash") depend on the language
* **recipients** is the maximum number of recipients allowed to send mail to in a 24h window. Requires ZoneMTA with the Wild Duck plugin
* **forwards** is the maximum number of forwarded emails in a 24h window. Requires ZoneMTA with the Wild Duck plugin
* **recipients** is the maximum number of recipients allowed to send mail to in a 24h window. Requires ZoneMTA with the WildDuck plugin
* **forwards** is the maximum number of forwarded emails in a 24h window. Requires ZoneMTA with the WildDuck plugin
* **tags** is an array of tags to be associated with that user. Tags can be used for filtering.
* **pubKey** is an optional PGP public key. Wild Duck uses OpnePGP.js so keys using EC might not pass validation.
* **pubKey** is an optional PGP public key. WildDuck uses OpnePGP.js so keys using EC might not pass validation.
* **encryptMessages** (boolean) indicates if messages stored should be encrypted using the PGP key
* **encryptForwarded** (boolean) indicates if forwarded messages stored be encrypted using the PGP key. Encryption applies after filter rules
* **sess** an optional string of user session to be stored in security log
@ -363,10 +363,10 @@ Updates the properties of an user. Only specify these fields that you want to be
* **quota** is the maximum storage in bytes allowed for this user
* **retention** is the default retention time in ms for mailboxes. Messages in Trash and Junk folders have a capped retention time of 30 days.
* **language** is the language code for the user, eg. "en" or "et"
* **recipients** is the maximum number of recipients allowed to send mail to in a 24h window. Requires ZoneMTA with the Wild Duck plugin
* **forwards** is the maximum number of forwarded emails in a 24h window. Requires ZoneMTA with the Wild Duck plugin
* **recipients** is the maximum number of recipients allowed to send mail to in a 24h window. Requires ZoneMTA with the WildDuck plugin
* **forwards** is the maximum number of forwarded emails in a 24h window. Requires ZoneMTA with the WildDuck plugin
* **tags** is an array of tags to be associated with that user. Tags can be used for filtering.
* **pubKey** is an optional PGP public key. Wild Duck uses OpnePGP.js so keys using EC might not pass validation.
* **pubKey** is an optional PGP public key. WildDuck uses OpnePGP.js so keys using EC might not pass validation.
* **encryptMessages** (boolean) indicates if messages stored should be encrypted using the PGP key
* **encryptForwarded** (boolean) indicates if forwarded messages stored be encrypted using the PGP key. Encryption applies after filter rules
* **sess** an optional string of user session to be stored in security log
@ -574,7 +574,7 @@ Log entries expire after 30 days.
## 2FA
Wild Duck supports TOTP and U2f based 2FA. If 2FA is enabled then users are requested to enter authentication token after successful login. Also, with 2FA
WildDuck supports TOTP and U2f based 2FA. If 2FA is enabled then users are requested to enter authentication token after successful login. Also, with 2FA
enabled, master password can not be used in IMAP, POP3 or SMTP. The user must create an [Application Specific Password](#application-specific-passwords) with a
correct scope for email clients using these protocols.
@ -1674,7 +1674,7 @@ Response for a successful operation:
```
HTTP/1.1 200 OK
Server: Wild Duck API
Server: WildDuck API
Content-Type: message/rfc822
Date: Fri, 21 Jul 2017 19:11:04 GMT
Connection: keep-alive
@ -1708,7 +1708,7 @@ Response for a successful operation:
```
HTTP/1.1 200 OK
Server: Wild Duck API
Server: WildDuck API
Content-Type: image/png
Date: Fri, 21 Jul 2017 18:39:05 GMT
Connection: keep-alive
@ -1910,7 +1910,7 @@ Response for a successful operation:
## Autoreplies
Wild Duck supports setting up autoreply messages that are sent to senders by LMTP process.
WildDuck supports setting up autoreply messages that are sent to senders by LMTP process.
### Setup Autoreply

View file

@ -1 +1 @@
define({ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs. Under construction, see old docs here: https://github.com/nodemailer/wildduck/blob/master/docs/api.md", "title": "WildDuck API", "url": "http://localhost:8080", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2018-01-02T11:47:29.962Z", "url": "http://apidocjs.com", "version": "0.17.6" } });
define({ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs. Under construction, see old docs here: https://github.com/nodemailer/wildduck/blob/master/docs/api.md", "title": "WildDuck API", "url": "http://localhost:8080", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2018-01-02T13:02:38.585Z", "url": "http://apidocjs.com", "version": "0.17.6" } });

View file

@ -1 +1 @@
{ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs. Under construction, see old docs here: https://github.com/nodemailer/wildduck/blob/master/docs/api.md", "title": "WildDuck API", "url": "http://localhost:8080", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2018-01-02T11:47:29.962Z", "url": "http://apidocjs.com", "version": "0.17.6" } }
{ "name": "wildduck", "version": "1.0.0", "description": "WildDuck API docs. Under construction, see old docs here: https://github.com/nodemailer/wildduck/blob/master/docs/api.md", "title": "WildDuck API", "url": "http://localhost:8080", "sampleUrl": false, "defaultVersion": "0.0.0", "apidoc": "0.3.0", "generator": { "name": "apidoc", "time": "2018-01-02T13:02:38.585Z", "url": "http://apidocjs.com", "version": "0.17.6" } }

View file

@ -1,6 +1,6 @@
# Default messages
Add here default email messages that should be inserted to new users account. To test it out, rename example.json.disabled to example.json, restart Wild Duck and create a new account. Your INBOX should include the message composed from the example.
Add here default email messages that should be inserted to new users account. To test it out, rename example.json.disabled to example.json, restart WildDuck and create a new account. Your INBOX should include the message composed from the example.
## Creating default messages

View file

@ -87,7 +87,7 @@ body {
<table width="100%" cellpadding="0" cellspacing="0" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
<tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
<td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
<strong>[FNAME],</strong> welcome to Wild Duck email service!
<strong>[FNAME],</strong> welcome to WildDuck email service!
</td>
</tr>
<tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
@ -106,7 +106,7 @@ body {
<tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
<td class="content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;" valign="top">
&mdash; the Wild Duck team
&mdash; the WildDuck team
</td>
</tr>
</table>
@ -117,7 +117,7 @@ body {
<table width="100%" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
<tr style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
<td class="aligncenter content-block" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; color: #999; text-align: center; margin: 0; padding: 0 0 20px;"
align="center" valign="top">Check out <a href="https://github.com/nodemailer/wildduck" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">Wild Duck</a> on
align="center" valign="top">Check out <a href="https://github.com/nodemailer/wildduck" style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">WildDuck</a> on
Github.</td>
</tr>
</table>

View file

@ -1,7 +1,7 @@
{
"flag": true,
"from": {
"name": "Wild Duck Support",
"name": "WildDuck Support",
"address": "info@[DOMAIN]"
},
"to": {

View file

@ -1,9 +1,9 @@
[FNAME], welcome to Wild Duck email service!
[FNAME], welcome to WildDuck email service!
If you are seeing this message then it means you have reached the inbox of your new email address [EMAIL]. Be aware though that the service is in a constant change, so this address might disappear during the next database schema update. Don't start using it as your main email address!
This message was generated and inserted to this mailbox from the /emails folder using the default template.
Your friends from the Wild Duck team
Your friends from the WildDuck team
Check out Wild Duck on Github: https://github.com/nodemailer/wildduck
Check out WildDuck on Github: https://github.com/nodemailer/wildduck

View file

@ -364,7 +364,7 @@ let createInterface = (ifaceOptions, callback) => {
ignoredHosts: config.imap.ignoredHosts,
id: {
name: config.imap.name || 'Wild Duck IMAP Server',
name: config.imap.name || 'WildDuck IMAP Server',
version: config.imap.version || packageData.version,
vendor: config.imap.vendor || 'Kreata'
},

View file

@ -16,7 +16,7 @@ const parseDate = require('../imap-core/lib/parse-date');
// index only the following headers for SEARCH
const INDEXED_HEADERS = ['to', 'cc', 'subject', 'from', 'sender', 'reply-to', 'message-id', 'thread-index'];
openpgp.config.commentstring = 'Plaintext message encrypted by Wild Duck Mail Server';
openpgp.config.commentstring = 'Plaintext message encrypted by WildDuck Mail Server';
class MessageHandler {
constructor(options) {

View file

@ -1089,7 +1089,7 @@ class UserHandler {
let otpauth_url = speakeasy.otpauthURL({
secret: base32.decode(secret),
label: userData.username,
issuer: data.issuer || 'Wild Duck'
issuer: data.issuer || 'WildDuck'
});
return QRCode.toDataURL(otpauth_url, (err, data_url) => {
@ -1149,7 +1149,7 @@ class UserHandler {
let otpauth_url = speakeasy.otpauthURL({
secret: secret.ascii,
label: userData.username,
issuer: data.issuer || 'Wild Duck'
issuer: data.issuer || 'WildDuck'
});
QRCode.toDataURL(otpauth_url, (err, data_url) => {

View file

@ -55,7 +55,7 @@ const serverOptions = {
name: config.lmtp.name || false,
// not required but nice-to-have
banner: config.lmtp.banner || 'Welcome to Wild Duck Mail Server',
banner: config.lmtp.banner || 'Welcome to WildDuck Mail Server',
disabledCommands: ['AUTH'].concat(config.lmtp.disableSTARTTLS ? 'STARTTLS' : []),

View file

@ -32,7 +32,7 @@ const serverOptions = {
ignoredHosts: config.pop3.ignoredHosts,
id: {
name: config.pop3.name || 'Wild Duck POP3 Server',
name: config.pop3.name || 'WildDuck POP3 Server',
version: config.pop3.version || packageData.version
},

View file

@ -2,7 +2,7 @@
<html>
<head>
<meta charset="utf-8" />
<title>Wild Duck API</title>
<title>WildDuck API</title>
<link rel="icon" type="image/png" sizes="32x32" href="/public/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/public/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/public/favicon-16x16.png">

View file

@ -1,6 +1,6 @@
# Wild Duck Installer
# WildDuck Installer
Here you can find an example install script to install Wild Duck with Haraka and ZoneMTA. The install script is self contained, you can upload to your server and start it as root. It fetches all required files from Github.
Here you can find an example install script to install WildDuck with Haraka and ZoneMTA. The install script is self contained, you can upload to your server and start it as root. It fetches all required files from Github.
The install script is tested on Ubuntu 16.04 and the server must be blank. Blank meaning that there should be no existing software installed (eg. Apache, MySQL or Postfix). If the server already has something installed, then remove the extra applications before running this script. This also means that you should not run the install script in a VPS that you already use for other stuff.
@ -8,10 +8,10 @@ The install script is tested on Ubuntu 16.04 and the server must be blank. Blank
This install script installs and configures the following components:
1. **Wild Duck Mail Server** for IMAP and POP3
2. **Haraka** with Wild Duck plugin for incoming email
3. **ZoneMTA** with Wild Duck plugin for outbound email
4. **Wild Duck Webmail** for creating accounts and viewing messages
1. **WildDuck Mail Server** for IMAP and POP3
2. **Haraka** with WildDuck plugin for incoming email
3. **ZoneMTA** with WildDuck plugin for outbound email
4. **WildDuck Webmail** for creating accounts and viewing messages
5. **Nginx** to serve the webmail component
6. **acme.sh** to manage Let's Encrypt certificates
7. **Rspamd** to check messages for spam. Messages detected as spam are routed to Junk Mail folder by default
@ -38,7 +38,7 @@ Make sure that mydomain.com points to current server as the install script tries
If the installation succeeds then the installer writes DNS configuration to domainname-nameserver.txt file. Set up the provided DNS entries from this file before sending and receiving email.
Next point your browser to https://mydomain.com/ and you should see the Wild Duck example webmail app where you can create an email account.
Next point your browser to https://mydomain.com/ and you should see the WildDuck example webmail app where you can create an email account.
## Config files

View file

@ -139,7 +139,7 @@ chown -R deploy:deploy /var/opt/wildduck.git
chown -R deploy:deploy /opt/wildduck
echo '[Unit]
Description=Wild Duck Mail Server
Description=WildDuck Mail Server
Conflicts=cyrus.service dovecot.service
After=mongod.service redis.service
@ -201,7 +201,7 @@ rspamd
tls
#dkim_verify
# Wild Duck plugin handles recipient checking and queueing
# WildDuck plugin handles recipient checking and queueing
wildduck" > config/plugins
echo "key=/etc/wildduck/certs/privkey.pem