diff --git a/README.md b/README.md index 09fe42d4..82b4447b 100644 --- a/README.md +++ b/README.md @@ -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 `` and `` 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. diff --git a/api.js b/api.js index fef72c35..daa4877b 100644 --- a/api.js +++ b/api.js @@ -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) => { diff --git a/config/api.toml b/config/api.toml index 8342b49b..ec4b7b1e 100644 --- a/config/api.toml +++ b/config/api.toml @@ -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 diff --git a/config/dbs.toml b/config/dbs.toml index b4a9bf48..f57c3b37 100644 --- a/config/dbs.toml +++ b/config/dbs.toml @@ -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 diff --git a/config/default.toml b/config/default.toml index 61796d9d..59f3ad03 100644 --- a/config/default.toml +++ b/config/default.toml @@ -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] diff --git a/config/imap.toml b/config/imap.toml index 2195e781..b419e650 100644 --- a/config/imap.toml +++ b/config/imap.toml @@ -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]] diff --git a/config/lmtp.toml b/config/lmtp.toml index 0a759421..dff1814f 100644 --- a/config/lmtp.toml +++ b/config/lmtp.toml @@ -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 diff --git a/config/pop3.toml b/config/pop3.toml index c4cfa3a9..49c61255 100644 --- a/config/pop3.toml +++ b/config/pop3.toml @@ -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] diff --git a/docs/api.md b/docs/api.md index 03031f9b..1456596d 100644 --- a/docs/api.md +++ b/docs/api.md @@ -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 diff --git a/docs/api_project.js b/docs/api_project.js index 542defad..63cd083b 100644 --- a/docs/api_project.js +++ b/docs/api_project.js @@ -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" } }); diff --git a/docs/api_project.json b/docs/api_project.json index b84e47cd..71d574b0 100644 --- a/docs/api_project.json +++ b/docs/api_project.json @@ -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" } } diff --git a/emails/README.md b/emails/README.md index 012805b8..1a5fcb6a 100644 --- a/emails/README.md +++ b/emails/README.md @@ -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 diff --git a/emails/example.html b/emails/example.html index 782d7886..e5c4d1c4 100644 --- a/emails/example.html +++ b/emails/example.html @@ -87,7 +87,7 @@ body { @@ -106,7 +106,7 @@ body {
- [FNAME], welcome to Wild Duck email service! + [FNAME], welcome to WildDuck email service!
- — the Wild Duck team + — the WildDuck team
@@ -117,7 +117,7 @@ body {
Check out Wild Duck on + align="center" valign="top">Check out WildDuck on Github.
diff --git a/emails/example.json.disabled b/emails/example.json.disabled index 4601a288..6dce417e 100644 --- a/emails/example.json.disabled +++ b/emails/example.json.disabled @@ -1,7 +1,7 @@ { "flag": true, "from": { - "name": "Wild Duck Support", + "name": "WildDuck Support", "address": "info@[DOMAIN]" }, "to": { diff --git a/emails/example.txt b/emails/example.txt index fc9eea47..2958b778 100644 --- a/emails/example.txt +++ b/emails/example.txt @@ -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 diff --git a/imap.js b/imap.js index f9fa6c8a..c5ab5f18 100644 --- a/imap.js +++ b/imap.js @@ -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' }, diff --git a/lib/message-handler.js b/lib/message-handler.js index ae38c798..6ac260b4 100644 --- a/lib/message-handler.js +++ b/lib/message-handler.js @@ -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) { diff --git a/lib/user-handler.js b/lib/user-handler.js index a1535873..bc1bcb96 100644 --- a/lib/user-handler.js +++ b/lib/user-handler.js @@ -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) => { diff --git a/lmtp.js b/lmtp.js index 38c1cd47..449b0789 100644 --- a/lmtp.js +++ b/lmtp.js @@ -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' : []), diff --git a/pop3.js b/pop3.js index 57944abb..2bf82c12 100644 --- a/pop3.js +++ b/pop3.js @@ -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 }, diff --git a/public/index.html b/public/index.html index ecf31bbf..5cbc9308 100644 --- a/public/index.html +++ b/public/index.html @@ -2,7 +2,7 @@ - Wild Duck API + WildDuck API diff --git a/setup/README.md b/setup/README.md index 31563c72..08a83a44 100644 --- a/setup/README.md +++ b/setup/README.md @@ -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 diff --git a/setup/install.sh b/setup/install.sh index c23efd1e..ad0c075a 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -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