From e0bf75ae170ce1c6b03c69f687f0001c79e4caea Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Mon, 19 Jul 2021 09:15:42 +0300
Subject: [PATCH 01/81] Completed Hebrew translation
---
.../translations/he/LC_MESSAGES/messages.po | 318 +++++++++---------
1 file changed, 162 insertions(+), 156 deletions(-)
diff --git a/core/admin/mailu/translations/he/LC_MESSAGES/messages.po b/core/admin/mailu/translations/he/LC_MESSAGES/messages.po
index e884b737..91fbbcff 100644
--- a/core/admin/mailu/translations/he/LC_MESSAGES/messages.po
+++ b/core/admin/mailu/translations/he/LC_MESSAGES/messages.po
@@ -1,29 +1,30 @@
-# Translations template for PROJECT.
-# Copyright (C) 2018 ORGANIZATION
-# This file is distributed under the same license as the PROJECT project.
-# FIRST AUTHOR , 2018.
+# Translations template for Mailu.
+# Copyright (C) 2018 Mailu
+# This file is distributed under the same license as the Mailu project.
+# Modi Sacks, 2019-2021.
+# Yaron Shahrabani , 2021.
#
msgid ""
msgstr ""
-"Project-Id-Version: PROJECT VERSION\n"
-"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"Project-Id-Version: Mailu 1.5.1\n"
+"Report-Msgid-Bugs-To: heb-bugzap@projects.hamakor.org.il \n"
"POT-Creation-Date: 2018-04-22 12:10+0200\n"
-"PO-Revision-Date: 2019-11-27 22:20+0000\n"
-"Last-Translator: Mordi Sacks \n"
+"PO-Revision-Date: 2021-07-19 09:04+0300\n"
+"Last-Translator: Yaron Shahrabani \n"
"Language-Team: Hebrew \n"
"Language: he\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
-"X-Generator: Weblate 3.3\n"
+"X-Generator: Poedit 3.0\n"
"Generated-By: Babel 2.5.3\n"
#: mailu/ui/forms.py:32
msgid "Invalid email address."
-msgstr "כתובת דוא\"ל לא חוקית."
+msgstr "כתובת דוא״ל שגויה."
#: mailu/ui/forms.py:36
msgid "Confirm"
@@ -31,7 +32,7 @@ msgstr "אישור"
#: mailu/ui/forms.py:40 mailu/ui/forms.py:77
msgid "E-mail"
-msgstr "דוא\"ל"
+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
@@ -48,23 +49,23 @@ msgstr "כניסה"
#: 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 "שם דומיין"
+msgstr "שם תחום"
#: mailu/ui/forms.py:47
msgid "Maximum user count"
-msgstr ""
+msgstr "כמות המשתמשים המרבית"
#: mailu/ui/forms.py:48
msgid "Maximum alias count"
-msgstr ""
+msgstr "כמות הכינויים המרבית"
#: mailu/ui/forms.py:49
msgid "Maximum user quota"
-msgstr ""
+msgstr "מיכסת המשתמשים המרבית"
#: mailu/ui/forms.py:50
msgid "Enable sign-up"
-msgstr ""
+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
@@ -72,53 +73,53 @@ msgstr ""
#: mailu/ui/templates/relay/list.html:19 mailu/ui/templates/token/list.html:19
#: mailu/ui/templates/user/list.html:23
msgid "Comment"
-msgstr ""
+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 ""
+msgstr "יצירה"
#: mailu/ui/forms.py:57
msgid "Initial admin"
-msgstr ""
+msgstr "מנהל ראשוני"
#: mailu/ui/forms.py:58
msgid "Admin password"
-msgstr ""
+msgstr "סיסמת ניהול"
#: mailu/ui/forms.py:59 mailu/ui/forms.py:79 mailu/ui/forms.py:91
msgid "Confirm password"
-msgstr ""
+msgstr "אישור סיסמה"
#: mailu/ui/forms.py:65
msgid "Alternative name"
-msgstr ""
+msgstr "שם חלופי"
#: mailu/ui/forms.py:70
msgid "Relayed domain name"
-msgstr ""
+msgstr "שם תחום מועבר"
#: mailu/ui/forms.py:71 mailu/ui/templates/relay/list.html:18
msgid "Remote host"
-msgstr ""
+msgstr "מארח מרוחק"
#: mailu/ui/forms.py:80 mailu/ui/templates/user/list.html:22
#: mailu/ui/templates/user/signup_domain.html:16
msgid "Quota"
-msgstr ""
+msgstr "מיכסה"
#: mailu/ui/forms.py:81
msgid "Allow IMAP access"
-msgstr ""
+msgstr "לאפשר גישה ב־IMAP"
#: mailu/ui/forms.py:82
msgid "Allow POP3 access"
-msgstr ""
+msgstr "לאפשר גישה ב־POP3"
#: mailu/ui/forms.py:84
msgid "Enabled"
-msgstr ""
+msgstr "מופעל"
#: mailu/ui/forms.py:85
msgid "Save"
@@ -126,7 +127,7 @@ msgstr "שמירה"
#: mailu/ui/forms.py:89
msgid "Email address"
-msgstr "דואר אלקטרוני"
+msgstr "כתובת דוא״ל"
#: mailu/ui/forms.py:93 mailu/ui/templates/sidebar.html:117
#: mailu/ui/templates/user/signup.html:4
@@ -136,244 +137,244 @@ msgstr "הרשמה"
#: mailu/ui/forms.py:97
msgid "Displayed name"
-msgstr ""
+msgstr "שם מוצג"
#: mailu/ui/forms.py:98
msgid "Enable spam filter"
-msgstr ""
+msgstr "הפעלת מסנן ספאם"
#: mailu/ui/forms.py:99
msgid "Spam filter tolerance"
-msgstr ""
+msgstr "סובלנות מסנן הספאם"
#: mailu/ui/forms.py:100
msgid "Enable forwarding"
-msgstr ""
+msgstr "הפעלת העברה"
#: mailu/ui/forms.py:101
msgid "Keep a copy of the emails"
-msgstr ""
+msgstr "להשאיר עותק מההודעות"
#: mailu/ui/forms.py:103 mailu/ui/forms.py:139
#: mailu/ui/templates/alias/list.html:20
msgid "Destination"
-msgstr ""
+msgstr "יעד"
#: mailu/ui/forms.py:105
msgid "Save settings"
-msgstr ""
+msgstr "שמירת הגדרות"
#: mailu/ui/forms.py:110
msgid "Password check"
-msgstr ""
+msgstr "בדיקת סיסמה"
#: mailu/ui/forms.py:111 mailu/ui/templates/sidebar.html:16
msgid "Update password"
-msgstr ""
+msgstr "עדכון סיסמה"
#: mailu/ui/forms.py:115
msgid "Enable automatic reply"
-msgstr ""
+msgstr "הפעלת תגובה אוטומטית"
#: mailu/ui/forms.py:116
msgid "Reply subject"
-msgstr ""
+msgstr "נושא התגובה"
#: mailu/ui/forms.py:117
msgid "Reply body"
-msgstr ""
+msgstr "גוף התגובה"
#: mailu/ui/forms.py:119
msgid "End of vacation"
-msgstr ""
+msgstr "סוף החופשה"
#: mailu/ui/forms.py:120
msgid "Update"
-msgstr ""
+msgstr "עדכון"
#: mailu/ui/forms.py:125
msgid "Your token (write it down, as it will never be displayed again)"
-msgstr ""
+msgstr "האסימון שלך (כדאי לשמור עליו היטב כיוון שהוא לא יופיע פעם נוספת)"
#: mailu/ui/forms.py:130 mailu/ui/templates/token/list.html:20
msgid "Authorized IP"
-msgstr ""
+msgstr "כתובת IP מורשית"
#: mailu/ui/forms.py:136
msgid "Alias"
-msgstr ""
+msgstr "כינוי"
#: mailu/ui/forms.py:138
msgid "Use SQL LIKE Syntax (e.g. for catch-all aliases)"
-msgstr ""
+msgstr "להשתמש בתחביר דמוי SQL (למשל: catch-all aliases)"
#: mailu/ui/forms.py:145
msgid "Admin email"
-msgstr ""
+msgstr "דוא״ל ההנהלה"
#: mailu/ui/forms.py:146 mailu/ui/forms.py:151 mailu/ui/forms.py:164
msgid "Submit"
-msgstr ""
+msgstr "הגשה"
#: mailu/ui/forms.py:150
msgid "Manager email"
-msgstr ""
+msgstr "דוא״ל המפקח"
#: mailu/ui/forms.py:155
msgid "Protocol"
-msgstr ""
+msgstr "פרוטוקול"
#: mailu/ui/forms.py:158
msgid "Hostname or IP"
-msgstr ""
+msgstr "שם מארח או כתובת IP"
#: mailu/ui/forms.py:159 mailu/ui/templates/client.html:20
#: mailu/ui/templates/client.html:47
msgid "TCP port"
-msgstr ""
+msgstr "פתחת TCP"
#: mailu/ui/forms.py:160
msgid "Enable TLS"
-msgstr ""
+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 ""
+msgstr "שם משתמש"
#: mailu/ui/forms.py:163
msgid "Keep emails on the server"
-msgstr ""
+msgstr "להשאיר את ההודעות על השרת"
#: mailu/ui/forms.py:168
msgid "Announcement subject"
-msgstr ""
+msgstr "נושא ההכרזה"
#: mailu/ui/forms.py:170
msgid "Announcement body"
-msgstr ""
+msgstr "גוף ההכרזה"
#: mailu/ui/forms.py:172
msgid "Send"
-msgstr ""
+msgstr "שליחה"
#: mailu/ui/templates/announcement.html:4
msgid "Public announcement"
-msgstr ""
+msgstr "הכרזה פומבית"
#: mailu/ui/templates/client.html:4 mailu/ui/templates/sidebar.html:82
msgid "Client setup"
-msgstr ""
+msgstr "הגדרת לקוח"
#: mailu/ui/templates/client.html:16 mailu/ui/templates/client.html:43
msgid "Mail protocol"
-msgstr ""
+msgstr "פרוטוקול דוא״ל"
#: mailu/ui/templates/client.html:24 mailu/ui/templates/client.html:51
msgid "Server name"
-msgstr ""
+msgstr "שם שרת"
#: mailu/ui/templates/confirm.html:4
msgid "Confirm action"
-msgstr ""
+msgstr "אישור הפעולה"
#: mailu/ui/templates/confirm.html:13
#, python-format
msgid "You are about to %(action)s. Please confirm your action."
-msgstr ""
+msgstr "פעולה זו תבצע %(action)s. נא לאשר את הפעולה שלך."
#: mailu/ui/templates/docker-error.html:4
msgid "Docker error"
-msgstr ""
+msgstr "שגיאת Docker"
#: mailu/ui/templates/docker-error.html:12
msgid "An error occurred while talking to the Docker server."
-msgstr ""
+msgstr "אירעה שגיאה בעת החיבור לשרת ה־Docker."
#: mailu/ui/templates/login.html:8
msgid "to access the administration tools"
-msgstr ""
+msgstr "כדי לגשת לכלי הניהול"
#: mailu/ui/templates/sidebar.html:11 mailu/ui/templates/user/list.html:34
msgid "Settings"
-msgstr ""
+msgstr "הגדרות"
#: mailu/ui/templates/sidebar.html:21 mailu/ui/templates/user/list.html:35
msgid "Auto-reply"
-msgstr ""
+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 ""
+msgstr "חשבונות נמשכים"
#: mailu/ui/templates/sidebar.html:31 mailu/ui/templates/token/list.html:4
msgid "Authentication tokens"
-msgstr ""
+msgstr "אסימוני אימות"
#: mailu/ui/templates/sidebar.html:35
msgid "Administration"
-msgstr ""
+msgstr "ניהול"
#: mailu/ui/templates/sidebar.html:44
msgid "Announcement"
-msgstr ""
+msgstr "הכרזה"
#: mailu/ui/templates/sidebar.html:49
msgid "Administrators"
-msgstr ""
+msgstr "מנהלים"
#: mailu/ui/templates/sidebar.html:54
msgid "Relayed domains"
-msgstr ""
+msgstr "שמות תחום מועברים"
#: mailu/ui/templates/sidebar.html:59 mailu/ui/templates/user/settings.html:15
msgid "Antispam"
-msgstr ""
+msgstr "מניעת ספאם"
#: mailu/ui/templates/sidebar.html:66
msgid "Mail domains"
-msgstr ""
+msgstr "דמות תחום לדוא״ל"
#: mailu/ui/templates/sidebar.html:72
msgid "Go to"
-msgstr ""
+msgstr "מעבר אל"
#: mailu/ui/templates/sidebar.html:76
msgid "Webmail"
-msgstr ""
+msgstr "דוא״ל בדפדפן"
#: mailu/ui/templates/sidebar.html:87
msgid "Website"
-msgstr ""
+msgstr "אתר"
#: mailu/ui/templates/sidebar.html:92
msgid "Help"
-msgstr ""
+msgstr "עזרה"
#: mailu/ui/templates/domain/signup.html:4 mailu/ui/templates/sidebar.html:98
msgid "Register a domain"
-msgstr ""
+msgstr "רישום שם תחום"
#: mailu/ui/templates/sidebar.html:105
msgid "Sign out"
-msgstr ""
+msgstr "יציאה"
#: mailu/ui/templates/working.html:4
msgid "We are still working on this feature!"
-msgstr ""
+msgstr "אנחנו עדיין עובדים על היכולת הזאת!"
#: mailu/ui/templates/admin/create.html:4
msgid "Add a global administrator"
-msgstr ""
+msgstr "הוספת מנהל כללי"
#: mailu/ui/templates/admin/list.html:4
msgid "Global administrators"
-msgstr ""
+msgstr "מנהלים כלליים"
#: mailu/ui/templates/admin/list.html:9
msgid "Add administrator"
-msgstr ""
+msgstr "הוספת מנהל"
#: mailu/ui/templates/admin/list.html:16 mailu/ui/templates/alias/list.html:18
#: mailu/ui/templates/alternative/list.html:18
@@ -382,12 +383,12 @@ msgstr ""
#: mailu/ui/templates/relay/list.html:16 mailu/ui/templates/token/list.html:18
#: mailu/ui/templates/user/list.html:18
msgid "Actions"
-msgstr ""
+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 ""
+msgstr "דוא״ל"
#: mailu/ui/templates/admin/list.html:22 mailu/ui/templates/alias/list.html:29
#: mailu/ui/templates/alternative/list.html:25
@@ -396,23 +397,23 @@ msgstr ""
#: mailu/ui/templates/relay/list.html:27 mailu/ui/templates/token/list.html:26
#: mailu/ui/templates/user/list.html:31
msgid "Delete"
-msgstr ""
+msgstr "מחיקה"
#: mailu/ui/templates/alias/create.html:4
msgid "Create alias"
-msgstr ""
+msgstr "יצירת כינוי"
#: mailu/ui/templates/alias/edit.html:4
msgid "Edit alias"
-msgstr ""
+msgstr "עריכת כינוי"
#: mailu/ui/templates/alias/list.html:4
msgid "Alias list"
-msgstr ""
+msgstr "רשימת כינויים"
#: mailu/ui/templates/alias/list.html:12
msgid "Add alias"
-msgstr ""
+msgstr "הוספת כינוי"
#: mailu/ui/templates/alias/list.html:22
#: mailu/ui/templates/alternative/list.html:20
@@ -420,254 +421,259 @@ msgstr ""
#: mailu/ui/templates/relay/list.html:20 mailu/ui/templates/token/list.html:21
#: mailu/ui/templates/user/list.html:24
msgid "Created"
-msgstr ""
+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 ""
+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 ""
+msgstr "עריכה"
#: mailu/ui/templates/alternative/create.html:4
msgid "Create alternative domain"
-msgstr ""
+msgstr "יצירת שם תחום חלופי"
#: mailu/ui/templates/alternative/list.html:4
msgid "Alternative domain list"
-msgstr ""
+msgstr "רשימת שמות תחום חלופיים"
#: mailu/ui/templates/alternative/list.html:12
msgid "Add alternative"
-msgstr ""
+msgstr "הוספת חלופה"
#: mailu/ui/templates/alternative/list.html:19
msgid "Name"
-msgstr ""
+msgstr "שם"
#: mailu/ui/templates/domain/create.html:4
#: mailu/ui/templates/domain/list.html:9
msgid "New domain"
-msgstr ""
+msgstr "שם תחום חדש"
#: mailu/ui/templates/domain/details.html:4
msgid "Domain details"
-msgstr ""
+msgstr "פרטי שם התחום"
#: mailu/ui/templates/domain/details.html:15
msgid "Regenerate keys"
-msgstr ""
+msgstr "יצירת מפתחות מחדש"
#: mailu/ui/templates/domain/details.html:17
msgid "Generate keys"
-msgstr ""
+msgstr "יצירת מפתחות"
#: mailu/ui/templates/domain/details.html:31
msgid "DNS MX entry"
-msgstr ""
+msgstr "רשומת MX ב־DNS"
#: mailu/ui/templates/domain/details.html:35
msgid "DNS SPF entries"
-msgstr ""
+msgstr "רשומות SPF ב־DNS"
#: mailu/ui/templates/domain/details.html:42
msgid "DKIM public key"
-msgstr ""
+msgstr "מפתח DKIM ציבורי"
#: mailu/ui/templates/domain/details.html:46
msgid "DNS DKIM entry"
-msgstr ""
+msgstr "רשומת DKIM ב־DNS"
#: mailu/ui/templates/domain/details.html:50
msgid "DNS DMARC entry"
-msgstr ""
+msgstr "רשומת DMARC ב־DNS"
#: mailu/ui/templates/domain/edit.html:4
msgid "Edit domain"
-msgstr ""
+msgstr "עריכת שם תחום"
#: mailu/ui/templates/domain/list.html:4
msgid "Domain list"
-msgstr ""
+msgstr "רשימת שמות תחום"
#: mailu/ui/templates/domain/list.html:17
msgid "Manage"
-msgstr ""
+msgstr "ניהול"
#: mailu/ui/templates/domain/list.html:19
msgid "Mailbox count"
-msgstr ""
+msgstr "כמות תיבות דוא״ל"
#: mailu/ui/templates/domain/list.html:20
msgid "Alias count"
-msgstr ""
+msgstr "כמות כינויים"
#: mailu/ui/templates/domain/list.html:28
msgid "Details"
-msgstr ""
+msgstr "פרטים"
#: mailu/ui/templates/domain/list.html:35
msgid "Users"
-msgstr ""
+msgstr "משתמשים"
#: mailu/ui/templates/domain/list.html:36
msgid "Aliases"
-msgstr ""
+msgstr "כינויים"
#: mailu/ui/templates/domain/list.html:37
msgid "Managers"
-msgstr ""
+msgstr "מפקחים"
#: mailu/ui/templates/domain/list.html:39
msgid "Alternatives"
-msgstr ""
+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 MX
points to this server"
msgstr ""
+"כדי לרשום שם תחום חדש, תחילה עליך להקים את אזור התחום\n"
+" (domain zone) כדי שה־MX
של שם התחום יפנה לשרת הזה"
#: mailu/ui/templates/domain/signup.html:18
msgid ""
"If you do not know how to setup an MX
record for your DNS "
"zone,\n"
-" please contact your DNS provider or administrator. Also, please wait "
-"a\n"
+" please contact your DNS provider or administrator. Also, please wait a\n"
" couple minutes after the MX
is set so the local server "
"cache\n"
" expires."
msgstr ""
+"אם לא ברור לך איך להקים רשומת MX
עבור אזור ה־DNS שלך,\n"
+" נא ליצור קשר עם ספק ה־ DNS או ההנהלה שלך. כמו כן, נא להמתין מספר דקות\n"
+" לאחר הגדרת ה־MX
כדי לאפשר לתוקף המטמון המקורי בשרת\n"
+" לפוג."
#: mailu/ui/templates/fetch/create.html:4
msgid "Add a fetched account"
-msgstr ""
+msgstr "הוספת חשבון נמשך"
#: mailu/ui/templates/fetch/edit.html:4
msgid "Update a fetched account"
-msgstr ""
+msgstr "עדכון חשבון שנמשך"
#: mailu/ui/templates/fetch/list.html:12
msgid "Add an account"
-msgstr ""
+msgstr "הוספת חשבון"
#: mailu/ui/templates/fetch/list.html:19
msgid "Endpoint"
-msgstr ""
+msgstr "נקודת גישה"
#: mailu/ui/templates/fetch/list.html:21
msgid "Keep emails"
-msgstr ""
+msgstr "לשמור על ההודעות"
#: mailu/ui/templates/fetch/list.html:22
msgid "Last check"
-msgstr ""
+msgstr "בדיקה אחרונה"
#: mailu/ui/templates/fetch/list.html:35
msgid "yes"
-msgstr ""
+msgstr "כן"
#: mailu/ui/templates/fetch/list.html:35
msgid "no"
-msgstr ""
+msgstr "לא"
#: mailu/ui/templates/manager/create.html:4
msgid "Add a manager"
-msgstr ""
+msgstr "הוספת מנהל"
#: mailu/ui/templates/manager/list.html:4
msgid "Manager list"
-msgstr ""
+msgstr "רשימת מנהלים"
#: mailu/ui/templates/manager/list.html:12
msgid "Add manager"
-msgstr ""
+msgstr "הוספת מנהל"
#: mailu/ui/templates/relay/create.html:4
msgid "New relay domain"
-msgstr ""
+msgstr "שם תחום מועבר"
#: mailu/ui/templates/relay/edit.html:4
msgid "Edit relayd domain"
-msgstr ""
+msgstr "עריכת שמות תחום מועברים"
#: mailu/ui/templates/relay/list.html:4
msgid "Relayed domain list"
-msgstr ""
+msgstr "רשימת שמות תחום מועברים"
#: mailu/ui/templates/relay/list.html:9
msgid "New relayed domain"
-msgstr ""
+msgstr "שם תחום מועבר חדש"
#: mailu/ui/templates/token/create.html:4
msgid "Create an authentication token"
-msgstr ""
+msgstr "יצירת אסימון אימות"
#: mailu/ui/templates/token/list.html:12
msgid "New token"
-msgstr ""
+msgstr "אסימון חדש"
#: mailu/ui/templates/user/create.html:4
msgid "New user"
-msgstr ""
+msgstr "משתמש חדש"
#: mailu/ui/templates/user/create.html:15
msgid "General"
-msgstr ""
+msgstr "כללי"
#: mailu/ui/templates/user/create.html:22
msgid "Features and quotas"
-msgstr ""
+msgstr "יכולות ומיכסות"
#: mailu/ui/templates/user/edit.html:4
msgid "Edit user"
-msgstr ""
+msgstr "עריכת משתמש"
#: mailu/ui/templates/user/forward.html:4
msgid "Forward emails"
-msgstr ""
+msgstr "העברת הודעות"
#: mailu/ui/templates/user/list.html:4
msgid "User list"
-msgstr ""
+msgstr "רשימת משתמשים"
#: mailu/ui/templates/user/list.html:12
msgid "Add user"
-msgstr ""
+msgstr "הוספת משתמש"
#: mailu/ui/templates/user/list.html:19 mailu/ui/templates/user/settings.html:4
msgid "User settings"
-msgstr ""
+msgstr "הגדרות משתמש"
#: mailu/ui/templates/user/list.html:21
msgid "Features"
-msgstr ""
+msgstr "יכולות"
#: mailu/ui/templates/user/password.html:4
msgid "Password update"
-msgstr ""
+msgstr "עדכון סיסמה"
#: mailu/ui/templates/user/reply.html:4
msgid "Automatic reply"
-msgstr ""
+msgstr "מענה אוטומטי"
#: mailu/ui/templates/user/settings.html:22
msgid "Auto-forward"
-msgstr ""
+msgstr "העברה אוטומטית"
#: mailu/ui/templates/user/signup_domain.html:8
msgid "pick a domain for the new account"
-msgstr ""
+msgstr "נא לבחור שם תחום לחשבון החדש"
#: mailu/ui/templates/user/signup_domain.html:14
msgid "Domain"
-msgstr ""
+msgstr "שם תחום"
#: mailu/ui/templates/user/signup_domain.html:15
msgid "Available slots"
-msgstr ""
+msgstr "מקומות פנויים"
From 1aeff3b67c857211ffa26ad370748a4d24f36194 Mon Sep 17 00:00:00 2001
From: Yaron Shahrabani
Date: Wed, 21 Jul 2021 10:18:15 +0300
Subject: [PATCH 02/81] Added a change note
As per https://github.com/Mailu/Mailu/pull/1873#issuecomment-882271176
---
towncrier/newsfragments/1873.feature | 1 +
1 file changed, 1 insertion(+)
create mode 100644 towncrier/newsfragments/1873.feature
diff --git a/towncrier/newsfragments/1873.feature b/towncrier/newsfragments/1873.feature
new file mode 100644
index 00000000..dacf117e
--- /dev/null
+++ b/towncrier/newsfragments/1873.feature
@@ -0,0 +1 @@
+ Hebrew translation has been completed.
From 3471ebb2146c210212dc0a7a1d7ed62eb7242ebb Mon Sep 17 00:00:00 2001
From: Florent Daigniere
Date: Mon, 2 Aug 2021 19:18:42 +0200
Subject: [PATCH 03/81] Allow specific users to send email from any address
---
core/admin/mailu/configuration.py | 1 +
core/admin/mailu/internal/views/postfix.py | 5 ++++-
docs/configuration.rst | 2 ++
towncrier/newsfragments/1096.feature | 1 +
4 files changed, 8 insertions(+), 1 deletion(-)
create mode 100644 towncrier/newsfragments/1096.feature
diff --git a/core/admin/mailu/configuration.py b/core/admin/mailu/configuration.py
index 3d1b4fb5..3dd874f3 100644
--- a/core/admin/mailu/configuration.py
+++ b/core/admin/mailu/configuration.py
@@ -32,6 +32,7 @@ DEFAULT_CONFIG = {
'DOMAIN': 'mailu.io',
'HOSTNAMES': 'mail.mailu.io,alternative.mailu.io,yetanother.mailu.io',
'POSTMASTER': 'postmaster',
+ 'WILDCARD_SENDERS': '',
'TLS_FLAVOR': 'cert',
'INBOUND_TLS_ENFORCE': False,
'AUTH_RATELIMIT': '10/minute;1000/hour',
diff --git a/core/admin/mailu/internal/views/postfix.py b/core/admin/mailu/internal/views/postfix.py
index c358c37f..d1b53856 100644
--- a/core/admin/mailu/internal/views/postfix.py
+++ b/core/admin/mailu/internal/views/postfix.py
@@ -133,10 +133,13 @@ def postfix_sender_map(sender):
@internal.route("/postfix/sender/login/")
def postfix_sender_login(sender):
+ has_wildcard_senders = bool(flask.current_app.config["WILDCARD_SENDERS"])
+ wildcard_senders = flask.current_app.config["WILDCARD_SENDERS"].lower().split(',') if has_wildcard_senders else []
localpart, domain_name = models.Email.resolve_domain(sender)
if localpart is None:
- return flask.abort(404)
+ return flask.jsonify(",".join(wildcard_senders)) if has_wildcard_senders else flask.abort(404)
destination = models.Email.resolve_destination(localpart, domain_name, True)
+ destination = [*destination, *wildcard_senders] if destination else [*wildcard_senders]
return flask.jsonify(",".join(destination)) if destination else flask.abort(404)
diff --git a/docs/configuration.rst b/docs/configuration.rst
index 16ea23c3..34b14868 100644
--- a/docs/configuration.rst
+++ b/docs/configuration.rst
@@ -37,6 +37,8 @@ The ``POSTMASTER`` is the local part of the postmaster email address. It is
recommended to setup a generic value and later configure a mail alias for that
address.
+The ``WILDCARD_SENDERS`` setting is a comma delimited list of user email addresses that are allowed to send emails from any address (spoofing the sender).
+
The ``AUTH_RATELIMIT`` holds a security setting for fighting attackers that
try to guess user passwords. The value is the limit of failed authentication attempts
that a single IP address can perform against IMAP, POP and SMTP authentication endpoints.
diff --git a/towncrier/newsfragments/1096.feature b/towncrier/newsfragments/1096.feature
new file mode 100644
index 00000000..f3abd3dc
--- /dev/null
+++ b/towncrier/newsfragments/1096.feature
@@ -0,0 +1 @@
+Allow specific users to send emails from any address using the WILDCARD_SENDERS setting
From 1438253a069da3b10831ef89dc119177f16f5216 Mon Sep 17 00:00:00 2001
From: Florent Daigniere
Date: Sun, 8 Aug 2021 09:21:14 +0200
Subject: [PATCH 04/81] Ratelimit outgoing emails per user
---
core/admin/mailu/configuration.py | 1 +
core/admin/mailu/internal/views/postfix.py | 10 ++++++++--
core/admin/mailu/models.py | 8 +++++++-
core/admin/mailu/ui/templates/user/list.html | 5 ++++-
core/postfix/conf/main.cf | 1 +
core/postfix/start.py | 3 ++-
setup/flavors/compose/mailu.env | 5 +++++
setup/templates/steps/config.html | 7 +++++++
towncrier/newsfragments/1031.feature | 1 +
9 files changed, 36 insertions(+), 5 deletions(-)
create mode 100644 towncrier/newsfragments/1031.feature
diff --git a/core/admin/mailu/configuration.py b/core/admin/mailu/configuration.py
index d2d34d88..50733d52 100644
--- a/core/admin/mailu/configuration.py
+++ b/core/admin/mailu/configuration.py
@@ -46,6 +46,7 @@ DEFAULT_CONFIG = {
'DKIM_SELECTOR': 'dkim',
'DKIM_PATH': '/dkim/{domain}.{selector}.key',
'DEFAULT_QUOTA': 1000000000,
+ 'MESSAGE_RATELIMIT': '100/hour',
# Web settings
'SITENAME': 'Mailu',
'WEBSITE': 'https://mailu.io',
diff --git a/core/admin/mailu/internal/views/postfix.py b/core/admin/mailu/internal/views/postfix.py
index c358c37f..06918c61 100644
--- a/core/admin/mailu/internal/views/postfix.py
+++ b/core/admin/mailu/internal/views/postfix.py
@@ -1,5 +1,6 @@
-from mailu import models
+from mailu import models, utils
from mailu.internal import internal
+from flask import current_app as app
import flask
import idna
@@ -31,7 +32,6 @@ def postfix_alias_map(alias):
destination = models.Email.resolve_destination(localpart, domain_name)
return flask.jsonify(",".join(destination)) if destination else flask.abort(404)
-
@internal.route("/postfix/transport/")
def postfix_transport(email):
if email == '*' or re.match("(^|.*@)\[.*\]$", email):
@@ -139,6 +139,12 @@ def postfix_sender_login(sender):
destination = models.Email.resolve_destination(localpart, domain_name, True)
return flask.jsonify(",".join(destination)) if destination else flask.abort(404)
+@internal.route("/postfix/sender/rate/")
+def postfix_sender_rate(sender):
+ """ Rate limit outbound emails per sender login
+ """
+ user = models.User.get(sender) or flask.abort(404)
+ return flask.abort(404) if user.sender_limiter.hit() else flask.jsonify("REJECT")
@internal.route("/postfix/sender/access/")
def postfix_sender_access(sender):
diff --git a/core/admin/mailu/models.py b/core/admin/mailu/models.py
index 3a299786..5760c27f 100644
--- a/core/admin/mailu/models.py
+++ b/core/admin/mailu/models.py
@@ -27,7 +27,7 @@ from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.inspection import inspect
from werkzeug.utils import cached_property
-from mailu import dkim
+from mailu import dkim, utils
db = flask_sqlalchemy.SQLAlchemy()
@@ -501,6 +501,12 @@ class User(Base, Email):
self.reply_enddate > now
)
+ @property
+ def sender_limiter(self):
+ return utils.limiter.get_limiter(
+ app.config["MESSAGE_RATELIMIT"], "sender", self.email
+ )
+
@classmethod
def get_password_context(cls):
""" create password context for hashing and verification
diff --git a/core/admin/mailu/ui/templates/user/list.html b/core/admin/mailu/ui/templates/user/list.html
index 2aff662f..746afd45 100644
--- a/core/admin/mailu/ui/templates/user/list.html
+++ b/core/admin/mailu/ui/templates/user/list.html
@@ -19,7 +19,8 @@
{% trans %}User settings{% endtrans %} |
{% trans %}Email{% endtrans %} |
{% trans %}Features{% endtrans %} |
- {% trans %}Quota{% endtrans %} |
+ {% trans %}Storage Quota{% endtrans %} |
+ {% trans %}Sending Quota{% endtrans %} |
{% trans %}Comment{% endtrans %} |
{% trans %}Created{% endtrans %} |
{% trans %}Last edit{% endtrans %} |
@@ -41,6 +42,8 @@
{% if user.enable_pop %}pop3{% endif %}
{{ user.quota_bytes_used | filesizeformat }} / {{ (user.quota_bytes | filesizeformat) if user.quota_bytes else '∞' }} |
+ {% set limiter = user.sender_limiter %}
+ {{ limiter.get_window_stats()[1] }} / {{ limiter.limit }} |
{{ user.comment or '-' }} |
{{ user.created_at }} |
{{ user.updated_at or '' }} |
diff --git a/core/postfix/conf/main.cf b/core/postfix/conf/main.cf
index 8f35f609..6f5a20b8 100644
--- a/core/postfix/conf/main.cf
+++ b/core/postfix/conf/main.cf
@@ -100,6 +100,7 @@ smtpd_sender_login_maps = ${podop}senderlogin
smtpd_helo_required = yes
smtpd_client_restrictions =
+ check_sasl_access ${podop}senderrate,
permit_mynetworks,
check_sender_access ${podop}senderaccess,
reject_non_fqdn_sender,
diff --git a/core/postfix/start.py b/core/postfix/start.py
index e0c781b7..139616b2 100755
--- a/core/postfix/start.py
+++ b/core/postfix/start.py
@@ -25,7 +25,8 @@ def start_podop():
("recipientmap", "url", url + "recipient/map/§"),
("sendermap", "url", url + "sender/map/§"),
("senderaccess", "url", url + "sender/access/§"),
- ("senderlogin", "url", url + "sender/login/§")
+ ("senderlogin", "url", url + "sender/login/§"),
+ ("senderrate", "url", url + "sender/rate/§")
])
def is_valid_postconf_line(line):
diff --git a/setup/flavors/compose/mailu.env b/setup/flavors/compose/mailu.env
index d45f5517..52f4ee04 100644
--- a/setup/flavors/compose/mailu.env
+++ b/setup/flavors/compose/mailu.env
@@ -62,6 +62,11 @@ ANTIVIRUS={{ antivirus_enabled or 'none' }}
# Max attachment size will be 33% smaller
MESSAGE_SIZE_LIMIT={{ message_size_limit or '50000000' }}
+# Message rate limit (per user)
+{% if message_ratelimit_pd > '0' %}
+MESSAGE_RATELIMIT={{ message_ratelimit_pd }}/day
+{% endif %}
+
# Networks granted relay permissions
# Use this with care, all hosts in this networks will be able to send mail without authentication!
RELAYNETS=
diff --git a/setup/templates/steps/config.html b/setup/templates/steps/config.html
index 72b83915..87410fca 100644
--- a/setup/templates/steps/config.html
+++ b/setup/templates/steps/config.html
@@ -55,6 +55,13 @@ Or in plain english: if receivers start to classify your mail as spam, this post
+
+