1057 Commits
1.4 ... master

Author SHA1 Message Date
mergify[bot]
13c4acffa1 Merge pull request #775 from usrpro/workaround-lucene
Option to disable full text search (lucene)
2018-12-25 21:26:39 +00:00
Tim Möhlmann
3a5b763018 Option to disable full text search (lucene)
This is a workaround for the bug in issue #751
2018-12-25 13:52:12 +02:00
mergify[bot]
3fa3fd5f69 Merge pull request #767 from hoellen/fix-localpart-chars
allow all characters for username in dovecot
2018-12-21 14:12:06 +00:00
mergify-bot
983c388150 Merge branch 'master' into 'fix-localpart-chars' 2018-12-21 14:48:36 +01:00
Tim Möhlmann
27f13c1ba3 Merge pull request #768 from Mailu/fix-admin-volumes
Fix admin volumes
2018-12-21 15:27:33 +02:00
mergify-bot
6cfb74e96c Merge branch 'master' into 'fix-localpart-chars' 2018-12-21 14:25:19 +01:00
Tim Möhlmann
9249b4a2d4 Merge pull request #765 from usrpro/feat-setup-update
Added welcome email to setup env
2018-12-20 18:06:10 +02:00
Tim Möhlmann
ad1ca42bde Remove unused docker socket mount for Admin 2018-12-20 17:48:29 +02:00
Tim Möhlmann
af086bbdbe Include DKIM in VOLUME 2018-12-20 17:47:15 +02:00
Tim Möhlmann
d19abc60bc Merge pull request #766 from usrpro/fix-webmail-root
Fix webmail on root
2018-12-20 17:20:20 +02:00
hoellen
c041a9d45c allow all characters for username in dovecot 2018-12-19 16:19:37 +01:00
Tim Möhlmann
24828615cf Webmail on root, fixes #757 2018-12-19 16:20:24 +02:00
Ionut Filip
5e2552bcd5 Removed if block 2018-12-19 12:05:50 +02:00
Tim Möhlmann
be7dc1e6bd Merge pull request #753 from usrpro/deploy-docks
Add deploy settings for server
2018-12-17 00:13:35 +02:00
Tim Möhlmann
533a6f8faa Add deploy settings for server 2018-12-17 00:12:21 +02:00
Tim Möhlmann
c0645eadef Remove healthcheck
Did not work correctly and prevents Traefik from serving the page.
2018-12-17 00:04:55 +02:00
Tim Möhlmann
d96debb2a6 Merge pull request #752 from usrpro/setup-deploy
Setup deploy
2018-12-16 23:29:59 +02:00
Tim Möhlmann
e994fefb2d Remove the test branch 2018-12-16 23:28:15 +02:00
kaiyou
66844fbca8 Merge pull request #750 from usrpro/fix-mailu_version_docs
Use MAILU_VERSION from Travis for Docs build
2018-12-16 22:27:52 +01:00
Tim Möhlmann
1df3b46454 Use ADDRESS instead of HOSTNAME 2018-12-16 23:16:53 +02:00
Tim Möhlmann
8ef0493f53 Define external web network for Traefik connections 2018-12-16 23:16:26 +02:00
Tim Möhlmann
db9a3787b1 Disable healthcheck, doen't work in versioned env 2018-12-16 23:14:36 +02:00
Tim Möhlmann
3655c7c902 Merge remote-tracking branch 'origin/fix-setup-bugs' into setup-deploy 2018-12-16 16:27:11 +02:00
Tim Möhlmann
9c284c4004 Prepare setup for multi-ver deployment on docs server 2018-12-16 16:26:45 +02:00
Tim Möhlmann
a5d6acfb96 Use MAILU_VERSION from Travis for Docs build 2018-12-15 21:40:00 +02:00
Tim Möhlmann
3c4ee1b31e Merge pull request #743 from kaiyou/master
Fixes #738 regarding application context
2018-12-14 11:09:27 +02:00
ofthesun9
97b3a85090 Merge pull request #737 from hoellen/fix-alias-match-behaviour
fix alias match behaviour
2018-12-13 20:34:09 +01:00
mergify-bot
09a50b6cfc Merge branch 'master' into 'master' 2018-12-13 19:14:20 +01:00
mergify[bot]
5795d8be16 Merge pull request #744 from kaiyou/fix-remove-debug
Remove some forgotten debugging, fix #720
2018-12-13 16:40:31 +00:00
kaiyou
4060ac2223 Remove some forgotten debugging 2018-12-13 15:19:34 +01:00
kaiyou
087841d5b7 Fix the way we handle the application context
The init script was pushing an application context, which maked
flask.g global and persisted across requests. This was evaluated
to have a minimal security impact.

This explains/fixes #738: flask_wtf caches the csrf token in the
application context to have a single token per request, and only
sets the session attribute after the first generation.
2018-12-13 14:23:17 +01:00
kaiyou
b5f51b0e2e Update python dependencies 2018-12-13 14:10:43 +01:00
mergify[bot]
0f4ba39141 Merge pull request #741 from usrpro/fix-networks-bug
Fixed networks indentation
2018-12-12 08:45:27 +00:00
Ionut Filip
514d179db1 Fixed networks indentation 2018-12-11 17:40:36 +02:00
Ionut Filip
bb0fd896b3 Fix some bugs in setup for stack flavor
- Unbound and webmail images were hardcoded
- Removed unnecesary environment keyword
2018-12-11 17:31:21 +02:00
hoellen
8fe9e695f3 prefer non-wildcard aliases over wildcard aliases 2018-12-10 08:40:10 +01:00
Tim Möhlmann
c7dcfee882 Merge pull request #713 from pgeorgi/extend-nginx
nginx: Allow extending config with overrides
2018-12-09 21:44:24 +02:00
hoellen
79768c09f6 fix alias matching behaviour 2018-12-09 19:49:23 +01:00
mergify[bot]
74693ee47c Merge pull request #736 from usrpro/clamav-health-start
Increase health start period for clamav's DB download
2018-12-09 18:17:42 +00:00
Tim Möhlmann
c1839b1ec1 Increase health start period for clamav's DB download 2018-12-08 23:47:37 +02:00
Tim Möhlmann
6ca8ed437d Merge pull request #732 from Nebukadneza/add_front_certificate_reload
Add certificate watcher for external certs to reload nginx
2018-12-08 20:11:09 +02:00
Tim Möhlmann
94e42c9b52 Merge pull request #727 from usrpro/feat-subnet2
Move the Mailu Docker network to a fixed subnet.
2018-12-08 12:40:45 +02:00
Tim Möhlmann
33c0a99ffc Merge pull request #678 from hacor/k8s-cni-fix
Added kubernetes CNI support for Mailu
2018-12-08 12:29:25 +02:00
Tim Möhlmann
bb85079d92 Merge pull request #695 from ofthesun9/master-patch1
POD_ADDRESS_RANGE need to be defined for admin service (dovecot authentific…
2018-12-08 12:25:35 +02:00
mergify-bot
491f6b24bb Merge branch 'master' into 'feat-subnet2' 2018-12-08 00:46:17 +01:00
Dario Ernst
1aa97c9914 Add certificate watcher for external certs to reload nginx
In case of TLS_FLAVOR=[mail,cert], the user supplies their own certificates.
However, since nginx is not aware of changes to these files, it cannot
reload itself e.g. when the certs get renewed.

To solve this, let’s add a small daemon in the place of
`letsencrypt.py`, which uses a flexible file-watching framework and
reloads nginx in the case the certificates change ….
2018-12-07 16:20:42 +00:00
Tim Möhlmann
c00910ca4b Merge remote-tracking branch 'upstream/master' into extend-nginx 2018-12-07 16:48:50 +02:00
Tim Möhlmann
97d338e68a Rectify 'endif' placement 2018-12-07 16:44:42 +02:00
Tim Möhlmann
7f46876b0c Merge pull request #731 from usrpro/attachment-size
Dynamic attachment size limit
2018-12-07 16:38:34 +02:00
Tim Möhlmann
425cdd5e77 Fix syntax errors 2018-12-07 16:29:41 +02:00
Tim Möhlmann
20f1faf6d0 Send 404 when nothing server at '/'
Prevents Nginx welcome screen
2018-12-07 16:10:52 +02:00
Tim Möhlmann
c25ba75d68 Include WEBROOT_REDIRECT in setup templates 2018-12-07 15:29:33 +02:00
Tim Möhlmann
9208d7262f Correct variable naming in .env 2018-12-07 15:22:01 +02:00
Tim Möhlmann
2de4995fec Don't redirect when webmail is served on '/' 2018-12-07 15:17:04 +02:00
Tim Möhlmann
28daa22842 Merge pull request #726 from usrpro/update-mergify
review/need2 in mergify
2018-12-07 13:48:15 +02:00
Tim Möhlmann
8e5ccf2754 Don't merge when WIP or Blocked 2018-12-07 13:47:22 +02:00
Tim Möhlmann
626559f99b Mergify dismiss reviews 2018-12-07 13:43:53 +02:00
Ionut Filip
94edb48f08 Dynamic attachment size 2018-12-07 13:37:40 +02:00
Tim Möhlmann
a2a9512afa Enable mergify strict mode
In the past we had strict mode in branch protection. This didn't really work as it broke mergify. Now mergify supports this options and takes care of the merging automatically. Let's see how it goes ;)

Reason is the recent build failures we had on master, during a busy merge day. This could have been prevented if sequential PR's where re-merging with master.

More info: https://doc.mergify.io/strict-workflow.html
2018-12-07 11:53:43 +02:00
Tim Möhlmann
f0906073e3 Merge remote-tracking branch 'upstream/master' into feat-subnet2 2018-12-07 11:08:28 +02:00
mergify[bot]
a634c7b72d Merge pull request #725 from usrpro/fix-outlook2019-smtp
Add login method to smtp_auth under ssl
2018-12-06 16:02:35 +00:00
Tim Möhlmann
38eb266c25 Merge pull request #728 from usrpro/fix-autobuild
Fix autobuild
2018-12-06 17:41:43 +02:00
Tim Möhlmann
c0972face6 Correct subnetting functionality for the tests and setup 2018-12-06 16:44:12 +02:00
Ionut Filip
35be1710a6 Changed user creation command 2018-12-06 12:36:56 +02:00
Ionut Filip
8acf9451fa Changed admin and user creation command 2018-12-06 12:34:56 +02:00
Tim Möhlmann
8172f3eab8 Move the Mailu Docker network to a fixed subnet.
This will make network configuration and host based authentication
more robust, across different deployment platforms.
The options `RELAYNETS` and`POD_ADDRESS_RANGE` are kept for compatibility.
However, their usage have become optional.
2018-12-06 12:08:22 +02:00
kaiyou
3d98124bcd Merge pull request #670 from kaiyou/refactor-config
Refactor the admin architecture and configuration management
2018-12-06 10:56:42 +01:00
Tim Möhlmann
fee52e87ed Don't allow for 1 review when review/need2 label is set 2018-12-06 11:34:28 +02:00
kaiyou
b6aaf57be1 Merge branch 'refactor-config' of github.com:kaiyou/mailu into refactor-config 2018-12-06 10:33:21 +01:00
kaiyou
d0f07984b0 Merge remote-tracking branch 'upstream/master' into refactor-config 2018-12-06 10:23:43 +01:00
kaiyou
07b1e8d765 Merge pull request #722 from usrpro/update-mergify
Update .mergify.yml
2018-12-06 10:19:07 +01:00
Tim Möhlmann
9dd447e23b Add login method to smtp_auth under ssl
Fixes #704
2018-12-06 01:00:16 +02:00
Patrick Georgi
eac4d553a9 nginx: Allow extending config with overrides
To facilitate this, the default redirect at / can be disabled, even if
the default remains at redirecting to the webmailer.

The extensions are within the host scope and are read from
$ROOT/overrides/nginx/*.conf.
2018-12-05 23:54:52 +01:00
mergify[bot]
c25c646909 Merge pull request #702 from dani909/feat-image-prefix
Add docker image prefix
2018-12-05 19:24:07 +00:00
hoellen
02367d1447 Merge branch 'master' into feat-image-prefix 2018-12-05 19:48:51 +01:00
mergify[bot]
2d4bac03ad Merge pull request #723 from usrpro/clean-healthcheck-logs
Admin: Prevent redirects during health checking
2018-12-05 18:09:14 +00:00
mergify[bot]
a382f74680 Merge pull request #705 from usrpro/fix-recaptcha
Fix recaptcha
2018-12-05 18:05:22 +00:00
mergify[bot]
ca86090011 Merge pull request #682 from usrpro/feat-setup
Further improve setup and neccesary re-write of the test suite
2018-12-05 17:57:41 +00:00
mergify[bot]
37027cfce7 Merge pull request #633 from kaiyou/fix-sender-checks
Improve sender checks
2018-12-05 16:03:24 +00:00
Tim Möhlmann
d18cf7cb25 Prevent redirects during health checking 2018-12-05 17:43:42 +02:00
Tim Möhlmann
d84254ccd8 Update user creation to python3 2018-12-05 16:23:16 +02:00
mergify[bot]
161b27a204 Merge pull request #719 from davidrothera/master
Query alternative table for domain matches
2018-12-05 12:37:13 +00:00
Tim Möhlmann
b564b879aa Update .mergify.yml
- New syntax for mergify engine v. 2
- Relax review rules for trusted users
2018-12-05 12:38:06 +02:00
Tim Möhlmann
c9df311a0d Set forward_destination to an empty list
The value of `None` resulted in an error, since a list was expected.
2018-12-04 16:22:18 +02:00
Tim Möhlmann
eff6c34632 Catch asterisk before resolve_domain
Asterisk results in IDNA error and a 500 return code.
2018-12-04 15:40:07 +02:00
David Rothera
88c174fb7a Query alternative table for domain matches
At present postfix checks this view for matches in the domain table and is used to accept/deny messages sent into it however it never checks for matches in the alternative table.

Fixes #718
2018-12-02 11:21:42 +00:00
Tim Möhlmann
2b6f5ea3d0 Update setup's own docker-compose.yml file 2018-12-01 02:37:34 +02:00
Tim Möhlmann
eccadeca16 Merge pull request #8 from usrpro/feat-email-test
Feat email test
2018-11-09 12:58:32 +02:00
Ionut Filip
fed7146873 Captcha check on signup form 2018-11-09 12:30:49 +02:00
Tim Möhlmann
4783e61693 Fix password context
Fixes the following error:
```
admin_1      | [2018-11-09 09:44:10,533] ERROR in app: Exception on /internal/auth/email [GET]
admin_1      | Traceback (most recent call last):
admin_1      |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app
admin_1      |     response = self.full_dispatch_request()
admin_1      |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request
admin_1      |     rv = self.handle_user_exception(e)
admin_1      |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception
admin_1      |     reraise(exc_type, exc_value, tb)
admin_1      |   File "/usr/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
admin_1      |     raise value
admin_1      |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request
admin_1      |     rv = self.dispatch_request()
admin_1      |   File "/usr/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request
admin_1      |     return self.view_functions[rule.endpoint](**req.view_args)
admin_1      |   File "/usr/lib/python3.6/site-packages/flask_limiter/extension.py", line 544, in __inner
admin_1      |     return obj(*a, **k)
admin_1      |   File "/app/mailu/internal/views/auth.py", line 18, in nginx_authentication
admin_1      |     headers = nginx.handle_authentication(flask.request.headers)
admin_1      |   File "/app/mailu/internal/nginx.py", line 48, in handle_authentication
admin_1      |     if user.check_password(password):
admin_1      |   File "/app/mailu/models.py", line 333, in check_password
admin_1      |     context = User.pw_context
admin_1      | AttributeError: type object 'User' has no attribute 'pw_context'
```
2018-11-09 11:45:08 +02:00
kaiyou
72e1b444ca Merge alembic migrations 2018-11-08 21:55:39 +01:00
kaiyou
5b769e23da Merge branch 'master' into refactor-config 2018-11-08 21:43:05 +01:00
kaiyou
30716b8bdf Update docs with the new flask command 2018-11-08 21:35:41 +01:00
kaiyou
02995f0a15 Add a mailu command line to flask 2018-11-08 21:29:30 +01:00
kaiyou
f9e30bd87c Update the dockerfile and upgrade dependencies 2018-11-08 21:29:11 +01:00
kaiyou
4a7eb1eb6c Explicitely declare flask migrate 2018-11-08 20:32:23 +01:00
kaiyou
2a8808bdec Add the configuration table migration 2018-11-08 20:32:06 +01:00
kaiyou
f57d4859f3 Provide an in-context wrapper for getting users 2018-11-08 20:30:41 +01:00
kaiyou
f6013aa29f Fix an old migration that was reading configuration before migrating 2018-11-08 20:30:20 +01:00
kaiyou
206cce0b47 Finish the configuration bits 2018-11-08 20:29:52 +01:00
mergify[bot]
5c24390114 Merge pull request #697 from HorayNarea/fix-missing-dkim
allow DKIM-signing if From-Header and Auth-User mismatch - fix #462
2018-11-08 17:24:51 +00:00
Ionut Filip
2a76451a98 Moved scripts to an external js file 2018-11-07 16:41:11 +02:00
Ionut Filip
1bbf3f235d Using a new class when captcha is enabled 2018-11-07 09:58:49 +02:00
mergify[bot]
12689965bd Merge pull request #699 from usrpro/fix-admin-bug
Fixed admin_1 errors in the logs
2018-11-06 18:10:52 +00:00
hoellen
680ad4b67a Catching only ValueError
Co-Authored-By: ionutfilip <ionut.philip@gmail.com>
2018-11-05 19:36:28 +02:00
Ionut Filip
76d9fc3865 Rewrite of email test script and added eicar virus file 2018-11-05 17:28:40 +02:00
Ionut Filip
4032e7128d Calling email test as hook with msg as arg 2018-11-05 12:34:52 +02:00
Ionut Filip
fca3dc4e70 Flushing stream before calling subprocess 2018-11-03 19:34:47 +02:00
Ionut Filip
9a7fc1416a Replaces os.popen with subprocess.check_output 2018-11-03 19:15:05 +02:00
Daniel Huber
b3ac4465f2 Add docker image prefix 2018-11-03 14:54:17 +01:00
mergify[bot]
da96ef183b Merge pull request #700 from usrpro/feat-review-docs
Dev. docs.: Add git workflows for branching, PR and reviewing
2018-11-02 21:01:07 +00:00
mergify[bot]
e08f3e81d0 Merge pull request #680 from usrpro/feat-startup
Standarize images
2018-11-02 17:36:28 +00:00
Ionut Filip
982e586e49 Replaced os.system calls with native python calls 2018-11-02 16:25:55 +02:00
Ionut Filip
0d6a203a9d Use sudo for running sh commands 2018-11-02 15:32:36 +02:00
Ionut Filip
fd8ed3dfa6 Moved certs copy in travis 2018-11-02 15:17:59 +02:00
Tim Möhlmann
2576379df5 Dev. docs.: Add git workflows for branching, PR and reviewing 2018-11-02 15:10:18 +02:00
Ionut Filip
88f5e6e4cf Moved users creation in core 2018-11-02 15:05:16 +02:00
Ionut Filip
c3bc7988c9 Implemented email test for travis 2018-11-02 14:27:46 +02:00
Ionut Filip
6dcc33e390 Fixed admin_1 errors in the logs
Fixed errors when trying to log in with an account without domain.
This closes #585
2018-11-02 12:14:23 +02:00
Ionut Filip
4e9dc0c3c9 Implemented sending/reading email(local tests) 2018-11-01 11:40:54 +02:00
Thomas Sänger
13bc6261e4 allow DKIM-signing if From-Header and Auth-User mismatch 2018-10-31 20:30:16 +01:00
Tim Möhlmann
ca4804653d Merge branch 'master' into feat-setup 2018-10-31 20:11:52 +01:00
mergify[bot]
09abaff9b6 Merge pull request #692 from HorayNarea/feat-rspamd-history
store rspamd history in redis - fix #561
2018-10-31 17:57:01 +00:00
mergify[bot]
7a116c0364 Merge pull request #696 from usrpro/fix-imap-no-webmail
Fix imap login when no webmail selected
2018-10-31 17:56:48 +00:00
Tim Möhlmann
42e2dbe35d Standarize image by using shared / similair layers 2018-10-31 19:17:23 +02:00
Tim Möhlmann
003c36c98a Fix imap login when no webmail selected 2018-10-31 17:48:34 +02:00
Tim Möhlmann
5fa2aac569 Fix imap login when no webmail selected 2018-10-31 17:47:05 +02:00
ofthesun9
5067b5c59a POD_ADDRESS need to be defined for admin service (dovecot authentification) fixes #694
- updated the docs
- corrected a typo
2018-10-31 14:27:37 +00:00
Tim Möhlmann
903bb70c5b Merge remote-tracking branch 'upstream/master' into standarize-images 2018-10-31 16:22:21 +02:00
Thomas Sänger
9ba086fcff store rspamd history in redis 2018-10-30 23:28:25 +01:00
Tim Möhlmann
9004c9b8b5 Merge pull request #677 from usrpro/feat-faq
Implement a FAQ
2018-10-30 21:04:34 +01:00
mergify[bot]
e9217b8389 Merge pull request #681 from usrpro/feat-unbound-dns
Unbound DNS as optional service
2018-10-30 17:32:13 +00:00
mergify[bot]
1a5e106bb8 Merge pull request #691 from Mailu/HorayNarea-patch-1
Update roundcube
2018-10-30 07:47:49 +00:00
Thomas Sänger
7125077dec Update roundcube 2018-10-29 01:41:04 +01:00
mergify[bot]
7408e625f6 Merge pull request #690 from dani909/fix-typo
Fix Typo in Kubernetes Docs
2018-10-28 18:11:32 +00:00
Daniel Huber
2237e641b0 Fix Typo in K8s Docs 2018-10-28 12:26:14 +01:00
Ionut Filip
ffdef18bd6 Rendering admin/webmail path based on checkbox value 2018-10-26 16:50:59 +03:00
Tim Möhlmann
a46d0fe581 Fix path for hooks 2018-10-25 18:45:24 +03:00
Tim Möhlmann
35e0fa1b9d Drop IPv6 for travis 2018-10-25 18:23:42 +03:00
Tim Möhlmann
a1ac7fc19c Upgrade docker-compose inside travis (fix build errors) 2018-10-25 18:12:07 +03:00
mergify[bot]
da81f67254 Merge pull request #688 from hoellen/doc-fix-typo
fix typo in cli doc
2018-10-25 14:53:05 +00:00
mergify[bot]
27cf2c33a6 Merge pull request #684 from romracer/fix-683
Fix typo (duplicate self).  Fixes #683
2018-10-25 14:48:16 +00:00
Tim Möhlmann
1e3392e417 Antispam not an optional service, postfix fails without it 2018-10-25 17:37:22 +03:00
Tim Möhlmann
dde7ccca97 Created test cases from latest setup revision 2018-10-25 17:35:53 +03:00
Tim Möhlmann
72e931f4b4 Modify setup templates to allow for DOCKER_ORG and VERSION override. (Needed for Travis) 2018-10-25 16:35:08 +03:00
Tim Möhlmann
928fbb372d Merge branch 'feat-test-suite' into feat-setup 2018-10-25 15:35:48 +03:00
Ionut Filip
3b1fdc6166 Migrate test script from shell to python
- test.py needs to be called with 2 arguments : test_name and timeout
  - it will cd to test_name dir and use the test_name.yml from there
  - it will sleep for an amount of time equals to timeout in minutes
- it will perform health checks for containers. If healtcheck isn't enabled will check for running state
- it will run hooks inside the test_name dir ( .py and .sh) if there are any
- printing logs in any case
2018-10-25 15:27:09 +03:00
hoellen
fd3a944850 fix typo in doc 2018-10-25 13:04:40 +02:00
Tim Möhlmann
55297424cd Merge remote-tracking branch 'upstream/master' into feat-setup 2018-10-24 14:45:21 +03:00
Tim Möhlmann
b8783b670a Take out DNS entry for webmail 2018-10-24 12:18:03 +03:00
Tim Möhlmann
238d4e7f20 Provide test cases created with the new setup utility 2018-10-24 12:02:28 +03:00
Scott
56fb74c502 Fix typo (duplicate self). Fixes #683 2018-10-23 10:47:31 -05:00
Ionut Filip
e5268de0c7 Revert default value for subnet 2018-10-23 17:55:44 +03:00
Ionut Filip
120c29eff6 Added unbound for stack flavor 2018-10-23 17:46:06 +03:00
Ionut Filip
ae8f928fc0 Added project name on docker commands 2018-10-23 17:07:05 +03:00
Ionut Filip
393bf566da Merge branch 'feat-unbound-dns' of github.com:usrpro/Mailu into feat-unbound-dns 2018-10-23 16:40:36 +03:00
Ionut Filip
6c12e2fffb Fixed subnet variable in unbound 2018-10-23 16:39:22 +03:00
Tim Möhlmann
12d8872a09 Fix unbound build path 2018-10-23 16:09:59 +03:00
Ionut Filip
da37555a3c Fixed naming error 2018-10-23 15:46:53 +03:00
Ionut Filip
7c07efc216 Added unbound to setup
- Added checkbox for unbound resolver
- Added subnet variable
- Added dns variable which is generating the ip address based on subnet
2018-10-23 15:44:30 +03:00
Tim Möhlmann
bcfce27ee2 Standarize unbound, prepare for setup inclusion
- Use jinja template for configuration file (start.py)
- Limit access to the Mailu subnet
- Implement health checks
2018-10-23 15:07:49 +03:00
hoellen
9412c8e1e9 Correct spelling error
Co-Authored-By: muhlemmer <muhlemmer@gmail.com>
2018-10-23 13:52:43 +03:00
Ionut Filip
8a44a44688 Merge branch 'master' into feat-startup 2018-10-23 12:51:32 +03:00
Tim Möhlmann
40d8e65762 Revert docker-compose to latest upstream version 2018-10-23 12:22:36 +03:00
Tim Möhlmann
5b7b29ee3f Merge remote-tracking branch 'upstream/master' into feat-unbound-dns 2018-10-23 12:16:36 +03:00
Ionut Filip
1187cac5e1 Finished up switching from .sh to .py 2018-10-23 11:58:36 +03:00
Tim Möhlmann
ed81c076f2 Take out "models" path, as we are already in it 2018-10-23 11:53:52 +03:00
Tim Möhlmann
aed80a74fa Rectify decleration of domain_name 2018-10-23 11:52:15 +03:00
Hans Cornelis
99540cd90b - Added kubernetes CNI support for Mailu
Signed-off-by: Hans Cornelis <hacornelis@gmail.com>
2018-10-23 10:47:26 +02:00
Tim Möhlmann
2d382f2d67 Merge branch 'master' into fix-sender-checks 2018-10-23 10:58:29 +03:00
Tim Möhlmann
2124df36ec Merge pull request #663 from HorayNarea/feat-healthchecks
implement healthchecks - resolves #631
2018-10-22 21:07:03 +03:00
Thomas Sänger
76e95bd585 Fix typo
Co-Authored-By: muhlemmer <muhlemmer@gmail.com>
2018-10-22 21:05:55 +03:00
Ionut Filip
0e5606d493 Changed start.sh to start.py 2018-10-22 18:01:59 +03:00
Ionut Filip
eb7dfb5771 Cleaning up start.py 2018-10-22 17:02:43 +03:00
Tim Möhlmann
7c1118df7d Extending the FAQ 2018-10-22 16:14:54 +03:00
Tim Möhlmann
3552c59ff3 Insert ref link for FAQ, shortened title for display purposes 2018-10-22 16:11:45 +03:00
Ionut Filip
3c9cae5d06 Added replicas variables for core containers
- Added back restart: always on compose flavor
- Moved Log driver from .env to docker-compose.yml
2018-10-22 15:13:18 +03:00
Ionut Filip
6a9e5c1921 Create/generate file template 2018-10-22 12:53:25 +03:00
Tim Möhlmann
b54a51e3ba Merge branch 'master' into feat-faq 2018-10-22 12:30:23 +03:00
Ionut Filip
9881dd2074 Documentation for adding more steps/flavors 2018-10-22 12:13:22 +03:00
Thomas Sänger
603b6e7390 Merge pull request #2 from usrpro/fix-nginx-healthcheck
Fix nginx healthcheck
2018-10-21 22:44:44 +02:00
Tim Möhlmann
81b24f61e8 Merge branch 'master' into feat-healthchecks 2018-10-21 20:58:59 +03:00
Tim Möhlmann
a2fea36c79 Increase HEALTHCHECK start time for services that need to wait for host resolving during startup.
In Docker Swarm mode the services listed below can get stuck in their start script, while they
are waiting for other services become available. Now, with HEALTHCHECK enabled, docker does not resolve
names of services that not pass HEALTHCHECK yet. Meaning that if one of the depenend services is not yet
available, it will create a chain of failing services.

The services below retry to resolve 100 time, with an average of 3.5 seconds. Hence, the --start-time
flag is now set at 350 seconds.
- dovecot (imap)
- postfix (smtp)
- rspamd (antispam)
2018-10-21 20:49:01 +03:00
Tim Möhlmann
c3e89967fb Fix front health checking
- Specified seperated /health path in order to allow for healthcheck even if webmail and admin are not seletectd. This also allows healthchecking fom external services like DNS load balancers;
- Make curl not to fail on TLS because localhost is not included in the certificates.
2018-10-21 20:45:41 +03:00
mergify[bot]
f2c4e52fee Merge pull request #664 from kaiyou/feat-docs-versions
Implement a multi-version documentation
2018-10-21 14:22:13 +00:00
mergify[bot]
d167c8ca7c Merge pull request #668 from usrpro/feat-setup
Feat setup
2018-10-21 13:04:46 +00:00
mergify[bot]
90b8c3cc1f Merge pull request #665 from kaiyou/feat-reply-startdate
Implement a start date filter for autoreply, fixes #362
2018-10-20 23:18:06 +00:00
mergify[bot]
bce1487338 Merge pull request #576 from hacor/master
Kubernetes fixed for production
2018-10-20 22:30:38 +00:00
mergify[bot]
8112d31ce9 Merge pull request #674 from paulprogrammer/feat-nginx-http2
enable http2, because it's that easy
2018-10-20 09:04:31 +00:00
kaiyou
eaaf0125d1 Merge pull request #1 from usrpro/feat-docs-versions
Documentation update on local docs container
2018-10-20 10:20:20 +02:00
kaiyou
1fcaef7c7e Merge branch 'master' into fix-sender-checks 2018-10-20 10:18:36 +02:00
Paul Williams
78bd5aea1c enable http2, because it's that easy 2018-10-19 22:46:36 -06:00
hoellen
72d4fa2bc9 remove empty line from merge conflict 2018-10-19 22:13:38 +02:00
hoellen
857ad50509 Merge branch 'master' into feat-reply-startdate 2018-10-19 22:06:56 +02:00
mergify[bot]
4a5c0a6d21 Merge pull request #667 from kaiyou/fix-password-performance
Improve password checking performance
2018-10-19 18:56:26 +00:00
mergify[bot]
80658c30da Merge pull request #669 from hoellen/fix-webmail-root
Fix nginx conf if webmail is on root path
2018-10-19 15:18:40 +00:00
Ionut Filip
c5be360a48 Updated setup page for stack flavor 2018-10-19 17:29:35 +03:00
Tim Möhlmann
771e0ee6a2 Remove old crypt settings from .env
As per conversation in PR
2018-10-19 16:29:47 +03:00
Ionut Filip
ebaba8fb41 Moved variables from docker-compose.yml back to env file 2018-10-19 15:27:18 +03:00
Hans Cornelis
f10416e85a Merged with new PRs 2018-10-19 13:40:17 +02:00
Hans Cornelis
6fb0b93240 - Removed RSPAMD Password feature
- Updated roles on the Front DS
- Reverted the Auth limits

Signed-off-by: Hans Cornelis <hacornelis@gmail.com>
2018-10-19 13:39:32 +02:00
Ionut Filip
9c56e4c1b6 Fixed misstyped condition 2018-10-19 14:09:58 +03:00
Tim Möhlmann
4ccefd6d5e Documentation update on local docs container 2018-10-19 13:43:09 +03:00
Ionut Filip
02c802159a Updated env file with the latest version 2018-10-19 12:53:26 +03:00
mergify[bot]
118ea0f3fb Merge pull request #604 from ofthesun9/feature-swarm
Enabling swarm deployment on master branch
2018-10-19 09:18:34 +00:00
Tim Möhlmann
84c6b12d06 Updated labels in config page 2018-10-19 11:57:14 +03:00
Ionut Filip
08987dfa22 Minor changes 2018-10-19 11:45:55 +03:00
mergify[bot]
727970514d Merge pull request #527 from ofthesun9/feat-fuzzyhashes
Trying to enable fuzzy hashes for rspamd
2018-10-18 21:59:08 +00:00
kaiyou
672fca3347 Merge pull request #666 from kaiyou/feat-sieve-edit
Re-enable local dovecot sieve scripts
2018-10-18 23:18:39 +02:00
ofthesun9
7a3922c2e7 Fixes few typos 2018-10-18 19:14:53 +00:00
ofthesun9
5b8deed06b Made the instructions more simple
Updated the volume defintion to the latest master status
Removed the part around .yml variable substitution as we can use a "trick"
2018-10-18 18:59:22 +00:00
ofthesun9
9c639eebd4 Made the instructions more simple (moved the nfs-volume example to another file)
Removed he part around variable substitution as we can use a "trick"
2018-10-18 18:46:59 +00:00
kaiyou
82069ea3f0 Clean most of the refactored code 2018-10-18 17:55:07 +02:00
Ionut Filip
35193f5530 Added functionality for stack flavor 2018-10-18 17:23:25 +03:00
kaiyou
f40fcd7ac0 Use click for the manager command 2018-10-18 16:20:56 +02:00
kaiyou
fc24426291 First batch of refactoring, using the app factory pattern 2018-10-18 15:57:43 +02:00
hoellen
d4f32c3e7d remove rewrite if webmail is on root 2018-10-18 14:27:28 +02:00
Tim Möhlmann
39a1de956f Add docker stack flavor
- Template still untested
- mailu.env and setup.html are symbolic links to compose flavor
2018-10-18 14:35:38 +03:00
Tim Möhlmann
adfadab4cf Load steps after setting flavor 2018-10-18 12:56:16 +03:00
kaiyou
828d96f8f0 Switch the default password scheme to PBKDF2 2018-10-17 21:26:44 +02:00
kaiyou
01fa179767 Update the user password in database when needed 2018-10-17 21:22:22 +02:00
kaiyou
988e09e65e Add a profiler in debug mode for improving performance 2018-10-17 21:22:15 +02:00
kaiyou
dba8f1810d Do not check the password another time in Dovecot 2018-10-17 21:22:09 +02:00
ofthesun9
dbce059ae8 Merge pull request #5 from kaiyou/ofthesun9-feat-fuzzyhashes
Merging from kaiyou:ofthesun9-feat-fuzzyhashes
2018-10-17 20:51:55 +02:00
ofthesun9
86bdce8407 Explicitely specify the fuzzy worker listen address 2018-10-17 18:49:19 +00:00
ofthesun9
cec5c1b16b Merge branch 'master' into feat-fuzzyhashes 2018-10-17 18:31:42 +00:00
kaiyou
d5162328ec Allow dovecot to write the source configuration directory for compiling sieve scripts 2018-10-17 18:48:59 +02:00
kaiyou
ce0bf3366d Learn fuzzy hashes automatically 2018-10-17 18:48:28 +02:00
kaiyou
b9b4a8cd77 Explicitely specify the fuzzy worker listen address 2018-10-17 18:47:55 +02:00
kaiyou
0c40057767 Merge branch 'feat-fuzzyhashes' of https://github.com/ofthesun9/Mailu into ofthesun9-feat-fuzzyhashes 2018-10-17 17:58:48 +02:00
Tim Möhlmann
5679d355aa Avoid binding conflicts on production servers 2018-10-17 18:45:09 +03:00
kaiyou
0a5dbf6230 Re-enable local dovecot sieve scripts 2018-10-17 17:41:21 +02:00
Tim Möhlmann
b2059be966 Merge branch 'feat-setup' of github.com:usrpro/Mailu into feat-setup 2018-10-17 18:38:51 +03:00
Tim Möhlmann
ed53d655d3 Extend documentation in download page. Small cleanup in env. 2018-10-17 18:38:10 +03:00
Ionut Filip
7c0f5b20d6 Bug fixes 2018-10-17 17:54:37 +03:00
Ionut Filip
cb1ed349bf Bug fixes 2018-10-17 16:46:20 +03:00
Ionut Filip
6b6cbcf977 Modified variables in .env file 2018-10-17 15:38:51 +03:00
Ionut Filip
b3c7c45140 Added input form constraints 2018-10-17 15:11:55 +03:00
Hans Cornelis
ef55ca525c Deleted conflicting merge files
Signed-off-by: Hans Cornelis <hacornelis@gmail.com>
2018-10-17 07:48:52 +02:00
Hans Cornelis
e67a0d464b Deleted old folder 2018-10-17 07:44:21 +02:00
Hans Cornelis
3098343360 Merged conflicts 2018-10-17 07:32:56 +02:00
hacor
4ea12deae7 Added kubernetes to Mailu 2018-10-17 07:22:55 +02:00
kaiyou
ed3388ed6e Merge branch 'master' into feat-reply-startdate 2018-10-16 23:53:43 +02:00
kaiyou
7c82be904f Merge branch 'master' of github.com:mailu/mailu 2018-10-16 23:50:07 +02:00
kaiyou
53b9c031c9 Add a warning banner when not reading the stable docs 2018-10-16 23:19:48 +02:00
Thomas Sänger
a412951a30 simpler healthcheck for postfix 2018-10-16 23:12:02 +02:00
Thomas Sänger
0bc901a722 add healthcheck for dovecot 2018-10-16 23:11:20 +02:00
Thomas Sänger
1fc40bf932 add healthcheck for postfix 2018-10-16 22:57:25 +02:00
kaiyou
13e3862ca7 Simplify the docs configuration 2018-10-16 22:55:05 +02:00
kaiyou
8fa80c1589 Support multiple docs versions 2018-10-16 22:52:21 +02:00
Thomas Sänger
f0f5cea5d1 make antivirus-healthcheck more understandable 2018-10-16 22:30:15 +02:00
Thomas Sänger
040c1e529a add healthcheck for antivirus 2018-10-16 22:20:16 +02:00
Thomas Sänger
39272ab05c add healthcheck for http services 2018-10-16 21:38:12 +02:00
kaiyou
e784556330 Fix an edge case with old values containing None for coma separated lists 2018-10-16 20:47:38 +02:00
kaiyou
f647d1a0bc Merge branch 'master' into fix-sender-checks 2018-10-16 20:41:18 +02:00
kaiyou
5ada669f43 Rebase reply startdate on master 2018-10-16 20:38:18 +02:00
mergify[bot]
28a5f8574d Merge pull request #661 from usrpro/feat-sys-log
Option to send front logs to journald or syslog
2018-10-16 18:29:09 +00:00
kaiyou
7de6acad11 Merge pull request #649 from HorayNarea/webmails
reduce webmail image-layers/sizes
2018-10-16 20:21:11 +02:00
mergify[bot]
bee81d1a54 Merge pull request #647 from HorayNarea/bcrypt
support bcrypt and use it as default
2018-10-16 17:50:44 +00:00
Ionut Filip
b9ecc0ccc6 Added minor changes 2018-10-16 18:03:59 +03:00
mergify[bot]
eacf27452e Merge pull request #660 from usrpro/update-dev-docs
Update Dev-docs to use build.yml for building
2018-10-16 13:49:42 +00:00
mergify[bot]
7bccfa69a8 Merge pull request #652 from usrpro/improve-docs
Some documentation flow refactoring and updates
2018-10-16 13:47:30 +00:00
Ionut Filip
e8dee22ecf Added vars and fixed naming use 2018-10-16 16:12:42 +03:00
Tim Möhlmann
f3ebf35c75 Fix autotest 2018-10-16 12:56:12 +03:00
Tim Möhlmann
acbb586e71 Option to send logs to journald or syslog 2018-10-16 12:38:17 +03:00
Ionut Filip
0d164486b4 docker-compose variables and setup 2018-10-16 12:34:55 +03:00
Tim Möhlmann
11a8e49f05 Compose file upgrade and define more variables for setup 2018-10-16 11:09:42 +03:00
mergify[bot]
9fd7851cb6 Merge pull request #648 from HorayNarea/apk-no-cache
remove apk-warning about cache
2018-10-16 06:35:09 +00:00
kaiyou
15eb2806bf Merge branch 'master' into feat-reply-startdate 2018-10-15 22:10:08 +02:00
kaiyou
5035975c41 Remove Postfix debugging 2018-10-15 22:07:38 +02:00
kaiyou
c6846fd8db Merge branch 'master' into feat-reply-startdate 2018-10-15 21:52:06 +02:00
Tim Möhlmann
b38deb18cf Update Dev-docs to use build.yml for building 2018-10-15 19:37:24 +03:00
Tim Möhlmann
3f7e7ca3a6 Use defaults in variables, to allow for local builds 2018-10-15 19:36:37 +03:00
Tim Möhlmann
1394955447 FAQ about TLS issues 2018-10-13 21:13:09 +03:00
Tim Möhlmann
b5693edc63 Include a doc section for external certbot 2018-10-13 20:59:14 +03:00
Tim Möhlmann
f4ef0eed09 Wrote informational section of the FAQ 2018-10-12 20:48:44 +03:00
Tim Möhlmann
70c4e42f74 Fix small typo 2018-10-11 18:33:58 +03:00
Tim Möhlmann
77e3fc0ebc Some documentation flow refactoring and updates:
- Improve advice on IP binding; Follow up on issue #641
 - mailradar is dead. Found mxtoolbox instead
 - Fix some internal linking
2018-10-11 18:14:37 +03:00
mergify[bot]
a91a54b5f1 Merge pull request #651 from usrpro/fix-certbot
Front: move to Alpine:3.8 and fixing #522
2018-10-11 14:15:04 +00:00
mergify[bot]
1a04c13da8 Merge pull request #650 from HorayNarea/pin-alpine
pin alpine-version for 'none'-image
2018-10-11 12:08:26 +00:00
Tim Möhlmann
de43060ef8 Move to Alpine:3.8 and fixing #522 2018-10-11 14:06:26 +03:00
Thomas Sänger
bdfcc5b530 pin alpine-version for 'none'-image 2018-10-11 03:20:19 +02:00
Thomas Sänger
f2259c3302 reduce webmail image-layers/sizes 2018-10-11 03:18:49 +02:00
Thomas Sänger
6aafef88bd remove apk-warning about cache 2018-10-11 02:57:13 +02:00
mergify[bot]
39f58c03ff Merge pull request #644 from usrpro/fix-alpine-38
Move to alpine:3.8. Fixes #625 and #627
2018-10-10 22:08:22 +00:00
mergify[bot]
6c3c64f873 Merge pull request #646 from gitting/patch-2
Add newline for list to display properly
2018-10-10 17:39:44 +00:00
Thomas Sänger
c8b39c5d4a support bcrypt and use it as default 2018-10-10 19:29:23 +02:00
gitting
3541b7cc63 Add newline for list to display properly 2018-10-10 08:09:55 -07:00
mergify[bot]
eb4cbc0f81 Merge pull request #642 from HorayNarea/update-php
use PHP 7.2 for rainloop
2018-10-10 13:48:44 +00:00
mergify[bot]
4641ae6d2b Merge pull request #612 from Mailu/feat-abstract-db
Abstract db access from Postfix and Dovecot
2018-10-10 13:45:15 +00:00
Tim Möhlmann
2c7a5a97e4 Move to alpine:3.8. Fixes #625 and #627 2018-10-10 14:28:26 +03:00
kaiyou
10ec2f999a Another (embarrassing) fix for a merge typo 2018-10-10 11:39:41 +02:00
kaiyou
2e1aa079c1 Fix one (hopefully) last merge typo 2018-10-10 11:24:51 +02:00
kaiyou
4b9dbf00a8 Fix yet another merge-time typo 2018-10-10 09:51:50 +02:00
kaiyou
e8e133b53d Fix a merge typo in postfix build 2018-10-10 08:54:57 +02:00
kaiyou
00b5ae11db Merge branch 'master' into feat-abstract-db 2018-10-10 08:41:56 +02:00
Thomas Sänger
2f7b6e14c0 use PHP 7.2 for rainloop 2018-10-09 23:21:32 +02:00
Tim Möhlmann
cde22be4c9 Some cleanup and changes:
- Don't upgrade the docker-compose file. (Not in the scope of this feature)
- No need to use aliases. Docker already resolves to service names
- Use a fixed IP range, which stays clear of the network ranges used by Docker. (172.xx.0.0/16)
2018-10-09 14:50:09 +03:00
Tim Möhlmann
013d02d726 Add unbound to the build directive 2018-10-09 14:11:59 +03:00
mergify[bot]
5180ce527c Merge pull request #637 from usrpro/fix-rainloop-permissions
Fix rainloop permissions
2018-10-09 09:57:51 +00:00
Tim Möhlmann
ada09f7922 Unbound: Use alpine:3.8 2018-10-09 12:35:08 +03:00
ofthesun9
6bd365e771 Change title layout 2018-10-08 21:00:44 +00:00
ofthesun9
afba7b9c11 Merge branch 'master' into feature-swarm 2018-10-08 20:44:31 +00:00
ofthesun9
bd0a7050f2 Merge branch 'master' into feat-fuzzyhashes 2018-10-08 20:43:16 +00:00
ofthesun9
9d610f56f7 Added some lines around ingress mode 2018-10-08 18:53:44 +00:00
Ionut Filip
29e4ca0768 Changed command placement 2018-10-08 16:47:10 +03:00
Ionut Filip
d59d6b0d0d Added chwon command 2018-10-08 16:35:09 +03:00
Tim Möhlmann
676c408f06 Merge remote-tracking branch 'obi/feature/dns-resolver' into feat-unbound-dns 2018-10-08 12:36:01 +03:00
mergify[bot]
c9ae89e350 Merge pull request #628 from usrpro/feat-test-suite-v2
Feat test suite v2
2018-10-07 18:00:19 +00:00
ofthesun9
1f71d10899 Change POD_ADDRESS_RANGE introduction like it is done on deovecot-sql.conf.ext 2018-10-07 16:46:42 +00:00
ofthesun9
13146be57e Merge branch 'master' into feature-swarm 2018-10-07 16:42:25 +00:00
ofthesun9
6b34b2728e Declare fuzzy_worker port 11335 in EXPOSE section 2018-10-07 16:38:41 +00:00
ofthesun9
fdda813163 Merge branch 'feat-fuzzyhashes' of https://github.com/ofthesun9/Mailu into feat-fuzzyhashes 2018-10-07 16:34:33 +00:00
ofthesun9
0eb963eb21 Merge branch 'master' into feat-fuzzyhashes 2018-10-07 16:31:26 +00:00
mergify[bot]
c1834d3500 Merge pull request #560 from usrpro/fix-swarm-start
Fix start.py for Swarm mode
2018-10-07 16:22:17 +00:00
kaiyou
508e519a34 Refactor the postfix views and implement sender checks 2018-10-07 16:24:48 +02:00
kaiyou
8b189ed145 Separate senderaccess and senderlogin maps 2018-10-07 16:23:53 +02:00
Tim Möhlmann
c316c040c5 Use travis_wait for sleep 2018-10-07 14:08:45 +03:00
ofthesun9
74796201ec Merge branch 'master' into feature-swarm 2018-10-07 08:00:12 +00:00
kaiyou
fc99eb7b34 Re-enable sender access check to prevent source spoofing 2018-10-07 01:52:01 +02:00
kaiyou
f3f0b98755 Fix relay restrictions so email gets delivered correctly 2018-10-07 01:28:22 +02:00
Tim Möhlmann
0817629869 Increase attempts as it failed on fresh Swarm host 2018-10-07 02:10:13 +03:00
Tim Möhlmann
716ed16f34 Fix typo 2018-10-07 01:52:52 +03:00
Tim Möhlmann
16469d7282 Upgrade to newer pip version 2018-10-07 01:40:22 +03:00
Tim Möhlmann
1bae5968ad Import tenacy and fix syntax errors 2018-10-07 01:39:02 +03:00
Tim Möhlmann
c457ccfa60 Use tenacity for resolver retries 2018-10-07 00:32:05 +03:00
Tim Möhlmann
d6c386651d Merge branch 'master' into fix-swarm-start 2018-10-06 23:48:32 +03:00
Tim Möhlmann
1bbb86eab5 Add autobuild for 'setup' 2018-10-06 20:26:39 +03:00
Tim Möhlmann
5716ca933e Fix autodeploy after merge with master 2018-10-06 20:24:54 +03:00
mergify[bot]
011f4e317b Merge pull request #616 from HorayNarea/patch-2
implement support for ARC - fixes #495
2018-10-06 17:12:18 +00:00
Tim Möhlmann
2d886554c8 Merge branch 'master' into feat-test-suite-v2 2018-10-06 20:11:00 +03:00
kaiyou
7a7854bf3f Disable strict checking 2018-10-06 19:09:59 +02:00
kaiyou
afe0c1bf86 Merge branch 'master' into patch-2 2018-10-06 19:07:24 +02:00
mergify[bot]
2b1c94d965 Merge pull request #626 from ofthesun9/feature-smtpd_reject_unlisted_recipient
Add variable to choose whether to bounce or reject email when recipient is unknown. Fixes #583
2018-10-06 17:01:44 +00:00
kaiyou
f430f410f0 Merge branch 'master' into feature-smtpd_reject_unlisted_recipient 2018-10-06 18:56:36 +02:00
Tim Möhlmann
a405d4cc6f Merge branch 'master' into feat-fuzzyhashes 2018-10-06 19:55:40 +03:00
kaiyou
fff802b5bf Merge branch 'master' into feat-test-suite-v2 2018-10-06 18:55:40 +02:00
kaiyou
c135b37b07 Enable mergify 2018-10-06 18:53:49 +02:00
Tim Möhlmann
32224202d6 Merge branch 'master' into feat-test-suite-v2 2018-10-06 18:38:34 +03:00
kaiyou
e8c0f031ac Merge pull request #608 from Mailu/feat-docs-docker
Docs as a Docker image
2018-10-06 17:23:48 +02:00
kaiyou
6a6b3af2d7 Merge branch 'master' into patch-2 2018-10-06 17:21:54 +02:00
kaiyou
9f861a4547 Merge pull request #620 from usrpro/feat-docs-docker
Documentation on running a local docs container
2018-10-06 17:16:13 +02:00
Tim Möhlmann
c09ac713a3 Project name can be ommitted in docker-compose build 2018-10-06 17:36:59 +03:00
Tim Möhlmann
940b88a641 Fix syntax error 2018-10-06 17:31:01 +03:00
Tim Möhlmann
f7d8f20c87 Move DOCKER_ORG default to travis.yml 2018-10-06 17:24:42 +03:00
Tim Möhlmann
a19e11d552 Clean terminal distortion from docker-compose in travis 2018-10-06 17:06:23 +03:00
Tim Möhlmann
7915f2631f DOCKER_UN needs to be non-zero for deploy 2018-10-06 17:04:14 +03:00
Tim Möhlmann
bb6b984610 Exclude fetchmail for the time being. See Mailu/Mailu#412 2018-10-06 16:46:01 +03:00
Tim Möhlmann
bc85dff27e Don't try deploy is DOCKER_UN is not set 2018-10-06 16:43:04 +03:00
Tim Möhlmann
39c159bae9 Make the code a bit more DRY. Put sleep back into main loop 2018-10-06 16:34:57 +03:00
Tim Möhlmann
508796eaab Verbose sleep 2018-10-06 16:25:12 +03:00
Tim Möhlmann
59eb4a5a00 Minor script flow restructure 2018-10-06 16:12:05 +03:00
Tim Möhlmann
42f557ff38 Cleanup containers 2018-10-06 16:03:07 +03:00
Tim Möhlmann
4133bab280 Default to mailu for DOCKER_ORG 2018-10-06 15:52:39 +03:00
Ionut Filip
38db35f1d6 Make docker ps more verbose 2018-10-05 15:04:04 +03:00
Tim Möhlmann
9c266cc8e5 Merge pull request #6 from usrpro/feat-travis-deploy
Tavis-ci to upload images to the Docker hub, after succesfull tests.
2018-10-05 14:42:01 +03:00
Tim Möhlmann
0c73be7c6e Deploy on all branches 2018-10-05 13:02:10 +03:00
Tim Möhlmann
3224a8ecad Further introduction of the DOCKER_ORG variable 2018-10-05 12:52:19 +03:00
Tim Möhlmann
5987703631 Tavis-ci to upload images to the Docker hub, after succesfull tests.
For this to work, the following variables will need to be set at Docker hub:
 - DOCKER_ORG	first part of docker repo name (example: mailu)
 - DOCKER_UN	Docker-hub login username (private)
 - DOCKER_PW	Docker-hub login password (private)
Note that also Docker hub autobuilds will have to be disabled.
2018-10-05 12:18:29 +03:00
Ionut Filip
20f37607bb Added docker ps and logs 2018-10-05 11:55:01 +03:00
ofthesun9
58a83a93e6 Add REJECT_UNLISTED_RECIPIENT variable in .env file 2018-10-04 18:55:56 +00:00
ofthesun9
09d77bc2de Handle the case where the variable REJECT_UNLISTED_RECIPIENT is not set 2018-10-04 18:55:56 +00:00
ofthesun9
cc17962c86 fixes #583 2018-10-04 18:55:56 +00:00
Ionut Filip
71eed72e21 Changed exit condition 2018-10-04 17:58:34 +03:00
Ionut Filip
027b8f36df Added a check for container status 2018-10-04 17:58:34 +03:00
Ionut Filip
bc70be35c2 Added function to check docker containers 2018-10-04 17:58:34 +03:00
Ionut Filip
645a7f3c96 Removed BIND_ADDRESS6 2018-10-04 17:58:34 +03:00
Ionut Filip
28ebcd5007 Fixed paths to files 2018-10-04 17:58:34 +03:00
Ionut Filip
ebe90fc447 Added run script for travis 2018-10-04 17:58:34 +03:00
Ionut Filip
0067d97f26 Copied docs/compose/.env to tests/compose/core.env 2018-10-04 17:58:34 +03:00
Ionut Filip
5cc5b7c40a Copied docs/compose/docker-compose.yml to tests/compose/run.yml
Edit for test environment
2018-10-04 17:58:34 +03:00
kaiyou
23c8dea27b Merge pull request #623 from usrpro/revert-docs-build
Revert docs build
2018-10-02 18:34:01 +02:00
Hypriot Pirate
12882cfacf Merge branch 'master' into feat-fuzzyhashes 2018-10-01 16:31:45 +00:00
Tim Möhlmann
6479f5177b Revert "Add a Dockerfile for buliding the docs"
This reverts commit f97d0d9e43.
2018-10-01 12:07:49 +03:00
Tim Möhlmann
07af9978e2 Revert "Build the docs during tests"
This reverts commit b287a85124.
2018-10-01 12:06:56 +03:00
Tim Möhlmann
6490a43492 Revert "Attempt to fix the docs build context"
This reverts commit 11bcae4c57.
2018-10-01 12:06:18 +03:00
Tim Möhlmann
73add1b428 Documentation on running a local docs container 2018-10-01 01:47:40 +03:00
Thomas Sänger
76923d80d8 implement support for ARC 2018-09-29 13:03:33 +02:00
kaiyou
4d70a8737e Expose the data volume for admin container 2018-09-28 17:42:10 +02:00
kaiyou
2cba045013 Explicitely declare required volumes, fixes #568 2018-09-28 17:28:46 +02:00
Tim Möhlmann
11bcae4c57 Attempt to fix the docs build context 2018-09-28 17:28:46 +02:00
kaiyou
b287a85124 Build the docs during tests 2018-09-28 17:28:46 +02:00
kaiyou
f97d0d9e43 Add a Dockerfile for buliding the docs 2018-09-28 17:28:46 +02:00
kaiyou
339b3c1b24 Build the documentation as a Docker image 2018-09-28 10:41:17 +02:00
kaiyou
fcad52b145 Implement a start date filter for autoreply, fixes #362 2018-09-27 22:45:16 +02:00
Tim Möhlmann
69c19dca55 Attempt to fix the docs build context 2018-09-27 21:45:06 +03:00
kaiyou
82bb8c2fd9 Merge remote-tracking branch 'github/master' into feat-abstract-db 2018-09-27 17:06:21 +02:00
kaiyou
f5668dea51 Handle relays as virtual transports through podop 2018-09-27 16:30:20 +02:00
kaiyou
9890e1fb2a Fix the dovecot configuration path 2018-09-27 16:13:02 +02:00
kaiyou
42c6bdb4df Split the internal blueprint into multiple view files 2018-09-27 16:09:38 +02:00
kaiyou
dc4b0d21ea Clean the dovecot configuration dir 2018-09-27 16:01:21 +02:00
kaiyou
f9c6c98180 Remove fetchmail dependency to the databse 2018-09-27 15:54:08 +02:00
kaiyou
43b6547e1c Lower the loglevel of podop 2018-09-27 14:53:58 +02:00
kaiyou
542793260b Handle wildcard aliases using podop 2018-09-27 14:53:23 +02:00
kaiyou
0d52364eac Fix alias resolution through podop 2018-09-27 14:38:10 +02:00
kaiyou
6d088504bd Adjust podop debug level based on environment 2018-09-27 14:37:47 +02:00
kaiyou
6ba55ee377 Implement the sieve script name resolution pattern 2018-09-27 14:10:53 +02:00
kaiyou
3c725bf634 Only support generating the default sieve script 2018-09-27 08:18:22 +02:00
kaiyou
ca6c0bc8fd Fix the user sieve script generation 2018-09-27 08:18:03 +02:00
kaiyou
4d25083847 Move sieve script generation to the admin container 2018-09-27 08:11:26 +02:00
kaiyou
cfeaa189f9 Use proper 404 return codes for missing objects 2018-09-27 08:00:31 +02:00
kaiyou
d8365bfbcf Use simpler routes for Dovecot 2018-09-27 07:55:54 +02:00
kaiyou
82140baa69 Add a very simple test script for sending mails 2018-09-27 07:52:43 +02:00
kaiyou
697caaab81 Update podop access and mail restrictions 2018-09-26 00:15:24 +02:00
kaiyou
7143fb8c47 Implement some basic views for podop 2018-09-26 00:15:03 +02:00
kaiyou
39cd0d5034 Upgrade to alpine 3.8 for smtp and imap 2018-09-26 00:14:30 +02:00
kaiyou
68aa797720 Merge branch 'master' into feat-abstract-db 2018-09-25 21:46:12 +02:00
kaiyou
72cfadd5e8 Build the docs during tests 2018-09-25 21:08:04 +02:00
kaiyou
5341ee4472 Add a Dockerfile for buliding the docs 2018-09-25 21:04:30 +02:00
ofthesun9
f5f09fad6e Reverting the patch for dovecot.conf, as it is not needed 2018-09-25 18:54:40 +00:00
kaiyou
e9aa85ad01 Merge pull request #606 from HorayNarea/roundcube
upgrade to PHP 7.2 and remove unused dependencies
2018-09-25 20:34:26 +02:00
kaiyou
f3a8f47b0a Merge pull request #607 from HorayNarea/patch-1
bind to any protocol
2018-09-25 18:19:15 +02:00
Thomas Sänger
cbaac01790 remove unused dependencies 2018-09-25 07:38:49 +02:00
Thomas Sänger
0b885548ab bind to any protocol 2018-09-25 06:29:53 +02:00
Thomas Sänger
a684739b9c update to PHP 7.2 and remove mcrypt
removed mcrypt because Rouncube uses openssl exclusively since version 1.2 and mcrypt was removed from PHP 7.2
2018-09-25 05:59:31 +02:00
kaiyou
73ca5fb3d3 Provide a more generic skeletton for postfix virtual lookups 2018-09-24 23:19:06 +02:00
ofthesun9
23e288aadc Enabling swarm deployment on master branch:
-Extends the usage of POD_ADDRESS_RANGE
-Provides documentation
2018-09-24 17:29:31 +00:00
kaiyou
91349d62ee Merge pull request #602 from usrpro/feat-test-suite
Travis-CI automated test build
2018-09-24 08:19:05 +02:00
Tim Möhlmann
f5f8d1d84b Test-building using travis-ci 2018-09-24 02:23:07 +03:00
kaiyou
f9ef126e03 Merge pull request #597 from HorayNarea/patch-1
use safer cipher in roundcube
2018-09-19 09:00:29 +02:00
kaiyou
5dc9ee9516 Merge pull request #510 from hoellen/spam-trash-fix
Dont flag spam as ham if moved to trash
2018-09-19 08:50:52 +02:00
Thomas Sänger
89c55ba8fe use safer cipher in roundcube
"Default is set for backward compatibility to DES-EDE3-CBC,
but you can choose e.g. AES-256-CBC which we consider a better choice."

https://github.com/roundcube/roundcubemail/blob/master/config/defaults.inc.php#L512
2018-09-19 01:36:22 +02:00
kaiyou
d917f60352 Merge pull request #553 from HorayNarea/compress
add optional Maildir-Compression
2018-09-16 20:00:32 +02:00
kaiyou
64269e08c0 Merge pull request #552 from HorayNarea/master
add full-text search support
2018-09-16 19:59:28 +02:00
kaiyou
313b79538e Merge pull request #513 from mprihoda/feature/better-ratelimit-error
Return correct status codes from auth rate limiter failure.
2018-09-16 19:58:34 +02:00
kaiyou
4b60ee5361 Merge pull request #580 from usrpro/fix-setup-binding
Fix binding in setup utility's gunicorn
2018-09-16 19:57:53 +02:00
kaiyou
482ce3bcd6 Merge pull request #551 from ofthesun9/doc-swarm
Documentation to deploy mailu on a docker swarm. Fixes #530
2018-09-16 19:56:53 +02:00
kaiyou
99914c50fd Merge pull request #581 from usrpro/feat-setup-compose
Add a compose file for mailu/setup
2018-09-16 19:48:26 +02:00
Tim Möhlmann
fe7e32dc82 Make gunicorn bind to port 80 of any available protocol 2018-08-26 21:11:48 +03:00
Tim Möhlmann
6fc51d879b Add docker-compose.yml file for Setup utility 2018-08-26 21:08:20 +03:00
Tim Möhlmann
cc8e15748b Retry 10 times when resolving fails in start.py scripts 2018-08-08 17:54:15 +03:00
Tim Möhlmann
ac62f26dfd Merge branch 'master' of https://github.com/mailu/mailu 2018-08-07 19:24:42 +03:00
Thomas Sänger
0bdb2a16bc add optional Maildir-Compression 2018-08-05 19:48:24 +02:00
Thomas Sänger
fb62e6b5a2 add full-text search support 2018-08-05 18:59:57 +02:00
ofthesun9
935cd7f706 Update README.md 2018-08-04 18:13:08 +02:00
ofthesun9
480fc6c437 Update README.md
Typo
2018-08-04 18:12:41 +02:00
ofthesun9
d13725ce33 Update README.md
Typo
2018-08-04 18:09:18 +02:00
ofthesun9
dc8df56976 Update README.md
Typo
2018-08-04 18:08:07 +02:00
ofthesun9
a6412f3f23 Update README.md 2018-08-04 18:03:50 +02:00
ofthesun9
b3131496c6 Update README.md 2018-08-04 18:00:57 +02:00
ofthesun9
27d43384c5 Documentation to deploy mailu on a docker swarm 2018-08-04 15:58:53 +00:00
ofthesun9
91300c1c5c Update README.md
Typo
2018-08-04 17:48:37 +02:00
ofthesun9
820e5c667b Update README.md
Typo
2018-08-04 17:47:10 +02:00
ofthesun9
8a0ff1153e Documentation to deploy mailu on a docker swarm 2018-08-04 15:44:43 +00:00
ofthesun9
a34090502d Documentation to deploy mailu on a docker swarm 2018-08-04 15:38:25 +00:00
ofthesun9
806dfc804a Typo 2018-08-04 15:33:08 +00:00
ofthesun9
bd6026384a Documentation to deploy mailu on a doxker swarm 2018-08-04 15:27:27 +00:00
kaiyou
f506966abc Pin Alpine 3.7 to preserve the Postfix version 2018-08-03 08:24:06 +02:00
Tim Möhlmann
9350bb9b9a Use fixed alpine:3.7 tag to prevent postix upgrade 2018-08-03 00:18:39 +03:00
Pierre Jaury
3dca1a834c Pin alpine 3.7 until we fix the certbot issue, see #522 2018-08-01 21:56:29 +02:00
Pierre Jaury
18fe8cd9f2 Pin alpine:3.7 for Dovecot since extdata was removed from repos, fixes #528 2018-08-01 21:29:18 +02:00
Pierre Jaury
5ad02ae2e5 Use a more uniform 'Save' for most form submits, fixes #523 2018-08-01 21:24:13 +02:00
kaiyou
b6e4b0e557 Merge pull request #544 from hacor/master
Created new manifests for Kubernetes
2018-08-01 21:13:33 +02:00
kaiyou
d52d01924a Merge pull request #540 from d-fens/patch-1
[Security] Update Roundcube to 1.3.7
2018-08-01 21:09:54 +02:00
kaiyou
8bf8a0328e Merge pull request #514 from mprihoda/hotfix/libpng-dep
Fixed libpng12-dev dependency, called libpng-dev now.
2018-08-01 21:09:14 +02:00
kaiyou
b188c5790c Merge pull request #524 from jake-walker/patch-1
Fix typo
2018-08-01 21:08:42 +02:00
kaiyou
9abee93328 Merge pull request #543 from hoellen/update-rainloop
update rainloop to 1.12.1
2018-08-01 21:07:58 +02:00
hacor
151aeb9c06 Updated adaptations for dovecot on shared filesystem and indexing errors
Signed-off-by: hacor <hacornelis@gmail.com>
2018-08-01 15:45:49 +02:00
hacor
699a25939f Updated docs for Travis
Signed-off-by: hacor <hacornelis@gmail.com>
2018-07-31 17:45:11 +02:00
hacor
db3cb2aac1 Updated docs
Signed-off-by: hacor <hacornelis@gmail.com>
2018-07-31 17:17:21 +02:00
hacor
eb9649db4e Added a new release for Kubernetes
Signed-off-by: hacor <hacornelis@gmail.com>
2018-07-31 17:15:25 +02:00
hoellen
9e24064e35 update rainloop to 1.12.1 2018-07-31 00:07:11 +02:00
d-fens
14a6cfb5c6 [Security] Update Roundcube to 1.3.7
https://github.com/roundcube/roundcubemail/releases/tag/1.3.7
2018-07-28 21:46:33 +01:00
Pierre Jaury
0085b6f1e6 Remove the data mount where unused 2018-07-26 21:58:50 +02:00
Pierre Jaury
c04e58498d Remove unused postfix sqlite files 2018-07-26 21:57:48 +02:00
Pierre Jaury
bb73933e1e Switch postfix to Podop 2018-07-26 21:57:21 +02:00
Pierre Jaury
82e738cc53 Remove the old code of postproxy 2018-07-26 21:45:33 +02:00
Pierre Jaury
b5d6b93869 Switch to using Podop in Dovecot 2018-07-26 21:41:11 +02:00
Pierre Jaury
809fe78f82 Add dovecot views to the internal API 2018-07-26 21:40:44 +02:00
Pierre Jaury
28001213d4 Remove the redis-based quota code 2018-07-26 21:39:30 +02:00
Pierre Jaury
76617a3c97 Store the quota status in database 2018-07-26 21:38:21 +02:00
Pierre Jaury
2b2ab864d1 Add support for querying the table in Dovecot proxy 2018-07-15 15:35:35 +02:00
Pierre Jaury
70175f8c28 Add postproxy support for Dovecot dict protocol 2018-07-15 15:30:16 +02:00
Jake Walker
109842502a Fix typo 2018-07-13 15:11:40 +01:00
Pierre Jaury
262e82a367 Add a postfix socketmap to http proxy 2018-07-03 20:13:00 +02:00
Michal Prihoda
147a1359cd Fixed libpng12-dev dependency, called libpng-dev now. 2018-07-02 21:43:25 +02:00
Michal Prihoda
f5e7751835 Return correct status codes from auth rate limiter failure. 2018-07-02 21:41:40 +02:00
hoellen
ca26264d01 Dont flag spam as ham if moved to trash (fix #474) 2018-06-29 13:47:55 +02:00
kaiyou
75a1bf967c Merge pull request #502 from hoellen/webmail-messagesize
Use message_size_limit variable from env for webmail client_max_body_size
2018-06-28 21:29:30 +02:00
hoellen
c51e1b9eef webmail client_max_body_size with message_size_limit and 8M tolerance 2018-06-28 19:23:08 +02:00
kaiyou
77aac02b43 Merge pull request #509 from reallinfo/master
logo added & readme updated.
2018-06-28 16:32:17 +02:00
reallinfo
0b513768fb Update README.md 2018-06-28 17:29:52 +03:00
reallinfo
6478400cba Add files via upload 2018-06-28 17:28:37 +03:00
kaiyou
74b72375cb Merge pull request #493 from MFAshby/user_validation
Made User and UserSignup validation consistent for the local part of
2018-06-28 14:16:01 +02:00
kaiyou
53bf6085dc Merge pull request #501 from hoellen/webmail-root
Add posibilty to run webmail on root '/'
2018-06-28 14:13:40 +02:00
kaiyou
0a6632de4e Merge pull request #505 from hoellen/admin-hide-header
Hide administration header in sidebar for normal users.
2018-06-28 14:12:51 +02:00
kaiyou
8ec31df139 Merge pull request #507 from mildred/parametrize-hosts
roundcube: fix host parametrization
2018-06-28 14:11:22 +02:00
Mildred Ki'Lya
b7ece9f9b8 roundcube: fix host parametrization
Roundcube can be parametrized so it can take a different hostname than
'front' or 'imap' to connect to the mail servers through environment
variables. Unfortunately, this was not correct and in PHP a `||`
operator always returns a boolean. It did not work as expected.

Instead use the ternary operator `:?` that works in all cases.
2018-06-27 16:40:04 +00:00
hoellen
9091e54fda Hide administration header in sidebar for normal users. 2018-06-25 21:35:40 +02:00
hoellen
81a6a7cbf6 Use message_size variable from env for webmail 2018-06-25 15:51:20 +02:00
hoellen
a1fb8442e3 Add posibilty to run webmail on root '/' 2018-06-25 15:45:43 +02:00
mfashby
0284b6a8e9 Made User and UserSignup validation consistent for the local part of the email address 2018-06-10 15:15:36 +00:00
ofthesun9
12294a6e5a Trying to enable fuzzy hashes for rspamd 2018-06-10 06:16:40 +00:00
Pierre Jaury
50f2ea66c8 Switch to Python for rainloop startup script and fix #93 2018-06-04 21:41:18 +02:00
Pierre Jaury
14687d09ba Fix announcements for idna domains 2018-06-02 10:59:57 +02:00
Pierre Jaury
e543477c2e Revert "Only enable milter for incoming emails"
This reverts commit cfd233039e.
2018-06-02 10:38:08 +02:00
Pierre Jaury
cfd233039e Only enable milter for incoming emails 2018-06-02 10:33:58 +02:00
kaiyou
069fe195e0 Merge pull request #484 from ofthesun9/master
Consistency for nginx.pid path
2018-06-02 10:25:05 +02:00
Pierre Jaury
6828231c28 Fix the path of the nginx pid in startup scripts, fixes #483 2018-06-02 10:23:33 +02:00
Pierre Jaury
1b0b3a2b1e Only check login mismatch for authenticated users, fixes #309 2018-06-02 10:22:15 +02:00
ofthesun9
9de58279a5 Update start.py
replace /var/log/nginx.pid with /var/run/nginx.pid to ensure consistency with core/nginx/conf/nginx.conf
2018-06-02 07:04:14 +02:00
ofthesun9
c6095cd72e Update config.py
replace /var/log/nginx.pid with /var/run/nginx.pid to ensure consistency with core/nginx/conf/nginx.conf
2018-06-02 07:03:16 +02:00
Pierre Jaury
52d89b2f5d Fix rspamd behavior, currently failing due to worker-fuzzy 2018-06-01 20:18:36 +02:00
Pierre Jaury
1371ba5f5e Add the keep field to fetch forms, fixes #479 2018-05-30 00:40:50 +02:00
Pierre Jaury
ea658a174d Fix a typo in the base html template 2018-05-30 00:37:34 +02:00
Pierre Jaury
b6c76a5e39 Do not remove openssl when purging build deps, fixes #481 2018-05-30 00:28:44 +02:00
kaiyou
a47ba3474c Merge pull request #448 from romracer/pod-address
Use POD_ADDRESS_RANGE for Dovecot if it exists
2018-05-28 23:19:06 +02:00
kaiyou
3beceb90ec Merge pull request #429 from mildred/parametrize-hosts
Add various environment variables to allow running outside of docker-compose
2018-05-28 23:09:08 +02:00
kaiyou
a9e41960a1 Merge pull request #468 from dtwardow/flex_tls_filenames
TLS using configurable filenames
2018-05-28 23:00:14 +02:00
kaiyou
91e51a24c8 Merge pull request #465 from sanduhrs/feature/463
Remove services status page
2018-05-28 22:57:43 +02:00
kaiyou
ebdfcbd18e Merge pull request #476 from benlemasurier/benlemasurier-patch-1
Fixes typo in README.md
2018-05-28 22:55:28 +02:00
kaiyou
efec26d0af Merge pull request #469 from hoellen/master
update RainLoop to 1.12.0
2018-05-28 22:54:57 +02:00
kaiyou
b25325912a Merge pull request #477 from HorayNarea/master
don't require BootstrapCDN for FontAwesome (GDPR-compliance)
2018-05-28 22:54:21 +02:00
Thomas Sänger
7d661ab80d don't require BootstrapCDN for FontAwesome (GDPR-compliance) 2018-05-22 03:33:27 +02:00
Ben LeMasurier
2d4e769a25 Fixes typo in README.md 2018-05-14 16:00:28 -06:00
Mildred Ki'Lya
6bb4c6e2f0 Parametrize front address from dovecot 2018-05-08 20:42:07 +01:00
Mildred Ki'Lya
ae8c9f5a6b Add various environment variables to allow running outside of docker-compose 2018-05-08 20:41:02 +01:00
Roman Hoellen
f353b2d9ae update RainLoop to 1.12.0 2018-05-01 18:55:42 +02:00
Dennis Twardowsky
8f5036e769 Update documentation for TLS flexible filenames support 2018-05-01 14:58:57 +02:00
Dennis Twardowsky
50f9f379e9 Flexible filenames for TLS via envvars (flavours 'cert' and 'mail' only) 2018-05-01 14:04:18 +02:00
Stefan Auditor
6177571e4d Remove services status localization 2018-04-23 18:59:46 +02:00
Stefan Auditor
b541d4c257 Remove services status sidebar link 2018-04-23 18:56:48 +02:00
Stefan Auditor
e89b32a3f4 Remove services route 2018-04-23 18:55:37 +02:00
Stefan Auditor
ec8e82aaca Remove services status template 2018-04-23 18:55:13 +02:00
kaiyou
d4cc142f64 Rename the config dir to setup 2018-04-22 16:12:13 +02:00
kaiyou
f5538698d3 Rename the config dir to setup 2018-04-22 16:10:25 +02:00
kaiyou
40720fb3ea Rename the mailu setup app 2018-04-22 16:10:11 +02:00
kaiyou
5502297fce Add the most important steps 2018-04-22 16:09:26 +02:00
kaiyou
f70acfe893 Factor some generic bits in the base template 2018-04-22 16:09:07 +02:00
kaiyou
dd8b0dba54 Allow selecting version 2018-04-22 16:08:43 +02:00
kaiyou
987cfde91f Disable gitsplit 2018-04-22 12:20:45 +02:00
kaiyou
f55e5e26cd Update messages.po (POEditor.com) 2018-04-22 12:19:35 +02:00
kaiyou
2b96abbef4 Update messages.po (POEditor.com) 2018-04-22 12:15:40 +02:00
kaiyou
af38d5ab0c Update messages.po (POEditor.com) 2018-04-22 12:15:38 +02:00
kaiyou
fc89b30e8a Update messages.po (POEditor.com) 2018-04-22 12:15:36 +02:00
kaiyou
791fab688a Update messages.po (POEditor.com) 2018-04-22 12:15:33 +02:00
kaiyou
c9b0832899 Update messages.po (POEditor.com) 2018-04-22 12:15:31 +02:00
kaiyou
fa1b0ac32c Update messages.po (POEditor.com) 2018-04-22 12:15:28 +02:00
kaiyou
75f0791965 Update messages.po (POEditor.com) 2018-04-22 12:15:26 +02:00
kaiyou
c91c5c7493 Update messages.po (POEditor.com) 2018-04-22 12:15:24 +02:00
kaiyou
299a654e97 Update messages.po (POEditor.com) 2018-04-22 12:15:22 +02:00
kaiyou
494e52d8f0 Update messages.po (POEditor.com) 2018-04-22 12:15:20 +02:00
kaiyou
3b7014d563 Add dummy spanish and russion languages 2018-04-22 12:13:25 +02:00
kaiyou
be0a0b4ac8 Update translation strings 2018-04-22 12:10:39 +02:00
kaiyou
9ec3d3673e Convert the config uid to a string 2018-04-22 12:06:00 +02:00
kaiyou
002198d3d3 Build a Dockerfile 2018-04-22 12:02:59 +02:00
kaiyou
b18a1d5217 Provide a function to generate secrets 2018-04-22 11:54:10 +02:00
kaiyou
08e95c08ca Add a way to get a dev environment 2018-04-22 11:53:40 +02:00
kaiyou
5a9f01d473 Provide some first configuration items 2018-04-22 11:53:18 +02:00
kaiyou
8efc51bc29 Finish writing the framework for the config manager 2018-04-22 11:04:11 +02:00
kaiyou
8bad30cd59 Move the domain MX status to the detail page 2018-04-22 10:15:09 +02:00
kaiyou
7f0447514c Finish storing the user quota to redis 2018-04-21 17:19:44 +02:00
kaiyou
80893be68b Add a missing import to dnspython 2018-04-21 16:37:30 +02:00
kaiyou
091369915b Display the user quota in the admin interface 2018-04-21 15:48:07 +02:00
kaiyou
e13593f29a Switch to database 2 for rate limiting 2018-04-21 15:07:04 +02:00
kaiyou
d1dbba2d3a Add expose instructions in Dockerfiles, fixes #392 2018-04-21 14:46:01 +02:00
kaiyou
62d1a0c104 Add a status field to the domain list 2018-04-21 13:56:20 +02:00
kaiyou
bb0d7bf6dc Enforce the nocase collation on the email table 2018-04-21 13:25:48 +02:00
kaiyou
186c30d2ac Have the admin listen on ipv6 2018-04-21 12:55:14 +02:00
kaiyou
35276c3101 Merge pull request #458 from Farthen/master
Dovecot: Add SQL iterate_query to config file.
2018-04-21 11:48:22 +02:00
kaiyou
dfaedb76f1 Merge pull request #447 from sanduhrs/feature/446
Add a sqlalchemy custom type for unicode to idna conversion of domain names
2018-04-21 11:46:43 +02:00
kaiyou
5a4b0a18ef Try to fix the Travis build 2018-04-21 11:39:38 +02:00
farthen
f75280e4a3 Dovecot: Add SQL iterate_query to config file.
This allows to use doveadm -A to execute maintenance tasks for all users on the server
2018-04-19 00:44:50 +02:00
kaiyou
a03d884ccc Add the domain registration option in .env 2018-04-18 20:34:21 +02:00
kaiyou
9968d708f1 Update the prod requirements 2018-04-18 20:34:21 +02:00
kaiyou
381e76511d Add self-service domain registration 2018-04-18 20:34:21 +02:00
Stefan Auditor
c688970b32 Respect user enabled flag in admin authentication 2018-04-16 08:57:35 +02:00
Scott
49b17d31be [Security] Update Roundcube to 1.3.6
Fixes a security issue in roundcube.  May also fix the last comment in #391.
2018-04-16 08:57:35 +02:00
Stefan Auditor
d3064579f4 Respect user enabled flag in basic authentication 2018-04-16 08:57:35 +02:00
Stefan Auditor
92f4858323 Respect user.enabled status in internal authentication 2018-04-16 08:57:35 +02:00
Stefan Auditor
d2c6cecca6 Remove is_enabled method and use the enabled attribute instead 2018-04-16 08:57:35 +02:00
Stefan Auditor
5bfdd75738 Respect user enabled flag on user.login 2018-04-16 08:57:35 +02:00
Stefan Auditor
78f4fa7db9 Add field to ui for user enabled flag 2018-04-16 08:57:35 +02:00
Stefan Auditor
20d6fbae48 Add enabled flag to user model 2018-04-16 08:57:35 +02:00
Scott
2c2a1ed042 Remove stale link to old auto-forward settings. Fixes #450
Also update a reference to 'smtp' to use HOST_AUTHSMTP
2018-04-16 08:57:35 +02:00
Vados
1e609acbaf Remove ports option completely
Not needed since `hostNetwork: true`
2018-04-16 08:57:35 +02:00
Vados
3aaecca989 Update NGINX Ingress controller configuration 2018-04-16 08:57:35 +02:00
kaiyou
1c26c9e376 Merge pull request #409 from t3hmrman/patch-1
Update NGINX Ingress controller configuration
2018-04-16 08:23:59 +02:00
kaiyou
a51416a4af Merge pull request #452 from sanduhrs/feature/449
Add enabled flag to user model
2018-04-15 23:15:20 +02:00
Stefan Auditor
e843f7ef1f Respect user enabled flag in admin authentication 2018-04-15 19:53:24 +02:00
kaiyou
d333acabea Merge pull request #453 from romracer/roundcube-1.3.6
[Security] Update Roundcube to 1.3.6
2018-04-15 17:32:58 +02:00
Scott
386a02588b [Security] Update Roundcube to 1.3.6
Fixes a security issue in roundcube.  May also fix the last comment in #391.
2018-04-15 08:04:54 -05:00
Stefan Auditor
c8540ddba7 Respect user enabled flag in basic authentication 2018-04-15 14:02:15 +02:00
Stefan Auditor
6fc22e5432 Respect user.enabled status in internal authentication 2018-04-15 13:43:30 +02:00
Stefan Auditor
733b89bff5 Remove is_enabled method and use the enabled attribute instead 2018-04-15 13:42:19 +02:00
kaiyou
bc17171c02 Merge pull request #451 from romracer/fix-450
Remove stale link to old auto-forward settings. Fixes #450
2018-04-15 13:40:40 +02:00
Stefan Auditor
3b66fcada7 Respect user enabled flag on user.login 2018-04-15 13:00:38 +02:00
Stefan Auditor
7139a27bf1 Add field to ui for user enabled flag 2018-04-15 11:35:37 +02:00
Stefan Auditor
f585197e52 Add enabled flag to user model 2018-04-15 11:23:58 +02:00
Scott
e5c25c395f Remove stale link to old auto-forward settings. Fixes #450
Also update a reference to 'smtp' to use HOST_AUTHSMTP
2018-04-14 16:48:08 -05:00
Stefan Auditor
7f5bd98a2e Add parameters to database field 2018-04-14 13:02:00 +02:00
Stefan Auditor
93d5254b3f Add another type decorator for idna email support 2018-04-14 13:00:29 +02:00
Scott
6018995534 Use POD_ADDRESS_RANGE for Dovecot if it exists
This is required to override allow_nets in a Kubernetes environment where pods are not recreated with the same IP address.
2018-04-13 20:04:49 -05:00
Stefan Auditor
792c720c13 Save user email domain_name as idna representation 2018-04-13 08:13:26 +02:00
Stefan Auditor
c40e255f3b Reset relay columns to string 2018-04-12 22:21:28 +02:00
Stefan Auditor
d9ea64fac7 Import idna library and move code a bit upwards 2018-04-12 21:35:38 +02:00
Stefan Auditor
5a7272ff12 Replace other occurences of domain names with idna 2018-04-12 20:30:19 +02:00
Stefan Auditor
1b666cd25b Add a sqlalchemy custom type for unicode to idna conersion of domain names 2018-04-12 19:07:48 +02:00
kaiyou
db0cd8efb4 Fix the client setup page when not logged in 2018-04-11 22:45:04 +02:00
kaiyou
ea8aced2e6 Merge pull request #434 from steamedhams1/patch-1
Update .env
2018-04-11 21:53:52 +02:00
kaiyou
e92113bd57 Merge pull request #433 from mildred/delivered-to-hdr
Add original Delivered-To header to received messages
2018-04-11 21:53:30 +02:00
kaiyou
b4134b7774 Add a client setup page, fixes #342 2018-04-11 21:45:17 +02:00
kaiyou
fa0bda7b69 Merge the auto-forward and antispam settings 2018-04-11 21:28:36 +02:00
kaiyou
3ef4e1f6b7 Add support for recaptcha upon signup 2018-04-11 21:08:59 +02:00
kaiyou
e02e47c48e Merge pull request #416 from calebj/patch-1
Add support for sending from alternative domains
2018-04-11 20:37:23 +02:00
kaiyou
d23becb910 Disable esld when signing with dkim, fixes #435 2018-04-11 20:35:31 +02:00
kaiyou
8504b78c76 Merge pull request #437 from romracer/fix-436
Use HOST_ADMIN in "Forwarding authentication server".  Fixes #436.
2018-04-10 09:18:17 +02:00
Scott
b9e67635f4 Use HOST_ADMIN in "Forwarding authentication server". Fixes #436. 2018-04-07 12:40:32 -05:00
steamedhams1
46cd86e66a Update .env
Fixed typo
2018-04-04 02:21:37 -07:00
Mildred Ki'Lya
649a4fc9cf Add Delivered-To header to received messages
Postfix, after expanding the alias, is not transmitting the original
envelope recipient email address to dovecot and cannot record it in a
Received: header.

The LMTP DSN extension allows postfix to specify an ORCPT= parameter to
the "RCPT TO:" line (in postfix src/smtp/smtp_proto.c). However, dovecot
does not support the DNS extension on the LMTP endpoint. It has
preliminary support of the ORCPT parameter in latest versions but is is
disabled and not working.

The solution taken was to add a sieve script to parse the Received:
header written by postfix and parse the original RCPT TO address from
it. Then add the header through the "editheader" sieve extension. Later
sieve scripts can take this header to perform further filtering.
2018-04-03 22:19:13 +01:00
kaiyou
52bad80af8 Add a link to MFAshby's fork 2018-03-21 22:49:59 +01:00
kaiyou
d5cfc91fc4 Merge pull request #414 from adi90x/master
Add explicit ssl_protocols in conf
2018-03-21 08:18:54 +01:00
Caleb Johnson
b58dcfb511 Add support for sending from alternative domains
See Mailu/Mailu#415
2018-03-19 17:54:04 -05:00
AdrienM
29a1548532 Add explicit ssl_protocols in conf 2018-03-19 08:36:03 +00:00
kaiyou
bac906ba5b Switch to edge for clamav 2018-03-13 19:32:05 +01:00
Vados
f2c74dd014 Remove ports option completely
Not needed since `hostNetwork: true`
2018-03-13 21:06:53 +09:00
Vados
82ff7c421d Update NGINX Ingress controller configuration 2018-03-13 20:51:36 +09:00
kaiyou
88903bc6f5 Prepare for multi-version setup wizard 2018-03-10 15:25:52 +01:00
kaiyou
90ba755abc Test commit 2018-03-10 15:02:44 +01:00
kaiyou
efaa3058c0 Very first version of the configuration wizard 2018-03-10 14:05:49 +01:00
Patrick Oberdorf
d0f759acca Adding unbound as dns resolver 2018-03-08 15:57:28 +01:00
kaiyou
31b887807a Enable enigma for testing in Roundcube, fixes #391 2018-03-05 21:32:31 +01:00
kaiyou
8903cb1367 Update Roundcube to 1.3.4 2018-03-05 21:25:58 +01:00
Paul Binks
933d3a435d Update setup.rst 2018-03-05 21:22:05 +01:00
kaiyou
a0d7b987ca Remove the reference to stable in the setup docs, fixes #393 2018-03-05 21:19:11 +01:00
Paul Binks
a453df3503 Update cli.rst 2018-03-05 21:17:24 +01:00
Paul Binks
75c103ccc9 Update maintain.rst 2018-03-05 21:17:19 +01:00
Paul Binks
198f145821 Update reverse.rst 2018-03-05 21:17:14 +01:00
Paul Binks
f818936012 Update dns.rst 2018-03-05 21:17:09 +01:00
Paul Binks
dba6bf5ae9 Update index.rst 2018-03-05 21:17:03 +01:00
Paul Binks
3ae2dffb4d Update requirements.rst 2018-03-05 21:16:58 +01:00
kaiyou
eaaef0d0f5 Merge pull request #403 from iBrotNano/master
Added webmail-imap dependency in docker-compose.yml.
2018-03-05 20:47:28 +01:00
kaiyou
df42a2d149 Merge pull request #388 from Sharsie/feat-roundcube-attachments
Fixes the inability to upload attachments from roundcube
2018-03-05 20:41:28 +01:00
Marcel Melzig
e7d838ac2a Added webmail-imap dependency in docker-compose.yml. 2018-03-02 11:23:41 +01:00
Arnie
9dfb2b8f2c Fixes the inability to upload attachments from roundcube #365 2018-02-20 11:37:47 +01:00
kaiyou
dfb5463c94 Relax the frame filtering to allow roundcube to display previews 2018-02-11 22:56:26 +01:00
kaiyou
04278b6cbf Pass the full host to the backend, fixes #372 2018-02-06 18:56:41 +01:00
kaiyou
9e7aa423fd Merge pull request #376 from navossoc/patch-1
Update configuration.rst
2018-02-01 00:40:53 +01:00
Rafael Cossovan
23f392efb2 Update configuration.rst
Fix env variable.
2018-01-31 09:00:53 -02:00
kaiyou
6c56c8e298 Specify the client max body size in the front, related to #371 2018-01-28 10:35:55 +01:00
kaiyou
8cee04dbcc Merge pull request #373 from mildred/master
Add parameters to specify hosts for various containers
2018-01-27 11:26:59 +01:00
Mildred Ki'Lya
f538e33dcf Parametrize hosts
Allows to use mailu without docker-compose when hostnames are not set up
by docker itself but provided via a separate resolver.

Use case: use mailu using nomad scheduler and consul resolver instead of
docker-compose. Other servers are provided by the DNS resolver that
resolves names like admin.service.consul or webmail.service.consul.
These names needs to be configurable.
2018-01-24 22:54:41 +01:00
kaiyou
d8ebfbe020 Display infinite user quotas correctly, fixes #368 2018-01-16 20:03:07 +01:00
kaiyou
7c2b4be954 Merge pull request #358 from SunMar/master
Adding options for when using reverse proxy (real ip header / from and mail-letsencrypt)
2018-01-16 19:49:14 +01:00
SunMar
6ec0fe7036 Adding options for mail-letsencrypt 2018-01-04 16:23:28 +01:00
kaiyou
34d88144b2 Set the temp directory for Roundcube, related to #365 2017-12-19 19:50:38 +01:00
kaiyou
d98f16333a Display an infinite quota when necessary for users, fixes #345 2017-12-17 15:13:47 +01:00
kaiyou
8d224824ea Display a conditional button for generation dkim keys, fixes #346 2017-12-17 15:11:08 +01:00
kaiyou
d0b8de72e4 Do not deny HTTP access upon TLS error when the flavor is mail 2017-12-17 15:09:10 +01:00
kaiyou
bfc898c2d8 Move dhparam to /conf 2017-12-17 14:47:02 +01:00
Greg Fitzgerald
f1ad2cf4d0 Use a predefined dhparam.pem, This fixes issue #322 2017-12-17 14:47:02 +01:00
kaiyou
7a9d2c9725 Merge pull request #353 from ripkens/patch-1
Added adress verification before accepting mails for delivery
2017-12-17 14:41:28 +01:00
kaiyou
bbef3b651e Roundcube is now using php7, update the htaccess, fixes #366 2017-12-17 14:35:14 +01:00
kaiyou
7f92bfd6b6 Install the php zip extension for roundcube, fixes #364 2017-12-17 14:34:45 +01:00
kaiyou
ca2cc4fc24 Add some details about the development environment 2017-12-06 19:51:14 +01:00
kaiyou
36e2e35ea8 Merge pull request #338 from gregf/fix_roundcube_attachment_size
This sets the max attachment size in roundcube
2017-12-05 19:10:44 +01:00
Greg Fitzgerald
7594226c50 Fix copy/paste failure 2017-12-04 18:49:42 -05:00
kaiyou
acb5d7da38 Use relative redirect for / to the webmail 2017-12-04 22:42:12 +01:00
kaiyou
2dfc91ac4d Use a map for passing x-forwarded-proto along 2017-12-04 22:19:17 +01:00
Marcus Ripkens
7375134474 Update main.cf 2017-12-04 22:04:22 +01:00
Marcus Ripkens
175349a224 Added adress verification before accepting mails for delivery
See https://www.endpoint.com/blog/2015/05/28/postfix-address-verification

Block client until address verifiction is completed and mail will not be rejected by relaying MTA or smarthost.
If verification fails, mail is rejected.
If verification takes too long, mail is temporaryly rejected and sending client will retry later.
2017-12-04 22:02:33 +01:00
kaiyou
42314d3d75 Remove a remaining rebug print() statement 2017-12-04 21:55:40 +01:00
kaiyou
a4f46ced49 Properly use x-forwarded-proto with redirects in the webui, related to #347 2017-12-04 21:16:08 +01:00
kaiyou
48d736feef Configure a resolver for the mail server to populate xclient hostnames 2017-12-04 20:28:54 +01:00
kaiyou
2e4a9e21f8 Merge pull request #351 from rageOS/patch-1
Fix for relayed Domains
2017-12-04 20:14:21 +01:00
rageOS
59766d289e Fix for relayed Domains 2017-12-04 19:57:51 +01:00
kaiyou
319965a4af Add a format check for the email localpart when signing up 2017-12-03 19:37:36 +01:00
kaiyou
18ae6a4a0f Fix the signup quota 2017-12-03 17:53:33 +01:00
kaiyou
e85eada522 Fix the login view when no next page is provided 2017-12-03 17:53:12 +01:00
kaiyou
def0a8b89d Fix the signup domain list with non infinite mailbox max count 2017-12-03 17:52:54 +01:00
kaiyou
2662abedef Enable self-service account signup 2017-12-03 12:01:25 +01:00
kaiyou
3b79e5196a Add a default quota setting for new accounts 2017-12-03 12:01:03 +01:00
kaiyou
6d71fa96ad Add a signup field to domains 2017-12-03 12:00:44 +01:00
kaiyou
4761646616 Make sure stale pid files are dealt with, fix #341 2017-12-03 11:28:26 +01:00
Greg Fitzgerald
bbf0a9a61c This sets the max attachment size in roundcube
I used the php.ini from the rainloop folder, so they are both set to
25MB.
2017-11-30 19:16:11 -05:00
kaiyou
743eb81908 Fix the Webdav behavior with Radicale, related to #334 2017-11-30 22:03:42 +01:00
kaiyou
03d3351496 Set the title of web pages in the docs 2017-11-21 22:37:21 +01:00
kaiyou
328001a417 Merge pull request #329 from HorayNarea/patch-1
Disable ssl_session_tickets, see https://wiki.mozilla.org/Security/Server_Side_TLS#TLS_tickets_.28RFC_5077.29
2017-11-21 22:16:25 +01:00
kaiyou
f3dd8c2112 Merge branch '1.5' 2017-11-21 22:03:23 +01:00
kaiyou
e311606cf6 Update the changelog for version 1.5.1 2017-11-21 22:01:32 +01:00
kaiyou
c545b8d110 Honor feature limitations for imap and pop3 2017-11-21 20:46:32 +01:00
kaiyou
b6a7e04124 Update messages.po (POEditor.com) 2017-11-20 00:17:51 +01:00
kaiyou
2c9ad0d486 Update messages.po (POEditor.com) 2017-11-20 00:17:48 +01:00
kaiyou
53b14d2fb5 Update messages.po (POEditor.com) 2017-11-20 00:17:46 +01:00
kaiyou
3e464b0b70 Update messages.po (POEditor.com) 2017-11-20 00:17:44 +01:00
kaiyou
952a50665b Update messages.po (POEditor.com) 2017-11-20 00:17:42 +01:00
kaiyou
68828a313b Update messages.po (POEditor.com) 2017-11-20 00:17:39 +01:00
kaiyou
4932510e08 Update messages.po (POEditor.com) 2017-11-20 00:17:37 +01:00
kaiyou
8fc64057d6 Update messages.po (POEditor.com) 2017-11-20 00:17:35 +01:00
kaiyou
d4441b6815 Move nl and sv loca to LC_MESSAGES 2017-11-20 00:15:33 +01:00
kaiyou
ab34ce4e8e Add dummy files for pl and it loca 2017-11-20 00:12:39 +01:00
kaiyou
1b4248a0a3 Update messages.po (POEditor.com) 2017-11-20 00:11:38 +01:00
kaiyou
b3c5566db1 Update messages.po (POEditor.com) 2017-11-20 00:11:36 +01:00
kaiyou
2f4758a445 Update messages.po (POEditor.com) 2017-11-20 00:11:34 +01:00
kaiyou
e368c200b1 Update messages.po (POEditor.com) 2017-11-20 00:11:31 +01:00
kaiyou
9f7b1fd817 Update messages.po (POEditor.com) 2017-11-20 00:11:29 +01:00
kaiyou
de8701a705 Update messages.po (POEditor.com) 2017-11-20 00:11:27 +01:00
kaiyou
f3ae318132 Perform webdav authentication in nginx, fixes #330 2017-11-20 00:09:19 +01:00
kaiyou
17b184e5c8 Implement a basic authentication API 2017-11-20 00:08:48 +01:00
kaiyou
8920982213 Properly pass the request uri to the authentication backend 2017-11-18 16:40:01 +01:00
kaiyou
97dd9ed77c Fix a missing variable in the nginx config 2017-11-18 15:22:38 +01:00
Thomas Sänger
d61ba8e651 disable ssl_session_tickets 2017-11-15 12:34:00 +01:00
kaiyou
c877d1affb Merge pull request #326 from HorayNarea/roundcube
upgrade php for roundcube and rainloop to v1.3.3.3
2017-11-13 21:40:57 +01:00
kaiyou
1c3df2b1fc Fix the compose dependencies for front and admin container 2017-11-13 21:40:22 +01:00
kaiyou
eb32871904 Force nginx to run dns queries at runtime 2017-11-13 21:40:22 +01:00
Thomas Sänger
c0fc9b045b bump roundcube version (security update) 2017-11-13 15:55:18 +01:00
kaiyou
dc79e6e539 Merge pull request #325 from HorayNarea/redis
use alpine-image for redis
2017-11-13 08:12:30 +01:00
kaiyou
caec94389d Merge pull request #324 from HorayNarea/rspamd
remove previous rspamd start-script
2017-11-13 08:11:47 +01:00
kaiyou
e7ca93173a Merge pull request #323 from HorayNarea/front
automatically set nginx-worker based on CPU-count
2017-11-13 08:11:22 +01:00
Thomas Sänger
352d77bf33 upgrade php for roundcube 2017-11-12 23:34:57 +01:00
Thomas Sänger
a9350953c6 use alpine-image for redis 2017-11-12 23:23:54 +01:00
Thomas Sänger
c83676e02f remove previous rspamd start-script 2017-11-12 23:23:03 +01:00
Thomas Sänger
ad7c5e48c5 automatically set nginx-worker based on CPU-count 2017-11-12 23:21:00 +01:00
kaiyou
118f93d049 Add a code of conduct, fixes #319 2017-11-12 11:42:53 +01:00
kaiyou
7f3ac3a51c Add contributing guidelines 2017-11-12 11:38:49 +01:00
kaiyou
fc1bf5ed34 Merge pull request #318 from HorayNarea/patch-1
Update AUTHORS.md
2017-11-11 23:50:30 +01:00
Thomas Sänger
d8506053a9 Update AUTHORS.md 2017-11-11 23:43:30 +01:00
kaiyou
059cbb37a4 Update messages.po (POEditor.com) 2017-11-11 15:21:28 +01:00
kaiyou
e9f4719a40 Update messages.po (POEditor.com) 2017-11-11 15:21:26 +01:00
kaiyou
112cff3621 Update messages.po (POEditor.com) 2017-11-11 15:21:24 +01:00
kaiyou
f30a09f182 Update messages.po (POEditor.com) 2017-11-11 15:21:22 +01:00
kaiyou
826d212a75 Update messages.po (POEditor.com) 2017-11-11 15:21:19 +01:00
kaiyou
72029ca220 Update messages.po (POEditor.com) 2017-11-11 15:21:17 +01:00
kaiyou
aa9a065d5b Update messages.po (POEditor.com) 2017-11-11 15:14:30 +01:00
kaiyou
2e370e3731 Update messages.po (POEditor.com) 2017-11-11 15:14:27 +01:00
kaiyou
ebddc7bec2 Add dummy translations for swedish and dutch 2017-11-11 15:12:14 +01:00
kaiyou
89ac22dd90 Express dependencies in the Compose configuration, related to #316 2017-11-11 15:08:23 +01:00
kaiyou
f362ecdb19 Fix the missing trailing space on /webmail, fixes #304 2017-11-10 16:04:40 +01:00
kaiyou
652ca769dc Allow authentication from webmail directly, fixes #308 2017-11-10 15:54:41 +01:00
kaiyou
28eff398d1 Send a vacation response only until the end date, fixes #218 2017-11-10 15:39:16 +01:00
kaiyou
011e1fa52d Add an end of vacation field, related to #218 2017-11-10 15:25:30 +01:00
kaiyou
fb42797ab7 Use SITENAME and WEBSITE properly in the admin ui 2017-11-10 15:00:51 +01:00
kaiyou
872271cb47 Clean the configuration variable list 2017-11-10 14:56:55 +01:00
kaiyou
1a3f85fbc2 Make the rspamd webui available, fixes #157 2017-11-10 14:49:36 +01:00
kaiyou
3675fdb915 Install the proper rspamd modules on top of Alpine 2017-11-10 14:48:13 +01:00
kaiyou
ac0c339aa8 Implement welcome emails, fixes #107 2017-11-10 11:56:43 +01:00
kaiyou
570e90acbc Move email send features to the User model 2017-11-10 11:55:58 +01:00
kaiyou
92f2025d7c Enable pop3 on the frontend, fix #313 2017-11-10 10:15:30 +01:00
kaiyou
6e61500eb1 Fix the authentication behavior with non-existing users 2017-11-10 10:15:30 +01:00
kaiyou
b676366a1d Merge pull request #312 from julywind/master
merge Chinese Simple translation
2017-11-09 11:37:56 +01:00
HouMingtao [侯明涛]
b0f8d7ab78 move to new translation folder
Change-Id: If4b4a25b305aab3d96155283881573a125272f81
2017-11-09 15:21:00 +08:00
HouMingtao [侯明涛]
0873fc4eb9 add Chinese Simple Language 2017-11-09 15:03:31 +08:00
kaiyou
558528ff96 Merge pull request #310 from ltouro/ltouro-tls-flavor-env
Add the new TLS_FLAVOR "mail" to the env file
2017-11-08 19:23:53 +01:00
Lucas
8f6f01e07f Add the new TLS_FLAVOR "mail" to the env file
Update the env file to add the new TLS_FLAVOR "mail" in the list of possible values.
2017-11-08 14:29:04 -02:00
kaiyou
2427544972 Move statistics to the start.sh script for clarity 2017-11-08 09:39:34 +01:00
kaiyou
8f70d40ac3 Add a missing volume for dkim to work on rspamd
(cherry picked from commit 8cab079af6)
2017-11-08 00:27:42 +01:00
kaiyou
8cab079af6 Add a missing volume for dkim to work on rspamd 2017-11-08 00:26:08 +01:00
kaiyou
e9813f99bf Fix the annonucement feature by sending mail to the proper smtp server, fixes #309 2017-11-07 17:21:32 +01:00
kaiyou
bfa50c5aa7 Add a new TLS flavor named 'mail' 2017-11-07 16:16:41 +01:00
kaiyou
41c73ac6b7 Update the version in .env 2017-11-07 16:08:42 +01:00
kaiyou
5fd29a6593 Update the version in .env 2017-11-07 16:07:58 +01:00
kaiyou
6d4a0507f2 Add a note about the stable branch 2017-11-07 16:05:54 +01:00
kaiyou
e3ccf8b51f Add a note about the stable branch 2017-11-07 16:05:46 +01:00
kaiyou
3966a9a401 Fix the documentation about exposing the admin interface
(cherry picked from commit 1ac0576af0)
2017-11-06 13:46:30 +01:00
kaiyou
1ac0576af0 Fix the documentation about exposing the admin interface 2017-11-06 13:46:22 +01:00
kaiyou
2500a32234 Use a template to replace the version tag
(cherry picked from commit 5831221c0e)
2017-11-06 13:24:49 +01:00
kaiyou
5831221c0e Use a template to replace the version tag 2017-11-06 13:24:40 +01:00
kaiyou
8c71037d3d Merge branch '1.5' 2017-11-06 12:47:53 +01:00
kaiyou
ea9f3c0242 Fix a Jinja compilation issue 2017-11-06 12:46:21 +01:00
kaiyou
49bfeda3d3 Use proper jinja templating inside rst templates 2017-11-06 12:21:28 +01:00
kaiyou
30a1657155 Use a custom role for including github_version 2017-11-06 12:10:54 +01:00
kaiyou
8b9d9ef86d Use github_version in literals 2017-11-06 11:48:39 +01:00
kaiyou
e170ecaeee Fix a typo in the release notes and remove the mention of the stable branch
(cherry picked from commit 0edd4864d2)
2017-11-06 11:43:24 +01:00
kaiyou
12447e42ff Generate dynamic download links for the configuration
(cherry picked from commit 881fae382a)
2017-11-06 11:43:15 +01:00
kaiyou
0edd4864d2 Fix a typo in the release notes and remove the mention of the stable branch 2017-11-06 11:42:49 +01:00
kaiyou
881fae382a Generate dynamic download links for the configuration 2017-11-06 11:41:32 +01:00
kaiyou
2f24c45c4c Set the statistics endpoint for version 1.5 2017-11-05 21:53:13 +01:00
kaiyou
a4055e2f49 Add a link to the changelog 2017-11-05 18:46:28 +01:00
kaiyou
71eb30c4b6 Fix some typos in the release notes 2017-11-05 18:38:57 +01:00
kaiyou
e15b11dc7e Publish release notes for version 1.5 2017-11-05 18:31:15 +01:00
kaiyou
6eaffd514d Make it possible to opt out of statistics 2017-11-05 18:30:53 +01:00
kaiyou
45902ae012 Fix a bug when trying to authenticate with a non existing user 2017-11-05 18:12:50 +01:00
kaiyou
baff8dd043 Avoid blacklisting the webmail 2017-11-05 18:12:26 +01:00
kaiyou
e625bc9adb Update the milter port on Postfix 2017-11-05 17:36:13 +01:00
kaiyou
81ec977e6e Make rspamd configuration overridable 2017-11-05 17:23:40 +01:00
kaiyou
f5ee77519e Rename spam threshold to spam tolerance 2017-11-05 17:17:51 +01:00
kaiyou
baf3b7d276 Update the changelog for version 1.5 2017-11-05 16:59:37 +01:00
kaiyou
3d6ad9c3ca Update the kubernetes docs and warn about incompatibility with version 1.5 2017-11-05 16:58:44 +01:00
kaiyou
08b567e3d9 Disable deprecated rmilter 2017-11-05 16:55:37 +01:00
kaiyou
1d9b3b00a7 Use rspamd as a milter service instead of deprecated rmilter 2017-11-05 16:54:23 +01:00
kaiyou
f943dc85a2 Update webmails 2017-11-05 14:18:06 +01:00
kaiyou
51f21a43fb Fix the screenshot in the README 2017-11-05 00:45:37 +01:00
kaiyou
4b73c35b34 Update the docs to reflect the new website 2017-11-05 00:44:03 +01:00
kaiyou
e0dd708ce0 Fix the reverse proxy documentation 2017-11-05 00:34:32 +01:00
kaiyou
0d7ab122d5 Add the documentation about reverse proxies 2017-11-05 00:30:03 +01:00
kaiyou
17f49e77e5 Update the documentation index 2017-11-05 00:24:30 +01:00
kaiyou
f8a6c8a415 Add contributors documentations 2017-11-05 00:24:18 +01:00
kaiyou
a68802b3b5 Add the demo server and release notes 2017-11-05 00:24:10 +01:00
kaiyou
8e1e937808 Add a page with features and screenshots 2017-11-04 23:56:15 +01:00
kaiyou
f0759ffda0 Update the readme to link to the new Website 2017-11-04 23:41:21 +01:00
kaiyou
408e9dc85e Fix the build directory path when deploying 2017-11-04 23:21:58 +01:00
kaiyou
f5db5d183b Add the deploy command to travis builds 2017-11-04 23:19:47 +01:00
kaiyou
d433c7a0ed Add paramiko to upload documentations after the build 2017-11-04 23:16:29 +01:00
kaiyou
9fbdf70dc2 Add a travis build for the documentation 2017-11-04 22:47:40 +01:00
kaiyou
56c0c00840 Add some shields on the homepage 2017-11-04 22:05:11 +01:00
kaiyou
70c32787d6 Insert a dynamic template for multiversion rendering 2017-11-04 21:38:29 +01:00
kaiyou
8746fafc14 Simplify the Sphinx configuration 2017-11-04 19:28:19 +01:00
kaiyou
ce9d991a13 Improve the documentation menu 2017-11-04 19:07:55 +01:00
kaiyou
f5ccc0e09c Remove unused makefiles 2017-11-04 19:01:00 +01:00
kaiyou
f2ff77d554 Remove unused directories 2017-11-04 19:00:45 +01:00
kaiyou
1434e788ee Add a requirement list 2017-11-04 18:59:23 +01:00
kaiyou
f22194d78b Rename the webmails directory 2017-11-04 18:48:22 +01:00
kaiyou
edbea372e9 Merge branch 'master' into refactor-repo 2017-11-04 18:40:53 +01:00
kaiyou
b0eadadc5c Update the gitignore 2017-11-04 18:20:53 +01:00
kaiyou
48bc67428b Add a first version of the tracking code 2017-11-03 21:50:28 +01:00
kaiyou
40e6604d16 Enable dhparam and weaken TLS on port 25 using starttls 2017-11-03 20:37:10 +01:00
kaiyou
2d22e9cabe Add the Mailu logo 2017-11-02 20:22:49 +01:00
kaiyou
bc44b83819 Update links for the compose setup 2017-11-02 20:16:07 +01:00
kaiyou
5d395a2dd0 Fix the version number in the documentation 2017-11-02 20:05:49 +01:00
kaiyou
fcf9515bff Fix the rst syntax for most documentation 2017-11-02 20:05:12 +01:00
kaiyou
dc2f1280ed Import the documentation from the wiki 2017-11-01 20:12:17 +01:00
kaiyou
ac53b3ed97 Merge branch 'master' into refactor-repo 2017-11-01 18:29:25 +01:00
kaiyou
f9708e874a Fix the service list page 2017-11-01 16:29:05 +01:00
kaiyou
8722e72f8d Fix the token list template 2017-11-01 16:28:14 +01:00
kaiyou
de2a06aec1 Fix letsencrypt by using a separate port than the proxy 2017-11-01 15:24:22 +01:00
kaiyou
c59e05bb09 Add initial sphinx config 2017-11-01 12:37:32 +01:00
kaiyou
75842df0d4 Move compose base files to the docs 2017-11-01 12:11:59 +01:00
kaiyou
689be5f2d9 Move all directories per theme 2017-11-01 12:11:04 +01:00
kaiyou
26da4f306d Move images to the documentation folder 2017-11-01 12:04:31 +01:00
kaiyou
3f43b205d3 Prepare the changelog for 1.5.0 2017-11-01 12:03:09 +01:00
kaiyou
494db6a14a Add a note about changing the license related to contributors 2017-10-29 21:15:43 +01:00
kaiyou
7e0399a8be Update authors with translation 2017-10-29 21:14:20 +01:00
kaiyou
aac488d7e3 Update translations 2017-10-29 19:13:17 +01:00
kaiyou
51e9d56b89 Add gettext calls for i18n 2017-10-29 19:10:04 +01:00
kaiyou
cd90f0beb0 Merge pull request #292 from Mailu/feature-auth-tokens
Implement authentication tokens
2017-10-29 19:05:19 +01:00
kaiyou
23bb932785 Merge branch 'master' into feature-auth-tokens 2017-10-29 19:05:09 +01:00
kaiyou
19fe73b388 Implement authentication rate limit, fixes #116 2017-10-29 18:42:35 +01:00
kaiyou
716e166b11 Improve the sidebar, display site title and website link 2017-10-29 18:13:59 +01:00
kaiyou
924760273c Update the ui macros and polish the overall UI 2017-10-29 17:53:48 +01:00
kaiyou
8095798a04 Enable token-based authentication 2017-10-29 15:39:28 +01:00
kaiyou
51c301ec56 Switch to 1000 rounds for tokens (performance) 2017-10-29 15:39:14 +01:00
kaiyou
30dfefb24d Fix the token generation process 2017-10-29 15:39:01 +01:00
kaiyou
291fbe7bc4 Add views and templates for authentication tokens 2017-10-29 14:49:07 +01:00
kaiyou
814ed77d7f Add data structure for authentication tokens 2017-10-29 14:48:34 +01:00
kaiyou
eb40ea830f Make users and aliases email case insensitive 2017-10-29 13:44:49 +01:00
kaiyou
249f5d94d6 Add a debugging bar for development 2017-10-29 13:44:49 +01:00
kaiyou
db91889f0f Merge pull request #288 from bcyrill/patch-1
Update details.html
2017-10-26 08:16:26 +02:00
bcyrill
0eebd4a00d Update details.html
- Fix assignment in template
- Use updated environment option
2017-10-26 00:13:08 +02:00
kaiyou
8e25de6050 Fix vacation messages by setting the submission host properly 2017-10-22 23:43:50 +02:00
kaiyou
166aa02b01 Merge branch 'refactor-nginx' 2017-10-22 20:04:44 +02:00
kaiyou
6765a17545 Explicitely enable sasl_auth for the internal SMTP (Postifx, sigh..) 2017-10-22 19:44:58 +02:00
kaiyou
05b9ecbb34 Remove misinformed open relay for the internal smtp 2017-10-22 19:05:51 +02:00
kaiyou
47f453e494 Allow relaying when using the intenral SMTPd 2017-10-22 18:15:28 +02:00
kaiyou
c94e976f43 Fix a typo in the sqlite query 2017-10-22 18:07:36 +02:00
kaiyou
ff71e70360 Rename the authentication endpoint 2017-10-22 16:43:06 +02:00
kaiyou
3c9552a14b Make it possible to serve Mailu over ipv6 2017-10-22 16:13:13 +02:00
kaiyou
bb4c5150b5 Remove the scary warning 2017-10-22 16:07:12 +02:00
kaiyou
64cbab5104 Allow xclient even for non authenticated clients 2017-10-22 15:45:32 +02:00
kaiyou
690c05ea64 Switch behavior if the user is not authenticated 2017-10-22 15:44:44 +02:00
kaiyou
80d728c233 Forward SMTP to the xclient-authenticated endpoint 2017-10-22 15:01:25 +02:00
kaiyou
2c8810d7d3 Use an HTTP proxy for resolving the admin address dynamically 2017-10-22 15:01:04 +02:00
kaiyou
7d348440d8 Have radicale authenticate against the front 2017-10-22 15:00:41 +02:00
kaiyou
ea1d876d93 Add a specific server for xclient-authenticated connections 2017-10-22 15:00:16 +02:00
kaiyou
cac00086c9 Fix the outclean filter which was not embedded anymore 2017-10-22 11:31:55 +02:00
kaiyou
04a25fc4e3 Add specific unencrypted servers for internal connexions (webmails) 2017-10-22 11:31:32 +02:00
kaiyou
ec6d5acc18 Unescape passwords before cecking 2017-10-22 10:49:31 +02:00
kaiyou
0a74213eae Have nginx listen over ipv6 2017-10-21 19:50:49 +02:00
kaiyou
3230554b0d Do not enable starttls if no certificate 2017-10-21 18:58:18 +02:00
kaiyou
8a2ddcdf30 Fix a typo in the nginx config 2017-10-21 15:54:09 +02:00
kaiyou
9dd4150e7c Merge branch 'refactor-nginx' 2017-10-21 15:23:17 +02:00
kaiyou
5786bb3e1b Return the server address dynamically 2017-10-21 15:22:40 +02:00
kaiyou
9e3e86f0d0 Remove spaces around = sign in .env 2017-09-28 21:47:01 +02:00
kaiyou
3e2dfee431 Merge pull request #276 from droopy4096/master-backports
multiple bugfixes for config_sync and full coverage of user/alias/domain attributes added
2017-09-28 20:21:44 +02:00
Dmytro Makovey
18ba724505 pep8/flake8 applied 2017-09-28 08:37:39 -07:00
Dmytro Makovey
d50ba01892 autopep8 applied 2017-09-28 08:28:10 -07:00
Dmytro Makovey
b05e924f3b merged config_sync improvements/bugfixes 2017-09-27 21:57:57 -07:00
Dmytro Makovey
83e6d4400c fix user params updates 2017-09-27 21:48:20 -07:00
Dmytro Makovey
a6944582a3 fix python2-ism 2017-09-27 21:34:10 -07:00
Dmytro Makovey
c9f124c9b9 expand user and alias params 2017-09-27 21:29:42 -07:00
Dmytro Makovey
06d7828e06 fix multi-add of managers 2017-09-27 20:52:03 -07:00
Dmytro Makovey
4fed48eae1 commit earlier to fix issues with missing domains 2017-09-27 20:31:51 -07:00
Dmytro Makovey
977fcd01e0 add more verbosity for operations 2017-09-27 20:16:23 -07:00
Dmytro Makovey
454264ba31 fix typo 2017-09-27 19:44:19 -07:00
kaiyou
d84b63453f Merge pull request #271 from droopy4096/master-backports
Added config_update verbosity and expanded YAML format a touch
2017-09-27 20:25:14 +02:00
Dmytro Makovey
319b3e68bb backported proper empty field handling 2017-09-27 11:05:29 -07:00
Dmytro Makovey
2ffd779324 add some fail-safe for empty passwords 2017-09-27 11:04:19 -07:00
Dmytro Makovey
b64582b456 retracting dovecot cipher settings 2017-09-27 07:28:39 -07:00
kaiyou
7c483adfbb Merge pull request #273 from t3hmrman/add-kubernetes-resource-configs
Add kubernetes NGINX ingress and Mailu resource config
2017-09-27 08:10:14 +02:00
t3hmrman
f22c4899fd Add light documentation structure and README for kubernetes 2017-09-27 10:37:34 +09:00
Dmytro Makovey
9f267a44ee backported CLI options for domain command 2017-09-26 14:21:50 -07:00
Dmytro Makovey
1ee4f5db15 fix domain command invocation 2017-09-26 14:18:37 -07:00
Dmytro Makovey
292853fd57 backported domain/manager sync 2017-09-26 14:11:00 -07:00
Dmytro Makovey
ce2ad32efc add manager/domain configuration sync 2017-09-26 13:20:33 -07:00
t3hmrman
3ecb54b4e3 Add kubernetes NGINX ingress and Mailu resource config 2017-09-26 12:52:58 +09:00
Dmytro Makovey
5e55182b90 fix type check as per pull request comment 2017-09-25 06:59:01 -07:00
kaiyou
effb311742 Use relative redirects, as suggsted in #272 2017-09-24 22:43:16 +02:00
kaiyou
ba4ed579df Support TLS and STARTTLS for mail 2017-09-24 18:43:14 +02:00
kaiyou
4892fe47e6 Limit xclient to connections from the front container 2017-09-24 18:33:13 +02:00
kaiyou
4521fa9e29 Make path to admin and webmail configurable, related to #236 2017-09-24 18:16:36 +02:00
kaiyou
648d092e88 Fix proxifying to static assets 2017-09-24 17:59:58 +02:00
kaiyou
808809b37a Add letsencrypt support in the nginx container 2017-09-24 17:50:20 +02:00
kaiyou
a57096e613 Support specifyin multiple hostnames 2017-09-24 17:49:39 +02:00
kaiyou
7e9c04cd65 Do not include appscheduler 2017-09-24 17:48:27 +02:00
kaiyou
3b01f968b3 Remove traefik which has become incompatible 2017-09-24 15:45:10 +02:00
kaiyou
1b13728df3 Fix the dovecot startup script 2017-09-24 15:44:44 +02:00
kaiyou
3dac7fc597 Point roundcube to the front container 2017-09-24 15:44:23 +02:00
kaiyou
3c44006ccb Point rainloop to the front container 2017-09-24 15:44:01 +02:00
kaiyou
5097f57855 Redirect nginx authentication requests to the admin container 2017-09-24 15:43:46 +02:00
kaiyou
94a13aabf0 Handle nginx authentication requests in the admin container 2017-09-24 15:43:23 +02:00
kaiyou
a4851914d0 Do not disable login mismatch check in Postfix 2017-09-24 15:42:51 +02:00
kaiyou
13b9a9207d Switch to python and Jinja2 for the dovecot container 2017-09-24 14:42:40 +02:00
kaiyou
a11eb4ba35 Switch to python and Jinja2 for the Postfix container 2017-09-24 14:34:46 +02:00
kaiyou
67423b057d Prepare the docker compose configuration for nginx as a uninque frontend 2017-09-24 14:01:26 +02:00
kaiyou
755d9f0520 Prepare nginx as a unique frontend 2017-09-24 14:01:03 +02:00
kaiyou
995147f444 Create the conf/ directory for nginx 2017-09-24 13:09:47 +02:00
kaiyou
1854349ecc Use jinja2 for building nginx config 2017-09-24 13:09:12 +02:00
kaiyou
87cbeacecd Do not install openssl in the admin container anymore 2017-09-24 12:05:38 +02:00
kaiyou
870c7dbe5c Remove unused requirements from the admin app 2017-09-24 12:04:52 +02:00
kaiyou
97505d1367 Remove TLS tasks from the admin container 2017-09-24 12:02:26 +02:00
kaiyou
974c351802 Move the admin interface back to a blueprint 2017-09-24 12:00:39 +02:00
kaiyou
914427f852 Merge pull request #262 from Mailu/feature-xforwarded-prefix
Stop hardcoding URL prefix in containers
2017-09-24 11:47:45 +02:00
kaiyou
971e839201 Merge branch 'master' into feature-xforwarded-prefix 2017-09-24 11:46:58 +02:00
kaiyou
1d75cd8a33 Improve the warning message 2017-09-24 11:22:59 +02:00
kaiyou
d6dec0c1c7 Add a warning about 1.5 and traefik 2017-09-24 11:18:22 +02:00
Dmytro Makovey
d4cf5430e8 nginx is gone 2017-09-22 00:50:42 -07:00
Dmytro Makovey
8cf93ab999 added bacports and resolved conflicts 2017-09-22 00:42:37 -07:00
Dmytro Makovey
b3d961a3dc adding nginx modularity 2017-09-21 23:56:15 -07:00
Dmytro Makovey
f86391f839 be smarted about destination field 2017-09-19 08:27:19 -07:00
Dmytro Makovey
9ddfa0a633 adjust ciphers to a more secure set 2017-09-19 08:05:10 -07:00
kaiyou
e14f93d429 Do not remove openssl during the admin container setup 2017-09-18 21:34:43 +02:00
kaiyou
4ea0030f78 Merge pull request #263 from agglrx/feature-rainloop-update
Update to RainLoop v1.11.1
2017-09-17 20:47:06 +02:00
agglr
23b5e5873d Update to RainLoop v1.11.1 2017-09-17 20:29:06 +02:00
kaiyou
5c45aa6b38 Strip the path when accessing the webmail 2017-09-17 19:19:58 +02:00
kaiyou
8fc080898b Prepare the webmail to be accessed at / directly 2017-09-17 19:19:28 +02:00
kaiyou
6cd8e0e336 Fix the redirect to /webmail 2017-09-17 19:01:02 +02:00
kaiyou
f615af4a88 Fix the behavior during login 2017-09-17 18:55:54 +02:00
kaiyou
2b13af4638 Update messages.po (POEditor.com) 2017-09-17 16:32:59 +02:00
kaiyou
9fd60c3fa8 Update translations 2017-09-17 16:26:40 +02:00
kaiyou
924ca02016 Update messages.po (POEditor.com) 2017-09-17 16:25:56 +02:00
kaiyou
bb8c4e86c1 Update translations after moving mailu.admin 2017-09-17 14:38:00 +02:00
kaiyou
fed7665a0a Fix all references to mailu.admin 2017-09-17 14:37:10 +02:00
kaiyou
9358a76d89 Start moving things out of the admin module 2017-09-17 14:36:44 +02:00
kaiyou
0223999a04 Deprecate nginx as a Web frontend 2017-09-17 14:15:12 +02:00
kaiyou
a880bc908e Add some details to the README file 2017-09-17 12:59:37 +02:00
kaiyou
5192034c02 Fix the missing openssl requirement 2017-09-17 12:56:55 +02:00
kaiyou
01182d3708 Switch to rule-based hosts for certificate generation 2017-09-17 12:30:54 +02:00
kaiyou
52daccb74e Clean the requirements after removing certbot 2017-09-17 12:03:50 +02:00
kaiyou
a96478c496 Fix remaining migration scripts and remove initdb/flushdb from manage.py 2017-09-17 11:55:12 +02:00
kaiyou
829e4a5e28 Merge pull request #254 from Mailu/feature-traefik
Switch to traefik for proxying and querying letsencrypt
2017-09-16 22:39:07 +02:00
kaiyou
95970cd7b8 Stamp the database when creating it, fixes #259 2017-09-16 22:29:36 +02:00
kaiyou
00d09cf386 Fix the traefik labels in the compose configuration 2017-09-16 19:24:55 +02:00
kaiyou
a138bed95e Fix the docker-compose.yml so that / is handled by the admin container 2017-09-16 18:12:21 +02:00
kaiyou
a08185911d Merge branch 'master' into feature-traefik 2017-09-16 17:54:09 +02:00
kaiyou
9ee795a694 Redirect / to /webmail by default 2017-09-16 17:53:16 +02:00
kaiyou
68ba514297 Merge pull request #257 from Mailu/feature-relays
Implement relaying emails to specific SMTP
2017-09-16 13:07:49 +02:00
kaiyou
4463a4eade Merge pull request #252 from Mailu/feature-alternative-domains
Implement alternative domains
2017-09-16 13:06:52 +02:00
Dmytro Makovey
e6bedabef0 fix print call 2017-09-11 14:06:00 -07:00
kaiyou
7a4d3c0cb6 Generate Dovecot dh params locally until release 2.3 2017-09-11 20:41:32 +02:00
kaiyou
c4eeaad676 Disable MX queries when relaying mail to a remote smtp 2017-09-11 20:31:14 +02:00
Dmytro Makovey
e6a92af806 add verbosity level configuration option 2017-09-11 09:48:35 -07:00
Dmytro Makovey
e28285155e Expect list instead of string for destination 2017-09-11 09:11:12 -07:00
kaiyou
6b7a33c435 Add a (not working) postfix conf for transports 2017-09-11 08:12:04 +02:00
kaiyou
c4120dc132 Install openssl for dhparam generation 2017-09-10 21:07:43 +02:00
kaiyou
70d9972584 Check if a certificate already exists before trying to read it 2017-09-10 21:05:54 +02:00
kaiyou
d4254bfd1f Avoid duplicating relays with alternatives or domains 2017-09-10 20:49:49 +02:00
kaiyou
01ddfef149 Implement relayed domains in the admin interface 2017-09-10 20:48:39 +02:00
kaiyou
b5c55d10d3 Add the relay concept to the model 2017-09-10 20:30:03 +02:00
kaiyou
897609c667 Merge branch 'letzkus-fix-remove-clamav' 2017-09-10 19:43:13 +02:00
kaiyou
a092e3f9b2 Properly include the rmilter clamav configuration 2017-09-10 19:42:54 +02:00
kaiyou
89228c5b4b Merge branch 'fix-remove-clamav' of https://github.com/letzkus/Mailu into letzkus-fix-remove-clamav 2017-09-10 19:41:50 +02:00
kaiyou
22b4315a26 Merge pull request #253 from Mailu/Xumeiquer-master
Implement RUA and RUF for Dmarc
2017-09-10 19:41:31 +02:00
kaiyou
03b352cbcd Declare the DMARC RUA/RUF configuration items 2017-09-10 19:35:43 +02:00
kaiyou
9754fffbc4 Simplify the details page for RUA/RUF 2017-09-10 19:35:31 +02:00
kaiyou
d90b7444c8 Move settings to the email section 2017-09-10 19:28:59 +02:00
kaiyou
9acad29a24 Merge branch 'master' of https://github.com/Xumeiquer/Mailu into Xumeiquer-master 2017-09-10 19:28:00 +02:00
kaiyou
17b0471e73 Use the proper HOSTNAME parameter for HTTP hostname 2017-09-10 19:02:18 +02:00
kaiyou
4e0bd32d50 Support using dhparam in Postfix and Dovecot 2017-09-10 19:00:22 +02:00
kaiyou
53c3153229 Implement loading the certificate from traefik 2017-09-10 18:53:41 +02:00
kaiyou
9fc3ef4dd1 Add a traefik frontend with basic features 2017-09-10 18:07:19 +02:00
kaiyou
856d6176ca Handle redirects properly when logging in, fixes #195 2017-09-10 15:56:08 +02:00
kaiyou
52da307fa5 Freeze dependencies for the Docker container 2017-09-10 15:37:09 +02:00
kaiyou
64ded60b5e Implement the postfix part of domain aliasing 2017-09-10 15:30:25 +02:00
kaiyou
2631de8977 Merge branch 'master' into feature-alternative-domains 2017-09-10 15:01:29 +02:00
kaiyou
4e1869b635 Increase the max size of http requests, fix #207 2017-09-10 14:39:12 +02:00
kaiyou
901796f4ac Merge pull request #251 from Mailu/feature-recipient-delimiter
Feature recipient delimiter
2017-09-10 14:14:07 +02:00
kaiyou
4ee086a52a Make the recipient delimiter customizeable, fixes #233 and #164 2017-09-10 14:09:16 +02:00
kaiyou
a06d1146d8 Merge pull request #248 from Mailu/feature-postfix-master
Add the ability to customize the Postfix master configuration
2017-09-10 14:01:02 +02:00
kaiyou
1deee71e51 Fix the postconf command and rename the override file, fix #239 2017-09-10 13:56:46 +02:00
kaiyou
7af3c46f35 Merge pull request #247 from Mailu/feature-keep-forward
Feature keep forward
2017-09-10 13:40:55 +02:00
kaiyou
7f50f4c184 Fix the sqlite query, fix #243 2017-09-10 13:36:24 +02:00
kaiyou
921f9f73c3 Fix #249 2017-09-10 13:04:43 +02:00
kaiyou
e53c0db60d Merge branch 'stable' 2017-09-10 12:33:54 +02:00
Dmytro Makovey
fcf37e6d5e ignore vscode artefacts 2017-09-08 15:06:23 -07:00
Dmytro Makovey
6525969a56 ignoring virtualenv artefacts etc. 2017-09-08 15:06:22 -07:00
Dmytro Makovey
95fd89808c add more CLI operations: deletions of users and aliases 2017-09-08 15:06:20 -07:00
Dmytro Makovey
28f490ddee added object deletion to config update 2017-09-08 15:06:18 -07:00
Dmytro Makovey
59bc07cde5 add config sync for bulk operations on users and aliases driven by config management systems etc. 2017-09-08 15:06:16 -07:00
Dmytro Makovey
4dc2f896a2 rename user_raw to user_import for more clarity. Add proper docstring 2017-09-08 15:06:10 -07:00
Dmytro Makovey
974f95f25e backport new bulk operations 2017-09-08 15:05:02 -07:00
kaiyou
e1533a12e3 Allow one manager to add another to the domain, fixes #203 2017-09-03 18:51:50 +02:00
kaiyou
f823f1e8a5 Add the ability to configure alternative domains 2017-09-03 18:30:00 +02:00
kaiyou
07c789fc8b Add a button to keep forwarded messages 2017-09-03 18:23:07 +02:00
kaiyou
bffc51401d Add a recipient delimiter for extended addresses 2017-09-03 16:18:08 +02:00
kaiyou
1fa01745a3 Add the ability to customize the Postfix master configuration 2017-09-03 16:08:43 +02:00
kaiyou
c834d34bae Implement keeping or dropping forwarded messages in postfix 2017-09-03 15:46:39 +02:00
kaiyou
2b3b1aeb19 Add a button to keep forwarded messages 2017-09-03 15:43:30 +02:00
kaiyou
213ee1d8b6 Merge pull request #246 from trnila/configurable-crypt-scheme
Configurable default password scheme used for passwords
2017-09-03 14:33:03 +02:00
kaiyou
cd8a29ee1a Fix a regression introduced in 3e85bb2d73, bypassing sender restrictions on port 25 2017-09-02 20:01:17 +02:00
Daniel Trnka
da7c39263c Configurable default password scheme used for passwords 2017-09-02 17:53:21 +02:00
Jaume Martin
5b6cba3b9e Update details.html 2017-08-27 20:29:04 +02:00
Jaume Martin
4834438042 Update .env.dist 2017-08-27 20:24:15 +02:00
kaiyou
1c0717e3db Merge pull request #238 from nalt/master
Admin: Switch to alpine for smaller image size
2017-08-27 13:59:31 +02:00
kaiyou
388d77dec7 Merge pull request #235 from droopy4096/user_raw
User import routine (and selector for ecryption hashing algorithm)
2017-08-27 13:58:40 +02:00
kaiyou
128dee0872 Merge pull request #234 from n0izn0iz/patch-1
Print stderr when certbot fails
2017-08-27 13:55:29 +02:00
kaiyou
5fbaa3d390 Merge pull request #226 from jdrowell/acme_uses_http
The ACME spec says that http validation should be done via http, not …
2017-08-27 13:54:55 +02:00
nalt
29cc77383b Admin: Switch to alpine for smaller image size 2017-08-26 20:02:18 +02:00
Dmytro Makovey
e8b62484a9 ignore vscode artefacts 2017-08-25 14:49:27 -07:00
Dmytro Makovey
8565939904 ignoring virtualenv artefacts etc. 2017-08-25 14:48:36 -07:00
Dmytro Makovey
433da57015 add more CLI operations: deletions of users and aliases 2017-08-25 14:38:16 -07:00
Dmytro Makovey
d099e24f18 added object deletion to config update 2017-08-25 13:07:07 -07:00
Dmytro Makovey
e4b338c9a4 add config sync for bulk operations on users and aliases driven by config management systems etc. 2017-08-25 12:44:05 -07:00
Dmytro Makovey
aef8975332 rename user_raw to user_import for more clarity. Add proper docstring 2017-08-24 09:07:28 -07:00
Dmytro Makovey
db9ac1f68e add encryption scheme manipulation 2017-08-24 07:23:54 -07:00
n0izn0iz
434a3c017b Print stderr when certbot fails 2017-08-24 14:06:31 +02:00
kaiyou
8d0d8c3910 Merge pull request #222 from swoopla/master
Use exec to start rsyslogd
2017-07-31 21:00:42 +02:00
kaiyou
dc86a3feec Try to renew the certificate less often, related to #223 2017-07-31 20:47:03 +02:00
John D. Rowell
85b96a33aa The ACME spec says that http validation should be done via http, not https. 2017-07-29 14:27:51 -03:00
P. Vibet
7ac47d55e9 Use exec to start rsyslogd 2017-07-19 07:21:14 +02:00
kaiyou
2bfe11c1a4 Merge pull request #194 from interlegis/1.4-managercommands
Add setlimits and setmanager commands to manage.py
2017-07-02 19:26:56 +02:00
kaiyou
5a2eddbce1 Set the maximum upload size for rainloop 2017-07-02 17:23:23 +02:00
kaiyou
caf0ba4747 Merge pull request #210 from Logan2211/rmilter-overrides
Re-enable rmilter overrides
2017-07-02 16:56:31 +02:00
kaiyou
a1795d18fd Mount the postfix queue as a volume, fixes #211 2017-07-02 16:39:00 +02:00
kaiyou
4053273fe6 Use relaynets in rmilter whitelist, fixes #140 2017-07-02 16:26:31 +02:00
Fabian Letzkus
117e858df3 Added parameter checking in rmilter image, added parameter in docker-compose, added parameter in .env 2017-06-25 16:15:47 +00:00
Fabian Letzkus
0954fd50fb Added configuration paramter to replace clamav with none 2017-06-25 16:12:44 +00:00
Logan V
3a03d08d22 Re-enable rmilter overrides
rmilter overrides were disabled without explanation in
2a3f62fc65. This will re-enable the
ability to override rmilter's configuration, which is necessary in
most environments where significant mail volumes occur on a single
inbox, since the default milter configuration only allows 20
mails/second per recipient.
2017-06-21 10:00:52 -05:00
kaiyou
633d93aa8c Have rspamd listen on ipv6 as well 2017-06-15 20:43:29 +02:00
kaiyou
4bdd8c1df5 Properly load the nginx lua module 2017-06-05 13:13:06 +02:00
kaiyou
4e212e3d60 Fix the nginx container build (package name changed for nginx-lua) 2017-06-05 12:40:41 +02:00
kaiyou
b011a44814 Have nginx listen on ipv6 addresses as well 2017-06-05 12:17:06 +02:00
kaiyou
ffac116e1f Merge branch 'stable' 2017-06-04 09:43:03 +02:00
kaiyou
31012abf1f Merge pull request #205 from curry684/patch-1
Split tags correctly too
2017-06-04 09:32:27 +02:00
Niels Keurentjes
8c8e5f8a1f Split tags correctly too
As made possible by https://github.com/jderusse/docker-gitsplit/pull/7
2017-05-29 13:51:43 +02:00
kaiyou
7350e205ab Merge pull request #198 from OlegDz/master
add clamav-libunrar
2017-05-04 18:32:15 +02:00
OlegDz
fea32af6e9 add clamav-libunrar 2017-04-21 14:54:53 +03:00
Fabio Rauber
4d0b9f9299 Add setlimits and setmanager commands to manage.py 2017-04-17 12:09:48 -03:00
Pierre Jaury
9bac79692d Make rspamd listen on 0.0.0.0, fix #179 2017-04-09 17:01:53 +02:00
kaiyou
6684dfd8a0 Merge pull request #190 from curry684/master
Perform read-only splits for the containers
2017-04-09 16:58:10 +02:00
Niels Keurentjes
010e5ca2a6 Perform read-only splits for the containers
The .gitsplit.yml file contains the configuration to be used by Jérémy
Derussé's docker-gitsplit container.

For usage instructions see https://github.com/jderusse/docker-gitsplit
2017-04-05 23:55:54 +02:00
Pierre Jaury
14f30b300f Merge branch 'master' of github.com:Mailu/Mailu 2017-03-22 19:27:37 +01:00
Pierre Jaury
e26c6f7a6e Fix the nginx startup script 2017-03-22 19:26:38 +01:00
kaiyou
dab8b03a8d Merge pull request #176 from izissise/master
Add execute permission on start.sh for nginx-no-https
2017-03-19 15:57:16 +01:00
kaiyou
ed01de181f Merge pull request #174 from binor/patch-1
Add dulwich for git support
2017-03-19 15:56:58 +01:00
Hugues Morisset
a6e1da5a43 Add execute permission on start.sh for nginx-no-https 2017-03-08 17:29:25 +01:00
kaiyou
2b2dd0b46b Merge pull request #173 from tiangolo/nginx-no-https
Add alternative frontend nginx-no-https
2017-03-08 08:00:24 +01:00
binor
79a1c6a166 Add dulwich for git support
Radicale supports automatic versioning of calendar event changes if a git repository was initialized in the data directory. For this to work, Radicale needs dulwich as an interface to the git repository.

http://radicale.org/user_documentation/#idgit-support
2017-03-02 09:06:31 +01:00
Sebastián Ramírez
8543d513a9 Add alternative frontend nginx-no-https 2017-03-01 22:02:11 -05:00
kaiyou
f421bee148 Merge pull request #170 from andreasfaerber/master
Create and use SSL dhparam file if not mounted, NGINX_SSL_DHPARAM_BITS variable in .env.dist file
2017-02-25 14:08:17 +01:00
kaiyou
cd3bd8a0cb Merge pull request #169 from jkarlosb/patch-1
Updated AUTHORS.md
2017-02-25 14:06:36 +01:00
kaiyou
c72b4d92ab Merge pull request #168 from tiangolo/fix-nginx-certbot
Fix Nginx entrypoint
2017-02-25 14:06:18 +01:00
Andreas Faerber
49904c0945 Create and use ssl dhparam file if not existing (mounted), NGINX_SSL_DHPARAM_BITS variable in .env.dist file 2017-02-25 09:55:00 +01:00
Andreas Faerber
7e469459c7 Create and use ssl dhparam file if not mounted, NGINX_SSL_DHPARAM_BITS variable in .env.dist file 2017-02-25 09:53:53 +01:00
Carlos Bernárdez
5626ff93f7 Updated AUTHORS.md 2017-02-24 00:28:25 +01:00
Sebastián Ramírez
dac97c72ce Fix nginx entrypoint 2017-02-23 16:43:08 -05:00
Pierre Jaury
fe0b292d45 Handle infinite quotas when adding validators, fixes #162 2017-02-14 21:37:51 +01:00
Pierre Jaury
67647df83a Publish version 1.4.0 2017-02-12 19:56:01 +01:00
Pierre Jaury
e6c18e6ac3 Use relative path for certificates, fixes #35 2017-02-12 16:58:58 +01:00
436 changed files with 23544 additions and 5133 deletions

View File

@@ -1,77 +0,0 @@
# Mailu main configuration file
#
# Most configuration variables can be modified through the Web interface,
# these few settings must however be configured before starting the mail
# server and require a restart upon change.
###################################
# Common configuration variables
###################################
# Set this to the path where Mailu data and configuration is stored
ROOT=/mailu
# Mailu version to run (stable, 1.0, 1.1, etc. or latest)
VERSION=stable
# Set to a randomly generated 16 bytes string
SECRET_KEY=ChangeMeChangeMe
# Address where listening ports should bind
BIND_ADDRESS=127.0.0.1
# Main mail domain
DOMAIN=mailu.io
# Exposed mail-server hostname
HOSTNAME=mail.mailu.io
# Postmaster local part (will append the main mail domain)
POSTMASTER=admin
# Docker-compose project name, this will prepended to containers names.
COMPOSE_PROJECT_NAME=mailu
###################################
# Optional features
###################################
# Choose which frontend Web server to run if any (value: nginx, none)
FRONTEND=none
# Choose which webmail to run if any (values: roundcube, rainloop, none)
WEBMAIL=none
# Expose the admin interface in publicly (values: yes, no)
EXPOSE_ADMIN=no
# Use Letsencrypt to generate a TLS certificate (uncomment to enable)
# ENABLE_CERTBOT=True
# Dav server implementation (value: radicale, none)
WEBDAV=none
###################################
# Mail settings
###################################
# Message size limit in bytes
# Default: accept messages up to 50MB
MESSAGE_SIZE_LIMIT=50000000
# Networks granted relay permissions, make sure that you include your Docker
# internal network (default to 172.17.0.0/16)
RELAYNETS=172.16.0.0/12
# Will relay all outgoing mails if configured
RELAYHOST=
# Fetchmail delay
FETCHMAIL_DELAY=600
###################################
# Developers
###################################
# Uncomment this to enable debugging globally
# DEBUG=True

15
.gitignore vendored
View File

@@ -1,12 +1,15 @@
*.pyc *.pyc
*.mo *.mo
__pycache__ __pycache__
/admin/lib
/admin/bin
/admin/include
pip-selfcheck.json pip-selfcheck.json
/core/admin/lib*
/core/admin/bin
/core/admin/include
/docs/lib*
/docs/bin
/docs/include
/docs/_build
/.env /.env
/data
/docker-compose.mac.yml
/docker-compose.yml /docker-compose.yml
/.idea /.idea
/.vscode

25
.mergify.yml Normal file
View File

@@ -0,0 +1,25 @@
pull_request_rules:
- name: Successful travis and 2 approved reviews
conditions:
- status-success=continuous-integration/travis-ci/pr
- label!=["status"/wip","status/blocked"]
- "#approved-reviews-by>=2"
actions:
merge:
method: merge
strict: true
dismiss_reviews:
approved: true
- name: Trusted author, successful travis and 1 approved review
conditions:
- author~=(kaiyou|muhlemmer|mildred|HorayNarea|adi90x|hoellen|ofthesun9)
- status-success=continuous-integration/travis-ci/pr
- label!=["status"/wip","status/blocked","review/need2"]
- "#approved-reviews-by>=1"
actions:
merge:
method: merge
strict: true
dismiss_reviews:
approved: true

37
.travis.yml Normal file
View File

@@ -0,0 +1,37 @@
sudo: required
services: docker
addons:
apt:
packages:
- docker-ce
env:
- MAILU_VERSION=$TRAVIS_BRANCH
language: python
python:
- "3.6"
install:
- pip install -r tests/requirements.txt
- sudo curl -L https://github.com/docker/compose/releases/download/1.23.0-rc3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
before_script:
- docker-compose -v
- docker-compose -f tests/build.yml build
- sudo -- sh -c 'mkdir -p /mailu && cp -r tests/certs /mailu && chmod 600 /mailu/certs/*'
script:
# test.py, test name and timeout between start and tests.
- python tests/compose/test.py core 1
- python tests/compose/test.py fetchmail 1
- travis_wait python tests/compose/test.py filters 10
- python tests/compose/test.py rainloop 1
- python tests/compose/test.py roundcube 1
- python tests/compose/test.py webdav 1
deploy:
provider: script
script: bash tests/deploy.sh
on:
all_branches: true
condition: -n $DOCKER_UN

View File

@@ -6,7 +6,19 @@ If you contribute time, code or resources to the project, feel free to add
your name, pseudonym, and any contact information you feel is relevant to your name, pseudonym, and any contact information you feel is relevant to
this file. this file.
As it is almost impossible to distinguish code contributions from various
authors, all are considered equal contributors and all must agree with
any change in the software license.
Other contributors: Other contributors:
- Angedestenebres - Tests on development version & Current version - "Angedestenebres" - Tests on development version & Current version
- Stefan Auditor - German translation on POEditor.com - Stefan Auditor - German translation on POEditor.com
- [Carlos Bernárdez](https://github.com/jkarlosb) - [[Contributions in Mailu]](https://github.com/Mailu/Mailu/commits?author=jkarlosb)
- Felipe Lubra - Portugese translation
- Mélanie Henry - German translation
- Maxime Saddok - French translation
- "ofthesun9" - French translation
- "SunMar" - Dutch translation
- "Marty Hou" - Chinese Simple translation
- [Thomas Sänger](https://github.com/HorayNarea) - German translation

View File

@@ -5,6 +5,65 @@ Notable changes to this project are documented in the current file. For more
details about individual changes, see the Git log. You should read this before details about individual changes, see the Git log. You should read this before
upgrading Freposte.io as some changes will include useful notes. upgrading Freposte.io as some changes will include useful notes.
v1.5.1 - 2017-11-21
-------------------
- Global: add a DNS-based instance count tracker, use the ``DISABLE_STATISTICS``
setting to disable it.
- Global: specify container dependencies in the Compose configuration, update
your ``docker-compose.yml``.
- Feature: add a *mail* TLS flavor that only enforces TLS for email connections.
- Feature: welcome emails, see the configuration for details
- Feature: end date for vacations, see the automatic reply page
- L10N: dutch loca is now available
- L10N: swedish loca is now available
- L10N: italian loca is now partially available
- L10N: chinese loca is now available
- Upstream: upgrade to Roundcube 1.3.3
- Enhancement: use the alpine image for redis
- Enhancement: use a dynamic worker count for Nginx
- Bug: fix the pop3 proxy
- Bug: fix DNS resolution bugs in the frontend
- Bug: fix Webdav authentication
- Bug: properly honor enabled features (imap and pop3) per user
v1.5.0 - 2017-11-05
-------------------
- Global: clean the ``.env`` file and change many options, *make sure
that you download the latest ``.env`` and apply your settings when migrating.*
- Global: clean the Compose configuration, *make sure that you download the
latest ``docker-compose.yml`` when migrating.*
- Global: nginx is now a reverse proxy for HTTP, SMTP, IMAP and POP.
- Global: the new Rainloop webmail is available.
- Global: the mail stack now supports IPv6.
- Global: most images moved to Alpine.
- Global: the documentation moved to a Sphinx directory.
- Global: deprecate rmilter and use rspamd proxy instead.
- Feature: multiple TLS flavors are available, see the ``TLS_FLAVOR`` setting.
- Feature: alternative domains now act as a copy of a given domain.
- Feature: relay domains now act as a mail relay (e.g. for backup servers).
- Feature: the server now supports multiple public names, with letsencrypt.
- Feature: authentication tokens can be generated per client.
- Feature: the manage.py CLI has many options to import and manage a setup.
- Feature: add overrides for the Postfix configuration.
- Feature: allow to keep or discard forwarded messages.
- Feature: make password encryption scheme configurable.
- Feature: make DMARC rua configurable.
- Feature: Clamav may now be disabled completely.
- Feature: support a configurable recipient delimiter for address extension.
- Feature: the admin interface points to the webmail and a configurable site.
- L10N: portugese loca is now available
- Upstream: upgrade to Roundcube 1.3.2
- Upstream: upgrade to Rainloop 1.11.3
- Upstream: upgrade to Dovecot 2.2.33
- Upstream: upgrade to Postfix 3.2.4
- Bug: the Postfix queue is now persisted.
- Bug: certbot now handle renewal properly.
- Bug: fix sender and recipient restrictions for antispam features.
- Bug: webmails now handle large attachments.
- Bug: dhparam are now generated properly on the frontend.
v1.4.0 - 2017-02-12 v1.4.0 - 2017-02-12
------------------- -------------------

46
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,46 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
* Accepting that not all community members share our view of the project
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at team@mailu.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

7
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,7 @@
This project is open source, and your contributions are all welcome. There are mostly three different ways one can contribute to the project:
1. use Mailu, either on test or on production instances, and report meaningful bugs when you find some;
2. contribute code and/or configuration to the repository (see [the development guidelines](https://mailu.io/contributors/guide.html) for details);
3. contribute localization to your native language (see [the localization docs](https://mailu.io/contributors/localization.html) for details);
Either way, keep in mind that the code you write or the translation you produce muts be licensed under the same conditions as the project itself. Additionally, all contributors are considered equal co-authors of the project.

View File

@@ -1,28 +1,16 @@
![Logo](logo.png) <p align="leftr"><img src="docs/assets/logomark.png" alt="Mailu" height="200px"></p>
[Join us and chat about the project.](https://riot.im/app/#/room/#mailu:tedomum.net)
Mailu Mailu is a simple yet full-featured mail server as a set of Docker images.
===== It is free software (both as in free beer and as in free speech), open to
suggestions and external contributions. The project aims at providing people
with an easily setup, easily maintained and full-featured mail server while
not shipping proprietary software nor unrelated features often found in
popular groupware.
*This project used to be named Freeposte.io, the name was changed back in Most of the documentation is available on our [Website](https://mailu.io),
October 2016.* you can also [try our demo server](https://mailu.io/master/demo.html)
before setting up your own, and come [talk to us on Matrix](https://matrix.to/#/#mailu:tedomum.net).
Simple yet full-featured mail server as a set of Docker images.
The idea behing Mailu is identical to motivations that led to poste.io:
providing a simple and maintainable mail server that is painless to manage and
does not require more resources than necessary.
People from poste.io did an amazing job at accomplishing this ; any company
looking for a serious yet simple mail server with professional support should
turn to them.
This project is meant for free software supporters and hackers to reach the
same level of functionality and still be able to host a complete mail server
at little cost while running only FOSS, applying the KISS principle and being
able to fine-tune some details if needed.
[Try it out on our demo server](https://github.com/mail-u/mailu/wiki/Demo-server).
Features Features
======== ========
@@ -30,28 +18,15 @@ Features
Main features include: Main features include:
- **Standard email server**, IMAP and IMAP+, SMTP and Submission - **Standard email server**, IMAP and IMAP+, SMTP and Submission
- **Web access**, multiple Webmails and adminitration interface - **Advanced email features**, aliases, domain aliases, custom routing
- **Web access**, multiple Webmails and administration interface
- **User features**, aliases, auto-reply, auto-forward, fetched accounts - **User features**, aliases, auto-reply, auto-forward, fetched accounts
- **Admin features**, global admins, per-domain delegation, quotas - **Admin features**, global admins, announcements, per-domain delegation, quotas
- **Security**, enforced TLS, outgoing DKIM, anti-virus scanner - **Security**, enforced TLS, Letsencrypt!, outgoing DKIM, anti-virus scanner
- **Antispam**, auto-learn, greylisting, DMARC and SPF - **Antispam**, auto-learn, greylisting, DMARC and SPF
- **Freedom**, all FOSS components, no tracker included - **Freedom**, all FOSS components, no tracker included
![Creating a new user](https://mailu.io/screenshots/create.png) ![Domains](docs/assets/screenshots/domains.png)
Running a mail server
=====================
Mailu runs on top of Docker for easy packaging and upgrades. All you need
is a proper system with Docker and Compose installed, then simply download
the ``docker-compose.yml`` and sample ``.env``, tune them to your needs and
fire up the mail server:
```
docker-compose up -d
```
For a detailed walktrough, see the [Setup Guide](https://github.com/mail-u/mailu/wiki/Setup-Guide).
Contributing Contributing
============ ============
@@ -60,5 +35,3 @@ Mailu is free software, open to suggestions and contributions. All
components are free software and compatible with the MIT license. All components are free software and compatible with the MIT license. All
specific configuration files, Dockerfiles and code are placed under the specific configuration files, Dockerfiles and code are placed under the
MIT license. MIT license.
For details, see the [Contributor Guide](https://github.com/mail-u/mailu/wiki/Contributors-Guide).

View File

@@ -1,16 +0,0 @@
FROM python:3
RUN mkdir -p /app
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY mailu ./mailu
COPY migrations ./migrations
COPY manage.py .
COPY start.sh /start.sh
RUN pybabel compile -d mailu/translations
CMD ["/start.sh"]

View File

@@ -1,73 +0,0 @@
import flask
import flask_sqlalchemy
import flask_bootstrap
import flask_login
import flask_script
import flask_migrate
import flask_babel
import os
import docker
from apscheduler.schedulers import background
# Create application
app = flask.Flask(__name__, static_url_path='/admin/app_static')
default_config = {
'SQLALCHEMY_DATABASE_URI': 'sqlite:////data/main.db',
'SQLALCHEMY_TRACK_MODIFICATIONS': False,
'SECRET_KEY': 'changeMe',
'DOCKER_SOCKET': 'unix:///var/run/docker.sock',
'HOSTNAME': 'mail.mailu.io',
'DOMAIN': 'mailu.io',
'POSTMASTER': 'postmaster',
'DEBUG': False,
'BOOTSTRAP_SERVE_LOCAL': True,
'DKIM_PATH': '/dkim/{domain}.{selector}.key',
'DKIM_SELECTOR': 'dkim',
'BABEL_DEFAULT_LOCALE': 'en',
'BABEL_DEFAULT_TIMEZONE': 'UTC',
'ENABLE_CERTBOT': False,
'CERTS_PATH': '/certs'
}
# Load configuration from the environment if available
for key, value in default_config.items():
app.config[key] = os.environ.get(key, value)
# Setup components
flask_bootstrap.Bootstrap(app)
db = flask_sqlalchemy.SQLAlchemy(app)
migrate = flask_migrate.Migrate(app, db)
login_manager = flask_login.LoginManager()
login_manager.init_app(app)
babel = flask_babel.Babel(app)
translations = list(map(str, babel.list_translations()))
scheduler = background.BackgroundScheduler()
# Manager commnad
manager = flask_script.Manager(app)
manager.add_command('db', flask_migrate.MigrateCommand)
# Task scheduling
if not app.debug or os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
scheduler.start()
# Babel configuration
@babel.localeselector
def get_locale():
return flask.request.accept_languages.best_match(translations)
# Certbot configuration
if app.config['ENABLE_CERTBOT']:
from mailu import certbot
# Finally setup the blueprint and redirect /
from mailu import admin
app.register_blueprint(admin.app, url_prefix='/admin')
@app.route("/")
def index():
return flask.redirect(flask.url_for("admin.index"))

View File

@@ -1,31 +0,0 @@
from flask import Blueprint
from mailu import login_manager, db
import flask_login
app = Blueprint(
'admin', __name__,
template_folder='templates',
static_folder='static')
# Import models
from mailu.admin import models
# Register the login components
login_manager.login_view = "admin.login"
login_manager.user_loader(models.User.query.get)
@app.context_processor
def inject_user():
return dict(current_user=flask_login.current_user)
# Import views
from mailu.admin.views import \
admins, \
managers, \
base, \
aliases, \
users, \
domains, \
fetches

View File

@@ -1,227 +0,0 @@
from mailu.admin import db, dkim
from mailu import app
from sqlalchemy.ext import declarative
from passlib import context
from datetime import datetime
import re
import time
import os
import glob
# Many-to-many association table for domain managers
managers = db.Table('manager',
db.Column('domain_name', db.String(80), db.ForeignKey('domain.name')),
db.Column('user_email', db.String(255), db.ForeignKey('user.email'))
)
class CommaSeparatedList(db.TypeDecorator):
""" Stores a list as a comma-separated string, compatible with Postfix.
"""
impl = db.String
def process_bind_param(self, value, dialect):
if type(value) is not list:
raise TypeError("Shoud be a list")
for item in value:
if "," in item:
raise ValueError("No item should contain a comma")
return ",".join(value)
def process_result_value(self, value, dialect):
return filter(bool, value.split(","))
class Base(db.Model):
""" Base class for all models
"""
__abstract__ = True
created_at = db.Column(db.Date, nullable=False, default=datetime.now)
updated_at = db.Column(db.Date, nullable=True, onupdate=datetime.now)
comment = db.Column(db.String(255), nullable=True)
class Domain(Base):
""" A DNS domain that has mail addresses associated to it.
"""
__tablename__ = "domain"
name = db.Column(db.String(80), primary_key=True, nullable=False)
managers = db.relationship('User', secondary=managers,
backref=db.backref('manager_of'), lazy='dynamic')
max_users = db.Column(db.Integer, nullable=False, default=0)
max_aliases = db.Column(db.Integer, nullable=False, default=0)
max_quota_bytes = db.Column(db.Integer(), nullable=False, default=0)
@property
def dkim_key(self):
file_path = app.config["DKIM_PATH"].format(
domain=self.name, selector=app.config["DKIM_SELECTOR"])
if os.path.exists(file_path):
with open(file_path, "rb") as handle:
return handle.read()
@dkim_key.setter
def dkim_key(self, value):
file_path = app.config["DKIM_PATH"].format(
domain=self.name, selector=app.config["DKIM_SELECTOR"])
with open(file_path, "wb") as handle:
handle.write(value)
@property
def dkim_publickey(self):
dkim_key = self.dkim_key
if dkim_key:
return dkim.strip_key(self.dkim_key).decode("utf8")
def generate_dkim_key(self):
self.dkim_key = dkim.gen_key()
def has_email(self, localpart):
for email in self.users + self.aliases:
if email.localpart == localpart:
return True
else:
return False
def __str__(self):
return self.name
def __eq__(self, other):
try:
return self.name == other.name
except AttributeError:
return False
class Email(object):
""" Abstraction for an email address (localpart and domain).
"""
localpart = db.Column(db.String(80), nullable=False)
@declarative.declared_attr
def domain_name(cls):
return db.Column(db.String(80), db.ForeignKey(Domain.name),
nullable=False)
# This field is redundant with both localpart and domain name.
# It is however very useful for quick lookups without joining tables,
# especially when the mail server il reading the database.
@declarative.declared_attr
def email(cls):
updater = lambda context: "{0}@{1}".format(
context.current_parameters["localpart"],
context.current_parameters["domain_name"],
)
return db.Column(db.String(255),
primary_key=True, nullable=False,
default=updater)
def __str__(self):
return self.email
class User(Base, Email):
""" A user is an email address that has a password to access a mailbox.
"""
__tablename__ = "user"
domain = db.relationship(Domain,
backref=db.backref('users', cascade='all, delete-orphan'))
password = db.Column(db.String(255), nullable=False)
quota_bytes = db.Column(db.Integer(), nullable=False, default=10**9)
global_admin = db.Column(db.Boolean(), nullable=False, default=False)
# Features
enable_imap = db.Column(db.Boolean(), nullable=False, default=True)
enable_pop = db.Column(db.Boolean(), nullable=False, default=True)
# Filters
forward_enabled = db.Column(db.Boolean(), nullable=False, default=False)
forward_destination = db.Column(db.String(255), nullable=True, default=None)
reply_enabled = db.Column(db.Boolean(), nullable=False, default=False)
reply_subject = db.Column(db.String(255), nullable=True, default=None)
reply_body = db.Column(db.Text(), nullable=True, default=None)
# Settings
displayed_name = db.Column(db.String(160), nullable=False, default="")
spam_enabled = db.Column(db.Boolean(), nullable=False, default=True)
spam_threshold = db.Column(db.Integer(), nullable=False, default=80.0)
# Flask-login attributes
is_authenticated = True
is_active = True
is_anonymous = False
def get_id(self):
return self.email
pw_context = context.CryptContext(
["sha512_crypt", "sha256_crypt", "md5_crypt"]
)
def check_password(self, password):
reference = re.match('({[^}]+})?(.*)', self.password).group(2)
return User.pw_context.verify(password, reference)
def set_password(self, password):
self.password = '{SHA512-CRYPT}' + User.pw_context.encrypt(password)
def get_managed_domains(self):
if self.global_admin:
return Domain.query.all()
else:
return self.manager_of
def get_managed_emails(self, include_aliases=True):
emails = []
for domain in self.get_managed_domains():
emails.extend(domain.users)
if include_aliases:
emails.extend(domain.aliases)
return emails
@classmethod
def login(cls, email, password):
user = cls.query.get(email)
return user if (user and user.check_password(password)) else None
class Alias(Base, Email):
""" An alias is an email address that redirects to some destination.
"""
__tablename__ = "alias"
domain = db.relationship(Domain,
backref=db.backref('aliases', cascade='all, delete-orphan'))
wildcard = db.Column(db.Boolean(), nullable=False, default=False)
destination = db.Column(CommaSeparatedList, nullable=False, default=[])
class Fetch(Base):
""" A fetched account is a repote POP/IMAP account fetched into a local
account.
"""
__tablename__ = "fetch"
id = db.Column(db.Integer(), primary_key=True)
user_email = db.Column(db.String(255), db.ForeignKey(User.email),
nullable=False)
user = db.relationship(User,
backref=db.backref('fetches', cascade='all, delete-orphan'))
protocol = db.Column(db.Enum('imap', 'pop3'), nullable=False)
host = db.Column(db.String(255), nullable=False)
port = db.Column(db.Integer(), nullable=False)
tls = db.Column(db.Boolean(), nullable=False)
username = db.Column(db.String(255), nullable=False)
password = db.Column(db.String(255), nullable=False)
keep = db.Column(db.Boolean(), nullable=False)
last_check = db.Column(db.DateTime, nullable=True)
error = db.Column(db.String(1023), nullable=True)

View File

@@ -1,30 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}Global administrators{% endtrans %}
{% endblock %}
{% block main_action %}
<a class="btn btn-primary" href="{{ url_for('.admin_create') }}">
{% trans %}Add administrator{% endtrans %}
</a>
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Actions{% endtrans %}</th>
<th>{% trans %}Email{% endtrans %}</th>
</tr>
{% for admin in admins %}
<tr>
<td>
<a href="{{ url_for('.admin_delete', admin=admin.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
</td>
<td>{{ admin }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,41 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}Alias list{% endtrans %}
{% endblock %}
{% block subtitle %}
{{ domain.name }}
{% endblock %}
{% block main_action %}
<a class="btn btn-primary" href="{{ url_for('.alias_create', domain_name=domain.name) }}">{% trans %}Add alias{% endtrans %}</a>
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Actions{% endtrans %}</th>
<th>{% trans %}Email{% endtrans %}</th>
<th>{% trans %}Destination{% endtrans %}</th>
<th>{% trans %}Comment{% endtrans %}</th>
<th>{% trans %}Created{% endtrans %}</th>
<th>{% trans %}Last edit{% endtrans %}</th>
</tr>
{% for alias in domain.aliases %}
<tr>
<td>
<a href="{{ url_for('.alias_edit', alias=alias.email) }}" title="{% trans %}Edit{% endtrans %}"><i class="fa fa-pencil"></i></a>&nbsp;
<a href="{{ url_for('.alias_delete', alias=alias.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
</td>
<td>{{ alias }}</td>
<td>{{ alias.destination|join(', ') or '-' }}</td>
<td>{{ alias.comment or '' }}</td>
<td>{{ alias.created_at }}</td>
<td>{{ alias.updated_at or '' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,50 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}Domain details{% endtrans %}
{% endblock %}
{% block subtitle %}
{{ domain.name }}
{% endblock %}
{% block main_action %}
{% if current_user.global_admin %}
<a class="btn btn-primary" href="{{ url_for(".domain_genkeys", domain_name=domain.name) }}">{% trans %}Regenerate keys{% endtrans %}</a>
{% endif %}
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Domain name{% endtrans %}</th>
<td>{{ domain.name }}</td>
</tr>
<tr>
<th>{% trans %}DNS MX entry{% endtrans %}</th>
<td><pre>{{ domain.name }}. 600 IN MX 10 {{ config["HOSTNAME"] }}.</pre></td>
</tr>
<tr>
<th>{% trans %}DNS SPF entries{% endtrans %}</th>
<td><pre>
{{ domain.name }}. 600 IN TXT "v=spf1 mx a:{{ config["HOSTNAME"] }} -all"
{{ domain.name }}. 600 IN SPF "v=spf1 mx a:{{ config["HOSTNAME"] }} -all"</pre></td>
</tr>
{% if domain.dkim_publickey %}
<tr>
<th>{% trans %}DKIM public key{% endtrans %}</th>
<td><pre style="white-space: pre-wrap; word-wrap: break-word;">{{ domain.dkim_publickey }}</pre></td>
</tr>
<tr>
<th>{% trans %}DNS DKIM entry{% endtrans %}</th>
<td><pre style="white-space: pre-wrap; word-wrap: break-word;">{{ config["DKIM_SELECTOR"] }}._domainkey.{{ domain.name }}. IN 600 TXT "v=DKIM1; k=rsa; p={{ domain.dkim_publickey }}"</pre></td>
</tr>
<tr>
<th>{% trans %}DNS DMARC entry{% endtrans %}</th>
<td><pre>_dmarc.{{ domain.name }}. 600 IN TXT "v=DMARC1; p=reject; rua=mailto:{{ config["POSTMASTER"] }}@{{ config["DOMAIN"] }}; adkim=s; aspf=s"</pre></td>
</tr>
{% endif %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,50 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}Domain list{% endtrans %}
{% endblock %}
{% block main_action %}
{% if current_user.global_admin %}
<a class="btn btn-primary" href="{{ url_for('.domain_create') }}">{% trans %}New domain{% endtrans %}</a>
{% endif %}
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Actions{% endtrans %}</th>
<th>{% trans %}Manage{% endtrans %}</th>
<th>{% trans %}Domain name{% endtrans %}</th>
<th>{% trans %}Mailbox count{% endtrans %}</th>
<th>{% trans %}Alias count{% endtrans %}</th>
<th>{% trans %}Comment{% endtrans %}</th>
<th>{% trans %}Created{% endtrans %}</th>
<th>{% trans %}Last edit{% endtrans %}</th>
</tr>
{% for domain in current_user.get_managed_domains() %}
<tr>
<td>
<a href="{{ url_for('.domain_details', domain_name=domain.name) }}" title="{% trans %}Details{% endtrans %}"><i class="fa fa-list"></i></a>&nbsp;
{% if current_user.global_admin %}
<a href="{{ url_for('.domain_edit', domain_name=domain.name) }}" title="{% trans %}Edit{% endtrans %}"><i class="fa fa-pencil"></i></a>&nbsp;
<a href="{{ url_for('.domain_delete', domain_name=domain.name) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>&nbsp;
{% endif %}
</td>
<td>
<a href="{{ url_for('.user_list', domain_name=domain.name) }}" title="{% trans %}Users{% endtrans %}"><i class="fa fa-envelope-o"></i></a>&nbsp;
<a href="{{ url_for('.alias_list', domain_name=domain.name) }}" title="{% trans %}Aliases{% endtrans %}"><i class="fa fa-at"></i></a>&nbsp;
<a href="{{ url_for('.manager_list', domain_name=domain.name) }}" title="{% trans %}Managers{% endtrans %}"><i class="fa fa-user"></i></a>&nbsp;
</td>
<td>{{ domain.name }}</td>
<td>{{ domain.users | count }} / {{ domain.max_users or '∞' }}</td>
<td>{{ domain.aliases | count }} / {{ domain.max_aliases or '∞' }}</td>
<td>{{ domain.comment or '' }}</td>
<td>{{ domain.created_at }}</td>
<td>{{ domain.updated_at or '' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,45 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}Fetched accounts{% endtrans %}
{% endblock %}
{% block subtitle %}
{{ user }}
{% endblock %}
{% block main_action %}
<a class="btn btn-primary" href="{{ url_for('.fetch_create', user_email=user.email) }}">{% trans %}Add an account{% endtrans %}</a>
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Actions{% endtrans %}</th>
<th>{% trans %}Endpoint{% endtrans %}</th>
<th>{% trans %}Username{% endtrans %}</th>
<th>{% trans %}Keep emails{% endtrans %}</th>
<th>{% trans %}Last check{% endtrans %}</th>
<th>{% trans %}Status{% endtrans %}</th>
<th>{% trans %}Created{% endtrans %}</th>
<th>{% trans %}Last edit{% endtrans %}</th>
</tr>
{% for fetch in user.fetches %}
<tr>
<td>
<a href="{{ url_for('.fetch_edit', fetch_id=fetch.id) }}" title="{% trans %}Edit{% endtrans %}"><i class="fa fa-pencil"></i></a>&nbsp;
<a href="{{ url_for('.fetch_delete', fetch_id=fetch.id) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
</td>
<td>{{ fetch.protocol }}{{ 's' if fetch.tls else '' }}://{{ fetch.host }}:{{ fetch.port }}</td>
<td>{{ fetch.username }}</td>
<td>{% if fetch.keep %}{% trans %}yes{% endtrans %}{% else %}{% trans %}no{% endtrans %}{% endif %}</td>
<td>{{ fetch.last_check or '-' }}</td>
<td>{{ fetch.error or '-' }}</td>
<td>{{ fetch.created_at }}</td>
<td>{{ fetch.updated_at or '' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,13 +0,0 @@
{% macro render_field(field, label_visible=true) -%}
<div class="form-group {% if field.errors %}has-error{% endif %} {{ kwargs.pop('class_', '') }}">
{% if field.type != 'HiddenField' and label_visible %}
<label for="{{ field.id }}" class="control-label">{{ field.label }}</label>
{% endif %}
{{ field(class_='form-control', **kwargs) }}
{% if field.errors %}
{% for e in field.errors %}
<p class="help-block">{{ e }}</p>
{% endfor %}
{% endif %}
</div>
{%- endmacro %}

View File

@@ -1,5 +0,0 @@
{% extends "general.html" %}
{% block content %}
Test
{% endblock %}

View File

@@ -1,26 +0,0 @@
{% extends "base.html" %}
{% block sidebar %}
<section class="sidebar">
<ul class="sidebar-menu">
<li class="header">{% trans %}Your account{% endtrans %}</li>
<li>
<a href="#">
<i class="fa fa-sign-in"></i> <span>{% trans %}Sign in{% endtrans %}</span>
</a>
</li>
</ul>
</section>
{% endblock %}
{% block title %}
{% trans %}Sign in{% endtrans %}
{% endblock %}
{% block subtitle %}
{% trans %}to access the administration tools{% endtrans %}
{% endblock %}
{% block box_content %}
{{ macros.form(form) }}
{% endblock %}

View File

@@ -1,32 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}Manager list{% endtrans %}
{% endblock %}
{% block subtitle %}
{{ domain.name }}
{% endblock %}
{% block main_action %}
<a class="btn btn-primary" href="{{ url_for('.manager_create', domain_name=domain.name) }}">{% trans %}Add manager{% endtrans %}</a>
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Actions{% endtrans %}</th>
<th>{% trans %}Email{% endtrans %}</th>
</tr>
{% for manager in domain.managers %}
<tr>
<td>
<a href="{{ url_for('.manager_delete', domain_name=domain.name, user_email=manager.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
</td>
<td>{{ manager }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,30 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}Services status{% endtrans %}
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Service{% endtrans %}</th>
<th>{% trans %}Status{% endtrans %}</th>
<th>{% trans %}PID{% endtrans %}</th>
<th>{% trans %}Image{% endtrans %}</th>
<th>{% trans %}Started{% endtrans %}</th>
<th>{% trans %}Last update{% endtrans %}</th>
</tr>
{% for name, container in containers.items() %}
<tr>
<td>{{ name }}</td>
<td><span class="label label-{{ "success" if container['State']['Running'] else "danger" }}">{{ container['State']['Status'] }}</span></td>
<td>{{ container['State']['Pid'] }}</td>
<td>{{ container['Config']['Image'] }}</td>
<td>{{ container['State']['StartedAt'] }}</td>
<td>{{ container['Image']['Created'] }}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,68 +0,0 @@
<section class="sidebar">
<h4 class="text-center text-primary">{{ current_user }}</h4>
<ul class="sidebar-menu">
<li class="header">{% trans %}My account{% endtrans %}</li>
<li>
<a href="{{ url_for('.user_settings') }}">
<i class="fa fa-wrench"></i> <span>{% trans %}Settings{% endtrans %}</span>
</a>
</li>
<li>
<a href="{{ url_for('.user_password') }}">
<i class="fa fa-lock"></i> <span>{% trans %}Update password{% endtrans %}</span>
</a>
</li>
<li>
<a href="{{ url_for('.user_forward') }}">
<i class="fa fa-share"></i> <span>{% trans %}Auto-forward{% endtrans %}</span>
</a>
</li>
<li>
<a href="{{ url_for('.user_reply') }}">
<i class="fa fa-plane"></i> <span>{% trans %}Auto-reply{% endtrans %}</span>
</a>
</li>
<li>
<a href="{{ url_for('.fetch_list') }}">
<i class="fa fa-download"></i> <span>{% trans %}Fetched accounts{% endtrans %}</span>
</a>
</li>
<li>
<a href="{{ url_for('.logout') }}">
<i class="fa fa-sign-out"></i> <span>{% trans %}Sign out{% endtrans %}</span>
</a>
</li>
<li class="header">{% trans %}Administration{% endtrans %}</li>
{% if current_user.global_admin %}
<li>
<a href="{{ url_for('.services') }}">
<i class="fa fa-dashboard"></i> <span>{% trans %}Services status{% endtrans %}</span>
</a>
</li>
<li>
<a href="{{ url_for('.announcement') }}">
<i class="fa fa-bullhorn"></i> <span>{% trans %}Announcement{% endtrans %}</span>
</a>
</li>
<li>
<a href="{{ url_for('.admin_list') }}">
<i class="fa fa-user"></i> <span>{% trans %}Administrators{% endtrans %}</span>
</a>
</li>
{% endif %}
{% if current_user.manager_of or current_user.global_admin %}
<li>
<a href="{{ url_for('.domain_list') }}">
<i class="fa fa-envelope"></i> <span>{% trans %}Mail domains{% endtrans %}</span>
</a>
</li>
{% endif %}
<li>
<a href="https://github.com/Mailu/Mailu">
<i class="fa fa-life-ring"></i> <span>{% trans %}Help{% endtrans %}</span>
</a>
</li>
</ul>
</section>

View File

@@ -1,53 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}User list{% endtrans %}
{% endblock %}
{% block subtitle %}
{{ domain.name }}
{% endblock %}
{% block main_action %}
<a class="btn btn-primary" href="{{ url_for('.user_create', domain_name=domain.name) }}">{% trans %}Add user{% endtrans %}</a>
{% endblock %}
{% block box %}
<table class="table table-bordered">
<tbody>
<tr>
<th>{% trans %}Actions{% endtrans %}</th>
<th>{% trans %}User settings{% endtrans %}</th>
<th>{% trans %}Email{% endtrans %}</th>
<th>{% trans %}Features{% endtrans %}</th>
<th>{% trans %}Quota{% endtrans %}</th>
<th>{% trans %}Comment{% endtrans %}</th>
<th>{% trans %}Created{% endtrans %}</th>
<th>{% trans %}Last edit{% endtrans %}</th>
</tr>
{% for user in domain.users %}
<tr>
<td>
<a href="{{ url_for('.user_edit', user_email=user.email) }}" title="{% trans %}Edit{% endtrans %}"><i class="fa fa-pencil"></i></a>&nbsp;
<a href="{{ url_for('.user_delete', user_email=user.email) }}" title="{% trans %}Delete{% endtrans %}"><i class="fa fa-trash"></i></a>
</td>
<td>
<a href="{{ url_for('.user_settings', user_email=user.email) }}" title="{% trans %}Settings{% endtrans %}"><i class="fa fa-wrench"></i></a>&nbsp;
<a href="{{ url_for('.user_forward', user_email=user.email) }}" title="{% trans %}Auto-forward{% endtrans %}"><i class="fa fa-share"></i></a>&nbsp;
<a href="{{ url_for('.user_reply', user_email=user.email) }}" title="{% trans %}Auto-reply{% endtrans %}"><i class="fa fa-plane"></i></a>&nbsp;
<a href="{{ url_for('.fetch_list', user_email=user.email) }}" title="{% trans %}Fetched accounts{% endtrans %}"><i class="fa fa-download"></i></a>&nbsp;
</td>
<td>{{ user }}</td>
<td>
{% if user.enable_imap %}<span class="label label-info">imap</span>{% endif %}
{% if user.enable_pop %}<span class="label label-info">pop3</span>{% endif %}
</td>
<td>{{ user.quota_bytes | filesizeformat }}</td>
<td>{{ user.comment or '-' }}</td>
<td>{{ user.created_at }}</td>
<td>{{ user.updated_at or '' }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,21 +0,0 @@
{% extends "base.html" %}
{% block title %}
{% trans %}User settings{% endtrans %}
{% endblock %}
{% block subtitle %}
{{ user }}
{% endblock %}
{% block box_content %}
<form class="form" method="post" role="form">
{{ form.hidden_tag() }}
{{ macros.form_field(form.displayed_name) }}
{{ macros.form_field(form.spam_enabled) }}
{{ macros.form_field(form.spam_threshold, step=1, max=100,
prepend='<span class="input-group-addon"><span id="threshold">'+form.spam_threshold.data.__str__()+'</span>&nbsp;/&nbsp;100</span>',
oninput='$("#threshold").text(this.value);') }}
{{ macros.form_field(form.submit) }}
</form>
{% endblock %}

View File

@@ -1,66 +0,0 @@
from mailu import dockercli, app as flask_app
from mailu.admin import app, db, models, forms, access
import flask
import flask_login
import smtplib
from email.mime import text
@app.route('/', methods=["GET"])
@access.authenticated
def index():
return flask.redirect(flask.url_for('.user_settings'))
@app.route('/login', methods=['GET', 'POST'])
def login():
form = forms.LoginForm()
if form.validate_on_submit():
user = models.User.login(form.email.data, form.pw.data)
if user:
flask_login.login_user(user)
return flask.redirect(flask.url_for('.index'))
else:
flask.flash('Wrong e-mail or password', 'error')
return flask.render_template('login.html', form=form)
@app.route('/logout', methods=['GET'])
@access.authenticated
def logout():
flask_login.logout_user()
return flask.redirect(flask.url_for('.index'))
@app.route('/services', methods=['GET'])
@access.global_admin
def services():
try:
containers = dockercli.get()
except Exception as error:
return flask.render_template('docker-error.html', error=error)
return flask.render_template('services.html', containers=containers)
@app.route('/announcement', methods=['GET', 'POST'])
@access.global_admin
def announcement():
from_address = '{}@{}'.format(
flask_app.config['POSTMASTER'], flask_app.config['DOMAIN'])
form = forms.AnnouncementForm()
if form.validate_on_submit():
with smtplib.SMTP('smtp') as smtp:
for recipient in [user.email for user in models.User.query.all()]:
msg = text.MIMEText(form.announcement_body.data)
msg['Subject'] = form.announcement_subject.data
msg['From'] = from_address
msg['To'] = recipient
smtp.sendmail(from_address, [recipient], msg.as_string())
# Force-empty the form
form.announcement_subject.data = ''
form.announcement_body.data = ''
flask.flash('Your announcement was sent', 'success')
return flask.render_template('announcement.html', form=form,
from_address=from_address)

View File

@@ -1,73 +0,0 @@
from mailu.admin import app, db, models, forms, access
from mailu import app as flask_app
import flask
import wtforms_components
@app.route('/domain', methods=['GET'])
@access.authenticated
def domain_list():
return flask.render_template('domain/list.html')
@app.route('/domain/create', methods=['GET', 'POST'])
@access.global_admin
def domain_create():
form = forms.DomainForm()
if form.validate_on_submit():
if models.Domain.query.get(form.name.data):
flask.flash('Domain %s is already used' % form.name.data, 'error')
else:
domain = models.Domain()
form.populate_obj(domain)
db.session.add(domain)
db.session.commit()
flask.flash('Domain %s created' % domain)
return flask.redirect(flask.url_for('.domain_list'))
return flask.render_template('domain/create.html', form=form)
@app.route('/domain/edit/<domain_name>', methods=['GET', 'POST'])
@access.global_admin
def domain_edit(domain_name):
domain = models.Domain.query.get(domain_name) or flask.abort(404)
form = forms.DomainForm(obj=domain)
wtforms_components.read_only(form.name)
form.name.validators = []
if form.validate_on_submit():
form.populate_obj(domain)
db.session.commit()
flask.flash('Domain %s saved' % domain)
return flask.redirect(flask.url_for('.domain_list'))
return flask.render_template('domain/edit.html', form=form,
domain=domain)
@app.route('/domain/delete/<domain_name>', methods=['GET', 'POST'])
@access.global_admin
@access.confirmation_required("delete {domain_name}")
def domain_delete(domain_name):
domain = models.Domain.query.get(domain_name) or flask.abort(404)
db.session.delete(domain)
db.session.commit()
flask.flash('Domain %s deleted' % domain)
return flask.redirect(flask.url_for('.domain_list'))
@app.route('/domain/details/<domain_name>', methods=['GET'])
@access.domain_admin(models.Domain, 'domain_name')
def domain_details(domain_name):
domain = models.Domain.query.get(domain_name) or flask.abort(404)
return flask.render_template('domain/details.html', domain=domain,
config=flask_app.config)
@app.route('/domain/genkeys/<domain_name>', methods=['GET', 'POST'])
@access.domain_admin(models.Domain, 'domain_name')
@access.confirmation_required("regenerate keys for {domain_name}")
def domain_genkeys(domain_name):
domain = models.Domain.query.get(domain_name) or flask.abort(404)
domain.generate_dkim_key()
return flask.redirect(
flask.url_for(".domain_details", domain_name=domain_name))

View File

@@ -1,71 +0,0 @@
from mailu import app, scheduler, dockercli
import subprocess
import os
def certbot_command(subcommand, *args):
""" Run a certbot command while specifying the standard parameters.
"""
command = [
"certbot", subcommand,
"-n",
"--work-dir", "/tmp",
"--logs-dir", "/tmp",
"--config-dir", app.config["CERTS_PATH"],
*args
]
result = subprocess.run(command, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
return result
def certbot_install(domain):
""" Install certificates for the given domain. Return True if a reload
is required.
"""
must_reload = False
path = app.config["CERTS_PATH"]
cert = os.path.join(path, "cert.pem")
key = os.path.join(path, "key.pem")
live_cert = os.path.join("live", domain, "fullchain.pem")
live_key = os.path.join("live", domain, "privkey.pem")
if not os.path.islink(cert) or os.readlink(cert) != live_cert:
must_reload = True
if os.path.exists(cert):
os.unlink(cert)
os.symlink(live_cert, cert)
if not os.path.islink(key) or os.readlink(key) != live_key:
must_reload = True
if os.path.exists(key):
os.unlink(key)
os.symlink(live_key, key)
return must_reload
@scheduler.scheduled_job('date')
@scheduler.scheduled_job('cron', hour=2, minute=0)
def generate_cert():
print("Generating TLS certificates using Certbot")
hostname = app.config["HOSTNAME"]
email = "{}@{}".format(app.config["POSTMASTER"], app.config["DOMAIN"])
result = certbot_command(
"certonly",
"--standalone",
"--agree-tos",
"--preferred-challenges", "http",
"--email", email,
"-d", hostname,
# The port is hardcoded in the nginx image as well, we should find
# a more suitable way to go but this will do until we have a proper
# daemon handling certbot stuff
"--http-01-port", "8081"
)
if result.returncode:
print("Error while generating certificates:\n{}".format(
result.stdout.decode("utf8") + result.stdout.decode("utf8")))
else:
print("Successfully generated or renewed TLS certificates")
if certbot_install(hostname):
print("Reloading TLS-dependant services")
dockercli.reload("http", "smtp", "imap")

View File

@@ -1,26 +0,0 @@
from mailu import app
import docker
import signal
# Connect to the Docker socket
cli = docker.Client(base_url=app.config['DOCKER_SOCKET'])
def get(*names):
result = {}
all_containers = cli.containers(all=True)
for brief in all_containers:
if brief['Image'].startswith('mailu/'):
container = cli.inspect_container(brief['Id'])
container['Image'] = cli.inspect_image(container['Image'])
name = container['Config']['Labels']['com.docker.compose.service']
if not names or name in names:
result[name] = container
return result
def reload(*names):
for name, container in get(*names).items():
cli.kill(container["Id"], signal.SIGHUP.value)

View File

@@ -1,512 +0,0 @@
# German translations for Mailu.
# Copyright (C) 2016 Mailu
# This file is distributed under the same license as the PROJECT project.
# Stefan Auditor <stefan.auditor@erdfisch.de>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: stefan.auditor@erdfisch.de\n"
"POT-Creation-Date: 2016-11-10 10:52+0100\n"
"PO-Revision-Date: 2016-11-09 21:43+0100\n"
"Last-Translator: Stefan Auditor <stefan.auditor@erdfisch.de>\n"
"Language: de\n"
"Language-Team: Mailu German Team <stefan.auditor@erdfisch.de>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
#: mailu/admin/forms.py:32
msgid "Invalid email address."
msgstr "Ungültige E-Mail-Adresse."
#: mailu/admin/forms.py:36
msgid "Confirm"
msgstr "Bestätigen"
#: mailu/admin/forms.py:40 mailu/admin/forms.py:54
msgid "E-mail"
msgstr "E-Mail"
#: mailu/admin/forms.py:41 mailu/admin/forms.py:55 mailu/admin/forms.py:72
#: mailu/admin/forms.py:120
msgid "Password"
msgstr "Passwort"
#: mailu/admin/forms.py:42 mailu/admin/templates/login.html:9
#: mailu/admin/templates/login.html:17
msgid "Sign in"
msgstr "Anmelden"
#: mailu/admin/forms.py:46 mailu/admin/templates/domain/details.html:21
#: mailu/admin/templates/domain/list.html:19
msgid "Domain name"
msgstr "Domain-Name"
#: mailu/admin/forms.py:47
msgid "Maximum user count"
msgstr "Maximale Anzahl Benutzer"
#: mailu/admin/forms.py:48
msgid "Maximum alias count"
msgstr "Maximale Anzahl Aliase"
#: mailu/admin/forms.py:49 mailu/admin/forms.py:60 mailu/admin/forms.py:98
#: mailu/admin/templates/alias/list.html:22
#: mailu/admin/templates/domain/list.html:22
#: mailu/admin/templates/user/list.html:24
msgid "Comment"
msgstr "Kommentar"
#: mailu/admin/forms.py:50 mailu/admin/forms.py:99
msgid "Create"
msgstr "Erstellen"
#: mailu/admin/forms.py:56
msgid "Confirm password"
msgstr "Passwort bestätigen"
#: mailu/admin/forms.py:57 mailu/admin/templates/user/list.html:23
msgid "Quota"
msgstr "Quota"
#: mailu/admin/forms.py:58
msgid "Allow IMAP access"
msgstr "Zugriff via IMAP erlauben"
#: mailu/admin/forms.py:59
msgid "Allow POP3 access"
msgstr "Zugriff via POP3 erlauben"
#: mailu/admin/forms.py:61
msgid "Save"
msgstr "Speichern"
#: mailu/admin/forms.py:65
msgid "Displayed name"
msgstr "Angezeigter Name"
#: mailu/admin/forms.py:66
msgid "Enable spam filter"
msgstr "Spam-Filter aktivieren"
#: mailu/admin/forms.py:67
msgid "Spam filter threshold"
msgstr "Spam-Filter Schwellenwert"
#: mailu/admin/forms.py:68
msgid "Save settings"
msgstr "Einstellungen speichern"
#: mailu/admin/forms.py:73
msgid "Password check"
msgstr "Passwort prüfen"
#: mailu/admin/forms.py:74 mailu/admin/templates/sidebar.html:13
msgid "Update password"
msgstr "Passwort aktualisieren"
#: mailu/admin/forms.py:78
msgid "Enable forwarding"
msgstr "Weiterleitung aktivieren"
#: mailu/admin/forms.py:80 mailu/admin/forms.py:97
#: mailu/admin/templates/alias/list.html:21
msgid "Destination"
msgstr "Ziel"
#: mailu/admin/forms.py:82 mailu/admin/forms.py:90
msgid "Update"
msgstr "Aktualisieren"
#: mailu/admin/forms.py:86
msgid "Enable automatic reply"
msgstr "Automatische Antwort aktivieren"
#: mailu/admin/forms.py:87
msgid "Reply subject"
msgstr "Antwort Betreff"
#: mailu/admin/forms.py:88
msgid "Reply body"
msgstr "Antwort Text"
#: mailu/admin/forms.py:94
msgid "Alias"
msgstr "Alias"
#: mailu/admin/forms.py:96
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "SQL LIKE Syntax nutzen (z.B. für Catch-All Aliase)"
#: mailu/admin/forms.py:103
msgid "Admin email"
msgstr "Administrator E-Mail"
#: mailu/admin/forms.py:104 mailu/admin/forms.py:109 mailu/admin/forms.py:121
msgid "Submit"
msgstr "Absenden"
#: mailu/admin/forms.py:108
msgid "Manager email"
msgstr "Manager E-Mail"
#: mailu/admin/forms.py:113
msgid "Protocol"
msgstr "Protokoll"
#: mailu/admin/forms.py:116
msgid "Hostname or IP"
msgstr "Hostname oder IP"
#: mailu/admin/forms.py:117
msgid "TCP port"
msgstr "Port"
#: mailu/admin/forms.py:118
msgid "Enable TLS"
msgstr "Verschlüsselung aktivieren"
#: mailu/admin/forms.py:119 mailu/admin/templates/fetch/list.html:21
msgid "Username"
msgstr "Benutzername"
#: mailu/admin/templates/confirm.html:4
msgid "Confirm action"
msgstr "Aktion bestätigen"
#: mailu/admin/templates/confirm.html:12
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Bitte bestätigen: %(action)s."
#: mailu/admin/templates/docker-error.html:4
msgid "Docker error"
msgstr "Docker Fehler"
#: mailu/admin/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Während der Kommunikation mit dem Docker Server ist ein Fehler aufgetreten."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Konto"
#: mailu/admin/templates/login.html:21
msgid "to access the administration tools"
msgstr "für administrativen Zugriff"
#: mailu/admin/templates/services.html:4 mailu/admin/templates/sidebar.html:40
msgid "Services status"
msgstr "Dienst-Status"
#: mailu/admin/templates/services.html:11
msgid "Service"
msgstr "Dienst"
#: mailu/admin/templates/fetch/list.html:23
#: mailu/admin/templates/services.html:12
msgid "Status"
msgstr "Status"
#: mailu/admin/templates/services.html:13
msgid "PID"
msgstr "PID"
#: mailu/admin/templates/services.html:14
msgid "Image"
msgstr "Image"
#: mailu/admin/templates/services.html:15
msgid "Started"
msgstr "Gestartet"
#: mailu/admin/templates/services.html:16
msgid "Last update"
msgstr "Letztes Update"
#: mailu/admin/templates/sidebar.html:5
msgid "My account"
msgstr "Mein Konto"
#: mailu/admin/templates/sidebar.html:8 mailu/admin/templates/user/list.html:35
msgid "Settings"
msgstr "Einstellungen"
#: mailu/admin/templates/sidebar.html:18
#: mailu/admin/templates/user/list.html:36
msgid "Auto-forward"
msgstr "Auto-Weiterleitung"
#: mailu/admin/templates/sidebar.html:23
#: mailu/admin/templates/user/list.html:37
msgid "Auto-reply"
msgstr "Auto-Antwort"
#: mailu/admin/templates/fetch/list.html:4
#: mailu/admin/templates/sidebar.html:28
#: mailu/admin/templates/user/list.html:38
msgid "Fetched accounts"
msgstr "Abgerufene Konten"
#: mailu/admin/templates/sidebar.html:33
msgid "Sign out"
msgstr "Abmelden"
#: mailu/admin/templates/sidebar.html:36
msgid "Administration"
msgstr "Administration"
#: mailu/admin/templates/sidebar.html:50
msgid "Administrators"
msgstr "Administratoren"
#: mailu/admin/templates/sidebar.html:57
msgid "Mail domains"
msgstr "E-Mail-Domains"
#: mailu/admin/templates/sidebar.html:64
msgid "Help"
msgstr "Hilfe"
#: mailu/admin/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Dieses Feature ist noch in Arbeit!"
#: mailu/admin/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Globalen Administrator hinzufügen"
#: mailu/admin/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Globale Administratoren"
#: mailu/admin/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Administrator hinzufügen"
#: mailu/admin/templates/admin/list.html:17
#: mailu/admin/templates/alias/list.html:19
#: mailu/admin/templates/domain/list.html:17
#: mailu/admin/templates/fetch/list.html:19
#: mailu/admin/templates/manager/list.html:19
#: mailu/admin/templates/user/list.html:19
msgid "Actions"
msgstr "Aktionen"
#: mailu/admin/templates/admin/list.html:18
#: mailu/admin/templates/alias/list.html:20
#: mailu/admin/templates/manager/list.html:20
#: mailu/admin/templates/user/list.html:21
msgid "Email"
msgstr "E-Mail"
#: mailu/admin/templates/admin/list.html:23
#: mailu/admin/templates/alias/list.html:30
#: mailu/admin/templates/domain/list.html:32
#: mailu/admin/templates/fetch/list.html:31
#: mailu/admin/templates/manager/list.html:25
#: mailu/admin/templates/user/list.html:32
msgid "Delete"
msgstr "Löschen"
#: mailu/admin/templates/alias/create.html:4
msgid "Create alias"
msgstr "Alias erstellen"
#: mailu/admin/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Alias bearbeiten"
#: mailu/admin/templates/alias/list.html:4
msgid "Alias list"
msgstr "Alias Liste"
#: mailu/admin/templates/alias/list.html:12
msgid "Add alias"
msgstr "Alias hinzufügen"
#: mailu/admin/templates/alias/list.html:23
#: mailu/admin/templates/domain/list.html:23
#: mailu/admin/templates/fetch/list.html:24
#: mailu/admin/templates/user/list.html:25
msgid "Created"
msgstr "Erstellt"
#: mailu/admin/templates/alias/list.html:24
#: mailu/admin/templates/domain/list.html:24
#: mailu/admin/templates/fetch/list.html:25
#: mailu/admin/templates/user/list.html:26
msgid "Last edit"
msgstr "Zuletzt bearbeitet"
#: mailu/admin/templates/alias/list.html:29
#: mailu/admin/templates/domain/list.html:31
#: mailu/admin/templates/fetch/list.html:30
#: mailu/admin/templates/user/list.html:31
msgid "Edit"
msgstr "Bearbeiten"
#: mailu/admin/templates/domain/create.html:4
#: mailu/admin/templates/domain/list.html:9
msgid "New domain"
msgstr "Neue Domain"
#: mailu/admin/templates/domain/details.html:4
msgid "Domain details"
msgstr "Domain Details"
#: mailu/admin/templates/domain/details.html:13
msgid "Regenerate keys"
msgstr "Schlüssel neu erzeugen"
#: mailu/admin/templates/domain/details.html:25
msgid "DNS MX entry"
msgstr "DNS MX Eintrag"
#: mailu/admin/templates/domain/details.html:29
msgid "DNS SPF entries"
msgstr "DNS SPF Einträge"
#: mailu/admin/templates/domain/details.html:36
msgid "DKIM public key"
msgstr "DKIM öffentlicher Schlüssel"
#: mailu/admin/templates/domain/details.html:40
msgid "DNS DKIM entry"
msgstr "DNS DKIM Eintrag"
#: mailu/admin/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr "DNS DMARC Eintrag"
#: mailu/admin/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Domain bearbeiten"
#: mailu/admin/templates/domain/list.html:4
msgid "Domain list"
msgstr "Domain Liste"
#: mailu/admin/templates/domain/list.html:18
msgid "Manage"
msgstr "Verwalten"
#: mailu/admin/templates/domain/list.html:20
msgid "Mailbox count"
msgstr "Mailboxen"
#: mailu/admin/templates/domain/list.html:21
msgid "Alias count"
msgstr "Aliase"
#: mailu/admin/templates/domain/list.html:29
msgid "Details"
msgstr "Details"
#: mailu/admin/templates/domain/list.html:36
msgid "Users"
msgstr "Benutzer"
#: mailu/admin/templates/domain/list.html:37
msgid "Aliases"
msgstr "Aliase"
#: mailu/admin/templates/domain/list.html:38
msgid "Managers"
msgstr "Manager"
#: mailu/admin/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Externes Konto hinzufügen"
#: mailu/admin/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Externes Konto aktualisieren"
#: mailu/admin/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Konto hinzufügen"
#: mailu/admin/templates/fetch/list.html:20
msgid "Endpoint"
msgstr "Endpunkt"
#: mailu/admin/templates/fetch/list.html:22
msgid "Last check"
msgstr "Letzte Prüfung"
#: mailu/admin/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Einen Manager hinzufügen"
#: mailu/admin/templates/manager/list.html:4
msgid "Manager list"
msgstr "Manager Liste"
#: mailu/admin/templates/manager/list.html:12
msgid "Add manager"
msgstr "Manager hinzufügen"
#: mailu/admin/forms.py:125
msgid "Announcement subject"
msgstr "Bekanntmachung Betreff"
#: mailu/admin/forms.py:127
msgid "Announcement body"
msgstr "Bekanntmachung Text"
#: mailu/admin/forms.py:129
msgid "Send"
msgstr "Absenden"
#: mailu/admin/templates/announcement.html:4
msgid "Public announcement"
msgstr "Öffentliche Bekanntmachung"
#: mailu/admin/templates/announcement.html:8
msgid "from"
msgstr "von"
#: mailu/admin/templates/sidebar.html:45
msgid "Announcement"
msgstr "Bekanntmachung"
#: mailu/admin/templates/user/create.html:4
msgid "New user"
msgstr "Neuer Benutzer"
#: mailu/admin/templates/user/edit.html:4
msgid "Edit user"
msgstr "Benutzer bearbeiten"
#: mailu/admin/templates/user/forward.html:4
msgid "Forward emails"
msgstr "E-Mails weiterleiten"
#: mailu/admin/templates/user/list.html:4
msgid "User list"
msgstr "Benutzerliste"
#: mailu/admin/templates/user/list.html:12
msgid "Add user"
msgstr "Benutzer hinzufügen"
#: mailu/admin/templates/user/list.html:20
#: mailu/admin/templates/user/settings.html:4
msgid "User settings"
msgstr "Benutzer Einstellungen"
#: mailu/admin/templates/user/list.html:22
msgid "Features"
msgstr "Funktionen"
#: mailu/admin/templates/user/password.html:4
msgid "Password update"
msgstr "Passwort aktualisieren"
#: mailu/admin/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Automatische Antwort"

View File

@@ -1,513 +0,0 @@
# English translations for PROJECT.
# Copyright (C) 2016 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2016-11-10 10:52+0100\n"
"PO-Revision-Date: 2016-10-02 15:02+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
#: mailu/admin/forms.py:32
msgid "Invalid email address."
msgstr ""
#: mailu/admin/forms.py:36
msgid "Confirm"
msgstr ""
#: mailu/admin/forms.py:40 mailu/admin/forms.py:54
msgid "E-mail"
msgstr ""
#: mailu/admin/forms.py:41 mailu/admin/forms.py:55 mailu/admin/forms.py:72
#: mailu/admin/forms.py:120
msgid "Password"
msgstr ""
#: mailu/admin/forms.py:42 mailu/admin/templates/login.html:9
#: mailu/admin/templates/login.html:17
msgid "Sign in"
msgstr ""
#: mailu/admin/forms.py:46 mailu/admin/templates/domain/details.html:21
#: mailu/admin/templates/domain/list.html:19
msgid "Domain name"
msgstr ""
#: mailu/admin/forms.py:47
msgid "Maximum user count"
msgstr ""
#: mailu/admin/forms.py:48
msgid "Maximum alias count"
msgstr ""
#: mailu/admin/forms.py:49 mailu/admin/forms.py:60 mailu/admin/forms.py:98
#: mailu/admin/templates/alias/list.html:22
#: mailu/admin/templates/domain/list.html:22
#: mailu/admin/templates/user/list.html:24
msgid "Comment"
msgstr ""
#: mailu/admin/forms.py:50 mailu/admin/forms.py:99
msgid "Create"
msgstr ""
#: mailu/admin/forms.py:56
msgid "Confirm password"
msgstr ""
#: mailu/admin/forms.py:57 mailu/admin/templates/user/list.html:23
msgid "Quota"
msgstr ""
#: mailu/admin/forms.py:58
msgid "Allow IMAP access"
msgstr ""
#: mailu/admin/forms.py:59
msgid "Allow POP3 access"
msgstr ""
#: mailu/admin/forms.py:61
msgid "Save"
msgstr ""
#: mailu/admin/forms.py:65
msgid "Displayed name"
msgstr ""
#: mailu/admin/forms.py:66
msgid "Enable spam filter"
msgstr ""
#: mailu/admin/forms.py:67
msgid "Spam filter threshold"
msgstr ""
#: mailu/admin/forms.py:68
msgid "Save settings"
msgstr ""
#: mailu/admin/forms.py:73
msgid "Password check"
msgstr ""
#: mailu/admin/forms.py:74 mailu/admin/templates/sidebar.html:13
msgid "Update password"
msgstr ""
#: mailu/admin/forms.py:78
msgid "Enable forwarding"
msgstr ""
#: mailu/admin/forms.py:80 mailu/admin/forms.py:97
#: mailu/admin/templates/alias/list.html:21
msgid "Destination"
msgstr ""
#: mailu/admin/forms.py:82 mailu/admin/forms.py:90
msgid "Update"
msgstr ""
#: mailu/admin/forms.py:86
msgid "Enable automatic reply"
msgstr ""
#: mailu/admin/forms.py:87
msgid "Reply subject"
msgstr ""
#: mailu/admin/forms.py:88
msgid "Reply body"
msgstr ""
#: mailu/admin/forms.py:94
msgid "Alias"
msgstr ""
#: mailu/admin/forms.py:96
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr ""
#: mailu/admin/forms.py:103
msgid "Admin email"
msgstr ""
#: mailu/admin/forms.py:104 mailu/admin/forms.py:109 mailu/admin/forms.py:121
msgid "Submit"
msgstr ""
#: mailu/admin/forms.py:108
msgid "Manager email"
msgstr ""
#: mailu/admin/forms.py:113
msgid "Protocol"
msgstr ""
#: mailu/admin/forms.py:116
msgid "Hostname or IP"
msgstr ""
#: mailu/admin/forms.py:117
msgid "TCP port"
msgstr ""
#: mailu/admin/forms.py:118
msgid "Enable TLS"
msgstr ""
#: mailu/admin/forms.py:119 mailu/admin/templates/fetch/list.html:21
msgid "Username"
msgstr ""
#: mailu/admin/forms.py:125
msgid "Announcement subject"
msgstr ""
#: mailu/admin/forms.py:127
msgid "Announcement body"
msgstr ""
#: mailu/admin/forms.py:129
msgid "Send"
msgstr ""
#: mailu/admin/templates/announcement.html:4
msgid "Public announcement"
msgstr ""
#: mailu/admin/templates/announcement.html:8
msgid "from"
msgstr ""
#: mailu/admin/templates/confirm.html:4
msgid "Confirm action"
msgstr ""
#: mailu/admin/templates/confirm.html:12
#, python-format
msgid "You are about to %(action)s. Please confirm your action."
msgstr ""
#: mailu/admin/templates/docker-error.html:4
msgid "Docker error"
msgstr ""
#: mailu/admin/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr ""
#: mailu/admin/templates/login.html:21
msgid "to access the administration tools"
msgstr ""
#: mailu/admin/templates/services.html:4 mailu/admin/templates/sidebar.html:40
msgid "Services status"
msgstr ""
#: mailu/admin/templates/services.html:11
msgid "Service"
msgstr ""
#: mailu/admin/templates/fetch/list.html:23
#: mailu/admin/templates/services.html:12
msgid "Status"
msgstr ""
#: mailu/admin/templates/services.html:13
msgid "PID"
msgstr ""
#: mailu/admin/templates/services.html:14
msgid "Image"
msgstr ""
#: mailu/admin/templates/services.html:15
msgid "Started"
msgstr ""
#: mailu/admin/templates/services.html:16
msgid "Last update"
msgstr ""
#: mailu/admin/templates/sidebar.html:5
msgid "My account"
msgstr ""
#: mailu/admin/templates/sidebar.html:8 mailu/admin/templates/user/list.html:35
msgid "Settings"
msgstr ""
#: mailu/admin/templates/sidebar.html:18
#: mailu/admin/templates/user/list.html:36
msgid "Auto-forward"
msgstr ""
#: mailu/admin/templates/sidebar.html:23
#: mailu/admin/templates/user/list.html:37
msgid "Auto-reply"
msgstr ""
#: mailu/admin/templates/fetch/list.html:4
#: mailu/admin/templates/sidebar.html:28
#: mailu/admin/templates/user/list.html:38
msgid "Fetched accounts"
msgstr ""
#: mailu/admin/templates/sidebar.html:33
msgid "Sign out"
msgstr ""
#: mailu/admin/templates/sidebar.html:36
msgid "Administration"
msgstr ""
#: mailu/admin/templates/sidebar.html:45
msgid "Announcement"
msgstr ""
#: mailu/admin/templates/sidebar.html:50
msgid "Administrators"
msgstr ""
#: mailu/admin/templates/sidebar.html:57
msgid "Mail domains"
msgstr ""
#: mailu/admin/templates/sidebar.html:64
msgid "Help"
msgstr ""
#: mailu/admin/templates/working.html:4
msgid "We are still working on this feature!"
msgstr ""
#: mailu/admin/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr ""
#: mailu/admin/templates/admin/list.html:4
msgid "Global administrators"
msgstr ""
#: mailu/admin/templates/admin/list.html:9
msgid "Add administrator"
msgstr ""
#: mailu/admin/templates/admin/list.html:17
#: mailu/admin/templates/alias/list.html:19
#: mailu/admin/templates/domain/list.html:17
#: mailu/admin/templates/fetch/list.html:19
#: mailu/admin/templates/manager/list.html:19
#: mailu/admin/templates/user/list.html:19
msgid "Actions"
msgstr ""
#: mailu/admin/templates/admin/list.html:18
#: mailu/admin/templates/alias/list.html:20
#: mailu/admin/templates/manager/list.html:20
#: mailu/admin/templates/user/list.html:21
msgid "Email"
msgstr ""
#: mailu/admin/templates/admin/list.html:23
#: mailu/admin/templates/alias/list.html:30
#: mailu/admin/templates/domain/list.html:32
#: mailu/admin/templates/fetch/list.html:31
#: mailu/admin/templates/manager/list.html:25
#: mailu/admin/templates/user/list.html:32
msgid "Delete"
msgstr ""
#: mailu/admin/templates/alias/create.html:4
msgid "Create alias"
msgstr ""
#: mailu/admin/templates/alias/edit.html:4
msgid "Edit alias"
msgstr ""
#: mailu/admin/templates/alias/list.html:4
msgid "Alias list"
msgstr ""
#: mailu/admin/templates/alias/list.html:12
msgid "Add alias"
msgstr ""
#: mailu/admin/templates/alias/list.html:23
#: mailu/admin/templates/domain/list.html:23
#: mailu/admin/templates/fetch/list.html:24
#: mailu/admin/templates/user/list.html:25
msgid "Created"
msgstr ""
#: mailu/admin/templates/alias/list.html:24
#: mailu/admin/templates/domain/list.html:24
#: mailu/admin/templates/fetch/list.html:25
#: mailu/admin/templates/user/list.html:26
msgid "Last edit"
msgstr ""
#: mailu/admin/templates/alias/list.html:29
#: mailu/admin/templates/domain/list.html:31
#: mailu/admin/templates/fetch/list.html:30
#: mailu/admin/templates/user/list.html:31
msgid "Edit"
msgstr ""
#: mailu/admin/templates/domain/create.html:4
#: mailu/admin/templates/domain/list.html:9
msgid "New domain"
msgstr ""
#: mailu/admin/templates/domain/details.html:4
msgid "Domain details"
msgstr ""
#: mailu/admin/templates/domain/details.html:13
msgid "Regenerate keys"
msgstr ""
#: mailu/admin/templates/domain/details.html:25
msgid "DNS MX entry"
msgstr ""
#: mailu/admin/templates/domain/details.html:29
msgid "DNS SPF entries"
msgstr ""
#: mailu/admin/templates/domain/details.html:36
msgid "DKIM public key"
msgstr ""
#: mailu/admin/templates/domain/details.html:40
msgid "DNS DKIM entry"
msgstr ""
#: mailu/admin/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr ""
#: mailu/admin/templates/domain/edit.html:4
msgid "Edit domain"
msgstr ""
#: mailu/admin/templates/domain/list.html:4
msgid "Domain list"
msgstr ""
#: mailu/admin/templates/domain/list.html:18
msgid "Manage"
msgstr ""
#: mailu/admin/templates/domain/list.html:20
msgid "Mailbox count"
msgstr ""
#: mailu/admin/templates/domain/list.html:21
msgid "Alias count"
msgstr ""
#: mailu/admin/templates/domain/list.html:29
msgid "Details"
msgstr ""
#: mailu/admin/templates/domain/list.html:36
msgid "Users"
msgstr ""
#: mailu/admin/templates/domain/list.html:37
msgid "Aliases"
msgstr ""
#: mailu/admin/templates/domain/list.html:38
msgid "Managers"
msgstr ""
#: mailu/admin/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/admin/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/admin/templates/fetch/list.html:12
msgid "Add an account"
msgstr ""
#: mailu/admin/templates/fetch/list.html:20
msgid "Endpoint"
msgstr ""
#: mailu/admin/templates/fetch/list.html:22
msgid "Last check"
msgstr ""
#: mailu/admin/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
#: mailu/admin/templates/manager/list.html:4
msgid "Manager list"
msgstr ""
#: mailu/admin/templates/manager/list.html:12
msgid "Add manager"
msgstr ""
#: mailu/admin/templates/user/create.html:4
msgid "New user"
msgstr ""
#: mailu/admin/templates/user/edit.html:4
msgid "Edit user"
msgstr ""
#: mailu/admin/templates/user/forward.html:4
msgid "Forward emails"
msgstr ""
#: mailu/admin/templates/user/list.html:4
msgid "User list"
msgstr ""
#: mailu/admin/templates/user/list.html:12
msgid "Add user"
msgstr ""
#: mailu/admin/templates/user/list.html:20
#: mailu/admin/templates/user/settings.html:4
msgid "User settings"
msgstr ""
#: mailu/admin/templates/user/list.html:22
msgid "Features"
msgstr ""
#: mailu/admin/templates/user/password.html:4
msgid "Password update"
msgstr ""
#: mailu/admin/templates/user/reply.html:4
msgid "Automatic reply"
msgstr ""

View File

@@ -1,501 +0,0 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: fr\n"
#: mailu/admin/forms.py:32
msgid "Invalid email address."
msgstr "Adresse e-mail invalide"
#: mailu/admin/forms.py:36
msgid "Confirm"
msgstr "Confirmer"
#: mailu/admin/forms.py:40 mailu/admin/forms.py:54
msgid "E-mail"
msgstr "E-mail"
#: mailu/admin/forms.py:41 mailu/admin/forms.py:55 mailu/admin/forms.py:72
#: mailu/admin/forms.py:120
msgid "Password"
msgstr "Mot de passe"
#: mailu/admin/forms.py:42 mailu/admin/templates/login.html:9
#: mailu/admin/templates/login.html:17
msgid "Sign in"
msgstr "Se connecter"
#: mailu/admin/forms.py:46 mailu/admin/templates/domain/details.html:21
#: mailu/admin/templates/domain/list.html:19
msgid "Domain name"
msgstr "Nom de domaine"
#: mailu/admin/forms.py:47
msgid "Maximum user count"
msgstr "Nombre maximum d'utilisateurs"
#: mailu/admin/forms.py:48
msgid "Maximum alias count"
msgstr "Nombre maximum d'alias"
#: mailu/admin/forms.py:49 mailu/admin/forms.py:60 mailu/admin/forms.py:98
#: mailu/admin/templates/alias/list.html:22
#: mailu/admin/templates/domain/list.html:22
#: mailu/admin/templates/user/list.html:24
msgid "Comment"
msgstr "Commentaire"
#: mailu/admin/forms.py:50 mailu/admin/forms.py:99
msgid "Create"
msgstr "Créer"
#: mailu/admin/forms.py:56
msgid "Confirm password"
msgstr "Confirmer le mot de passe"
#: mailu/admin/forms.py:57 mailu/admin/templates/user/list.html:23
msgid "Quota"
msgstr "Quota"
#: mailu/admin/forms.py:58
msgid "Allow IMAP access"
msgstr "Autoriser l'accès IMAP"
#: mailu/admin/forms.py:59
msgid "Allow POP3 access"
msgstr "Autoriser l'accès POP3"
#: mailu/admin/forms.py:61
msgid "Save"
msgstr "Enregistrer"
#: mailu/admin/forms.py:65
msgid "Displayed name"
msgstr "Nom affiché"
#: mailu/admin/forms.py:66
msgid "Enable spam filter"
msgstr "Activer le filtre anti-spam"
#: mailu/admin/forms.py:67
msgid "Spam filter threshold"
msgstr "Seuil du filtre anti-spam"
#: mailu/admin/forms.py:68
msgid "Save settings"
msgstr "Enregistrer les préférences"
#: mailu/admin/forms.py:73
msgid "Password check"
msgstr "Vérifier le mot de passe"
#: mailu/admin/forms.py:74 mailu/admin/templates/sidebar.html:13
msgid "Update password"
msgstr "Changer de mot de passe"
#: mailu/admin/forms.py:78
msgid "Enable forwarding"
msgstr "Activer la redirection"
#: mailu/admin/forms.py:80 mailu/admin/forms.py:97
#: mailu/admin/templates/alias/list.html:21
msgid "Destination"
msgstr "Destination"
#: mailu/admin/forms.py:82 mailu/admin/forms.py:90
msgid "Update"
msgstr "Mettre à jour"
#: mailu/admin/forms.py:86
msgid "Enable automatic reply"
msgstr "Activer les réponses automatique"
#: mailu/admin/forms.py:87
msgid "Reply subject"
msgstr "Sujet du message"
#: mailu/admin/forms.py:88
msgid "Reply body"
msgstr "Corps de la réponse"
#: mailu/admin/forms.py:94
msgid "Alias"
msgstr "Alias"
#: mailu/admin/forms.py:96
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Utiliser la syntaxe SQL LIKE (par exemple pour les alias catch-all)"
#: mailu/admin/forms.py:103
msgid "Admin email"
msgstr "Email de l'administrateur"
#: mailu/admin/forms.py:104 mailu/admin/forms.py:109 mailu/admin/forms.py:121
msgid "Submit"
msgstr "Valider"
#: mailu/admin/forms.py:108
msgid "Manager email"
msgstr "E-mail du gérant"
#: mailu/admin/forms.py:113
msgid "Protocol"
msgstr "Protocole"
#: mailu/admin/forms.py:116
msgid "Hostname or IP"
msgstr "Nom d'hôte ou adresse IP"
#: mailu/admin/forms.py:117
msgid "TCP port"
msgstr "Port TCP"
#: mailu/admin/forms.py:118
msgid "Enable TLS"
msgstr "Activer TLS"
#: mailu/admin/forms.py:119 mailu/admin/templates/fetch/list.html:21
msgid "Username"
msgstr "Nom d'utilisateur"
#: mailu/admin/templates/confirm.html:4
msgid "Confirm action"
msgstr "Confirmer"
#: mailu/admin/templates/confirm.html:12
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Vous allez %(action)s. Merci de confirmer votre action."
#: mailu/admin/templates/docker-error.html:4
msgid "Docker error"
msgstr "Erreur Docker"
#: mailu/admin/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Une erreur s'est produite en communiquant avec le serveur Docker."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Votre compte"
#: mailu/admin/templates/login.html:21
msgid "to access the administration tools"
msgstr "pour accéder aux outils d'administration"
#: mailu/admin/templates/services.html:4 mailu/admin/templates/sidebar.html:40
msgid "Services status"
msgstr "Etat des services"
#: mailu/admin/templates/services.html:11
msgid "Service"
msgstr "Service"
#: mailu/admin/templates/fetch/list.html:23
#: mailu/admin/templates/services.html:12
msgid "Status"
msgstr "Etat"
#: mailu/admin/templates/services.html:13
msgid "PID"
msgstr "PID"
#: mailu/admin/templates/services.html:14
msgid "Image"
msgstr "Image"
#: mailu/admin/templates/services.html:15
msgid "Started"
msgstr "Démarré depuis"
#: mailu/admin/templates/services.html:16
msgid "Last update"
msgstr "Dernière mise à jour"
#: mailu/admin/templates/sidebar.html:5
msgid "My account"
msgstr "Mon compte"
#: mailu/admin/templates/sidebar.html:8 mailu/admin/templates/user/list.html:35
msgid "Settings"
msgstr "Préférences"
#: mailu/admin/templates/sidebar.html:18
#: mailu/admin/templates/user/list.html:36
msgid "Auto-forward"
msgstr "Redirection"
#: mailu/admin/templates/sidebar.html:23
#: mailu/admin/templates/user/list.html:37
msgid "Auto-reply"
msgstr "Réponse automatique"
#: mailu/admin/templates/fetch/list.html:4
#: mailu/admin/templates/sidebar.html:28
#: mailu/admin/templates/user/list.html:38
msgid "Fetched accounts"
msgstr "Comptes externes"
#: mailu/admin/templates/sidebar.html:33
msgid "Sign out"
msgstr "Déconnexion"
#: mailu/admin/templates/sidebar.html:36
msgid "Administration"
msgstr "Administration"
#: mailu/admin/templates/sidebar.html:50
msgid "Administrators"
msgstr "Administrateurs"
#: mailu/admin/templates/sidebar.html:57
msgid "Mail domains"
msgstr "Domaines"
#: mailu/admin/templates/sidebar.html:64
msgid "Help"
msgstr "Aide"
#: mailu/admin/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Cette fonctionnalité est en cours de développement !"
#: mailu/admin/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Ajouter un administrateur global"
#: mailu/admin/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Administrateurs globaux"
#: mailu/admin/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Ajouter un administrateur"
#: mailu/admin/templates/admin/list.html:17
#: mailu/admin/templates/alias/list.html:19
#: mailu/admin/templates/domain/list.html:17
#: mailu/admin/templates/fetch/list.html:19
#: mailu/admin/templates/manager/list.html:19
#: mailu/admin/templates/user/list.html:19
msgid "Actions"
msgstr "Actions"
#: mailu/admin/templates/admin/list.html:18
#: mailu/admin/templates/alias/list.html:20
#: mailu/admin/templates/manager/list.html:20
#: mailu/admin/templates/user/list.html:21
msgid "Email"
msgstr "E-mail"
#: mailu/admin/templates/admin/list.html:23
#: mailu/admin/templates/alias/list.html:30
#: mailu/admin/templates/domain/list.html:32
#: mailu/admin/templates/fetch/list.html:31
#: mailu/admin/templates/manager/list.html:25
#: mailu/admin/templates/user/list.html:32
msgid "Delete"
msgstr "Supprimer"
#: mailu/admin/templates/alias/create.html:4
msgid "Create alias"
msgstr "Créer un alias"
#: mailu/admin/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Modifier un alias"
#: mailu/admin/templates/alias/list.html:4
msgid "Alias list"
msgstr "Liste des alias"
#: mailu/admin/templates/alias/list.html:12
msgid "Add alias"
msgstr "Ajouter un alias"
#: mailu/admin/templates/alias/list.html:23
#: mailu/admin/templates/domain/list.html:23
#: mailu/admin/templates/fetch/list.html:24
#: mailu/admin/templates/user/list.html:25
msgid "Created"
msgstr "Création"
#: mailu/admin/templates/alias/list.html:24
#: mailu/admin/templates/domain/list.html:24
#: mailu/admin/templates/fetch/list.html:25
#: mailu/admin/templates/user/list.html:26
msgid "Last edit"
msgstr "Dernière modification"
#: mailu/admin/templates/alias/list.html:29
#: mailu/admin/templates/domain/list.html:31
#: mailu/admin/templates/fetch/list.html:30
#: mailu/admin/templates/user/list.html:31
msgid "Edit"
msgstr "Modifier"
#: mailu/admin/templates/domain/create.html:4
#: mailu/admin/templates/domain/list.html:9
msgid "New domain"
msgstr "Nouveau domaine"
#: mailu/admin/templates/domain/details.html:4
msgid "Domain details"
msgstr "Détails du domaine"
#: mailu/admin/templates/domain/details.html:13
msgid "Regenerate keys"
msgstr "Regénérer les clés"
#: mailu/admin/templates/domain/details.html:25
msgid "DNS MX entry"
msgstr "Entrée DNS MX"
#: mailu/admin/templates/domain/details.html:29
msgid "DNS SPF entries"
msgstr "Entrées DNS SPF"
#: mailu/admin/templates/domain/details.html:36
msgid "DKIM public key"
msgstr "Clé publique DKIM"
#: mailu/admin/templates/domain/details.html:40
msgid "DNS DKIM entry"
msgstr "Entrée DNS DKIM"
#: mailu/admin/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr "Entrée DNS DMARC"
#: mailu/admin/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Modifier le domaine"
#: mailu/admin/templates/domain/list.html:4
msgid "Domain list"
msgstr "Liste des domaines"
#: mailu/admin/templates/domain/list.html:18
msgid "Manage"
msgstr "Gérer"
#: mailu/admin/templates/domain/list.html:20
msgid "Mailbox count"
msgstr "Nombre de boîtes mail"
#: mailu/admin/templates/domain/list.html:21
msgid "Alias count"
msgstr "Nombre d'alias"
#: mailu/admin/templates/domain/list.html:29
msgid "Details"
msgstr "Détails"
#: mailu/admin/templates/domain/list.html:36
msgid "Users"
msgstr "Utilisateurs"
#: mailu/admin/templates/domain/list.html:37
msgid "Aliases"
msgstr "Alias"
#: mailu/admin/templates/domain/list.html:38
msgid "Managers"
msgstr "Gérants"
#: mailu/admin/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Ajouter un compte externe"
#: mailu/admin/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Modifier un compte externe"
#: mailu/admin/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Ajouter un compte"
#: mailu/admin/templates/fetch/list.html:20
msgid "Endpoint"
msgstr "Source"
#: mailu/admin/templates/fetch/list.html:22
msgid "Last check"
msgstr "Dernier relevé"
#: mailu/admin/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Ajouter un gérant"
#: mailu/admin/templates/manager/list.html:4
msgid "Manager list"
msgstr "Liste des gérants"
#: mailu/admin/templates/manager/list.html:12
msgid "Add manager"
msgstr "Ajouter le gérant"
#: mailu/admin/forms.py:125
msgid "Announcement subject"
msgstr "Sujet de l'annonce"
#: mailu/admin/forms.py:127
msgid "Announcement body"
msgstr "Corps de l'annonce"
#: mailu/admin/forms.py:129
msgid "Send"
msgstr "Envoyer"
#: mailu/admin/templates/announcement.html:4
msgid "Public announcement"
msgstr "Annonce globale"
#: mailu/admin/templates/announcement.html:8
msgid "from"
msgstr "de"
#: mailu/admin/templates/sidebar.html:45
msgid "Announcement"
msgstr "Annonce"
#: mailu/admin/templates/user/create.html:4
msgid "New user"
msgstr "Nouvel utilisateur"
#: mailu/admin/templates/user/edit.html:4
msgid "Edit user"
msgstr "Modifier l'utilisateur"
#: mailu/admin/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Faire suivre les emails"
#: mailu/admin/templates/user/list.html:4
msgid "User list"
msgstr "Utilisateurs"
#: mailu/admin/templates/user/list.html:12
msgid "Add user"
msgstr "Ajouter un utilisateur"
#: mailu/admin/templates/user/list.html:20
#: mailu/admin/templates/user/settings.html:4
msgid "User settings"
msgstr "Options de l'utilisateur"
#: mailu/admin/templates/user/list.html:22
msgid "Features"
msgstr "Fonctionnalités"
#: mailu/admin/templates/user/password.html:4
msgid "Password update"
msgstr "Modifier le mot de passe"
#: mailu/admin/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Réponse automatique"

View File

@@ -1,518 +0,0 @@
# Translations template for PROJECT.
# Copyright (C) 2016 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-03-27 11:37-0300\n"
"PO-Revision-Date: 2017-03-27 11:43-0300\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
"X-Generator: Poedit 1.8.9\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-Basepath: .\n"
#: mailu/admin/forms.py:32
msgid "Invalid email address."
msgstr "Endereço de e-mail inválido"
#: mailu/admin/forms.py:36
msgid "Confirm"
msgstr "Confirmar"
#: mailu/admin/forms.py:40 mailu/admin/forms.py:54
msgid "E-mail"
msgstr "E-mail"
#: mailu/admin/forms.py:41 mailu/admin/forms.py:55 mailu/admin/forms.py:72
#: mailu/admin/forms.py:120
msgid "Password"
msgstr "Senha"
#: mailu/admin/forms.py:42 mailu/admin/templates/login.html:9
#: mailu/admin/templates/login.html:17
msgid "Sign in"
msgstr "Entrar"
#: mailu/admin/forms.py:46 mailu/admin/templates/domain/details.html:21
#: mailu/admin/templates/domain/list.html:19
msgid "Domain name"
msgstr "Domínio"
#: mailu/admin/forms.py:47
msgid "Maximum user count"
msgstr "Quantidade máxima de usuários"
#: mailu/admin/forms.py:48
msgid "Maximum alias count"
msgstr "Quantidade máxima de alias"
#: mailu/admin/forms.py:49 mailu/admin/forms.py:60 mailu/admin/forms.py:98
#: mailu/admin/templates/alias/list.html:22
#: mailu/admin/templates/domain/list.html:22
#: mailu/admin/templates/user/list.html:24
msgid "Comment"
msgstr "Comentário"
#: mailu/admin/forms.py:50 mailu/admin/forms.py:99
msgid "Create"
msgstr "Criar"
#: mailu/admin/forms.py:56
msgid "Confirm password"
msgstr "Confirmar senha"
#: mailu/admin/forms.py:57 mailu/admin/templates/user/list.html:23
msgid "Quota"
msgstr "Quota"
#: mailu/admin/forms.py:58
msgid "Allow IMAP access"
msgstr "Permitir acesso IMAP"
#: mailu/admin/forms.py:59
msgid "Allow POP3 access"
msgstr "Permitir acesso POP3"
#: mailu/admin/forms.py:61
msgid "Save"
msgstr "Salvar"
#: mailu/admin/forms.py:65
msgid "Displayed name"
msgstr "Nome de exibição"
#: mailu/admin/forms.py:66
msgid "Enable spam filter"
msgstr "Habilitar filtro de spam"
#: mailu/admin/forms.py:67
msgid "Spam filter threshold"
msgstr "Limite de filtro de spam"
#: mailu/admin/forms.py:68
msgid "Save settings"
msgstr "Salvar configurações"
#: mailu/admin/forms.py:73
msgid "Password check"
msgstr "Confirmação de senha"
#: mailu/admin/forms.py:74 mailu/admin/templates/sidebar.html:13
msgid "Update password"
msgstr "Alterar senha"
#: mailu/admin/forms.py:78
msgid "Enable forwarding"
msgstr "Habilitar encaminhamento"
#: mailu/admin/forms.py:80 mailu/admin/forms.py:97
#: mailu/admin/templates/alias/list.html:21
msgid "Destination"
msgstr "Destinatário"
#: mailu/admin/forms.py:82 mailu/admin/forms.py:90
msgid "Update"
msgstr "Atualizar"
#: mailu/admin/forms.py:86
msgid "Enable automatic reply"
msgstr "Habilitar resposta automática"
#: mailu/admin/forms.py:87
msgid "Reply subject"
msgstr "Assunto da resposta"
#: mailu/admin/forms.py:88
msgid "Reply body"
msgstr "Corpo da resposta"
#: mailu/admin/forms.py:94
msgid "Alias"
msgstr "Alias"
#: mailu/admin/forms.py:96
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Usar sintaxe estilo SQL(ex: for catch-all aliases)"
#: mailu/admin/forms.py:103
msgid "Admin email"
msgstr "E-mail do administrador"
#: mailu/admin/forms.py:104 mailu/admin/forms.py:109 mailu/admin/forms.py:121
msgid "Submit"
msgstr "Enviar"
#: mailu/admin/forms.py:108
msgid "Manager email"
msgstr "E-mail do gerente"
#: mailu/admin/forms.py:113
msgid "Protocol"
msgstr "Protocolo"
#: mailu/admin/forms.py:116
msgid "Hostname or IP"
msgstr "Hostname ou IP"
#: mailu/admin/forms.py:117
msgid "TCP port"
msgstr "Porta TCP"
#: mailu/admin/forms.py:118
msgid "Enable TLS"
msgstr "Habilitar TLS"
#: mailu/admin/forms.py:119 mailu/admin/templates/fetch/list.html:21
msgid "Username"
msgstr "Usuário"
#: mailu/admin/forms.py:121
msgid "Keep emails on the server"
msgstr "Manter os e-mails no servidor"
#: mailu/admin/forms.py:125
msgid "Announcement subject"
msgstr "Título do comunicado"
#: mailu/admin/forms.py:127
msgid "Announcement body"
msgstr "Corpo do comunicado"
#: mailu/admin/forms.py:129
msgid "Send"
msgstr "Enviar"
#: mailu/admin/templates/announcement.html:4
msgid "Public announcement"
msgstr "Comunicado geral"
#: mailu/admin/templates/announcement.html:8
msgid "from"
msgstr "de"
#: mailu/admin/templates/confirm.html:4
msgid "Confirm action"
msgstr "Confirmar ação"
#: mailu/admin/templates/confirm.html:12
#, python-format
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Por favor, confirme a(s) %(action)s"
#: mailu/admin/templates/docker-error.html:4
msgid "Docker error"
msgstr "Erro no docker"
#: mailu/admin/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Um erro foi encontrado na conexão com o servidor Docker"
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Sua conta"
#: mailu/admin/templates/login.html:21
msgid "to access the administration tools"
msgstr "para acessar as ferramentas administrativas"
#: mailu/admin/templates/services.html:4 mailu/admin/templates/sidebar.html:40
msgid "Services status"
msgstr "Status do serviço"
#: mailu/admin/templates/services.html:11
msgid "Service"
msgstr "Serviço"
#: mailu/admin/templates/fetch/list.html:23
#: mailu/admin/templates/services.html:12
msgid "Status"
msgstr "Status"
#: mailu/admin/templates/services.html:13
msgid "PID"
msgstr "PID"
#: mailu/admin/templates/services.html:14
msgid "Image"
msgstr "Imagem"
#: mailu/admin/templates/services.html:15
msgid "Started"
msgstr "Iniciado"
#: mailu/admin/templates/services.html:16
msgid "Last update"
msgstr "Última atualização"
#: mailu/admin/templates/sidebar.html:5
msgid "My account"
msgstr "Minha conta"
#: mailu/admin/templates/sidebar.html:8 mailu/admin/templates/user/list.html:35
msgid "Settings"
msgstr "Configurações"
#: mailu/admin/templates/sidebar.html:18
#: mailu/admin/templates/user/list.html:36
msgid "Auto-forward"
msgstr "Encaminhamento automático"
#: mailu/admin/templates/sidebar.html:23
#: mailu/admin/templates/user/list.html:37
msgid "Auto-reply"
msgstr "Resposta automática"
#: mailu/admin/templates/fetch/list.html:4
#: mailu/admin/templates/sidebar.html:28
#: mailu/admin/templates/user/list.html:38
msgid "Fetched accounts"
msgstr "Contas importadas"
#: mailu/admin/templates/sidebar.html:33
msgid "Sign out"
msgstr "Sair"
#: mailu/admin/templates/sidebar.html:36
msgid "Administration"
msgstr "Administração"
#: mailu/admin/templates/sidebar.html:45
msgid "Announcement"
msgstr "Comunicado"
#: mailu/admin/templates/sidebar.html:50
msgid "Administrators"
msgstr "Administradores"
#: mailu/admin/templates/sidebar.html:57
msgid "Mail domains"
msgstr "Domínios de e-mail"
#: mailu/admin/templates/sidebar.html:64
msgid "Help"
msgstr "Ajuda"
#: mailu/admin/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Nós ainda estamos trabalhando nesta função!"
#: mailu/admin/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Adicionar administrador global"
#: mailu/admin/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Administradores globais"
#: mailu/admin/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Adicionar administrador"
#: mailu/admin/templates/admin/list.html:17
#: mailu/admin/templates/alias/list.html:19
#: mailu/admin/templates/domain/list.html:17
#: mailu/admin/templates/fetch/list.html:19
#: mailu/admin/templates/manager/list.html:19
#: mailu/admin/templates/user/list.html:19
msgid "Actions"
msgstr "Ações"
#: mailu/admin/templates/admin/list.html:18
#: mailu/admin/templates/alias/list.html:20
#: mailu/admin/templates/manager/list.html:20
#: mailu/admin/templates/user/list.html:21
msgid "Email"
msgstr "Email"
#: mailu/admin/templates/admin/list.html:23
#: mailu/admin/templates/alias/list.html:30
#: mailu/admin/templates/domain/list.html:32
#: mailu/admin/templates/fetch/list.html:31
#: mailu/admin/templates/manager/list.html:25
#: mailu/admin/templates/user/list.html:32
msgid "Delete"
msgstr "Deletar"
#: mailu/admin/templates/alias/create.html:4
msgid "Create alias"
msgstr "Criar alias"
#: mailu/admin/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Editar alias"
#: mailu/admin/templates/alias/list.html:4
msgid "Alias list"
msgstr "Lista de alias"
#: mailu/admin/templates/alias/list.html:12
msgid "Add alias"
msgstr "Adicionar alias"
#: mailu/admin/templates/alias/list.html:23
#: mailu/admin/templates/domain/list.html:23
#: mailu/admin/templates/fetch/list.html:24
#: mailu/admin/templates/user/list.html:25
msgid "Created"
msgstr "Criado"
#: mailu/admin/templates/alias/list.html:24
#: mailu/admin/templates/domain/list.html:24
#: mailu/admin/templates/fetch/list.html:25
#: mailu/admin/templates/user/list.html:26
msgid "Last edit"
msgstr "Última edição"
#: mailu/admin/templates/alias/list.html:29
#: mailu/admin/templates/domain/list.html:31
#: mailu/admin/templates/fetch/list.html:30
#: mailu/admin/templates/user/list.html:31
msgid "Edit"
msgstr "Editar"
#: mailu/admin/templates/domain/create.html:4
#: mailu/admin/templates/domain/list.html:9
msgid "New domain"
msgstr "Novo domínio"
#: mailu/admin/templates/domain/details.html:4
msgid "Domain details"
msgstr "Detalhes do domínio"
#: mailu/admin/templates/domain/details.html:13
msgid "Regenerate keys"
msgstr "Gerar novas chaves"
#: mailu/admin/templates/domain/details.html:25
msgid "DNS MX entry"
msgstr "Entrada DNS MX"
#: mailu/admin/templates/domain/details.html:29
msgid "DNS SPF entries"
msgstr "Entrada DNS SPF"
#: mailu/admin/templates/domain/details.html:36
msgid "DKIM public key"
msgstr "Chave pública do DKIM"
#: mailu/admin/templates/domain/details.html:40
msgid "DNS DKIM entry"
msgstr "Entrada DNS DKIM"
#: mailu/admin/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr "Entrada DNS DMARC"
#: mailu/admin/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Editar domínio"
#: mailu/admin/templates/domain/list.html:4
msgid "Domain list"
msgstr "Lista de domínios"
#: mailu/admin/templates/domain/list.html:18
msgid "Manage"
msgstr "Gerenciar"
#: mailu/admin/templates/domain/list.html:20
msgid "Mailbox count"
msgstr "Quantidade de caixas de e-mail"
#: mailu/admin/templates/domain/list.html:21
msgid "Alias count"
msgstr "Quantidade de aliases"
#: mailu/admin/templates/domain/list.html:29
msgid "Details"
msgstr "Detalhes"
#: mailu/admin/templates/domain/list.html:36
msgid "Users"
msgstr "Usuários"
#: mailu/admin/templates/domain/list.html:37
msgid "Aliases"
msgstr "Aliases"
#: mailu/admin/templates/domain/list.html:38
msgid "Managers"
msgstr "Gerentes"
#: mailu/admin/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Adicionar conta a importar"
#: mailu/admin/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Atualizar conta importada"
#: mailu/admin/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Adicionar uma conta"
#: mailu/admin/templates/fetch/list.html:20
msgid "Endpoint"
msgstr "Endpoint"
#: mailu/admin/templates/fetch/list.html:22
msgid "Last check"
msgstr "Última verificação"
#: mailu/admin/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Adicionar gerente"
#: mailu/admin/templates/manager/list.html:4
msgid "Manager list"
msgstr "Lista de gerentes"
#: mailu/admin/templates/manager/list.html:12
msgid "Add manager"
msgstr "Adicionar gerente"
#: mailu/admin/templates/user/create.html:4
msgid "New user"
msgstr "Novo usuário"
#: mailu/admin/templates/user/edit.html:4
msgid "Edit user"
msgstr "Editar usuário"
#: mailu/admin/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Encaminhar e-mails"
#: mailu/admin/templates/user/list.html:4
msgid "User list"
msgstr "Lista de usuários"
#: mailu/admin/templates/user/list.html:12
msgid "Add user"
msgstr "Adicionar usuário"
#: mailu/admin/templates/user/list.html:20
#: mailu/admin/templates/user/settings.html:4
msgid "User settings"
msgstr "Configurações de usuário"
#: mailu/admin/templates/user/list.html:22
msgid "Features"
msgstr "Funcionalidades"
#: mailu/admin/templates/user/password.html:4
msgid "Password update"
msgstr "Atualizar senha"
#: mailu/admin/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Resposta automática"

View File

@@ -1,97 +0,0 @@
from mailu import manager, db
from mailu.admin import models
import os
import socket
import uuid
@manager.command
def advertise():
""" Advertise this server against statistic services.
"""
filepath = "/data/instance"
endpoint = "14.{}.stats.mailu.io"
if os.path.isfile(filepath):
with open(filepath, "r") as handle:
instance_id = handle.read()
else:
instance_id = str(uuid.uuid4())
with open(filepath, "w") as handle:
handle.write(instance_id)
try:
socket.gethostbyname(endpoint.format(instance_id))
except:
pass
@manager.command
def flushdb():
""" Flush the database
"""
db.drop_all()
@manager.command
def initdb():
""" Initialize the database
"""
db.create_all()
@manager.command
def admin(localpart, domain_name, password):
""" Create an admin user
"""
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
user = models.User(
localpart=localpart,
domain=domain,
global_admin=True
)
user.set_password(password)
db.session.add(user)
db.session.commit()
@manager.command
def user(localpart, domain_name, password):
""" Create an user
"""
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
user = models.User(
localpart=localpart,
domain=domain,
global_admin=False
)
user.set_password(password)
db.session.add(user)
db.session.commit()
@manager.command
def alias(localpart, domain_name, destination):
""" Create an alias
"""
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
alias = models.Alias(
localpart=localpart,
domain=domain,
destination=destination.split(','),
email="%s@%s" % (localpart, domain_name)
)
db.session.add(alias)
db.session.commit()
if __name__ == "__main__":
manager.run()

View File

@@ -1,512 +0,0 @@
# Translations template for PROJECT.
# Copyright (C) 2016 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2016-11-10 10:52+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.3.4\n"
#: mailu/admin/forms.py:32
msgid "Invalid email address."
msgstr ""
#: mailu/admin/forms.py:36
msgid "Confirm"
msgstr ""
#: mailu/admin/forms.py:40 mailu/admin/forms.py:54
msgid "E-mail"
msgstr ""
#: mailu/admin/forms.py:41 mailu/admin/forms.py:55 mailu/admin/forms.py:72
#: mailu/admin/forms.py:120
msgid "Password"
msgstr ""
#: mailu/admin/forms.py:42 mailu/admin/templates/login.html:9
#: mailu/admin/templates/login.html:17
msgid "Sign in"
msgstr ""
#: mailu/admin/forms.py:46 mailu/admin/templates/domain/details.html:21
#: mailu/admin/templates/domain/list.html:19
msgid "Domain name"
msgstr ""
#: mailu/admin/forms.py:47
msgid "Maximum user count"
msgstr ""
#: mailu/admin/forms.py:48
msgid "Maximum alias count"
msgstr ""
#: mailu/admin/forms.py:49 mailu/admin/forms.py:60 mailu/admin/forms.py:98
#: mailu/admin/templates/alias/list.html:22
#: mailu/admin/templates/domain/list.html:22
#: mailu/admin/templates/user/list.html:24
msgid "Comment"
msgstr ""
#: mailu/admin/forms.py:50 mailu/admin/forms.py:99
msgid "Create"
msgstr ""
#: mailu/admin/forms.py:56
msgid "Confirm password"
msgstr ""
#: mailu/admin/forms.py:57 mailu/admin/templates/user/list.html:23
msgid "Quota"
msgstr ""
#: mailu/admin/forms.py:58
msgid "Allow IMAP access"
msgstr ""
#: mailu/admin/forms.py:59
msgid "Allow POP3 access"
msgstr ""
#: mailu/admin/forms.py:61
msgid "Save"
msgstr ""
#: mailu/admin/forms.py:65
msgid "Displayed name"
msgstr ""
#: mailu/admin/forms.py:66
msgid "Enable spam filter"
msgstr ""
#: mailu/admin/forms.py:67
msgid "Spam filter threshold"
msgstr ""
#: mailu/admin/forms.py:68
msgid "Save settings"
msgstr ""
#: mailu/admin/forms.py:73
msgid "Password check"
msgstr ""
#: mailu/admin/forms.py:74 mailu/admin/templates/sidebar.html:13
msgid "Update password"
msgstr ""
#: mailu/admin/forms.py:78
msgid "Enable forwarding"
msgstr ""
#: mailu/admin/forms.py:80 mailu/admin/forms.py:97
#: mailu/admin/templates/alias/list.html:21
msgid "Destination"
msgstr ""
#: mailu/admin/forms.py:82 mailu/admin/forms.py:90
msgid "Update"
msgstr ""
#: mailu/admin/forms.py:86
msgid "Enable automatic reply"
msgstr ""
#: mailu/admin/forms.py:87
msgid "Reply subject"
msgstr ""
#: mailu/admin/forms.py:88
msgid "Reply body"
msgstr ""
#: mailu/admin/forms.py:94
msgid "Alias"
msgstr ""
#: mailu/admin/forms.py:96
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr ""
#: mailu/admin/forms.py:103
msgid "Admin email"
msgstr ""
#: mailu/admin/forms.py:104 mailu/admin/forms.py:109 mailu/admin/forms.py:121
msgid "Submit"
msgstr ""
#: mailu/admin/forms.py:108
msgid "Manager email"
msgstr ""
#: mailu/admin/forms.py:113
msgid "Protocol"
msgstr ""
#: mailu/admin/forms.py:116
msgid "Hostname or IP"
msgstr ""
#: mailu/admin/forms.py:117
msgid "TCP port"
msgstr ""
#: mailu/admin/forms.py:118
msgid "Enable TLS"
msgstr ""
#: mailu/admin/forms.py:119 mailu/admin/templates/fetch/list.html:21
msgid "Username"
msgstr ""
#: mailu/admin/forms.py:125
msgid "Announcement subject"
msgstr ""
#: mailu/admin/forms.py:127
msgid "Announcement body"
msgstr ""
#: mailu/admin/forms.py:129
msgid "Send"
msgstr ""
#: mailu/admin/templates/announcement.html:4
msgid "Public announcement"
msgstr ""
#: mailu/admin/templates/announcement.html:8
msgid "from"
msgstr ""
#: mailu/admin/templates/confirm.html:4
msgid "Confirm action"
msgstr ""
#: mailu/admin/templates/confirm.html:12
#, python-format
msgid "You are about to %(action)s. Please confirm your action."
msgstr ""
#: mailu/admin/templates/docker-error.html:4
msgid "Docker error"
msgstr ""
#: mailu/admin/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr ""
#: mailu/admin/templates/login.html:21
msgid "to access the administration tools"
msgstr ""
#: mailu/admin/templates/services.html:4 mailu/admin/templates/sidebar.html:40
msgid "Services status"
msgstr ""
#: mailu/admin/templates/services.html:11
msgid "Service"
msgstr ""
#: mailu/admin/templates/fetch/list.html:23
#: mailu/admin/templates/services.html:12
msgid "Status"
msgstr ""
#: mailu/admin/templates/services.html:13
msgid "PID"
msgstr ""
#: mailu/admin/templates/services.html:14
msgid "Image"
msgstr ""
#: mailu/admin/templates/services.html:15
msgid "Started"
msgstr ""
#: mailu/admin/templates/services.html:16
msgid "Last update"
msgstr ""
#: mailu/admin/templates/sidebar.html:5
msgid "My account"
msgstr ""
#: mailu/admin/templates/sidebar.html:8 mailu/admin/templates/user/list.html:35
msgid "Settings"
msgstr ""
#: mailu/admin/templates/sidebar.html:18
#: mailu/admin/templates/user/list.html:36
msgid "Auto-forward"
msgstr ""
#: mailu/admin/templates/sidebar.html:23
#: mailu/admin/templates/user/list.html:37
msgid "Auto-reply"
msgstr ""
#: mailu/admin/templates/fetch/list.html:4
#: mailu/admin/templates/sidebar.html:28
#: mailu/admin/templates/user/list.html:38
msgid "Fetched accounts"
msgstr ""
#: mailu/admin/templates/sidebar.html:33
msgid "Sign out"
msgstr ""
#: mailu/admin/templates/sidebar.html:36
msgid "Administration"
msgstr ""
#: mailu/admin/templates/sidebar.html:45
msgid "Announcement"
msgstr ""
#: mailu/admin/templates/sidebar.html:50
msgid "Administrators"
msgstr ""
#: mailu/admin/templates/sidebar.html:57
msgid "Mail domains"
msgstr ""
#: mailu/admin/templates/sidebar.html:64
msgid "Help"
msgstr ""
#: mailu/admin/templates/working.html:4
msgid "We are still working on this feature!"
msgstr ""
#: mailu/admin/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr ""
#: mailu/admin/templates/admin/list.html:4
msgid "Global administrators"
msgstr ""
#: mailu/admin/templates/admin/list.html:9
msgid "Add administrator"
msgstr ""
#: mailu/admin/templates/admin/list.html:17
#: mailu/admin/templates/alias/list.html:19
#: mailu/admin/templates/domain/list.html:17
#: mailu/admin/templates/fetch/list.html:19
#: mailu/admin/templates/manager/list.html:19
#: mailu/admin/templates/user/list.html:19
msgid "Actions"
msgstr ""
#: mailu/admin/templates/admin/list.html:18
#: mailu/admin/templates/alias/list.html:20
#: mailu/admin/templates/manager/list.html:20
#: mailu/admin/templates/user/list.html:21
msgid "Email"
msgstr ""
#: mailu/admin/templates/admin/list.html:23
#: mailu/admin/templates/alias/list.html:30
#: mailu/admin/templates/domain/list.html:32
#: mailu/admin/templates/fetch/list.html:31
#: mailu/admin/templates/manager/list.html:25
#: mailu/admin/templates/user/list.html:32
msgid "Delete"
msgstr ""
#: mailu/admin/templates/alias/create.html:4
msgid "Create alias"
msgstr ""
#: mailu/admin/templates/alias/edit.html:4
msgid "Edit alias"
msgstr ""
#: mailu/admin/templates/alias/list.html:4
msgid "Alias list"
msgstr ""
#: mailu/admin/templates/alias/list.html:12
msgid "Add alias"
msgstr ""
#: mailu/admin/templates/alias/list.html:23
#: mailu/admin/templates/domain/list.html:23
#: mailu/admin/templates/fetch/list.html:24
#: mailu/admin/templates/user/list.html:25
msgid "Created"
msgstr ""
#: mailu/admin/templates/alias/list.html:24
#: mailu/admin/templates/domain/list.html:24
#: mailu/admin/templates/fetch/list.html:25
#: mailu/admin/templates/user/list.html:26
msgid "Last edit"
msgstr ""
#: mailu/admin/templates/alias/list.html:29
#: mailu/admin/templates/domain/list.html:31
#: mailu/admin/templates/fetch/list.html:30
#: mailu/admin/templates/user/list.html:31
msgid "Edit"
msgstr ""
#: mailu/admin/templates/domain/create.html:4
#: mailu/admin/templates/domain/list.html:9
msgid "New domain"
msgstr ""
#: mailu/admin/templates/domain/details.html:4
msgid "Domain details"
msgstr ""
#: mailu/admin/templates/domain/details.html:13
msgid "Regenerate keys"
msgstr ""
#: mailu/admin/templates/domain/details.html:25
msgid "DNS MX entry"
msgstr ""
#: mailu/admin/templates/domain/details.html:29
msgid "DNS SPF entries"
msgstr ""
#: mailu/admin/templates/domain/details.html:36
msgid "DKIM public key"
msgstr ""
#: mailu/admin/templates/domain/details.html:40
msgid "DNS DKIM entry"
msgstr ""
#: mailu/admin/templates/domain/details.html:44
msgid "DNS DMARC entry"
msgstr ""
#: mailu/admin/templates/domain/edit.html:4
msgid "Edit domain"
msgstr ""
#: mailu/admin/templates/domain/list.html:4
msgid "Domain list"
msgstr ""
#: mailu/admin/templates/domain/list.html:18
msgid "Manage"
msgstr ""
#: mailu/admin/templates/domain/list.html:20
msgid "Mailbox count"
msgstr ""
#: mailu/admin/templates/domain/list.html:21
msgid "Alias count"
msgstr ""
#: mailu/admin/templates/domain/list.html:29
msgid "Details"
msgstr ""
#: mailu/admin/templates/domain/list.html:36
msgid "Users"
msgstr ""
#: mailu/admin/templates/domain/list.html:37
msgid "Aliases"
msgstr ""
#: mailu/admin/templates/domain/list.html:38
msgid "Managers"
msgstr ""
#: mailu/admin/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/admin/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/admin/templates/fetch/list.html:12
msgid "Add an account"
msgstr ""
#: mailu/admin/templates/fetch/list.html:20
msgid "Endpoint"
msgstr ""
#: mailu/admin/templates/fetch/list.html:22
msgid "Last check"
msgstr ""
#: mailu/admin/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
#: mailu/admin/templates/manager/list.html:4
msgid "Manager list"
msgstr ""
#: mailu/admin/templates/manager/list.html:12
msgid "Add manager"
msgstr ""
#: mailu/admin/templates/user/create.html:4
msgid "New user"
msgstr ""
#: mailu/admin/templates/user/edit.html:4
msgid "Edit user"
msgstr ""
#: mailu/admin/templates/user/forward.html:4
msgid "Forward emails"
msgstr ""
#: mailu/admin/templates/user/list.html:4
msgid "User list"
msgstr ""
#: mailu/admin/templates/user/list.html:12
msgid "Add user"
msgstr ""
#: mailu/admin/templates/user/list.html:20
#: mailu/admin/templates/user/settings.html:4
msgid "User settings"
msgstr ""
#: mailu/admin/templates/user/list.html:22
msgid "Features"
msgstr ""
#: mailu/admin/templates/user/password.html:4
msgid "Password update"
msgstr ""
#: mailu/admin/templates/user/reply.html:4
msgid "Automatic reply"
msgstr ""

View File

@@ -1,35 +0,0 @@
"""Set the spam threshold as an integer
Revision ID: 12e9a4f6ed73
Revises: 27ae2f102682
Create Date: 2016-11-08 20:22:54.169833
"""
# revision identifiers, used by Alembic.
revision = '12e9a4f6ed73'
down_revision = '27ae2f102682'
from alembic import op
import sqlalchemy as sa
from mailu.admin import models
from mailu import db
def upgrade():
# Make sure that every value is already an Integer
for user in models.User.query.all():
user.spam_threshold = int(user.spam_threshold)
db.session.commit()
# Migrate the table
with op.batch_alter_table('user') as batch:
batch.alter_column(
'spam_threshold', existing_type=db.Numeric(), type_=db.Integer())
def downgrade():
# Migrate the table
with op.batch_alter_table('user') as batch:
batch.alter_column(
'spam_threshold', existing_type=db.Integer(), type_=db.Numeric())

View File

@@ -1,37 +0,0 @@
"""spam_threshold in percent
Revision ID: 27ae2f102682
Revises: dc8c25cf5b98
Create Date: 2016-09-30 08:06:15.025190
"""
# revision identifiers, used by Alembic.
revision = '27ae2f102682'
down_revision = 'dc8c25cf5b98'
from alembic import op
import sqlalchemy as sa
from mailu.admin.models import User
from mailu import db
def upgrade():
# spam_threshold is a X/15 based value, we're converting it to percent.
for user in User.query.all():
user.spam_threshold = int(100. * float(user.spam_threshold or 0.) / 15.)
db.session.commit()
# set default to 80%
with op.batch_alter_table('user') as batch:
batch.alter_column('spam_threshold', default=80.)
def downgrade():
# spam_threshold is a X/15 based value, we're converting it from percent.
for user in User.query.all():
user.spam_threshold = int(15. * float(user.spam_threshold or 0.) / 100.)
db.session.commit()
# set default to 10/15
with op.batch_alter_table('user') as batch:
batch.alter_column('spam_threshold', default=10.)

View File

@@ -1,7 +0,0 @@
import os
if __name__ == "__main__":
os.environ["DEBUG"] = "True"
from mailu import app
app.run()

View File

@@ -1,5 +0,0 @@
#!/bin/sh
python manage.py advertise
python manage.py db upgrade
gunicorn -w 4 -b 0.0.0.0:80 --access-logfile - --error-logfile - --preload mailu:app

View File

@@ -1,8 +0,0 @@
FROM alpine
RUN apk add --no-cache clamav rsyslog wget
COPY conf /etc/clamav
COPY start.sh /start.sh
CMD ["/start.sh"]

View File

@@ -1,10 +0,0 @@
#!/bin/sh
# Bootstrap the database if clamav is running for the first time
[ -f /data/main.cvd ] || freshclam
# Run the update daemon
freshclam -d -c 6
# Run clamav
clamd

4
core/admin/.gitignore vendored Normal file
View File

@@ -0,0 +1,4 @@
.fg/
lib64
.vscode
tags

28
core/admin/Dockerfile Normal file
View File

@@ -0,0 +1,28 @@
FROM alpine:3.8
# python3 shared with most images
RUN apk add --no-cache \
python3 py3-pip \
&& pip3 install --upgrade pip
# Image specific layers under this line
RUN mkdir -p /app
WORKDIR /app
COPY requirements-prod.txt requirements.txt
RUN apk add --no-cache openssl curl \
&& apk add --no-cache --virtual build-dep openssl-dev libffi-dev python3-dev build-base \
&& pip3 install -r requirements.txt \
&& apk del --no-cache build-dep
COPY mailu ./mailu
COPY migrations ./migrations
COPY start.py /start.py
RUN pybabel compile -d mailu/translations
EXPOSE 80/tcp
VOLUME ["/data","/dkim"]
ENV FLASK_APP mailu
CMD /start.py
HEALTHCHECK CMD curl -f -L http://localhost/ui/login?next=ui.index || exit 1

12
core/admin/README.md Normal file
View File

@@ -0,0 +1,12 @@
Mailu Admin container
=====================
This is the web-based administrative interface for the Mailu containerized
mail server.
Resources
---------
* [Report issues](https://github.com/Mailu/Mailu/issues) and
[send Pull Requests](https://github.com/Mailu/Mailu/pulls)
in the [main Mailu repository](https://github.com/Mailu/Mailu)

View File

@@ -0,0 +1,56 @@
import flask
import flask_bootstrap
from mailu import utils, debug, models, manage, configuration
def create_app_from_config(config):
""" Create a new application based on the given configuration
"""
app = flask.Flask(__name__)
app.cli.add_command(manage.mailu)
# Bootstrap is used for basic JS and CSS loading
# TODO: remove this and use statically generated assets instead
app.bootstrap = flask_bootstrap.Bootstrap(app)
# Initialize application extensions
config.init_app(app)
models.db.init_app(app)
utils.limiter.init_app(app)
utils.babel.init_app(app)
utils.login.init_app(app)
utils.login.user_loader(models.User.get)
utils.proxy.init_app(app)
utils.migrate.init_app(app, models.db)
# Initialize debugging tools
if app.config.get("DEBUG"):
debug.toolbar.init_app(app)
# TODO: add a specific configuration variable for profiling
# debug.profiler.init_app(app)
# Inject the default variables in the Jinja parser
# TODO: move this to blueprints when needed
@app.context_processor
def inject_defaults():
signup_domains = models.Domain.query.filter_by(signup_enabled=True).all()
return dict(
signup_domains=signup_domains,
config=app.config
)
# Import views
from mailu import ui, internal
app.register_blueprint(ui.ui, url_prefix='/ui')
app.register_blueprint(internal.internal, url_prefix='/internal')
return app
def create_app():
""" Create a new application based on the config module
"""
config = configuration.ConfigManager()
return create_app_from_config(config)

View File

@@ -0,0 +1,91 @@
import os
DEFAULT_CONFIG = {
# Specific to the admin UI
'SQLALCHEMY_DATABASE_URI': 'sqlite:////data/main.db',
'SQLALCHEMY_TRACK_MODIFICATIONS': False,
'DOCKER_SOCKET': 'unix:///var/run/docker.sock',
'BABEL_DEFAULT_LOCALE': 'en',
'BABEL_DEFAULT_TIMEZONE': 'UTC',
'BOOTSTRAP_SERVE_LOCAL': True,
'RATELIMIT_STORAGE_URL': 'redis://redis/2',
'QUOTA_STORAGE_URL': 'redis://redis/1',
'DEBUG': False,
'DOMAIN_REGISTRATION': False,
'TEMPLATES_AUTO_RELOAD': True,
# Statistics management
'INSTANCE_ID_PATH': '/data/instance',
'STATS_ENDPOINT': '0.{}.stats.mailu.io',
# Common configuration variables
'SECRET_KEY': 'changeMe',
'DOMAIN': 'mailu.io',
'HOSTNAMES': 'mail.mailu.io,alternative.mailu.io,yetanother.mailu.io',
'POSTMASTER': 'postmaster',
'TLS_FLAVOR': 'cert',
'AUTH_RATELIMIT': '10/minute;1000/hour',
'DISABLE_STATISTICS': 'False',
# Mail settings
'DMARC_RUA': None,
'DMARC_RUF': None,
'WELCOME': 'False',
'WELCOME_SUBJECT': 'Dummy welcome topic',
'WELCOME_BODY': 'Dummy welcome body',
'DKIM_SELECTOR': 'dkim',
'DKIM_PATH': '/dkim/{domain}.{selector}.key',
'DEFAULT_QUOTA': 1000000000,
# Web settings
'SITENAME': 'Mailu',
'WEBSITE': 'https://mailu.io',
'WEB_ADMIN': '/admin',
'WEB_WEBMAIL': '/webmail',
'RECAPTCHA_PUBLIC_KEY': '',
'RECAPTCHA_PRIVATE_KEY': '',
# Advanced settings
'PASSWORD_SCHEME': 'BLF-CRYPT',
# Host settings
'HOST_IMAP': 'imap',
'HOST_POP3': 'imap',
'HOST_SMTP': 'smtp',
'HOST_WEBMAIL': 'webmail',
'HOST_FRONT': 'front',
'HOST_AUTHSMTP': os.environ.get('HOST_SMTP', 'smtp'),
'SUBNET': '192.168.203.0/24',
'POD_ADDRESS_RANGE': None
}
class ConfigManager(dict):
""" Naive configuration manager that uses environment only
"""
def __init__(self):
self.config = dict()
def init_app(self, app):
self.config.update(app.config)
self.config.update({
key: os.environ.get(key, value)
for key, value in DEFAULT_CONFIG.items()
})
app.config = self
def setdefault(self, key, value):
if key not in self.config:
self.config[key] = value
return self.config[key]
def get(self, *args):
return self.config.get(*args)
def keys(self):
return self.config.keys()
def __getitem__(self, key):
return self.config.get(key)
def __setitem__(self, key, value):
self.config[key] = value
def __contains__(self, key):
return key in self.config

17
core/admin/mailu/debug.py Normal file
View File

@@ -0,0 +1,17 @@
import flask_debugtoolbar
from werkzeug.contrib import profiler as werkzeug_profiler
# Debugging toolbar
toolbar = flask_debugtoolbar.DebugToolbarExtension()
# Profiler
class Profiler(object):
def init_app(self, app):
app.wsgi_app = werkzeug_profiler.ProfilerMiddleware(
app.wsgi_app, restrictions=[30]
)
profiler = Profiler()

View File

@@ -0,0 +1,31 @@
from flask_limiter import RateLimitExceeded
from mailu import utils
import socket
import flask
internal = flask.Blueprint('internal', __name__, template_folder='templates')
@internal.app_errorhandler(RateLimitExceeded)
def rate_limit_handler(e):
response = flask.Response()
response.headers['Auth-Status'] = 'Authentication rate limit from one source exceeded'
response.headers['Auth-Error-Code'] = '451 4.3.2'
if int(flask.request.headers['Auth-Login-Attempt']) < 10:
response.headers['Auth-Wait'] = '3'
return response
@utils.limiter.request_filter
def whitelist_webmail():
try:
return flask.request.headers["Client-Ip"] ==\
socket.gethostbyname("webmail")
except:
return False
from mailu.internal.views import *

View File

@@ -0,0 +1,93 @@
from mailu import models
from flask import current_app as app
import re
import socket
import urllib
SUPPORTED_AUTH_METHODS = ["none", "plain"]
STATUSES = {
"authentication": ("Authentication credentials invalid", {
"imap": "AUTHENTICATIONFAILED",
"smtp": "535 5.7.8",
"pop3": "-ERR Authentication failed"
}),
}
def handle_authentication(headers):
""" Handle an HTTP nginx authentication request
See: http://nginx.org/en/docs/mail/ngx_mail_auth_http_module.html#protocol
"""
method = headers["Auth-Method"]
protocol = headers["Auth-Protocol"]
# Incoming mail, no authentication
if method == "none" and protocol == "smtp":
server, port = get_server(headers["Auth-Protocol"], False)
return {
"Auth-Status": "OK",
"Auth-Server": server,
"Auth-Port": port
}
# Authenticated user
elif method == "plain":
server, port = get_server(headers["Auth-Protocol"], True)
user_email = urllib.parse.unquote(headers["Auth-User"])
password = urllib.parse.unquote(headers["Auth-Pass"])
ip = urllib.parse.unquote(headers["Client-Ip"])
user = models.User.query.get(user_email)
status = False
if user:
for token in user.tokens:
if (token.check_password(password) and
(not token.ip or token.ip == ip)):
status = True
if user.check_password(password):
status = True
if status:
if protocol == "imap" and not user.enable_imap:
status = False
elif protocol == "pop3" and not user.enable_pop:
status = False
if status and user.enabled:
return {
"Auth-Status": "OK",
"Auth-Server": server,
"Auth-Port": port
}
else:
status, code = get_status(protocol, "authentication")
return {
"Auth-Status": status,
"Auth-Error-Code": code,
"Auth-Wait": 0
}
# Unexpected
return {}
def get_status(protocol, status):
""" Return the proper error code depending on the protocol
"""
status, codes = STATUSES[status]
return status, codes[protocol]
def extract_host_port(host_and_port, default_port):
host, _, port = re.match('^(.*)(:([0-9]*))?$', host_and_port).groups()
return host, int(port) if port else default_port
def get_server(protocol, authenticated=False):
if protocol == "imap":
hostname, port = extract_host_port(app.config['HOST_IMAP'], 143)
elif protocol == "pop3":
hostname, port = extract_host_port(app.config['HOST_POP3'], 110)
elif protocol == "smtp":
if authenticated:
hostname, port = extract_host_port(app.config['HOST_AUTHSMTP'], 10025)
else:
hostname, port = extract_host_port(app.config['HOST_SMTP'], 25)
address = socket.gethostbyname(hostname)
return address, port

View File

@@ -0,0 +1,37 @@
require "variables";
require "vacation";
require "fileinto";
require "envelope";
require "mailbox";
require "imap4flags";
require "regex";
require "relational";
require "date";
require "comparator-i;ascii-numeric";
require "spamtestplus";
require "editheader";
require "index";
if header :index 2 :matches "Received" "from * by * for <*>; *"
{
deleteheader "Delivered-To";
addheader "Delivered-To" "<${3}>";
}
{% if user.spam_enabled %}
if spamtest :percent :value "gt" :comparator "i;ascii-numeric" "{{ user.spam_threshold }}"
{
setflag "\\seen";
fileinto :create "Junk";
stop;
}
{% endif %}
if exists "X-Virus" {
discard;
stop;
}
{% if user.reply_active %}
vacation :days 1 :subject "{{ user.reply_subject }}" "{{ user.reply_body }}";
{% endif %}

View File

@@ -0,0 +1,3 @@
__all__ = [
'auth', 'postfix', 'dovecot', 'fetch'
]

View File

@@ -0,0 +1,51 @@
from mailu import models, utils
from mailu.internal import internal, nginx
from flask import current_app as app
import flask
import flask_login
import base64
@internal.route("/auth/email")
@utils.limiter.limit(
lambda: app.config["AUTH_RATELIMIT"],
lambda: flask.request.headers["Client-Ip"]
)
def nginx_authentication():
""" Main authentication endpoint for Nginx email server
"""
headers = nginx.handle_authentication(flask.request.headers)
response = flask.Response()
for key, value in headers.items():
response.headers[key] = str(value)
return response
@internal.route("/auth/admin")
def admin_authentication():
""" Fails if the user is not an authenticated admin.
"""
if (not flask_login.current_user.is_anonymous
and flask_login.current_user.global_admin
and flask_login.current_user.enabled):
return ""
return flask.abort(403)
@internal.route("/auth/basic")
def basic_authentication():
""" Tries to authenticate using the Authorization header.
"""
authorization = flask.request.headers.get("Authorization")
if authorization and authorization.startswith("Basic "):
encoded = authorization.replace("Basic ", "")
user_email, password = base64.b64decode(encoded).split(b":")
user = models.User.query.get(user_email.decode("utf8"))
if user and user.enabled and user.check_password(password.decode("utf8")):
response = flask.Response()
response.headers["X-User"] = user.email
return response
response = flask.Response(status=401)
response.headers["WWW-Authenticate"] = 'Basic realm="Login Required"'
return response

View File

@@ -0,0 +1,48 @@
from mailu import models
from mailu.internal import internal
from flask import current_app as app
import flask
import socket
import os
@internal.route("/dovecot/passdb/<user_email>")
def dovecot_passdb_dict(user_email):
user = models.User.query.get(user_email) or flask.abort(404)
allow_nets = []
allow_nets.append(app.config["SUBNET"])
if app.config["POD_ADDRESS_RANGE"]:
allow_nets.append(app.config["POD_ADDRESS_RANGE"])
return flask.jsonify({
"password": None,
"nopassword": "Y",
"allow_nets": ",".join(allow_nets)
})
@internal.route("/dovecot/userdb/<user_email>")
def dovecot_userdb_dict(user_email):
user = models.User.query.get(user_email) or flask.abort(404)
return flask.jsonify({
"quota_rule": "*:bytes={}".format(user.quota_bytes)
})
@internal.route("/dovecot/quota/<ns>/<user_email>", methods=["POST"])
def dovecot_quota(ns, user_email):
user = models.User.query.get(user_email) or flask.abort(404)
if ns == "storage":
user.quota_bytes_used = flask.request.get_json()
models.db.session.commit()
return flask.jsonify(None)
@internal.route("/dovecot/sieve/name/<script>/<user_email>")
def dovecot_sieve_name(script, user_email):
return flask.jsonify(script)
@internal.route("/dovecot/sieve/data/default/<user_email>")
def dovecot_sieve_data(user_email):
user = models.User.query.get(user_email) or flask.abort(404)
return flask.jsonify(flask.render_template("default.sieve", user=user))

View File

@@ -0,0 +1,32 @@
from mailu import models
from mailu.internal import internal
import flask
import datetime
@internal.route("/fetch")
def fetch_list():
return flask.jsonify([
{
"id": fetch.id,
"tls": fetch.tls,
"keep": fetch.keep,
"user_email": fetch.user_email,
"protocol": fetch.protocol,
"host": fetch.host,
"port": fetch.port,
"username": fetch.username,
"password": fetch.password
} for fetch in models.Fetch.query.all()
])
@internal.route("/fetch/<fetch_id>", methods=["POST"])
def fetch_done(fetch_id):
fetch = models.Fetch.query.get(fetch_id) or flask.abort(404)
fetch.last_check = datetime.datetime.now()
fetch.error_message = str(flask.request.get_json())
models.db.session.add(fetch)
models.db.session.commit()
return ""

View File

@@ -0,0 +1,53 @@
from mailu import models
from mailu.internal import internal
import flask
@internal.route("/postfix/domain/<domain_name>")
def postfix_mailbox_domain(domain_name):
domain = models.Domain.query.get(domain_name) or \
models.Alternative.query.get(domain_name) or \
flask.abort(404)
return flask.jsonify(domain.name)
@internal.route("/postfix/mailbox/<email>")
def postfix_mailbox_map(email):
user = models.User.query.get(email) or flask.abort(404)
return flask.jsonify(user.email)
@internal.route("/postfix/alias/<alias>")
def postfix_alias_map(alias):
localpart, domain_name = models.Email.resolve_domain(alias)
if localpart is None:
return flask.jsonify(domain_name)
destination = models.Email.resolve_destination(localpart, domain_name)
return flask.jsonify(",".join(destination)) if destination else flask.abort(404)
@internal.route("/postfix/transport/<email>")
def postfix_transport(email):
if email == '*':
return flask.abort(404)
localpart, domain_name = models.Email.resolve_domain(email)
relay = models.Relay.query.get(domain_name) or flask.abort(404)
return flask.jsonify("smtp:[{}]".format(relay.smtp))
@internal.route("/postfix/sender/login/<sender>")
def postfix_sender_login(sender):
localpart, domain_name = models.Email.resolve_domain(sender)
if localpart is None:
return flask.abort(404)
destination = models.Email.resolve_destination(localpart, domain_name, True)
return flask.jsonify(",".join(destination)) if destination else flask.abort(404)
@internal.route("/postfix/sender/access/<sender>")
def postfix_sender_access(sender):
""" Simply reject any sender that pretends to be from a local domain
"""
localpart, domain_name = models.Email.resolve_domain(sender)
return flask.jsonify("REJECT") if models.Domain.query.get(domain_name) else flask.abort(404)

345
core/admin/mailu/manage.py Normal file
View File

@@ -0,0 +1,345 @@
from mailu import models
from flask import current_app as app
from flask import cli as flask_cli
import flask
import os
import socket
import uuid
import click
db = models.db
@click.group()
def mailu(cls=flask_cli.FlaskGroup):
""" Mailu command line
"""
@mailu.command()
@flask_cli.with_appcontext
def advertise():
""" Advertise this server against statistic services.
"""
if os.path.isfile(app.config["INSTANCE_ID_PATH"]):
with open(app.config["INSTANCE_ID_PATH"], "r") as handle:
instance_id = handle.read()
else:
instance_id = str(uuid.uuid4())
with open(app.config["INSTANCE_ID_PATH"], "w") as handle:
handle.write(instance_id)
if app.config["DISABLE_STATISTICS"].lower() != "true":
try:
socket.gethostbyname(app.config["STATS_ENDPOINT"].format(instance_id))
except:
pass
@mailu.command()
@click.argument('localpart')
@click.argument('domain_name')
@click.argument('password')
@flask_cli.with_appcontext
def admin(localpart, domain_name, password):
""" Create an admin user
"""
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
user = models.User(
localpart=localpart,
domain=domain,
global_admin=True
)
user.set_password(password)
db.session.add(user)
db.session.commit()
@mailu.command()
@click.argument('localpart')
@click.argument('domain_name')
@click.argument('password')
@click.argument('hash_scheme')
@flask_cli.with_appcontext
def user(localpart, domain_name, password, hash_scheme=None):
""" Create a user
"""
if hash_scheme is None:
hash_scheme = app.config['PASSWORD_SCHEME']
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
user = models.User(
localpart=localpart,
domain=domain,
global_admin=False
)
user.set_password(password, hash_scheme=hash_scheme)
db.session.add(user)
db.session.commit()
@mailu.command()
@click.option('-n', '--domain_name')
@click.option('-u', '--max_users')
@click.option('-a', '--max_aliases')
@click.option('-q', '--max_quota_bytes')
@flask_cli.with_appcontext
def domain(domain_name, max_users=0, max_aliases=0, max_quota_bytes=0):
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
db.session.commit()
@mailu.command()
@click.argument('localpart')
@click.argument('domain_name')
@click.argument('password_hash')
@click.argument('hash_scheme')
@flask_cli.with_appcontext
def user_import(localpart, domain_name, password_hash, hash_scheme = None):
""" Import a user along with password hash.
"""
if hash_scheme is None:
hash_scheme = app.config['PASSWORD_SCHEME']
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
user = models.User(
localpart=localpart,
domain=domain,
global_admin=False
)
user.set_password(password_hash, hash_scheme=hash_scheme, raw=True)
db.session.add(user)
db.session.commit()
@mailu.command()
@click.option('-v', '--verbose')
@click.option('-d', '--delete_objects')
@flask_cli.with_appcontext
def config_update(verbose=False, delete_objects=False):
"""sync configuration with data from YAML-formatted stdin"""
import yaml
import sys
new_config = yaml.load(sys.stdin)
# print new_config
domains = new_config.get('domains', [])
tracked_domains = set()
for domain_config in domains:
if verbose:
print(str(domain_config))
domain_name = domain_config['name']
max_users = domain_config.get('max_users', 0)
max_aliases = domain_config.get('max_aliases', 0)
max_quota_bytes = domain_config.get('max_quota_bytes', 0)
tracked_domains.add(domain_name)
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name,
max_users=max_users,
max_aliases=max_aliases,
max_quota_bytes=max_quota_bytes)
db.session.add(domain)
print("Added " + str(domain_config))
else:
domain.max_users = max_users
domain.max_aliases = max_aliases
domain.max_quota_bytes = max_quota_bytes
db.session.add(domain)
print("Updated " + str(domain_config))
users = new_config.get('users', [])
tracked_users = set()
user_optional_params = ('comment', 'quota_bytes', 'global_admin',
'enable_imap', 'enable_pop', 'forward_enabled',
'forward_destination', 'reply_enabled',
'reply_subject', 'reply_body', 'displayed_name',
'spam_enabled', 'email', 'spam_threshold')
for user_config in users:
if verbose:
print(str(user_config))
localpart = user_config['localpart']
domain_name = user_config['domain']
password_hash = user_config.get('password_hash', None)
hash_scheme = user_config.get('hash_scheme', None)
domain = models.Domain.query.get(domain_name)
email = '{0}@{1}'.format(localpart, domain_name)
optional_params = {}
for k in user_optional_params:
if k in user_config:
optional_params[k] = user_config[k]
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
user = models.User.query.get(email)
tracked_users.add(email)
tracked_domains.add(domain_name)
if not user:
user = models.User(
localpart=localpart,
domain=domain,
**optional_params
)
else:
for k in optional_params:
setattr(user, k, optional_params[k])
user.set_password(password_hash, hash_scheme=hash_scheme, raw=True)
db.session.add(user)
aliases = new_config.get('aliases', [])
tracked_aliases = set()
for alias_config in aliases:
if verbose:
print(str(alias_config))
localpart = alias_config['localpart']
domain_name = alias_config['domain']
if type(alias_config['destination']) is str:
destination = alias_config['destination'].split(',')
else:
destination = alias_config['destination']
wildcard = alias_config.get('wildcard', False)
domain = models.Domain.query.get(domain_name)
email = '{0}@{1}'.format(localpart, domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
alias = models.Alias.query.get(email)
tracked_aliases.add(email)
tracked_domains.add(domain_name)
if not alias:
alias = models.Alias(
localpart=localpart,
domain=domain,
wildcard=wildcard,
destination=destination,
email=email
)
else:
alias.destination = destination
alias.wildcard = wildcard
db.session.add(alias)
db.session.commit()
managers = new_config.get('managers', [])
# tracked_managers=set()
for manager_config in managers:
if verbose:
print(str(manager_config))
domain_name = manager_config['domain']
user_name = manager_config['user']
domain = models.Domain.query.get(domain_name)
manageruser = models.User.query.get(user_name + '@' + domain_name)
if manageruser not in domain.managers:
domain.managers.append(manageruser)
db.session.add(domain)
db.session.commit()
if delete_objects:
for user in db.session.query(models.User).all():
if not (user.email in tracked_users):
if verbose:
print("Deleting user: " + str(user.email))
db.session.delete(user)
for alias in db.session.query(models.Alias).all():
if not (alias.email in tracked_aliases):
if verbose:
print("Deleting alias: " + str(alias.email))
db.session.delete(alias)
for domain in db.session.query(models.Domain).all():
if not (domain.name in tracked_domains):
if verbose:
print("Deleting domain: " + str(domain.name))
db.session.delete(domain)
db.session.commit()
@mailu.command()
@click.argument('email')
@flask_cli.with_appcontext
def user_delete(email):
"""delete user"""
user = models.User.query.get(email)
if user:
db.session.delete(user)
db.session.commit()
@mailu.command()
@click.argument('email')
@flask_cli.with_appcontext
def alias_delete(email):
"""delete alias"""
alias = models.Alias.query.get(email)
if alias:
db.session.delete(alias)
db.session.commit()
@mailu.command()
@click.argument('localpart')
@click.argument('domain_name')
@click.argument('destination')
@flask_cli.with_appcontext
def alias(localpart, domain_name, destination):
""" Create an alias
"""
domain = models.Domain.query.get(domain_name)
if not domain:
domain = models.Domain(name=domain_name)
db.session.add(domain)
alias = models.Alias(
localpart=localpart,
domain=domain,
destination=destination.split(','),
email="%s@%s" % (localpart, domain_name)
)
db.session.add(alias)
db.session.commit()
@mailu.command()
@click.argument('domain_name')
@click.argument('max_users')
@click.argument('max_aliases')
@click.argument('max_quota_bytes')
@flask_cli.with_appcontext
def setlimits(domain_name, max_users, max_aliases, max_quota_bytes):
""" Set domain limits
"""
domain = models.Domain.query.get(domain_name)
domain.max_users = max_users
domain.max_aliases = max_aliases
domain.max_quota_bytes = max_quota_bytes
db.session.add(domain)
db.session.commit()
@mailu.command()
@click.argument('domain_name')
@click.argument('user_name')
@flask_cli.with_appcontext
def setmanager(domain_name, user_name='manager'):
""" Make a user manager of a domain
"""
domain = models.Domain.query.get(domain_name)
manageruser = models.User.query.get(user_name + '@' + domain_name)
domain.managers.append(manageruser)
db.session.add(domain)
db.session.commit()
if __name__ == '__main__':
cli()

474
core/admin/mailu/models.py Normal file
View File

@@ -0,0 +1,474 @@
from mailu import dkim
from sqlalchemy.ext import declarative
from passlib import context, hash
from datetime import datetime, date
from email.mime import text
from flask import current_app as app
import flask_sqlalchemy
import sqlalchemy
import re
import time
import os
import glob
import smtplib
import idna
import dns
db = flask_sqlalchemy.SQLAlchemy()
class IdnaDomain(db.TypeDecorator):
""" Stores a Unicode string in it's IDNA representation (ASCII only)
"""
impl = db.String(80)
def process_bind_param(self, value, dialect):
return idna.encode(value).decode("ascii")
def process_result_value(self, value, dialect):
return idna.decode(value)
class IdnaEmail(db.TypeDecorator):
""" Stores a Unicode string in it's IDNA representation (ASCII only)
"""
impl = db.String(255, collation="NOCASE")
def process_bind_param(self, value, dialect):
try:
localpart, domain_name = value.split('@')
return "{0}@{1}".format(
localpart,
idna.encode(domain_name).decode('ascii'),
)
except ValueError:
pass
def process_result_value(self, value, dialect):
localpart, domain_name = value.split('@')
return "{0}@{1}".format(
localpart,
idna.decode(domain_name),
)
class CommaSeparatedList(db.TypeDecorator):
""" Stores a list as a comma-separated string, compatible with Postfix.
"""
impl = db.String
def process_bind_param(self, value, dialect):
if type(value) is not list:
raise TypeError("Shoud be a list")
for item in value:
if "," in item:
raise ValueError("No item should contain a comma")
return ",".join(value)
def process_result_value(self, value, dialect):
return filter(bool, value.split(",")) if value else []
class JSONEncoded(db.TypeDecorator):
"""Represents an immutable structure as a json-encoded string.
"""
impl = db.String
def process_bind_param(self, value, dialect):
return json.dumps(value) if value else None
def process_result_value(self, value, dialect):
return json.loads(value) if value else None
class Config(db.Model):
""" In-database configuration values
"""
name = db.Column(db.String(255), primary_key=True, nullable=False)
value = db.Column(JSONEncoded)
# Many-to-many association table for domain managers
managers = db.Table('manager',
db.Column('domain_name', IdnaDomain, db.ForeignKey('domain.name')),
db.Column('user_email', IdnaEmail, db.ForeignKey('user.email'))
)
class Base(db.Model):
""" Base class for all models
"""
__abstract__ = True
created_at = db.Column(db.Date, nullable=False, default=datetime.now)
updated_at = db.Column(db.Date, nullable=True, onupdate=datetime.now)
comment = db.Column(db.String(255), nullable=True)
class Domain(Base):
""" A DNS domain that has mail addresses associated to it.
"""
__tablename__ = "domain"
name = db.Column(IdnaDomain, primary_key=True, nullable=False)
managers = db.relationship('User', secondary=managers,
backref=db.backref('manager_of'), lazy='dynamic')
max_users = db.Column(db.Integer, nullable=False, default=0)
max_aliases = db.Column(db.Integer, nullable=False, default=0)
max_quota_bytes = db.Column(db.Integer(), nullable=False, default=0)
signup_enabled = db.Column(db.Boolean(), nullable=False, default=False)
@property
def dkim_key(self):
file_path = app.config["DKIM_PATH"].format(
domain=self.name, selector=app.config["DKIM_SELECTOR"])
if os.path.exists(file_path):
with open(file_path, "rb") as handle:
return handle.read()
@dkim_key.setter
def dkim_key(self, value):
file_path = app.config["DKIM_PATH"].format(
domain=self.name, selector=app.config["DKIM_SELECTOR"])
with open(file_path, "wb") as handle:
handle.write(value)
@property
def dkim_publickey(self):
dkim_key = self.dkim_key
if dkim_key:
return dkim.strip_key(self.dkim_key).decode("utf8")
def generate_dkim_key(self):
self.dkim_key = dkim.gen_key()
def has_email(self, localpart):
for email in self.users + self.aliases:
if email.localpart == localpart:
return True
else:
return False
def check_mx(self):
try:
hostnames = app.config['HOSTNAMES'].split(',')
return any(
str(rset).split()[-1][:-1] in hostnames
for rset in dns.resolver.query(self.name, 'MX')
)
except Exception as e:
return False
def __str__(self):
return self.name
def __eq__(self, other):
try:
return self.name == other.name
except AttributeError:
return False
class Alternative(Base):
""" Alternative name for a served domain.
The name "domain alias" was avoided to prevent some confusion.
"""
__tablename__ = "alternative"
name = db.Column(IdnaDomain, primary_key=True, nullable=False)
domain_name = db.Column(IdnaDomain, db.ForeignKey(Domain.name))
domain = db.relationship(Domain,
backref=db.backref('alternatives', cascade='all, delete-orphan'))
def __str__(self):
return self.name
class Relay(Base):
""" Relayed mail domain.
The domain is either relayed publicly or through a specified SMTP host.
"""
__tablename__ = "relay"
name = db.Column(db.String(80), primary_key=True, nullable=False)
smtp = db.Column(db.String(80), nullable=True)
def __str__(self):
return self.name
class Email(object):
""" Abstraction for an email address (localpart and domain).
"""
localpart = db.Column(db.String(80), nullable=False)
@declarative.declared_attr
def domain_name(cls):
return db.Column(IdnaDomain, db.ForeignKey(Domain.name),
nullable=False, default=IdnaDomain)
# This field is redundant with both localpart and domain name.
# It is however very useful for quick lookups without joining tables,
# especially when the mail server is reading the database.
@declarative.declared_attr
def email(cls):
updater = lambda context: "{0}@{1}".format(
context.current_parameters["localpart"],
context.current_parameters["domain_name"],
)
return db.Column(IdnaEmail,
primary_key=True, nullable=False,
default=updater)
def sendmail(self, subject, body):
""" Send an email to the address.
"""
from_address = "{0}@{1}".format(
app.config['POSTMASTER'],
idna.encode(app.config['DOMAIN']).decode('ascii'),
)
with smtplib.SMTP(app.config['HOST_AUTHSMTP'], port=10025) as smtp:
to_address = "{0}@{1}".format(
self.localpart,
idna.encode(self.domain_name).decode('ascii'),
)
msg = text.MIMEText(body)
msg['Subject'] = subject
msg['From'] = from_address
msg['To'] = to_address
smtp.sendmail(from_address, [to_address], msg.as_string())
@classmethod
def resolve_domain(cls, email):
localpart, domain_name = email.split('@', 1) if '@' in email else (None, email)
alternative = Alternative.query.get(domain_name)
if alternative:
domain_name = alternative.domain_name
return (localpart, domain_name)
@classmethod
def resolve_destination(cls, localpart, domain_name, ignore_forward_keep=False):
alias = Alias.resolve(localpart, domain_name)
if alias:
return alias.destination
user = User.query.get('{}@{}'.format(localpart, domain_name))
if user:
if user.forward_enabled:
destination = user.forward_destination
if user.forward_keep or ignore_forward_keep:
destination.append(user.email)
else:
destination = [user.email]
return destination
def __str__(self):
return self.email
class User(Base, Email):
""" A user is an email address that has a password to access a mailbox.
"""
__tablename__ = "user"
domain = db.relationship(Domain,
backref=db.backref('users', cascade='all, delete-orphan'))
password = db.Column(db.String(255), nullable=False)
quota_bytes = db.Column(db.Integer(), nullable=False, default=10**9)
quota_bytes_used = db.Column(db.Integer(), nullable=False, default=0)
global_admin = db.Column(db.Boolean(), nullable=False, default=False)
enabled = db.Column(db.Boolean(), nullable=False, default=True)
# Features
enable_imap = db.Column(db.Boolean(), nullable=False, default=True)
enable_pop = db.Column(db.Boolean(), nullable=False, default=True)
# Filters
forward_enabled = db.Column(db.Boolean(), nullable=False, default=False)
forward_destination = db.Column(CommaSeparatedList(), nullable=True, default=[])
forward_keep = db.Column(db.Boolean(), nullable=False, default=True)
reply_enabled = db.Column(db.Boolean(), nullable=False, default=False)
reply_subject = db.Column(db.String(255), nullable=True, default=None)
reply_body = db.Column(db.Text(), nullable=True, default=None)
reply_startdate = db.Column(db.Date, nullable=False,
default=date(1900, 1, 1))
reply_enddate = db.Column(db.Date, nullable=False,
default=date(2999, 12, 31))
# Settings
displayed_name = db.Column(db.String(160), nullable=False, default="")
spam_enabled = db.Column(db.Boolean(), nullable=False, default=True)
spam_threshold = db.Column(db.Integer(), nullable=False, default=80.0)
# Flask-login attributes
is_authenticated = True
is_active = True
is_anonymous = False
def get_id(self):
return self.email
@property
def destination(self):
if self.forward_enabled:
result = self.forward_destination
if self.forward_keep:
result += ',' + self.email
return result
else:
return self.email
@property
def reply_active(self):
now = date.today()
return (
self.reply_enabled and
self.reply_startdate < now and
self.reply_enddate > now
)
scheme_dict = {'PBKDF2': "pbkdf2_sha512",
'BLF-CRYPT': "bcrypt",
'SHA512-CRYPT': "sha512_crypt",
'SHA256-CRYPT': "sha256_crypt",
'MD5-CRYPT': "md5_crypt",
'CRYPT': "des_crypt"}
def get_password_context(self):
return context.CryptContext(
schemes=self.scheme_dict.values(),
default=self.scheme_dict[app.config['PASSWORD_SCHEME']],
)
def check_password(self, password):
context = self.get_password_context()
reference = re.match('({[^}]+})?(.*)', self.password).group(2)
result = context.verify(password, reference)
if result and context.identify(reference) != context.default_scheme():
self.set_password(password)
db.session.add(self)
db.session.commit()
return result
def set_password(self, password, hash_scheme=None, raw=False):
"""Set password for user with specified encryption scheme
@password: plain text password to encrypt (if raw == True the hash itself)
"""
if hash_scheme is None:
hash_scheme = app.config['PASSWORD_SCHEME']
# for the list of hash schemes see https://wiki2.dovecot.org/Authentication/PasswordSchemes
if raw:
self.password = '{'+hash_scheme+'}' + password
else:
self.password = '{'+hash_scheme+'}' + self.get_password_context().encrypt(password, self.scheme_dict[hash_scheme])
def get_managed_domains(self):
if self.global_admin:
return Domain.query.all()
else:
return self.manager_of
def get_managed_emails(self, include_aliases=True):
emails = []
for domain in self.get_managed_domains():
emails.extend(domain.users)
if include_aliases:
emails.extend(domain.aliases)
return emails
def send_welcome(self):
if app.config["WELCOME"].lower() == "true":
self.sendmail(app.config["WELCOME_SUBJECT"],
app.config["WELCOME_BODY"])
@classmethod
def get(cls, email):
return cls.query.get(email)
@classmethod
def login(cls, email, password):
user = cls.query.get(email)
return user if (user and user.enabled and user.check_password(password)) else None
class Alias(Base, Email):
""" An alias is an email address that redirects to some destination.
"""
__tablename__ = "alias"
domain = db.relationship(Domain,
backref=db.backref('aliases', cascade='all, delete-orphan'))
wildcard = db.Column(db.Boolean(), nullable=False, default=False)
destination = db.Column(CommaSeparatedList, nullable=False, default=[])
@classmethod
def resolve(cls, localpart, domain_name):
return cls.query.filter(
sqlalchemy.and_(cls.domain_name == domain_name,
sqlalchemy.or_(
sqlalchemy.and_(
cls.wildcard == False,
cls.localpart == localpart
), sqlalchemy.and_(
cls.wildcard == True,
sqlalchemy.bindparam("l", localpart).like(cls.localpart)
)
)
)
).order_by(cls.wildcard, sqlalchemy.func.char_length(cls.localpart).desc()).first()
class Token(Base):
""" A token is an application password for a given user.
"""
__tablename__ = "token"
id = db.Column(db.Integer(), primary_key=True)
user_email = db.Column(db.String(255), db.ForeignKey(User.email),
nullable=False)
user = db.relationship(User,
backref=db.backref('tokens', cascade='all, delete-orphan'))
password = db.Column(db.String(255), nullable=False)
ip = db.Column(db.String(255))
def check_password(self, password):
return hash.sha256_crypt.verify(password, self.password)
def set_password(self, password):
self.password = hash.sha256_crypt.using(rounds=1000).hash(password)
def __str__(self):
return self.comment
class Fetch(Base):
""" A fetched account is a repote POP/IMAP account fetched into a local
account.
"""
__tablename__ = "fetch"
id = db.Column(db.Integer(), primary_key=True)
user_email = db.Column(db.String(255), db.ForeignKey(User.email),
nullable=False)
user = db.relationship(User,
backref=db.backref('fetches', cascade='all, delete-orphan'))
protocol = db.Column(db.Enum('imap', 'pop3'), nullable=False)
host = db.Column(db.String(255), nullable=False)
port = db.Column(db.Integer(), nullable=False)
tls = db.Column(db.Boolean(), nullable=False)
username = db.Column(db.String(255), nullable=False)
password = db.Column(db.String(255), nullable=False)
keep = db.Column(db.Boolean(), nullable=False)
last_check = db.Column(db.DateTime, nullable=True)
error = db.Column(db.String(1023), nullable=True)

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: de\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Ungültige E-Mail-Adresse."
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Bestätigen"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-Mail"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Passwort"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Anmelden"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Domain-Name"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Maximale Anzahl Benutzer"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Maximale Anzahl Aliase"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Kommentar"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Erstellen"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Passwort bestätigen"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Quota"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Zugriff via IMAP erlauben"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Zugriff via POP3 erlauben"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Speichern"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Angezeigter Name"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Spamfilter aktivieren"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Schwellenwert für Spamfilter"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Einstellungen speichern"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Passwort wiederholen"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Passwort aktualisieren"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Weiterleitung aktivieren"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Ziel"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Aktualisieren"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Automatische Antwort aktivieren"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Betreff"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Text"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "SQL LIKE Syntax nutzen (z.B. für Catch-All-Aliase)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "Administrator E-Mail"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Absenden"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "Manager E-Mail"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protokoll"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Hostname oder IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "Port"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Verschlüsselung aktivieren"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Benutzername"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Aktion bestätigen"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Bitte bestätigen: %(action)s."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Docker Fehler"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Während der Kommunikation mit dem Docker Server ist ein Fehler aufgetreten."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Konto"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "für administrativen Zugriff"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Mein Konto"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Einstellungen"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Auto-Weiterleitung"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Auto-Antwort"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "Abgerufene Konten"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Abmelden"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Administration"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Administratoren"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "E-Mail-Domains"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Hilfe"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Dieses Feature ist noch in Arbeit!"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Globalen Administrator hinzufügen"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Globale Administratoren"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Administrator hinzufügen"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Aktionen"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "E-Mail"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Löschen"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Alias erstellen"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Alias bearbeiten"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Aliase"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Alias hinzufügen"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Erstellt"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Zuletzt bearbeitet"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Bearbeiten"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Neue Domain"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Domain-Details"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Schlüssel neu erzeugen"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "DNS MX Eintrag"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "DNS SPF Einträge"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "DKIM öffentlicher Schlüssel"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "DNS DKIM Eintrag"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "DNS DMARC Eintrag"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Domain bearbeiten"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Domains"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Verwalten"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Anzahl Mailboxen"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Anzahl Aliase"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Details"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Benutzer"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Aliase"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Manager"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Externes Konto hinzufügen"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Externes Konto aktualisieren"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Konto hinzufügen"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "Endpunkt"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Letzte Prüfung"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Einen Manager hinzufügen"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "Manager"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Manager hinzufügen"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Betreff"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Text"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Absenden"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Öffentliche Bekanntmachung"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "von"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Bekanntmachung"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Neuer Benutzer"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Benutzer bearbeiten"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "E-Mails weiterleiten"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Benutzer"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Benutzer hinzufügen"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Einstellungen"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Funktionen"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Passwort aktualisieren"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Automatische Antwort"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "Maximale Quota pro Benutzer"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Kopie der E-Mails behalten"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "E-Mails auf dem Server belassen"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "E-Mails behalten"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "ja"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "nein"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Alternativer Name"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "Relay-Domain-Name"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Entfernter Host"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "Relay-Domains"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Alternative Domain erstellen"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "Alternative Domains"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Alternative hinzufügen"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Name"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Alternativen"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "Neue Relay-Domain"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "Relay-Domain bearbeiten"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "Relay-Domains"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "Neue Relay-Domain"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Token (bitte speichern, da er hier nach nicht mehr angezeigt wird)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "Authorisierte IP-Adresse"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Authentifizierungs-Tokens"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "Wechseln zu"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Website"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "Authentifizierungs-Token erstellen"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "Neuer Token"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Allgemein"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "Funktionen und Quotas"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Allgemeine Einstellungen"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Antispam"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr "Spamfilter-Grenzwert"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,687 @@
# English translations for PROJECT.
# Copyright (C) 2016 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-04-22 12:10+0200\n"
"PO-Revision-Date: 2016-10-02 15:02+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.3\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr ""
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr ""
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr ""
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr ""
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr ""
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr ""
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr ""
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr ""
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr ""
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr ""
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr ""
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr ""
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr ""
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr ""
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr ""
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr ""
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:85
msgid "Save"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr ""
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr ""
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr ""
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr ""
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr ""
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr ""
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr ""
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr ""
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr ""
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr ""
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/forms.py:120
msgid "Update"
msgstr ""
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr ""
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr ""
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr ""
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr ""
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr ""
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr ""
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr ""
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr ""
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr ""
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr ""
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr ""
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr ""
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr ""
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr ""
#: mailu/ui/forms.py:172
msgid "Send"
msgstr ""
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr ""
#: mailu/ui/templates/confirm.html:13
#, python-format
msgid "You are about to %(action)s. Please confirm your action."
msgstr ""
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr ""
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr ""
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr ""
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr ""
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr ""
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr ""
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr ""
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr ""
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr ""
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr ""
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr ""
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr ""
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr ""
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr ""
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr ""
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr ""
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr ""
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr ""
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr ""
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr ""
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr ""
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr ""
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr ""
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr ""
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr ""
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr ""
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr ""
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr ""
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr ""
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr ""
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr ""
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr ""
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr ""
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr ""
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr ""
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr ""
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr ""
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr ""
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr ""
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr ""
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr ""
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr ""
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr ""
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr ""
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr ""
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr ""
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid ""
"In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid ""
"If you do not know how to setup an <code>MX</code> record for your DNS "
"zone,\n"
" please contact your DNS provider or administrator. Also, please wait "
"a\n"
" couple minutes after the <code>MX</code> is set so the local server "
"cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr ""
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr ""
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr ""
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr ""
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr ""
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr ""
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr ""
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr ""
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr ""
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr ""
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr ""
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr ""
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr ""
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr ""
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr ""
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr ""
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr ""
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr ""
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr ""
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr ""
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr ""
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr ""
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr ""
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr ""
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""
#~ msgid "Your account"
#~ msgstr ""
#~ msgid "Spam filter threshold"
#~ msgstr ""
#~ msgid "from"
#~ msgstr ""
#~ msgid "General settings"
#~ msgstr ""

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: es\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Dirección de correo inválida."
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Confirmar"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "Dirección de Correo"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Contraseña"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Entrar"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Nmbre de dominio"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Máximo número de usuarios"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Máximo número de aliases"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Comentario"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Crear"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Confirmar contraseña"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Cuota"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Permitir acceso IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Permitir acceso POP3"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Guardar"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Nombre a mostrar"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Habilitar filtro de spam"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Límite del filtro de spam"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Guardar configuración"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Revisar contraseña"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Actualizar contraseña"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Habilitar reenvío"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Destino"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Actualizar"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Habilitar respuesta automática"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr ""
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr ""
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Usar sintaxis SQL (p.ej. para abarcar todos los alias)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr ""
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr ""
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr ""
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protocolo"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr ""
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "Puerto TCP"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Habilitar TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Nombre de usuario"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Confirmar acción"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr ""
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Error de Docker"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Ocurrió un error en la comunicación con el servidor Docker."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr ""
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "para acceder a las herramientas de administración"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Mi cuenta"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Configuración"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Auto-reenvío"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Auto-respuesta"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Salir"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Administración"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Administradores"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Dominios de correo"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Ayuda"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Aún trabajamos en esta característica!"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Añadir administrador global"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Administradores globales"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Añadr administrador"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Acciones"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "Correo"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Eliminar"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Crear alias"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Editar alias"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Lista de alias"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Añadir alias"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Creado"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Última edición"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Editar"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Nuevo dominio"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Detalle del domino"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Regenerar llaves"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr ""
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr ""
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr ""
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Editar domino"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Lista de dominios"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr ""
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr ""
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr ""
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Detalles"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Usuarios"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Alias"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr ""
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Añadir una cuenta"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr ""
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Último checkeo"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr ""
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr ""
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr ""
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr ""
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Enviar"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Anuncio público"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr ""
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Anuncio"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Nuevo usuario"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Editar usuario"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr ""
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Lista de usuarios"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Añadir usuario"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Configuración de usuario"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Características"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Actualizar contraseña"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Respuesta automática"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr ""
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Mantener una copia de los correos"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Mantener los correos en el servidor"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Mantener los correos"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "si"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "no"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr ""
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr ""
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr ""
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr ""
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr ""
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr ""
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Nombre"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr ""
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr ""
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr ""
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr ""
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr ""
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr ""
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr ""
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr ""
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr ""
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr ""
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr ""
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr ""
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr ""
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr ""
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr ""
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr ""
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: fr\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Adresse e-mail invalide"
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Confirmer"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-mail"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Mot de passe"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Se connecter"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Nom de domaine"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Nombre maximum d'utilisateurs"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Nombre maximum d'alias"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Commentaire"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Créer"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Confirmer le mot de passe"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Quota"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Autoriser l'accès IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Autoriser l'accès POP3"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Enregistrer"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Nom affiché"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Activer le filtre anti-spam"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Seuil du filtre anti-spam"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Enregistrer les préférences"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Vérifier le mot de passe"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Changer de mot de passe"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Activer la redirection"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Destination"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Mettre à jour"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Activer les réponses automatique"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Sujet du message"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Corps de la réponse"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Utiliser la syntaxe SQL LIKE (par exemple pour les alias catch-all)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "Email de l'administrateur"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Valider"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "E-mail du gérant"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protocole"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Nom d'hôte ou adresse IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "Port TCP"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Activer TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Nom d'utilisateur"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Confirmer"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Vous allez %(action)s. Merci de confirmer votre action."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Erreur Docker"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Une erreur s'est produite en communiquant avec le serveur Docker."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Votre compte"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "pour accéder aux outils d'administration"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Mon compte"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Préférences"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Redirection"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Réponse automatique"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "Comptes externes"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Déconnexion"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Administration"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Administrateurs"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Domaines"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Aide"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Cette fonctionnalité est en cours de développement !"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Ajouter un administrateur global"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Administrateurs globaux"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Ajouter un administrateur"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Actions"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "E-mail"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Supprimer"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Créer un alias"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Modifier un alias"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Liste des alias"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Ajouter un alias"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Création"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Dernière modification"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Modifier"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Nouveau domaine"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Détails du domaine"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Regénérer les clés"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "Entrée DNS MX"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "Entrées DNS SPF"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "Clé publique DKIM"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "Entrée DNS DKIM"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "Entrée DNS DMARC"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Modifier le domaine"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Liste des domaines"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Gérer"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Nombre de boîtes mail"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Nombre d'alias"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Détails"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Utilisateurs"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Alias"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Gérants"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Ajouter un compte externe"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Modifier un compte externe"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Ajouter un compte"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "Source"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Dernier relevé"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Ajouter un gérant"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "Liste des gérants"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Ajouter le gérant"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Sujet de l'annonce"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Corps de l'annonce"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Envoyer"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Annonce globale"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "de"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Annonce"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Nouvel utilisateur"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Modifier l'utilisateur"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Faire suivre les emails"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Utilisateurs"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Ajouter un utilisateur"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Options de l'utilisateur"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Fonctionnalités"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Modifier le mot de passe"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Réponse automatique"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "Quota maximum par utilisateur"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Conserver une copie des messages"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Conserver les messages sur le serveur"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Conserver les messages"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "oui"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "non"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Nom alternatif"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "Nom du domaine relayé"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Hôte distant"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "Domaines relayé"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Nouveau domaine alternatif"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "Liste des domaines alternatifs"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Ajouter une alternative"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Nom"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Alternatives"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "Nouveau domaine relayé"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "Modifier le domaine relayé"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "Liste des domaines relayés"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "Nouveau domaine relayé"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Votre jeton (à conserver, il ne sera plus affiché par la suite)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "Adresse IP autorisée"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Jetons d'authentification"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "Navigation"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Site web"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "Créer un jeton d'authentification"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "Nouveau jeton"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Général"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "Fonctionnalités et quotas"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Général"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Antispam"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr "Tolérance du filtre antispam"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr "Autoriser l'inscription"
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr "Administrateur initial"
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr "Mot de passe administrateur"
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr "Activé"
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr "Adresse e-mail"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr "S'inscrire"
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr "Fin du mode vacance"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr "Configuration client"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr "Protocole"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr "Nom du serveur"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr "Inscrire un domaine"
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr "Générer les clés"
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr "Pour enregistrer un nouveau domaine, vous devez d'abord configurer la zone DNS de sorte que le <code>MX</code> du domaine pointe sur ce serveur."
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr "Si vous ne savez pas comment configurer un enregistrement <code>MX</code>, contactez votre fournisseur de DNS ou votre administrateur. Egalement, attendez quelques minutes après avoir modifié le <code>MX</code>, le temps que le cache local au serveur soit rafraîchi."
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr "choix du domaine pour le compte"
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr "Domaine"
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr "Places disponibles"

View File

@@ -0,0 +1,675 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: it\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Indirizzo email non valido."
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Conferma"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-mail"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Password"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Entra"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Nome dominio"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr ""
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr ""
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr ""
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Crea"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Conferma pasword"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Quota"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Consenti accesso IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Consenti accesso POP3"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Salva"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Nome visualizzato"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Abilita filtro antispam"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Soglia del filtro antispam"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Salva impostazioni"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr ""
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Aggiorna password"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Abilita inoltro"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Destinazione"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Aggiorna"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Abilita risposta automatica"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Soggetto risposta"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Corpo risposta"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Usa sintassi SQL LIKE (es. per alias catch-all)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "Email amministratore"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Invia"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "Email manager"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protocollo"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Hostname o IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "Porta TCP"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Abilita TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Username"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Conferma azione"
#: mailu/ui/templates/confirm.html:13
#, fuzzy
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Stai per %(action). Conferma la tua azione."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Errore Docker"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr ""
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Il tuo account"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr ""
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Il mio account"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Impostazioni"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Auto-inoltro"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Auto-risponditore"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Esci"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Amministrazione"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Amministratori"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Domini mail"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Aiuto"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Stiamo ancora lavorando a questa funzionalità!"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Aggiungi un amministratore globale"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Amministratori globali"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Aggiungi amministratore"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Azioni"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "Email"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Elimina"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Crea alias"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Modifica alias"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Lista alias"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Aggiungi alias"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Creato"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Ultima modifica"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Modifica"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Nuovo dominio"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Dettagli dominio"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Rigenera chiavi"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr ""
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr ""
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr ""
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr ""
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Modifica dominio"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Lista domini"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Gestisci"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Conteggio mailbox"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Conteggio alias"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Dettagli"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Utenti"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Alias"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Manager"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Aggiungi un account"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr ""
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Ultimo controllo"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Aggiungi un manager"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr ""
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Aggiungi manager"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr ""
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Corpo dell'annuncio"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Invia"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Annuncio pubblico"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "da"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Annuncio"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Nuovo utente"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Modifica utente"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Inoltra email"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Lista utenti"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Aggiungi utente"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Impostazioni utente"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Funzionalità"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Aggiornamento password"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Risposta automatica"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr ""
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Conserva una copia delle email"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Conserva email sul server"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Conserva email"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "si"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "no"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Nome alternativo"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr ""
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Host remoto"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr ""
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr ""
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Aggiungi alternativa"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Nome"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Alternative"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr ""
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr ""
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr ""
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr ""
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "IP Autorizzato"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Token di autenticazione"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "Vai a"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Sito web"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "Crea un token di autenticazione"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "Nuovo token"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Generale"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "Funzionalità e quota"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Impostazioni generali"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Antispam"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr "Tolleranza filtro spam"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: nl\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Ongeldig e-mailadres."
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Bevestigen"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-mail"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Wachtwoord"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Aanmelden"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Domeinnaam"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Maximaal aantal gebruikers"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Maximaal aantal aliasen"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Opmerking"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Aanmaken"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Bevestig wachtwoord"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Quotum"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "IMAP toestaan"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "POP3 toestaan"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Opslaan"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Getoonde naam"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Spamfilter inschakelen"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Spamfilter drempel"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Instellingen opslaan"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Wachtwoord controle"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Wachtwoord veranderen"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Doorsturen inschakelen"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Bestemming"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Bijwerken"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Automatisch antwoord inschakelen"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Antwoord onderwerp"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Antwoord bericht"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Gebruik SQL LIKE syntax (bijv. voor alles-afvangen aliasen)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "Beheerder e-mail"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Verzenden"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "Manager e-mail"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protocol"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Hostnaam of IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "TCP poort"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "TLS inschakelen"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Gebruikersnaam"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Actie bevestigen"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "U gaat %(action)s uitvoeren. Bevestig uw actie."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Docker foutmelding"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Er is een fout opgetreden tijdens het communiceren met de Docker server."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Uw account"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "om toegang te krijgen tot systeembeheer"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Mijn account"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Instellingen"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Automatisch doorsturen"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Automatisch antwoorden"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "Opgehaalde accounts"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Afmelden"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Beheer"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Beheerders"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "E-mail domeinen"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Help"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "We zijn nog aan deze functionaliteit aan het werken."
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Globale beheerder toevoegen"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Globale beheerders"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Beheerder toevoegen"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Acties"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "E-mail"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Verwijderen"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Alias aanmaken"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Alias bewerken"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Aliasen overzicht"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Alias toevoegen"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Aangemaakt"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Laatste aanpassing"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Aanpassen"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Nieuw domein"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Domein details"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Hergenereer sleutels"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "DNS MX-record"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "DNS SPF-records"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "DKIM publieke sleutel"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "DNS DKIM-record"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "DNS DMARC-record"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Domein bewerken"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Domeinen overzicht"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Beheer"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Aantal mailboxen"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Aantal aliasen"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Details"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Gebruikers"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Aliasen"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Managers"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Opgehaald account toevoegen"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Opgehaald account aanpassen"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Account toevoegen"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "Endpoint"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Laatste controle"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Manager toevoegen"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "Manager overzicht"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Manager toevoegen"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Mededeling onderwerp"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Mededeling bericht"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Versturen"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Publieke mededeling"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "van"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Mededeling"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Nieuwe gebruiker"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Gebruiker aanpassen"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "E-mails doorsturen"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Gebruikers overzicht"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Gebruiker toevoegen"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Gebruiker instellingen"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Functionaliteiten"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Wachtwoord aanpassen"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Automatisch antwoord"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "Maximum quotum gebruikers"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Behoud een kopie van de e-mails"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Behoud de e-mails op de server"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Behoud e-mails"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "ja"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "nee"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Alternatieve naam"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "Relayed domainnaam"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Externe host"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "Relayed domainen"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Alternatief domein aanmaken"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "Alternatieve domeinen overzicht"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Alternatief toevoegen"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Naam"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Alternatieven"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "Nieuw relay domein"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "Bewerk relay domein"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "Overzicht relayed domeinen"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "Nieuw relayed domein"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Uw token (bewaar hem goed, want hij wordt nooit meer getoond)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "Toegestaan IP"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Authenticatie tokens"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "Ga naar"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Website"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "Authenticatie token aanmaken"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "Nieuw token"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Algemeen"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "Functionaliteiten en quota"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Algemene instellingen"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Anti-spam"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr "Spam filter toleratie"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,675 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: pl\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Nieprawidłowy adres e-mail."
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Zatwierdź"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-mail"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Hasło"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Zaloguj"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Nazwa domeny"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Maksymalna liczba użytkowników"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Maksymalna liczba aliasów"
#. Needs more context - is that a verb or a noun?
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Komentarz"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Utwórz"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Potwierdź hasło"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr ""
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Zezwalaj na dostęp przez protokół IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Zezwalaj na dostęp przez protokół POP3"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Zapisz"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Nazwa wyświetlana"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Włącz filtr antyspamowy"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Próg filtra antyspamowego"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Zapisz ustawienia"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr ""
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Zmień hasło"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Włącz przekierowanie poczty"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Adres docelowy"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Aktualizuj"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Włącz automatyczną odpowiedź"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Temat odpowiedzi"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Treść odpowiedzi"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Używaj składni SQL LIKE (np. do adresów catch-all)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "E-mail administratora"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Prześlij"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr ""
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protokół"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Nazwa hosta lub adres IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "Port TCP"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Włącz TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Nazwa użytkownika"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Potwierdź wykonanie czynności"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Zamierzasz wykonać następujące czynności: %(action)s. Potwierdź wykonanie czynności."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Błąd Dockera"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Wystąpił błąd komunikacji z serwerem Dockera."
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Twoje konto"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr ""
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Moje konto"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Ustawienia"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Automatyczne przekierowanie"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Automatyczna odpowiedź"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr ""
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Wyloguj"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Administracja"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Administratorzy"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Domeny pocztowe"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Pomoc"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr ""
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Dodaj administratora globalnego"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Administratorzy globalni"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Dodaj administratora"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Czynności"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "E-mail"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Usuń"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Utwórz alias"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Edytuj alias"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Lista aliasów"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Dodaj alias"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr ""
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Ostatnia edycja"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Edytuj"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Nowa domena"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Szczegóły domeny"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Wygeneruj ponownie klucze"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "Wpis MX DNS"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "Wpisy SPF DNS"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "Publiczny klucz DKIM"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "Wpis DKIM DNS"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "Wpis DMARC DNS"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Edytuj domenę"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Lista domen"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Zarządzaj"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Liczba skrzynek pocztowych"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Liczba aliasów"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Szczegóły"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Użytkownicy"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Aliasy"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr ""
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr ""
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Dodaj konto"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr ""
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr ""
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr ""
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr ""
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr ""
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Temat ogłoszenia"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Treść ogłoszenia"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Wyślij"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Publiczne ogłoszenie"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "od"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Ogłoszenie"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Nowy użytkownik"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Edytuj użytkownika"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Przekieruj wiadomości e-mail"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Lista użytkowników"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Dodaj użytkownika"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Ustawienia użytkownika"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr ""
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Zmiana hasła"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Automatyczna odpowiedź"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr ""
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Przechowuj kopię wiadomości"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Przechowuj wiadomości na serwerze"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Przechowuj wiadomości"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "Tak"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "Nie"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr ""
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr ""
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr ""
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr ""
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr ""
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr ""
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr ""
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr ""
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr ""
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr ""
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr ""
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr ""
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr ""
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr ""
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr ""
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr ""
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr ""
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Strona internetowa"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr ""
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr ""
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr ""
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr ""
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Ustawienia ogólne"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Filtr antyspamowy"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: pt\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Endereço de e-mail inválido"
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Confirmar"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-mail"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Senha"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Entrar"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Domínio"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Quantidade máxima de usuários"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Quantidade máxima de alias"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Comentário"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Criar"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Confirmar senha"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Quota"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Permitir acesso IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Permitir acesso POP3"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Salvar"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Nome de exibição"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Habilitar filtro de spam"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Limite de filtro de spam"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Salvar configurações"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Confirmação de senha"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Alterar senha"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Habilitar encaminhamento"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Destinatário"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Atualizar"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Habilitar resposta automática"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Assunto da resposta"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Corpo da resposta"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Usar sintaxe estilo SQL(ex: for catch-all aliases)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "E-mail do administrador"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Enviar"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "E-mail do gerente"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protocolo"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Hostname ou IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "Porta TCP"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Habilitar TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Usuário"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Confirmar ação"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Por favor, confirme a(s) %(action)s"
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Erro no docker"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Um erro foi encontrado na conexão com o servidor Docker"
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Sua conta"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "para acessar as ferramentas administrativas"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Minha conta"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Configurações"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Encaminhamento automático"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Resposta automática"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "Contas importadas"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Sair"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Administração"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Administradores"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Domínios de e-mail"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Ajuda"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Nós ainda estamos trabalhando nesta função!"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Adicionar administrador global"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Administradores globais"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Adicionar administrador"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Ações"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "Email"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Deletar"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Criar alias"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Editar alias"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Lista de alias"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Adicionar alias"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Criado"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Última edição"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Editar"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Novo domínio"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Detalhes do domínio"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Gerar novas chaves"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "Entrada DNS MX"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "Entrada DNS SPF"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "Chave pública do DKIM"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "Entrada DNS DKIM"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "Entrada DNS DMARC"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Editar domínio"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Lista de domínios"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Gerenciar"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Quantidade de caixas de e-mail"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Quantidade de aliases"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Detalhes"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Usuários"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Aliases"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Gerentes"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Adicionar conta a importar"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Atualizar conta importada"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Adicionar uma conta"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "Endpoint"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Última verificação"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Adicionar gerente"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "Lista de gerentes"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Adicionar gerente"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Título do comunicado"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Corpo do comunicado"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Enviar"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Comunicado geral"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "de"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Comunicado"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Novo usuário"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Editar usuário"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Encaminhar e-mails"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Lista de usuários"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Adicionar usuário"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Configurações de usuário"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Funcionalidades"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Atualizar senha"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Resposta automática"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "Cota máxima por usuário"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Manter uma cópia dos emails"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Manter os e-mails no servidor"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Manter emails"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "sim"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "não"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Nome alternativo"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "Nome de domínio para encaminhar"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Host remoto"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "Domínios para encaminhamento"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Criar domínio alternativo"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "Lista de domínios alternativos"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Adicionar alternativo"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Nome"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Alternativos"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "Novo domínio para encaminhamento"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "Editar domínio de encaminhamento"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "Lista de domínios para encaminhamento"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "Novo domínio de encaminhamento"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr ""
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr ""
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr ""
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr ""
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr ""
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr ""
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr ""
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr ""
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr ""
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr ""
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr ""
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr ""
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: ru\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Неправильный адрес электронной почты"
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Подтвердить"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "Электронная почта"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Пароль"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Войти"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Доменное имя"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Максимальное число пользователей"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Максимальное число псевдонимов"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Комментарий"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Создать"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Подтвердить пароль"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Квота"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Разрешить доступ через IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Разрешить доступ через POP3"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Сохранить"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Отображаемое имя"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Включить спам-фильтр"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Порог чувствительности спам-фильтра"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Сохранить настройки"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Проверка пароля"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Обновить пароль"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Включить переадресацию"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Адрес получателя"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Обновить"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Включить автоответчик"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Заголовок автоответа"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Сообщение автоответа"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Псевдоним"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Использовать SQL-подобный синтаксис"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "Адрес администратора"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Отправить"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "Адрес менеджера"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Протокол"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Имя хоста или IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "Порт TCP"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Включить TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Имя пользователя"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Подтвердить действие"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Вы собираетесь совершить %(action). Подтвердить?"
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Ошибка Docker"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Произошла ошибка при обращении к серверу Docker"
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Ваша учетная запись"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "для доступа к утилитам администрирования"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Моя учетная запись"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Настройки"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Автоматическая пересылка"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Автоматический ответ"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "Учетные записи сторонних серверов"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Выйти"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Администрирование"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Администраторы"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Почтовые домены"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Помощь"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Мы еще работаем над данным функционалом!"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Добавить глобального администратора"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Глобальные администраторы"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Добавить администратора"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Действия"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "Электронная почта"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Удалить"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Создать псевдоним"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Изменить псевдоним"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Список псевдонимов"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Добавить псевдоним"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Создано"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Последнее изменение"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Изменить"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Новый домен"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Подробности домена"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Перегенерировать ключи"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "DNS MX запись"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "DNS SPF запись"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "Публичный ключ DKIM"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "DNS DKIM запись"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "DNS DMARC запись"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Изменить домен"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Список доменов"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Управление"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Количество ящиков"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Количество псевдонимов"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Подробно"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Пользователи"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Псевдонимы"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Менеджеры"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Добавить учетную запись стороннего сервера"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Обновить учетную запись стороннего сервера"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Добавить учетную запись"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "Конечная точка"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Последняя проверка"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Добавить менеджера"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "Список менеджеров"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Добавить менеджера"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Тема объявления"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Содержание объявления"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Отправить"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Публичное объявление"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "От"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Объявление"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Новый пользователь"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Изменить пользователя"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Перенаправлять письма"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Список пользователей"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Добавить пользователя"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Настройки пользователя"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Функции"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Изменение пароля"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Автоматический ответ"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "Квота на пользователя"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Хранить копии писем"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Хранить письма на сервере"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Сохранять письма"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "да"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "нет"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Имя альтернативного домена"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "Имя релейного домена"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Удаленный хост"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "Релейные домены"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Создать альтернативный домен"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "Список альтернативных доменов"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Добавить альтернативный домен"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Имя"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Альтернативные домены"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "Новый релейный домен"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "Изменить релейный домен"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "Список релейных доменов"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "Новый релейный домен"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Ваш токен (перепишите его, больше он показываться не будет)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "Авторизованные IP-адреса"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Авторизационные токены"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "Перейти к"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Электронная почта"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Сайт"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "Создать токен авторизации"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "Новый токен"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Общие"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "Функции и квоты"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Общие настройки"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Антиспам"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr "Порог спам-фильтра"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: sv\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "Ogiltig adress"
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "Bekräfta"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "E-post"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "Lösenord"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "Logga in"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "Domännamn"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "Max antal användare"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "Max antal alias"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "Kommentar"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "Skapa"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "Bekräfta lösenord"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "Quota"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "Tillåt IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "Tillåt POP3"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "Spara"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "Visat namn"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "Aktivera spamfilter"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "Spamfilter gräns"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "Spara inställningar"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "Lösenordskoll"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "Uppdatera lösenord"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "Aktivera vidarebefordring"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "Destination"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "Uppdatera"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "Aktivera autosvar"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "Svar ämne"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "Svar meddelande"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "Alias"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "Använd SQL-liknande syntax (t.ex. för catch-all alias)"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "Admin e-post"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "Skicka in"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "Manager e-post"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "Protokoll"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "Hostnamn eller IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "TCP port"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "Aktivera TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "Användarnamn"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "Bekräfta"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "Du håller på att %(action)s. Vänligen bekräfta."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Docker fel"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Ett fel inträffade vid kommunikation med Docker"
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "Ditt konto"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "att komma åt administrationsverktygen"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "Mitt konto"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "Inställningar"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "Auto-forward"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "Autosvar"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "Hämtade konton"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "Logga ut"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "Administration"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "Administratörer"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "Domäner"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "Hjälp"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "Vi arbetar fortfarande på den här funktionen!"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "Lägg till en global administratör"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "Globala administratörer"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "Lägg till administratör"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "Handling"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "E-post"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "Radera"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "Skapa alias"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "Redigera alias"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "Alias-lista"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "Skapa alias"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "Skapad"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "Senast redigerad"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "Redigera"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "Ny domän"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "Domändetaljer"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "Generera nycklar"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "DNS MX post"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "DNS SPF post"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "Publik DKIM-nyckel"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "DNS DKIM post"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "DNS DMARC post"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "Redigera domän"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "Domänlista"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "Managera"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "Antal mailboxar"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "Antal alias"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "Detaljer"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "Användare"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "Alias"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "Managers"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "Lägg till hämtat konto"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "Uppdatera ett hämtat konto"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "Lägg till ett konto"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "Slutpunkt"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "Senaste koll"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "Lägg till en manager"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "Managerlista"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "Skapa manager"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "Publikt meddelande ämne"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "Publikt meddelande"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "Skicka"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "Publikt meddelande"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "från"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "Meddelande"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "Ny användare"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "Redigera användare"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "Vidarebefordra e-post"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "Användarlista"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "Lägg till användare"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "Användarinställningar"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "Funktioner"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "Uppdatera lösenord"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "Automatiskt svar"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "Max användar-quota"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "Behåll en kopia av e-posten"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "Behåll e-post på servern"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "Behåll e-posten"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "ja"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "nej"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "Aleternativt namn"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "Reläade domännamn"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "Server"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "Reläade domäner"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "Skapa alternativ domän"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "Alternativa domäner"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "Lägg till alternativ"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "Namn"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "Alternativ"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "Ny relä-domän"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "Redigera reläade domäner"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "Reläade domäner"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "Ny reläad domän"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "Din token (notera, eftersom den inte kommer att visas igen)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "Autentiserat IP"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "Autentiserade tokens"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "Gå till"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "Webmail"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "Websida"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "Skapa en autentiseringstoken"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "Ny token"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "Allmänt"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "Funktioner och quota"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "Allmäna inställningar"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "Antispam"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr ""
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,674 @@
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: POEditor.com\n"
"Project-Id-Version: Mailu\n"
"Language: zh-CN\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
msgstr "无效的邮件地址"
#: mailu/ui/forms.py:36
msgid "Confirm"
msgstr "确认"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
msgstr "电子邮件"
#: mailu/ui/forms.py:41 mailu/ui/forms.py:78 mailu/ui/forms.py:90
#: mailu/ui/forms.py:109 mailu/ui/forms.py:162
#: mailu/ui/templates/client.html:32 mailu/ui/templates/client.html:59
msgid "Password"
msgstr "密码"
#: mailu/ui/forms.py:42 mailu/ui/templates/login.html:4
#: mailu/ui/templates/sidebar.html:111
msgid "Sign in"
msgstr "注册"
#: mailu/ui/forms.py:46 mailu/ui/forms.py:56
#: mailu/ui/templates/domain/details.html:27
#: mailu/ui/templates/domain/list.html:18 mailu/ui/templates/relay/list.html:17
msgid "Domain name"
msgstr "域名"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
msgstr "最大用户数"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
msgstr "最大别名数"
#: mailu/ui/forms.py:51 mailu/ui/forms.py:72 mailu/ui/forms.py:83
#: mailu/ui/forms.py:128 mailu/ui/forms.py:140
#: mailu/ui/templates/alias/list.html:21 mailu/ui/templates/domain/list.html:21
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
msgstr "说明"
#: mailu/ui/forms.py:52 mailu/ui/forms.py:61 mailu/ui/forms.py:66
#: mailu/ui/forms.py:73 mailu/ui/forms.py:132 mailu/ui/forms.py:141
msgid "Create"
msgstr "创建"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
msgstr "确认密码"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
msgstr "配额"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
msgstr "允许IMAP访问"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
msgstr "允许POP3访问"
#: mailu/ui/forms.py:85
msgid "Save"
msgstr "保存"
#: mailu/ui/forms.py:97
msgid "Displayed name"
msgstr "显示名称"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
msgstr "启用垃圾邮件过滤"
#: mailu/ui/forms.py:80
msgid "Spam filter threshold"
msgstr "垃圾邮件过滤器阈值"
#: mailu/ui/forms.py:105
msgid "Save settings"
msgstr "保存设置"
#: mailu/ui/forms.py:110
msgid "Password check"
msgstr "检查密码"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
msgstr "更新密码"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
msgstr "启用转发"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
msgstr "目的地址"
#: mailu/ui/forms.py:120
msgid "Update"
msgstr "更新"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
msgstr "启用自动回复"
#: mailu/ui/forms.py:116
msgid "Reply subject"
msgstr "回复主题"
#: mailu/ui/forms.py:117
msgid "Reply body"
msgstr "回复正文"
#: mailu/ui/forms.py:136
msgid "Alias"
msgstr "别名"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
msgstr "使用SQL LIKE语法例如用于全部别名"
#: mailu/ui/forms.py:145
msgid "Admin email"
msgstr "管理员邮箱"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
msgstr "提交"
#: mailu/ui/forms.py:150
msgid "Manager email"
msgstr "管理员邮箱"
#: mailu/ui/forms.py:155
msgid "Protocol"
msgstr "协议"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
msgstr "主机名或IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
msgstr "TCP端口"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
msgstr "启用TLS"
#: mailu/ui/forms.py:161 mailu/ui/templates/client.html:28
#: mailu/ui/templates/client.html:55 mailu/ui/templates/fetch/list.html:20
msgid "Username"
msgstr "用户名"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
msgstr "确认操作"
#: mailu/ui/templates/confirm.html:13
msgid "You are about to %(action)s. Please confirm your action."
msgstr "即将%(action)s请确认您的操作。"
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
msgstr "Docker错误"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
msgstr "Docker服务器通信出错"
#: mailu/admin/templates/login.html:6
msgid "Your account"
msgstr "你的帐户"
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
msgstr "访问管理员工具"
#: mailu/ui/templates/sidebar.html:8
msgid "My account"
msgstr "我的帐户"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
msgstr "设置"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
msgstr "自动转发"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
msgstr "自动回复"
#: mailu/ui/templates/fetch/list.html:4 mailu/ui/templates/sidebar.html:26
#: mailu/ui/templates/user/list.html:36
msgid "Fetched accounts"
msgstr "代收帐户"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
msgstr "登出"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
msgstr "管理"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
msgstr "管理员"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
msgstr "邮件域"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
msgstr "帮助"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
msgstr "该功能开发中……"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
msgstr "添加超级管理员"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
msgstr "超级管理员"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
msgstr "添加管理员"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
#: mailu/ui/templates/domain/list.html:16 mailu/ui/templates/fetch/list.html:18
#: mailu/ui/templates/manager/list.html:18
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
msgstr "操作"
#: mailu/ui/templates/admin/list.html:17 mailu/ui/templates/alias/list.html:19
#: mailu/ui/templates/manager/list.html:19 mailu/ui/templates/user/list.html:20
msgid "Email"
msgstr "电子邮件"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
#: mailu/ui/templates/domain/list.html:31 mailu/ui/templates/fetch/list.html:31
#: mailu/ui/templates/manager/list.html:24
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
msgstr "删除"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
msgstr "创建别名"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
msgstr "编辑别名"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
msgstr "别名列表"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
msgstr "添加别名"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
#: mailu/ui/templates/domain/list.html:22 mailu/ui/templates/fetch/list.html:24
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
msgstr "创建"
#: mailu/ui/templates/alias/list.html:23 mailu/ui/templates/domain/list.html:23
#: mailu/ui/templates/fetch/list.html:25 mailu/ui/templates/relay/list.html:21
#: mailu/ui/templates/user/list.html:25
msgid "Last edit"
msgstr "上次编辑"
#: mailu/ui/templates/alias/list.html:28 mailu/ui/templates/domain/list.html:30
#: mailu/ui/templates/fetch/list.html:30 mailu/ui/templates/relay/list.html:26
#: mailu/ui/templates/user/list.html:30
msgid "Edit"
msgstr "编辑"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
msgstr "新域"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
msgstr "域详情"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
msgstr "重新生成密钥"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
msgstr "DNS MX条目"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
msgstr "DNS SPF条目"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
msgstr "DKIM公钥"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
msgstr "DNS DKIM条目"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
msgstr "DNS DMARC条目"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
msgstr "编辑域"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
msgstr "域列表"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
msgstr "管理"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
msgstr "邮箱数量"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
msgstr "别名数量"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
msgstr "详情"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
msgstr "用户"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
msgstr "别名"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
msgstr "管理员"
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
msgstr "添加一个代收帐户"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
msgstr "更新代收帐户"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
msgstr "添加一个帐户"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
msgstr "端点"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
msgstr "上次检查"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
msgstr "添加一个管理员"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
msgstr "管理员列表"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
msgstr "添加管理员"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
msgstr "公告主题"
#: mailu/ui/forms.py:170
msgid "Announcement body"
msgstr "公告正文"
#: mailu/ui/forms.py:172
msgid "Send"
msgstr "发送"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
msgstr "公告"
#: mailu/ui/templates/announcement.html:8
msgid "from"
msgstr "来自"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
msgstr "公告"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
msgstr "新用户"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
msgstr "编辑用户"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
msgstr "转发电子邮件"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
msgstr "用户列表"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
msgstr "添加用户"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
msgstr "用户设置"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
msgstr "功能"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
msgstr "密码更新"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
msgstr "自动回复"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
msgstr "最大用户容量"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
msgstr "保留电子邮件副本"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
msgstr "保留电子邮件在服务器上"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
msgstr "保存电子邮件"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
msgstr "是"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
msgstr "否"
#: mailu/ui/forms.py:65
msgid "Alternative name"
msgstr "替代名称"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
msgstr "中继域域名"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
msgstr "远程主机"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
msgstr "中继域"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
msgstr "创建替代域"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
msgstr "替代域名列表"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
msgstr "添加替代"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
msgstr "名称"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
msgstr "备择方案"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
msgstr "新的中继域"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
msgstr "编辑中继域"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
msgstr "中继域列表"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
msgstr "新的中继域"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
msgstr "您的令牌(请记录,它只显示这一次)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
msgstr "授权IP"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
msgstr "认证令牌"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
msgstr "转到"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
msgstr "网页邮箱"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
msgstr "网站"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
msgstr "创建一个认证令牌"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
msgstr "新的令牌"
#: mailu/ui/templates/user/create.html:15
msgid "General"
msgstr "通用"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
msgstr "功能和配额"
#: mailu/ui/templates/user/settings.html:14
msgid "General settings"
msgstr "常规设置"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
msgstr "反垃圾邮件"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
msgstr "垃圾邮件过滤器容忍度"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
msgstr ""
#: mailu/ui/forms.py:57
msgid "Initial admin"
msgstr ""
#: mailu/ui/forms.py:58
msgid "Admin password"
msgstr ""
#: mailu/ui/forms.py:84
msgid "Enabled"
msgstr ""
#: mailu/ui/forms.py:89
msgid "Email address"
msgstr ""
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
#: mailu/ui/templates/user/signup_domain.html:4
msgid "Sign up"
msgstr ""
#: mailu/ui/forms.py:119
msgid "End of vacation"
msgstr ""
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
msgstr ""
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
msgstr ""
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
msgstr ""
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
msgstr ""
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
msgstr ""
#: mailu/ui/templates/domain/signup.html:13
msgid "In order to register a new domain, you must first setup the\n"
" domain zone so that the domain <code>MX</code> points to this server"
msgstr ""
#: mailu/ui/templates/domain/signup.html:18
msgid "If you do not know how to setup an <code>MX</code> record for your DNS zone,\n"
" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the <code>MX</code> is set so the local server cache\n"
" expires."
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
msgstr ""
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
msgstr ""

View File

@@ -0,0 +1,6 @@
from flask import Blueprint
ui = Blueprint('ui', __name__, static_folder='static', template_folder='templates')
from mailu.ui.views import *

View File

@@ -1,4 +1,5 @@
from mailu.admin import db, models, forms from mailu import models
from mailu.ui import forms
import flask import flask
import flask_login import flask_login

View File

@@ -6,6 +6,7 @@ import flask_login
import flask_wtf import flask_wtf
import re import re
LOCALPART_REGEX = "^[a-zA-Z0-9.!#$%&*+/=?^_`{|}~-]+$"
class DestinationField(fields.SelectMultipleField): class DestinationField(fields.SelectMultipleField):
""" Allow for multiple emails selection from current user choices and """ Allow for multiple emails selection from current user choices and
@@ -47,25 +48,62 @@ class DomainForm(flask_wtf.FlaskForm):
max_users = fields_.IntegerField(_('Maximum user count'), default=10) max_users = fields_.IntegerField(_('Maximum user count'), default=10)
max_aliases = fields_.IntegerField(_('Maximum alias count'), default=10) max_aliases = fields_.IntegerField(_('Maximum alias count'), default=10)
max_quota_bytes = fields_.IntegerSliderField(_('Maximum user quota'), default=0) max_quota_bytes = fields_.IntegerSliderField(_('Maximum user quota'), default=0)
signup_enabled = fields.BooleanField(_('Enable sign-up'), default=False)
comment = fields.StringField(_('Comment')) comment = fields.StringField(_('Comment'))
submit = fields.SubmitField(_('Save'))
class DomainSignupForm(flask_wtf.FlaskForm):
name = fields.StringField(_('Domain name'), [validators.DataRequired()])
localpart = fields.StringField(_('Initial admin'), [validators.DataRequired()])
pw = fields.PasswordField(_('Admin password'), [validators.DataRequired()])
pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')])
captcha = flask_wtf.RecaptchaField()
submit = fields.SubmitField(_('Create')) submit = fields.SubmitField(_('Create'))
class AlternativeForm(flask_wtf.FlaskForm):
name = fields.StringField(_('Alternative name'), [validators.DataRequired()])
submit = fields.SubmitField(_('Save'))
class RelayForm(flask_wtf.FlaskForm):
name = fields.StringField(_('Relayed domain name'), [validators.DataRequired()])
smtp = fields.StringField(_('Remote host'))
comment = fields.StringField(_('Comment'))
submit = fields.SubmitField(_('Save'))
class UserForm(flask_wtf.FlaskForm): class UserForm(flask_wtf.FlaskForm):
localpart = fields.StringField(_('E-mail'), [validators.DataRequired()]) localpart = fields.StringField(_('E-mail'), [validators.DataRequired(), validators.Regexp(LOCALPART_REGEX)])
pw = fields.PasswordField(_('Password'), [validators.DataRequired()]) pw = fields.PasswordField(_('Password'), [validators.DataRequired()])
pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')]) pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')])
quota_bytes = fields_.IntegerSliderField(_('Quota'), default=1000000000) quota_bytes = fields_.IntegerSliderField(_('Quota'), default=1000000000)
enable_imap = fields.BooleanField(_('Allow IMAP access'), default=True) enable_imap = fields.BooleanField(_('Allow IMAP access'), default=True)
enable_pop = fields.BooleanField(_('Allow POP3 access'), default=True) enable_pop = fields.BooleanField(_('Allow POP3 access'), default=True)
comment = fields.StringField(_('Comment')) comment = fields.StringField(_('Comment'))
enabled = fields.BooleanField(_('Enabled'), default=True)
submit = fields.SubmitField(_('Save')) submit = fields.SubmitField(_('Save'))
class UserSignupForm(flask_wtf.FlaskForm):
localpart = fields.StringField(_('Email address'), [validators.DataRequired(), validators.Regexp(LOCALPART_REGEX)])
pw = fields.PasswordField(_('Password'), [validators.DataRequired()])
pw2 = fields.PasswordField(_('Confirm password'), [validators.EqualTo('pw')])
submit = fields.SubmitField(_('Sign up'))
class UserSignupFormCaptcha(UserSignupForm):
captcha = flask_wtf.RecaptchaField()
class UserSettingsForm(flask_wtf.FlaskForm): class UserSettingsForm(flask_wtf.FlaskForm):
displayed_name = fields.StringField(_('Displayed name')) displayed_name = fields.StringField(_('Displayed name'))
spam_enabled = fields.BooleanField(_('Enable spam filter')) spam_enabled = fields.BooleanField(_('Enable spam filter'))
spam_threshold = fields_.IntegerSliderField(_('Spam filter threshold')) spam_threshold = fields_.IntegerSliderField(_('Spam filter tolerance'))
forward_enabled = fields.BooleanField(_('Enable forwarding'))
forward_keep = fields.BooleanField(_('Keep a copy of the emails'))
forward_destination = fields.StringField(
_('Destination'), [validators.Optional(), validators.Email()]
)
submit = fields.SubmitField(_('Save settings')) submit = fields.SubmitField(_('Save settings'))
@@ -75,29 +113,35 @@ class UserPasswordForm(flask_wtf.FlaskForm):
submit = fields.SubmitField(_('Update password')) submit = fields.SubmitField(_('Update password'))
class UserForwardForm(flask_wtf.FlaskForm):
forward_enabled = fields.BooleanField(_('Enable forwarding'))
forward_destination = fields.StringField(
_('Destination'), [validators.Optional(), validators.Email()]
)
submit = fields.SubmitField(_('Update'))
class UserReplyForm(flask_wtf.FlaskForm): class UserReplyForm(flask_wtf.FlaskForm):
reply_enabled = fields.BooleanField(_('Enable automatic reply')) reply_enabled = fields.BooleanField(_('Enable automatic reply'))
reply_subject = fields.StringField(_('Reply subject')) reply_subject = fields.StringField(_('Reply subject'))
reply_body = fields.StringField(_('Reply body'), reply_body = fields.StringField(_('Reply body'),
widget=widgets.TextArea()) widget=widgets.TextArea())
reply_startdate = fields.html5.DateField(_('Start of vacation'))
reply_enddate = fields.html5.DateField(_('End of vacation'))
submit = fields.SubmitField(_('Update')) submit = fields.SubmitField(_('Update'))
class TokenForm(flask_wtf.FlaskForm):
displayed_password = fields.StringField(
_('Your token (write it down, as it will never be displayed again)')
)
raw_password = fields.HiddenField([validators.DataRequired()])
comment = fields.StringField(_('Comment'))
ip = fields.StringField(
_('Authorized IP'), [validators.Optional(), validators.IPAddress()]
)
submit = fields.SubmitField(_('Save'))
class AliasForm(flask_wtf.FlaskForm): class AliasForm(flask_wtf.FlaskForm):
localpart = fields.StringField(_('Alias'), [validators.DataRequired()]) localpart = fields.StringField(_('Alias'), [validators.DataRequired()])
wildcard = fields.BooleanField( wildcard = fields.BooleanField(
_('Use SQL LIKE Syntax (e.g. for catch-all aliases)')) _('Use SQL LIKE Syntax (e.g. for catch-all aliases)'))
destination = DestinationField(_('Destination')) destination = DestinationField(_('Destination'))
comment = fields.StringField(_('Comment')) comment = fields.StringField(_('Comment'))
submit = fields.SubmitField(_('Create')) submit = fields.SubmitField(_('Save'))
class AdminForm(flask_wtf.FlaskForm): class AdminForm(flask_wtf.FlaskForm):

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Some files were not shown because too many files have changed in this diff Show More