modoboa 2.4.11__py3-none-any.whl → 2.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. modoboa/admin/api/v2/serializers.py +14 -0
  2. modoboa/amavis/__init__.py +3 -0
  3. modoboa/amavis/app_settings.py +276 -0
  4. modoboa/amavis/apps.py +18 -0
  5. modoboa/amavis/checks/__init__.py +2 -0
  6. modoboa/amavis/checks/settings_checks.py +59 -0
  7. modoboa/amavis/dbrouter.py +35 -0
  8. modoboa/amavis/factories.py +164 -0
  9. modoboa/amavis/handlers.py +146 -0
  10. modoboa/amavis/lib.py +381 -0
  11. modoboa/amavis/management/__init__.py +0 -0
  12. modoboa/amavis/management/commands/__init__.py +0 -0
  13. modoboa/amavis/management/commands/amnotify.py +99 -0
  14. modoboa/amavis/management/commands/qcleanup.py +84 -0
  15. modoboa/amavis/migrations/0001_initial.py +340 -0
  16. modoboa/amavis/migrations/__init__.py +0 -0
  17. modoboa/amavis/models.py +226 -0
  18. modoboa/amavis/serializers.py +139 -0
  19. modoboa/amavis/sql_connector.py +240 -0
  20. modoboa/amavis/sql_email.py +66 -0
  21. modoboa/amavis/tasks.py +33 -0
  22. modoboa/amavis/templates/amavis/notifications/pending_requests.html +16 -0
  23. modoboa/amavis/tests/__init__.py +0 -0
  24. modoboa/amavis/tests/sa-learn +3 -0
  25. modoboa/amavis/tests/sample_messages/quarantined-input.txt +80 -0
  26. modoboa/amavis/tests/sample_messages/quarantined-output-plain_nolinks.txt +17 -0
  27. modoboa/amavis/tests/spamc +3 -0
  28. modoboa/amavis/tests/test_checks.py +25 -0
  29. modoboa/amavis/tests/test_handlers.py +214 -0
  30. modoboa/amavis/tests/test_lib.py +90 -0
  31. modoboa/amavis/tests/test_management_commands.py +45 -0
  32. modoboa/amavis/tests/test_sql_email.py +67 -0
  33. modoboa/amavis/tests/test_utils.py +19 -0
  34. modoboa/amavis/tests/test_viewsets.py +319 -0
  35. modoboa/amavis/urls.py +11 -0
  36. modoboa/amavis/utils.py +105 -0
  37. modoboa/amavis/viewsets.py +265 -0
  38. modoboa/core/api/v1/serializers.py +7 -5
  39. modoboa/core/api/v2/serializers.py +4 -2
  40. modoboa/core/api/v2/tests.py +16 -4
  41. modoboa/core/api/v2/urls.py +5 -5
  42. modoboa/core/api/v2/views.py +6 -2
  43. modoboa/core/api/v2/viewsets.py +24 -3
  44. modoboa/core/commands/deploy.py +3 -0
  45. modoboa/core/commands/templates/settings.py.tpl +12 -11
  46. modoboa/core/handlers.py +6 -2
  47. modoboa/core/management/commands/add_allowed_hosts.py +33 -0
  48. modoboa/core/management/commands/load_initial_data.py +10 -0
  49. modoboa/core/migrations/0025_rename_user_email_is_active_core_user_email_c0c03f_idx.py +23 -5
  50. modoboa/core/tests/test_core.py +24 -0
  51. modoboa/core/utils.py +3 -0
  52. modoboa/frontend_dist/assets/AccountAliasForm-C0oHHyZL.js +1 -0
  53. modoboa/frontend_dist/assets/AccountEditView-lgSJ2Se8.js +1 -0
  54. modoboa/frontend_dist/assets/AccountLayout-U386K8zy.js +1 -0
  55. modoboa/frontend_dist/assets/AccountPasswordSubForm-YsaE_cDx.js +1 -0
  56. modoboa/frontend_dist/assets/AccountView-1jfKFDwb.js +1 -0
  57. modoboa/frontend_dist/assets/AddressBook-CwN64Zls.js +1 -0
  58. modoboa/frontend_dist/assets/AdminLayout-Cxm1lggg.js +1 -0
  59. modoboa/frontend_dist/assets/AlarmsView-9yKGbmkC.css +1 -0
  60. modoboa/frontend_dist/assets/AlarmsView-Bcjsicac.js +1 -0
  61. modoboa/frontend_dist/assets/AliasEditView-k3rVt1tG.js +1 -0
  62. modoboa/frontend_dist/assets/{AliasRecipientForm-IOae6sjF.js → AliasRecipientForm-IehUzKok.js} +1 -1
  63. modoboa/frontend_dist/assets/AliasView-DMzA10eD.js +1 -0
  64. modoboa/frontend_dist/assets/AuditTrailView-5dnGX5El.js +1 -0
  65. modoboa/frontend_dist/assets/CalendarView-DZONeDA9.js +1 -0
  66. modoboa/frontend_dist/assets/{ChoiceField-DJ_c78Cm.js → ChoiceField-DnwXRkht.js} +1 -1
  67. modoboa/frontend_dist/assets/ComposeEmailForm-kghmfNuE.js +1 -0
  68. modoboa/frontend_dist/assets/ComposeEmailView-DLv3wk1k.js +1 -0
  69. modoboa/frontend_dist/assets/ConfirmDialog-CcPrCKuI.js +1 -0
  70. modoboa/frontend_dist/assets/{ConnectedLayout-Dvwmicnc.css → ConnectedLayout-Bxh21hcH.css} +1 -1
  71. modoboa/frontend_dist/assets/ConnectedLayout-CWlBK7Hf.js +1 -0
  72. modoboa/frontend_dist/assets/CreationForm-CW4lxnPg.js +1 -0
  73. modoboa/frontend_dist/assets/DashboardView-DXVZMbMo.js +1 -0
  74. modoboa/frontend_dist/assets/DomainAdminList-C3jcDDc3.js +1 -0
  75. modoboa/frontend_dist/assets/DomainEditView-ph8AaElX.js +1 -0
  76. modoboa/frontend_dist/assets/{DomainTransportForm-C2xo0Yd7.js → DomainTransportForm-NCz6Bl-h.js} +1 -1
  77. modoboa/frontend_dist/assets/DomainView-BgMSSuU-.js +5 -0
  78. modoboa/frontend_dist/assets/{DomainView-BDKoBFYr.css → DomainView-CCLYXPHx.css} +1 -1
  79. modoboa/frontend_dist/assets/DomainsView-CEEU9btK.js +1 -0
  80. modoboa/frontend_dist/assets/DomainsView-DZ-ss9bI.css +1 -0
  81. modoboa/frontend_dist/assets/EmailField-DeqDPm5j.js +1 -0
  82. modoboa/frontend_dist/assets/EmailView-DczVhVO0.js +1 -0
  83. modoboa/frontend_dist/assets/EmptyLayout-BXgcfMLH.js +1 -0
  84. modoboa/frontend_dist/assets/FiltersView-nJj_gSCx.js +1 -0
  85. modoboa/frontend_dist/assets/ForwardEmailView-Bgv3JQb6.js +1 -0
  86. modoboa/frontend_dist/assets/{HtmlEditor-CJ9umKeO.js → HtmlEditor-BWRdelVw.js} +1 -1
  87. modoboa/frontend_dist/assets/{IdentitiesView-0ziuQ5s-.css → IdentitiesView-DPrrRMS5.css} +1 -1
  88. modoboa/frontend_dist/assets/IdentitiesView-Dld9IloZ.js +1 -0
  89. modoboa/frontend_dist/assets/InformationView-BBWKSX8D.js +1 -0
  90. modoboa/frontend_dist/assets/InformationView-C9vvvQhJ.css +1 -0
  91. modoboa/frontend_dist/assets/{LoadingData-CYwX3Jpn.js → LoadingData-G57nJ_JV.js} +1 -1
  92. modoboa/frontend_dist/assets/{LoginCallbackView-E01qkKn0.js → LoginCallbackView-DjyE2SG_.js} +1 -1
  93. modoboa/frontend_dist/assets/{LoginView-Cy4uFV9h.js → LoginView-CqCCXYLo.js} +1 -1
  94. modoboa/frontend_dist/assets/{MailboxView-B-aI4XBq.css → MailboxView-CfStlWhk.css} +1 -1
  95. modoboa/frontend_dist/assets/MailboxView-DRrs9eLO.js +1 -0
  96. modoboa/frontend_dist/assets/MenuItems-BqIZW5av.js +1 -0
  97. modoboa/frontend_dist/assets/MessageView-D_6tx_gd.js +1 -0
  98. modoboa/frontend_dist/assets/MessagesView-BH7JIR03.js +1 -0
  99. modoboa/frontend_dist/assets/MigrationsView-Cv_So9T-.js +1 -0
  100. modoboa/frontend_dist/assets/{ParametersForm-BZM0QSvg.js → ParametersForm-3qXttTuQ.js} +1 -1
  101. modoboa/frontend_dist/assets/ParametersView-3Ns04cpQ.js +1 -0
  102. modoboa/frontend_dist/assets/ParametersView-B5B5Dt6K.js +1 -0
  103. modoboa/frontend_dist/assets/ProviderEditView-zh7CY832.js +1 -0
  104. modoboa/frontend_dist/assets/ProviderGeneralForm-BQU7t3ma.js +1 -0
  105. modoboa/frontend_dist/assets/ProvidersView-CoF_ZkZA.js +1 -0
  106. modoboa/frontend_dist/assets/QuarantineLayout-CYBsrbJM.js +1 -0
  107. modoboa/frontend_dist/assets/QuarantineView-D4gOE4EQ.css +1 -0
  108. modoboa/frontend_dist/assets/QuarantineView-DNvpoycb.js +1 -0
  109. modoboa/frontend_dist/assets/ReplyEmailView-D1XTcglu.js +1 -0
  110. modoboa/frontend_dist/assets/ResourcesForm-BW8rUGgZ.js +1 -0
  111. modoboa/frontend_dist/assets/SelfServiceLayout-DfDHiYeX.js +1 -0
  112. modoboa/frontend_dist/assets/{SettingsView-BxLJBFY0.js → SettingsView-gQiJ2NVb.js} +2 -2
  113. modoboa/frontend_dist/assets/StatisticsView-DYalet_q.js +1 -0
  114. modoboa/frontend_dist/assets/TimeSerieChart-BZ2htbFk.js +1 -0
  115. modoboa/frontend_dist/assets/UserLayout-zUtHi-z-.js +1 -0
  116. modoboa/frontend_dist/assets/VAlert-4r6LxKtg.js +1 -0
  117. modoboa/frontend_dist/assets/VApp-CX_C7AUN.js +1 -0
  118. modoboa/frontend_dist/assets/VAutocomplete-DNKmBvyZ.js +1 -0
  119. modoboa/frontend_dist/assets/VAvatar-DbuoZWmf.js +1 -0
  120. modoboa/frontend_dist/assets/VBadge-BQrRJ9S0.css +1 -0
  121. modoboa/frontend_dist/assets/VBadge-Bv2nvUmC.js +1 -0
  122. modoboa/frontend_dist/assets/VCard-DzjUT5OP.js +1 -0
  123. modoboa/frontend_dist/assets/VCheckbox-dr7UFjl4.js +1 -0
  124. modoboa/frontend_dist/assets/{VCheckboxBtn-Dt810gWf.js → VCheckboxBtn-CpFdBnTv.js} +1 -1
  125. modoboa/frontend_dist/assets/VChip-CaQvfmkw.js +1 -0
  126. modoboa/frontend_dist/assets/VColorPicker-ByGpCW5O.js +1 -0
  127. modoboa/frontend_dist/assets/{VContainer-DvTbsotR.js → VContainer-74Dnn8Ux.js} +1 -1
  128. modoboa/frontend_dist/assets/VDataTable-CL7yHvG7.js +1 -0
  129. modoboa/frontend_dist/assets/VDataTableServer-BqvNcIdw.js +1 -0
  130. modoboa/frontend_dist/assets/VDataTableVirtual--KsOP8i6.js +1 -0
  131. modoboa/frontend_dist/assets/{VDialog-Bk6EWNhz.js → VDialog-DmTGCGR0.js} +1 -1
  132. modoboa/frontend_dist/assets/VExpansionPanels-B7sSTCwd.js +1 -0
  133. modoboa/frontend_dist/assets/VFileInput-SULIc6F3.js +1 -0
  134. modoboa/frontend_dist/assets/VForm-DsRLc-sa.js +1 -0
  135. modoboa/frontend_dist/assets/VInput-CcxkaOXT.css +1 -0
  136. modoboa/frontend_dist/assets/VInput-DVKUObZe.js +1 -0
  137. modoboa/frontend_dist/assets/VMenu-nv0XOgg0.js +1 -0
  138. modoboa/frontend_dist/assets/VPicker-DnDSWJHJ.js +1 -0
  139. modoboa/frontend_dist/assets/VProgressCircular-qK6p5X_Y.js +1 -0
  140. modoboa/frontend_dist/assets/VRadioGroup-CbiPLy0t.js +1 -0
  141. modoboa/frontend_dist/assets/{VRow-BF35mT1S.js → VRow-DJ0NB63-.js} +1 -1
  142. modoboa/frontend_dist/assets/VSelect-CxCFMHyF.js +1 -0
  143. modoboa/frontend_dist/assets/VSelectionControl-C-6A4us5.js +1 -0
  144. modoboa/frontend_dist/assets/VSheet-DI6SxLnG.js +1 -0
  145. modoboa/frontend_dist/assets/VSpacer-CoJVmx8k.js +1 -0
  146. modoboa/frontend_dist/assets/VSwitch-DPnjPQuU.js +1 -0
  147. modoboa/frontend_dist/assets/VTable-ldTxgQPW.js +1 -0
  148. modoboa/frontend_dist/assets/VTabs-aS8WSL9I.js +1 -0
  149. modoboa/frontend_dist/assets/VTextField-BzBVKKob.css +1 -0
  150. modoboa/frontend_dist/assets/VTextField-DKbr4H5w.js +1 -0
  151. modoboa/frontend_dist/assets/VTextarea-BttkFsM4.js +1 -0
  152. modoboa/frontend_dist/assets/VToolbar-BxX3W2kR.js +1 -0
  153. modoboa/frontend_dist/assets/VWindowItem-Cvqvdegd.js +1 -0
  154. modoboa/frontend_dist/assets/WebmailLayout-BT2k6U7q.js +1 -0
  155. modoboa/frontend_dist/assets/accounts-CC2F0a0c.js +1 -0
  156. modoboa/frontend_dist/assets/{admin-o-HRGnmT.js → admin-CHCHFGI6.js} +1 -1
  157. modoboa/frontend_dist/assets/{aliases-DDVeehyg.js → aliases-C9bUD4Ws.js} +1 -1
  158. modoboa/frontend_dist/assets/amavis-BhzV4rgf.js +1 -0
  159. modoboa/frontend_dist/assets/amavis-DCVJxuui.js +1 -0
  160. modoboa/frontend_dist/assets/{contacts-C84DY-Q1.js → contacts-Dxz6eWpf.js} +1 -1
  161. modoboa/frontend_dist/assets/{domains-Bgn4ixHL.js → domains-C2cornvL.js} +1 -1
  162. modoboa/frontend_dist/assets/{domains.store-DTE-V7Y1.js → domains.store-BLKRipG8.js} +1 -1
  163. modoboa/frontend_dist/assets/{filter-CnffiQAW.js → filter-rmxrcjKk.js} +1 -1
  164. modoboa/frontend_dist/assets/forwardRefs-CpzzjgpX.js +1 -0
  165. modoboa/frontend_dist/assets/global.store-DndbMXYb.js +1 -0
  166. modoboa/frontend_dist/assets/{importExport-BlQYb0NO.js → importExport-C3uqrcok.js} +1 -1
  167. modoboa/frontend_dist/assets/index-LhNzkzAh.js +984 -0
  168. modoboa/frontend_dist/assets/layout-DbjDe3Wl.js +1 -0
  169. modoboa/frontend_dist/assets/{layout.store-DkjrAoXt.js → layout.store-Vq5mvIp7.js} +1 -1
  170. modoboa/frontend_dist/assets/{logos-q8SEyAa4.js → logos-Bvcy0usu.js} +1 -1
  171. modoboa/frontend_dist/assets/{logs-B7IJ7LBa.js → logs-BuItINky.js} +1 -1
  172. modoboa/frontend_dist/assets/{parameters-A6iBEYQq.js → parameters-C8IYEP7q.js} +1 -1
  173. modoboa/frontend_dist/assets/{parameters.store-BiXS4_6w.js → parameters.store-1cwSP2JP.js} +1 -1
  174. modoboa/frontend_dist/assets/permissions-DQjAcO9S.js +1 -0
  175. modoboa/frontend_dist/assets/{ssrBoot-AzTdjPjk.js → ssrBoot-BxIQ9ccA.js} +1 -1
  176. modoboa/frontend_dist/assets/{tag-BnSYRTcD.js → tag-3cfI1_f7.js} +1 -1
  177. modoboa/frontend_dist/assets/transports-D4Jk4-AP.js +1 -0
  178. modoboa/frontend_dist/assets/{webmail-CSH_3l6R.js → webmail-B2IUjaxM.js} +1 -1
  179. modoboa/frontend_dist/index.html +1 -1
  180. modoboa/lib/email_utils.py +2 -2
  181. modoboa/lib/permissions.py +7 -0
  182. modoboa/lib/test_runners.py +29 -0
  183. modoboa/lib/tests/__init__.py +5 -1
  184. modoboa/locale/br/LC_MESSAGES/django.po +87 -75
  185. modoboa/locale/cs/LC_MESSAGES/django.po +82 -74
  186. modoboa/locale/cs_CZ/LC_MESSAGES/django.po +145 -121
  187. modoboa/locale/de/LC_MESSAGES/django.mo +0 -0
  188. modoboa/locale/de/LC_MESSAGES/django.po +339 -651
  189. modoboa/locale/de_DE/LC_MESSAGES/django.po +87 -75
  190. modoboa/locale/el_GR/LC_MESSAGES/django.po +160 -135
  191. modoboa/locale/en/LC_MESSAGES/django.po +82 -74
  192. modoboa/locale/es/LC_MESSAGES/django.po +158 -131
  193. modoboa/locale/es_MX/LC_MESSAGES/django.po +82 -74
  194. modoboa/locale/fi/LC_MESSAGES/django.po +87 -75
  195. modoboa/locale/fr/LC_MESSAGES/django.mo +0 -0
  196. modoboa/locale/fr/LC_MESSAGES/django.po +469 -201
  197. modoboa/locale/hu/LC_MESSAGES/django.po +82 -74
  198. modoboa/locale/it/LC_MESSAGES/django.mo +0 -0
  199. modoboa/locale/it/LC_MESSAGES/django.po +148 -122
  200. modoboa/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
  201. modoboa/locale/ja_JP/LC_MESSAGES/django.po +80 -72
  202. modoboa/locale/ka/LC_MESSAGES/django.po +82 -74
  203. modoboa/locale/nl_NL/LC_MESSAGES/django.po +160 -132
  204. modoboa/locale/no/LC_MESSAGES/django.po +82 -74
  205. modoboa/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  206. modoboa/locale/pl_PL/LC_MESSAGES/django.po +172 -149
  207. modoboa/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  208. modoboa/locale/pt_BR/LC_MESSAGES/django.po +172 -144
  209. modoboa/locale/pt_PT/LC_MESSAGES/django.po +135 -112
  210. modoboa/locale/ro_RO/LC_MESSAGES/django.po +87 -75
  211. modoboa/locale/ru/LC_MESSAGES/django.po +142 -118
  212. modoboa/locale/si/LC_MESSAGES/django.po +82 -74
  213. modoboa/locale/sk/LC_MESSAGES/django.po +82 -74
  214. modoboa/locale/sk_SK/LC_MESSAGES/django.po +84 -76
  215. modoboa/locale/sl_SI/LC_MESSAGES/django.po +90 -76
  216. modoboa/locale/sv/LC_MESSAGES/django.mo +0 -0
  217. modoboa/locale/sv/LC_MESSAGES/django.po +172 -139
  218. modoboa/locale/tr/LC_MESSAGES/django.po +87 -75
  219. modoboa/locale/tr_TR/LC_MESSAGES/django.po +84 -74
  220. modoboa/locale/uk/LC_MESSAGES/django.po +82 -74
  221. modoboa/locale/zh/LC_MESSAGES/django.po +82 -74
  222. modoboa/locale/zh_CN/LC_MESSAGES/django.po +82 -74
  223. modoboa/locale/zh_TW/LC_MESSAGES/django.po +87 -75
  224. modoboa/parameters/api/v2/tests.py +2 -2
  225. modoboa/parameters/api/v2/viewsets.py +2 -0
  226. modoboa/policyd/tests.py +2 -0
  227. modoboa/urls_api_v2.py +6 -0
  228. modoboa/webmail/lib/imaputils.py +2 -2
  229. {modoboa-2.4.11.dist-info → modoboa-2.5.1.dist-info}/METADATA +6 -4
  230. {modoboa-2.4.11.dist-info → modoboa-2.5.1.dist-info}/RECORD +235 -185
  231. modoboa/frontend_dist/assets/AccountAliasForm-BV6KvTu6.js +0 -1
  232. modoboa/frontend_dist/assets/AccountEditView-DDOFyfBD.js +0 -1
  233. modoboa/frontend_dist/assets/AccountLayout-rX51xgxT.js +0 -1
  234. modoboa/frontend_dist/assets/AccountPasswordSubForm-D9S6LaeH.js +0 -1
  235. modoboa/frontend_dist/assets/AccountView-cmvaZNq3.js +0 -1
  236. modoboa/frontend_dist/assets/AddressBook-DCJxL8SU.js +0 -1
  237. modoboa/frontend_dist/assets/AdminLayout-r0wfG2lO.js +0 -1
  238. modoboa/frontend_dist/assets/AlarmsView-Bheey-gp.css +0 -1
  239. modoboa/frontend_dist/assets/AlarmsView-C0bqC4PA.js +0 -1
  240. modoboa/frontend_dist/assets/AliasEditView-DVoWoCGY.js +0 -1
  241. modoboa/frontend_dist/assets/AliasView-DrONZXOh.js +0 -1
  242. modoboa/frontend_dist/assets/AuditTrailView-OTkoZaMU.js +0 -1
  243. modoboa/frontend_dist/assets/CalendarView-CqF4_Ui9.js +0 -1
  244. modoboa/frontend_dist/assets/ComposeEmailForm-DO5_GB3e.js +0 -1
  245. modoboa/frontend_dist/assets/ComposeEmailView-A91HCBsN.js +0 -1
  246. modoboa/frontend_dist/assets/ConfirmDialog-BBcgdAnO.js +0 -1
  247. modoboa/frontend_dist/assets/ConnectedLayout-1oRW-Rql.js +0 -1
  248. modoboa/frontend_dist/assets/CreationForm-71YJbjsA.js +0 -1
  249. modoboa/frontend_dist/assets/DashboardView-CdLpSfUl.js +0 -1
  250. modoboa/frontend_dist/assets/DomainAdminList-BjC4KsqI.js +0 -1
  251. modoboa/frontend_dist/assets/DomainEditView-CQjKwYxl.js +0 -1
  252. modoboa/frontend_dist/assets/DomainView-BhhuZI_N.js +0 -5
  253. modoboa/frontend_dist/assets/DomainsView-Cft4BP8Z.js +0 -1
  254. modoboa/frontend_dist/assets/DomainsView-DasJ0NdZ.css +0 -1
  255. modoboa/frontend_dist/assets/EmailField-C8umy0EU.js +0 -1
  256. modoboa/frontend_dist/assets/EmailView-ki7uEQPD.js +0 -1
  257. modoboa/frontend_dist/assets/EmptyLayout-DaA1XH9n.js +0 -1
  258. modoboa/frontend_dist/assets/FiltersView-FYFZxG4B.js +0 -1
  259. modoboa/frontend_dist/assets/ForwardEmailView-cUbnSYCF.js +0 -1
  260. modoboa/frontend_dist/assets/IdentitiesView-njNo8N5n.js +0 -1
  261. modoboa/frontend_dist/assets/InformationView-D1h38POt.js +0 -1
  262. modoboa/frontend_dist/assets/InformationView-U5Ww-Sx1.css +0 -1
  263. modoboa/frontend_dist/assets/MailboxView-IlrLWm_H.js +0 -1
  264. modoboa/frontend_dist/assets/MenuItems-BAtHWzAE.js +0 -1
  265. modoboa/frontend_dist/assets/MessagesView-OSpjixFq.js +0 -1
  266. modoboa/frontend_dist/assets/MigrationsView-DKNOsVzF.js +0 -1
  267. modoboa/frontend_dist/assets/ParametersView-C4bXASiq.js +0 -1
  268. modoboa/frontend_dist/assets/ParametersView-CYXgNmc1.js +0 -1
  269. modoboa/frontend_dist/assets/ProviderEditView-CyxCWTST.js +0 -1
  270. modoboa/frontend_dist/assets/ProviderGeneralForm-BYPjNHqB.js +0 -1
  271. modoboa/frontend_dist/assets/ProvidersView-CxrMkRyk.js +0 -1
  272. modoboa/frontend_dist/assets/ReplyEmailView-Dkw9-N26.js +0 -1
  273. modoboa/frontend_dist/assets/ResourcesForm-CuUvrOdY.js +0 -1
  274. modoboa/frontend_dist/assets/StatisticsView-BN7QsZMT.js +0 -1
  275. modoboa/frontend_dist/assets/TimeSerieChart-BMN8BeFZ.js +0 -1
  276. modoboa/frontend_dist/assets/UserLayout-B6-JQg4F.js +0 -1
  277. modoboa/frontend_dist/assets/VAlert-DIQTrRif.js +0 -1
  278. modoboa/frontend_dist/assets/VApp-CpkYA7js.js +0 -1
  279. modoboa/frontend_dist/assets/VAutocomplete-C4IpXyl8.js +0 -1
  280. modoboa/frontend_dist/assets/VAvatar-Lpb-Dion.js +0 -1
  281. modoboa/frontend_dist/assets/VCard-er_isjE_.js +0 -1
  282. modoboa/frontend_dist/assets/VCheckbox-D-u8JXP1.js +0 -1
  283. modoboa/frontend_dist/assets/VChip-B4iSpj8_.js +0 -1
  284. modoboa/frontend_dist/assets/VColorPicker-BAjGDsXv.js +0 -1
  285. modoboa/frontend_dist/assets/VDataTable-4JRjbtgF.js +0 -1
  286. modoboa/frontend_dist/assets/VDataTableServer-tIDT1m3-.js +0 -1
  287. modoboa/frontend_dist/assets/VDataTableVirtual-BlnO18u_.js +0 -1
  288. modoboa/frontend_dist/assets/VExpansionPanels-CwGtXDhr.js +0 -1
  289. modoboa/frontend_dist/assets/VFileInput-D1_7ZkO_.js +0 -1
  290. modoboa/frontend_dist/assets/VForm-DAkW4nfy.js +0 -1
  291. modoboa/frontend_dist/assets/VMenu-BPFJwj2f.js +0 -1
  292. modoboa/frontend_dist/assets/VPicker-CfT82M8N.js +0 -1
  293. modoboa/frontend_dist/assets/VProgressCircular-w75-3ogi.js +0 -1
  294. modoboa/frontend_dist/assets/VRadioGroup-0j6DNC_k.js +0 -1
  295. modoboa/frontend_dist/assets/VSelect-Cs4ARbAS.js +0 -1
  296. modoboa/frontend_dist/assets/VSelectionControl-Dg-XyRRS.js +0 -1
  297. modoboa/frontend_dist/assets/VSheet-Btq_Mu4s.js +0 -1
  298. modoboa/frontend_dist/assets/VSpacer-C7xukQmu.js +0 -1
  299. modoboa/frontend_dist/assets/VSwitch-Cs1NQrmk.js +0 -1
  300. modoboa/frontend_dist/assets/VTable-CNz2SGk4.js +0 -1
  301. modoboa/frontend_dist/assets/VTabs-B1fyVn4M.js +0 -1
  302. modoboa/frontend_dist/assets/VTextField-BdyvgvkG.js +0 -1
  303. modoboa/frontend_dist/assets/VTextField-C-J20yj_.css +0 -1
  304. modoboa/frontend_dist/assets/VTextarea-DnOMpe0Q.js +0 -1
  305. modoboa/frontend_dist/assets/VToolbar-BiCiBxBJ.js +0 -1
  306. modoboa/frontend_dist/assets/VWindowItem-ChWm_kz3.js +0 -1
  307. modoboa/frontend_dist/assets/WebmailLayout-o4uEkp9e.js +0 -1
  308. modoboa/frontend_dist/assets/forwardRefs-Dvjn_Xq4.js +0 -1
  309. modoboa/frontend_dist/assets/global.store-BaiD63EN.js +0 -1
  310. modoboa/frontend_dist/assets/index-I1VDlN4g.js +0 -984
  311. modoboa/frontend_dist/assets/layout-D8ZJPiJ_.js +0 -1
  312. modoboa/frontend_dist/assets/permissions-CITHLHVg.js +0 -1
  313. modoboa/frontend_dist/assets/transports-Dz7c6kIy.js +0 -1
  314. {modoboa-2.4.11.data → modoboa-2.5.1.data}/scripts/modoboa-admin.py +0 -0
  315. {modoboa-2.4.11.dist-info → modoboa-2.5.1.dist-info}/WHEEL +0 -0
  316. {modoboa-2.4.11.dist-info → modoboa-2.5.1.dist-info}/entry_points.txt +0 -0
  317. {modoboa-2.4.11.dist-info → modoboa-2.5.1.dist-info}/licenses/LICENSE +0 -0
  318. {modoboa-2.4.11.dist-info → modoboa-2.5.1.dist-info}/top_level.txt +0 -0
@@ -14,18 +14,15 @@ msgid ""
14
14
  msgstr ""
15
15
  "Project-Id-Version: Modoboa\n"
16
16
  "Report-Msgid-Bugs-To: \n"
17
- "POT-Creation-Date: 2025-07-27 10:50+0200\n"
17
+ "POT-Creation-Date: 2025-08-28 09:41+0200\n"
18
18
  "PO-Revision-Date: 2020-05-06 11:16+0000\n"
19
19
  "Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
20
- "Language-Team: Russian (http://www.transifex.com/tonio/modoboa/language/"
21
- "ru/)\n"
20
+ "Language-Team: Russian (http://www.transifex.com/tonio/modoboa/language/ru/)\n"
22
21
  "Language: ru\n"
23
22
  "MIME-Version: 1.0\n"
24
23
  "Content-Type: text/plain; charset=UTF-8\n"
25
24
  "Content-Transfer-Encoding: 8bit\n"
26
- "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
27
- "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
28
- "(n%100>=11 && n%100<=14)? 2 : 3);\n"
25
+ "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
29
26
 
30
27
  #: admin/api/v1/serializers.py:39
31
28
  msgid ""
@@ -37,76 +34,77 @@ msgstr ""
37
34
  msgid "Default quota in MB applied to mailboxes. A value of 0 means no quota."
38
35
  msgstr ""
39
36
 
40
- #: admin/api/v1/serializers.py:88
37
+ #: admin/api/v1/serializers.py:94
41
38
  #, fuzzy
42
39
  msgid "domain alias with this name already exists"
43
40
  msgstr "Синоним с таким именем уже есть"
44
41
 
45
- #: admin/api/v1/serializers.py:98
42
+ #: admin/api/v1/serializers.py:104
46
43
  msgid "No authorized MX record found for this domain"
47
44
  msgstr ""
48
45
 
49
- #: admin/api/v1/serializers.py:116
46
+ #: admin/api/v1/serializers.py:122
50
47
  msgid "Cannot be greater than domain quota"
51
48
  msgstr ""
52
49
 
53
- #: admin/api/v1/serializers.py:162 admin/api/v1/serializers.py:357
54
- #: admin/api/v2/serializers.py:548 admin/models/alias.py:44
50
+ #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
51
+ #: admin/api/v2/serializers.py:564 admin/models/alias.py:44
55
52
  #, fuzzy
56
53
  #| msgid "Permissions"
57
54
  msgid "Permission denied."
58
55
  msgstr "Права"
59
56
 
60
- #: admin/api/v1/serializers.py:224 admin/api/v2/serializers.py:88
61
- #: admin/api/v2/serializers.py:470 core/api/v2/serializers.py:235
62
- #: core/api/v2/serializers.py:237 core/api/v2/serializers.py:246
57
+ #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
58
+ #: admin/api/v2/serializers.py:486 core/api/v2/serializers.py:255
59
+ #: core/api/v2/serializers.py:257 core/api/v2/serializers.py:266
63
60
  #: transport/backends.py:40
64
61
  msgid "This field is required"
65
62
  msgstr "Это поле обязательно для заполнеия"
66
63
 
67
- #: admin/api/v1/serializers.py:236
64
+ #: admin/api/v1/serializers.py:243
68
65
  msgid ""
69
66
  "List of administered domains (resellers and domain administrators only)."
70
67
  msgstr ""
71
68
 
72
- #: admin/api/v1/serializers.py:330 admin/api/v2/serializers.py:530
69
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:546
73
70
  msgid "Not allowed for this role."
74
71
  msgstr ""
75
72
 
76
- #: admin/api/v1/serializers.py:348
73
+ #: admin/api/v1/serializers.py:355
77
74
  msgid "Must be equal to mailbox full_address"
78
75
  msgstr ""
79
76
 
80
- #: admin/api/v1/serializers.py:390 admin/api/v2/serializers.py:582
77
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:598
81
78
  #: calendars/serializers.py:175 calendars/serializers.py:177
79
+ #: pdfcredentials/api/v2/serializers.py:91
82
80
  #, fuzzy
83
81
  #| msgid "A quota is required"
84
82
  msgid "This field is required."
85
83
  msgstr "Требуется квота"
86
84
 
87
- #: admin/api/v1/serializers.py:402 admin/api/v2/serializers.py:599
85
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:615
88
86
  #, fuzzy
89
87
  #| msgid "Domain does not exist"
90
88
  msgid "Local domain {} does not exist"
91
89
  msgstr "Домен не существует"
92
90
 
93
- #: admin/api/v1/serializers.py:492
91
+ #: admin/api/v1/serializers.py:499
94
92
  msgid "A list of recipient"
95
93
  msgstr ""
96
94
 
97
- #: admin/api/v1/serializers.py:508 admin/api/v2/viewsets.py:286
95
+ #: admin/api/v1/serializers.py:515 admin/api/v2/viewsets.py:286
98
96
  #, fuzzy
99
97
  #| msgid "User '%s' already exists"
100
98
  msgid "This alias already exists"
101
99
  msgstr "Пользователь '%s' уже существует"
102
100
 
103
- #: admin/api/v1/serializers.py:544
101
+ #: admin/api/v1/serializers.py:551
104
102
  #, fuzzy
105
103
  #| msgid "You don't have access to this domain"
106
104
  msgid "You don't have access to this domain."
107
105
  msgstr "Вы не имеете права доступа к этому домену"
108
106
 
109
- #: admin/api/v1/serializers.py:553
107
+ #: admin/api/v1/serializers.py:560
110
108
  #, fuzzy
111
109
  #| msgid "You don't have access to this domain"
112
110
  msgid "You don't have access to this mailbox."
@@ -116,58 +114,58 @@ msgstr "Вы не имеете права доступа к этому доме
116
114
  msgid "Here is your new Modoboa password: {}"
117
115
  msgstr ""
118
116
 
119
- #: admin/api/v2/serializers.py:80
117
+ #: admin/api/v2/serializers.py:82
120
118
  msgid "DKIM keys storage directory not configured"
121
119
  msgstr ""
122
120
 
123
- #: admin/api/v2/serializers.py:92
121
+ #: admin/api/v2/serializers.py:94
124
122
  msgid "This field is valid when type is relaydomain"
125
123
  msgstr ""
126
124
 
127
- #: admin/api/v2/serializers.py:99
125
+ #: admin/api/v2/serializers.py:101
128
126
  msgid "You can't define an unlimited quota."
129
127
  msgstr ""
130
128
 
131
- #: admin/api/v2/serializers.py:133
129
+ #: admin/api/v2/serializers.py:135
132
130
  #, python-format
133
131
  msgid "User '%s' already exists"
134
132
  msgstr "Пользователь '%s' уже существует"
135
133
 
136
- #: admin/api/v2/serializers.py:248 admin/api/v2/serializers.py:254
134
+ #: admin/api/v2/serializers.py:250 admin/api/v2/serializers.py:256
137
135
  msgid "Must be a positive integer"
138
136
  msgstr ""
139
137
 
140
- #: admin/api/v2/serializers.py:263
138
+ #: admin/api/v2/serializers.py:265
141
139
  msgid "openssl not found, please make sure it is installed."
142
140
  msgstr ""
143
141
 
144
- #: admin/api/v2/serializers.py:266 pdfcredentials/api/v2/serializers.py:79
142
+ #: admin/api/v2/serializers.py:268 pdfcredentials/api/v2/serializers.py:84
145
143
  #, fuzzy
146
144
  #| msgid "Domain modified"
147
145
  msgid "Directory not found."
148
146
  msgstr "Домен изменен"
149
147
 
150
- #: admin/api/v2/serializers.py:277
148
+ #: admin/api/v2/serializers.py:279
151
149
  msgid "This field only allows valid IP addresses (or networks)"
152
150
  msgstr ""
153
151
 
154
- #: admin/api/v2/serializers.py:290
152
+ #: admin/api/v2/serializers.py:292
155
153
  msgid "Please disable imap migration before disabling this option."
156
154
  msgstr ""
157
155
 
158
- #: admin/api/v2/serializers.py:303
156
+ #: admin/api/v2/serializers.py:305
159
157
  msgid "Define at least one authorized network / address"
160
158
  msgstr ""
161
159
 
162
- #: admin/api/v2/serializers.py:565
160
+ #: admin/api/v2/serializers.py:581
163
161
  msgid "The left part of an email address can't be more than 64 characters."
164
162
  msgstr ""
165
163
 
166
- #: admin/api/v2/serializers.py:587
164
+ #: admin/api/v2/serializers.py:603
167
165
  msgid "A mailbox is required to create aliases."
168
166
  msgstr ""
169
167
 
170
- #: admin/api/v2/serializers.py:751
168
+ #: admin/api/v2/serializers.py:772
171
169
  #, fuzzy
172
170
  #| msgid "Unknown"
173
171
  msgid "Unknown status"
@@ -181,14 +179,6 @@ msgstr "Вы не имеете права доступа к этому доме
181
179
  msgid "You can't delete your own domain"
182
180
  msgstr "Вы не можете удалить собственный домен"
183
181
 
184
- #: admin/api/v2/viewsets.py:407
185
- msgid "No alarm ID provided"
186
- msgstr ""
187
-
188
- #: admin/api/v2/viewsets.py:411
189
- msgid "Received invalid alarm id(s)"
190
- msgstr ""
191
-
192
182
  #: admin/app_settings.py:19 limits/app_settings.py:38 limits/constants.py:13
193
183
  msgid "Domains"
194
184
  msgstr "Домены"
@@ -207,8 +197,8 @@ msgstr ""
207
197
 
208
198
  #: admin/app_settings.py:37
209
199
  msgid ""
210
- "A list of IP or network address every MX record should match. A warning will "
211
- "be sent if a record does not respect it."
200
+ "A list of IP or network address every MX record should match. A warning will"
201
+ " be sent if a record does not respect it."
212
202
  msgstr ""
213
203
 
214
204
  #: admin/app_settings.py:47
@@ -368,7 +358,8 @@ msgid "Automatic domain/mailbox creation"
368
358
  msgstr "Домен создан"
369
359
 
370
360
  #: admin/app_settings.py:221
371
- msgid "Create a domain and a mailbox when an account is automatically created."
361
+ msgid ""
362
+ "Create a domain and a mailbox when an account is automatically created."
372
363
  msgstr ""
373
364
 
374
365
  #: admin/app_settings.py:230
@@ -379,7 +370,7 @@ msgstr ""
379
370
  msgid "Create an alias using the old address when a mailbox is renamed."
380
371
  msgstr ""
381
372
 
382
- #: admin/app_settings.py:287 core/api/v2/viewsets.py:162
373
+ #: admin/app_settings.py:287 core/api/v2/viewsets.py:174
383
374
  msgid "Administration"
384
375
  msgstr ""
385
376
 
@@ -410,7 +401,7 @@ msgstr ""
410
401
  msgid "Account import failed (%s): domain does not exist"
411
402
  msgstr "Ошибка импорта аккаунта (%s): домен должен существовать "
412
403
 
413
- #: admin/handlers.py:242 admin/models/mailbox.py:340
404
+ #: admin/handlers.py:242 admin/models/mailbox.py:342
414
405
  #, fuzzy
415
406
  #| msgid "Mailbox %s already exists"
416
407
  msgid "Mailbox {} already exists"
@@ -690,7 +681,7 @@ msgstr "Требуется квота"
690
681
  msgid "{}: domain quota exceeded"
691
682
  msgstr "Домен создан"
692
683
 
693
- #: admin/models/mailbox.py:308
684
+ #: admin/models/mailbox.py:310
694
685
  msgid "Domain does not exist"
695
686
  msgstr "Домен не существует"
696
687
 
@@ -751,13 +742,15 @@ msgstr "Основные"
751
742
 
752
743
  #: autoreply/app_settings.py:18
753
744
  #, fuzzy
754
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
745
+ #| msgid ""
746
+ #| "Timeout in seconds between two auto-replies to the same recipient"
755
747
  msgid "Period between two auto-replies"
756
748
  msgstr "Промежуток между автоматическими ответами"
757
749
 
758
750
  #: autoreply/app_settings.py:20
759
751
  #, fuzzy
760
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
752
+ #| msgid ""
753
+ #| "Timeout in seconds between two auto-replies to the same recipient"
761
754
  msgid ""
762
755
  "Number of days to wait before sending a new auto-reply to the same recipient"
763
756
  msgstr "Промежуток между автоматическими ответами"
@@ -861,7 +854,7 @@ msgid ""
861
854
  "Maximum size in bytes of imported ICS files (or KB, MB, GB if specified)"
862
855
  msgstr ""
863
856
 
864
- #: calendars/app_settings.py:89 core/api/v2/viewsets.py:172
857
+ #: calendars/app_settings.py:89 core/api/v2/viewsets.py:195
865
858
  msgid "Calendars"
866
859
  msgstr ""
867
860
 
@@ -895,7 +888,7 @@ msgstr ""
895
888
  msgid "Interval in seconds between 2 synchronization requests"
896
889
  msgstr ""
897
890
 
898
- #: contacts/app_settings.py:51 core/api/v2/viewsets.py:179
891
+ #: contacts/app_settings.py:51 core/api/v2/viewsets.py:185
899
892
  #, fuzzy
900
893
  #| msgid "Domains"
901
894
  msgid "Contacts"
@@ -949,12 +942,12 @@ msgstr "Ошибочный запрос"
949
942
  msgid "2FA is already enabled"
950
943
  msgstr ""
951
944
 
952
- #: core/api/v1/serializers.py:87
945
+ #: core/api/v1/serializers.py:86
953
946
  #, python-format
954
- msgid "Failed TFA settings editing attempt from '%s' as user '%s'"
947
+ msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
955
948
  msgstr ""
956
949
 
957
- #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:425
950
+ #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:445
958
951
  #, fuzzy
959
952
  #| msgid "Old password"
960
953
  msgid "Invalid password"
@@ -968,44 +961,45 @@ msgstr ""
968
961
  msgid "Local"
969
962
  msgstr "Локальный"
970
963
 
971
- #: core/api/v2/serializers.py:175 core/app_settings.py:17
964
+ #: core/api/v2/serializers.py:194 core/app_settings.py:17
972
965
  msgid "User profile"
973
966
  msgstr "Профиль пользователя"
974
967
 
975
- #: core/api/v2/serializers.py:194 core/api/v2/serializers.py:201
976
- #: core/api/v2/serializers.py:208
968
+ #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
969
+ #: core/api/v2/serializers.py:228
977
970
  msgid "Invalid syntax"
978
971
  msgstr "Ошибка в написании"
979
972
 
980
- #: core/api/v2/serializers.py:213
973
+ #: core/api/v2/serializers.py:233
981
974
  msgid "Invalid rounds number"
982
975
  msgstr "Неправильное количество циклов"
983
976
 
984
- #: core/api/v2/serializers.py:413 core/forms.py:81
977
+ #: core/api/v2/serializers.py:433 core/forms.py:81
985
978
  msgid "This code is invalid"
986
979
  msgstr ""
987
980
 
988
- #: core/api/v2/serializers.py:483 core/views/auth.py:194 core/views/auth.py:247
981
+ #: core/api/v2/serializers.py:503 core/views/auth.py:194
982
+ #: core/views/auth.py:247
989
983
  msgid "Please use the following code to recover your Modoboa password: {}"
990
984
  msgstr ""
991
985
 
992
- #: core/api/v2/viewsets.py:164
986
+ #: core/api/v2/viewsets.py:176
993
987
  #, fuzzy
994
988
  #| msgid "Administrators"
995
989
  msgid "Administration console"
996
990
  msgstr "Администраторы"
997
991
 
998
- #: core/api/v2/viewsets.py:174
999
- msgid "Calendar"
1000
- msgstr ""
1001
-
1002
- #: core/api/v2/viewsets.py:181
992
+ #: core/api/v2/viewsets.py:187
1003
993
  #, fuzzy
1004
994
  #| msgid "Address"
1005
995
  msgid "Address book"
1006
996
  msgstr "Адрес"
1007
997
 
1008
- #: core/api/v2/viewsets.py:186 core/api/v2/viewsets.py:188
998
+ #: core/api/v2/viewsets.py:197
999
+ msgid "Calendar"
1000
+ msgstr ""
1001
+
1002
+ #: core/api/v2/viewsets.py:205 core/api/v2/viewsets.py:207
1009
1003
  #: webmail/app_settings.py:258 webmail/app_settings.py:265
1010
1004
  #, fuzzy
1011
1005
  #| msgid "E-mail"
@@ -1041,8 +1035,8 @@ msgid ""
1041
1035
  "Number of rounds to use (only used by sha256crypt and sha512crypt). Must be "
1042
1036
  "between 1000 and 999999999, inclusive."
1043
1037
  msgstr ""
1044
- "Количество циклов (используется только для sha256crypt и sha512crypt), Может "
1045
- "быть от 1000 до 999999999, включительно."
1038
+ "Количество циклов (используется только для sha256crypt и sha512crypt), Может"
1039
+ " быть от 1000 до 999999999, включительно."
1046
1040
 
1047
1041
  #: core/app_settings.py:73
1048
1042
  msgid "Update password scheme at login"
@@ -1187,8 +1181,8 @@ msgstr "Администратор груп"
1187
1181
 
1188
1182
  #: core/app_settings.py:239
1189
1183
  msgid ""
1190
- "Members of those LDAP Posix groups will be created as domain administrators. "
1191
- "Use ';' characters to separate groups."
1184
+ "Members of those LDAP Posix groups will be created as domain administrators."
1185
+ " Use ';' characters to separate groups."
1192
1186
  msgstr ""
1193
1187
  "Члены этих LDAP Posix групп должны быть созданы администратором домена. "
1194
1188
  "Используйте ';' для как разделитель груп"
@@ -1266,8 +1260,8 @@ msgid ""
1266
1260
  "An optional filter string (e.g. '(objectClass=person)'). In order to be "
1267
1261
  "valid, it must be enclosed in parentheses."
1268
1262
  msgstr ""
1269
- "Необязательная срока поиска (например '(objectClass=person)') Значение нужно "
1270
- "заключить в скобки"
1263
+ "Необязательная срока поиска (например '(objectClass=person)') Значение нужно"
1264
+ " заключить в скобки"
1271
1265
 
1272
1266
  #: core/app_settings.py:339
1273
1267
  msgid "User DN template"
@@ -1279,8 +1273,8 @@ msgid ""
1279
1273
  "The template used to construct a user's DN. It should contain one "
1280
1274
  "placeholder (ie. %(user)s)"
1281
1275
  msgstr ""
1282
- "Шаблон используется для построения запросов к DN Он должен содержать атрибут "
1283
- "например (%(user)s)"
1276
+ "Шаблон используется для построения запросов к DN Он должен содержать атрибут"
1277
+ " например (%(user)s)"
1284
1278
 
1285
1279
  #: core/app_settings.py:350
1286
1280
  msgid "LDAP synchronization settings"
@@ -1375,7 +1369,8 @@ msgstr ""
1375
1369
 
1376
1370
  #: core/app_settings.py:506
1377
1371
  #, fuzzy
1378
- #| msgid "Display custom RSS feed to resellers and domain administrators"
1372
+ #| msgid ""
1373
+ #| "Display custom RSS feed to resellers and domain administrators"
1379
1374
  msgid "Display custom RSS feed to super admins"
1380
1375
  msgstr ""
1381
1376
  "Отображать пользовательскую ленту RSS для реселлеров и администраторов "
@@ -1383,7 +1378,8 @@ msgstr ""
1383
1378
 
1384
1379
  #: core/app_settings.py:509
1385
1380
  #, fuzzy
1386
- #| msgid "Display custom RSS feed to resellers and domain administrators"
1381
+ #| msgid ""
1382
+ #| "Display custom RSS feed to resellers and domain administrators"
1387
1383
  msgid "Display custom RSS feed also to super administrators"
1388
1384
  msgstr ""
1389
1385
  "Отображать пользовательскую ленту RSS для реселлеров и администраторов "
@@ -1395,7 +1391,8 @@ msgstr "Спрятать виджет новых функций"
1395
1391
 
1396
1392
  #: core/app_settings.py:519
1397
1393
  msgid "Hide features widget for resellers and domain administrators"
1398
- msgstr "Спрятать виджет новых функций для реселлеров и администраторов доменов"
1394
+ msgstr ""
1395
+ "Спрятать виджет новых функций для реселлеров и администраторов доменов"
1399
1396
 
1400
1397
  #: core/app_settings.py:531
1401
1398
  msgid "Theme"
@@ -1505,8 +1502,8 @@ msgstr "Порог неактивного аккаунта"
1505
1502
 
1506
1503
  #: core/app_settings.py:686
1507
1504
  msgid ""
1508
- "Allow the administrator to set a threshold (in days) beyond which an account "
1509
- "is considered inactive if the user hasn't logged in"
1505
+ "Allow the administrator to set a threshold (in days) beyond which an account"
1506
+ " is considered inactive if the user hasn't logged in"
1510
1507
  msgstr ""
1511
1508
 
1512
1509
  #: core/app_settings.py:695
@@ -1515,8 +1512,8 @@ msgstr "Порог неактивного аккаунта"
1515
1512
 
1516
1513
  #: core/app_settings.py:698
1517
1514
  msgid ""
1518
- "An account with a last login date greater than this threshold (in days) will "
1519
- "be considered as inactive"
1515
+ "An account with a last login date greater than this threshold (in days) will"
1516
+ " be considered as inactive"
1520
1517
  msgstr ""
1521
1518
  "Аккаунт с датой последнего входа, превышающей этот порог (в днях), будет "
1522
1519
  "считаться неактивным"
@@ -1537,21 +1534,30 @@ msgstr "Максимальный срок хранения лог записей
1537
1534
  msgid "The maximum age in days of a log record"
1538
1535
  msgstr "Срок хранения лог записей в днях "
1539
1536
 
1540
- #: core/app_settings.py:726
1537
+ #: core/app_settings.py:727
1538
+ msgid "Retention time in message history"
1539
+ msgstr ""
1540
+
1541
+ #: core/app_settings.py:730
1542
+ msgid "Retention time (in days) of a message in the message history section"
1543
+ msgstr ""
1544
+
1545
+ #: core/app_settings.py:737
1541
1546
  msgid "Items per page"
1542
1547
  msgstr "Элементов на странице"
1543
1548
 
1544
- #: core/app_settings.py:728
1549
+ #: core/app_settings.py:739
1545
1550
  msgid "Number of displayed items per page"
1546
1551
  msgstr "Количество элементов на странице"
1547
1552
 
1548
- #: core/app_settings.py:735
1553
+ #: core/app_settings.py:746
1549
1554
  msgid "Default top redirection"
1550
1555
  msgstr "Порог перенаправления по умолчанию"
1551
1556
 
1552
- #: core/app_settings.py:737
1557
+ #: core/app_settings.py:748
1553
1558
  msgid "The default redirection used when no application is specified"
1554
- msgstr "Если приложение не указано. Используется перенаправление по умолчанию."
1559
+ msgstr ""
1560
+ "Если приложение не указано. Используется перенаправление по умолчанию."
1555
1561
 
1556
1562
  #: core/checks.py:15
1557
1563
  msgid ""
@@ -1580,8 +1586,9 @@ msgstr ""
1580
1586
 
1581
1587
  #: core/checks.py:34
1582
1588
  msgid ""
1583
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot."
1584
- "html#dovecot-oauth2"
1589
+ "Visit : "
1590
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot.html#dovecot-"
1591
+ "oauth2"
1585
1592
  msgstr ""
1586
1593
 
1587
1594
  #: core/checks.py:41
@@ -1592,8 +1599,9 @@ msgstr ""
1592
1599
 
1593
1600
  #: core/checks.py:45
1594
1601
  msgid ""
1595
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/"
1596
- "radicale.html#radicale-oauth2"
1602
+ "Visit : "
1603
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/radicale.html#radicale-"
1604
+ "oauth2"
1597
1605
  msgstr ""
1598
1606
 
1599
1607
  #: core/constants.py:6
@@ -2089,20 +2097,14 @@ msgstr ""
2089
2097
  #: imap_migration/app_settings.py:76
2090
2098
  msgid ""
2091
2099
  "A comma seperated list of folders to explicitly include in sync even if "
2092
- "filtered by the Folder Filter Exclusions. Example: debian.user, debian."
2093
- "personal "
2100
+ "filtered by the Folder Filter Exclusions. Example: debian.user, "
2101
+ "debian.personal "
2094
2102
  msgstr ""
2095
2103
 
2096
2104
  #: imap_migration/apps.py:20
2097
2105
  msgid "IMAP Migration"
2098
2106
  msgstr ""
2099
2107
 
2100
- #: imap_migration/auth_backends.py:49 webmail/lib/imaputils.py:240
2101
- #, fuzzy, python-brace-format
2102
- #| msgid "Connection to MANAGESIEVE server failed, check your configuration"
2103
- msgid "Connection to IMAP server failed: {error}"
2104
- msgstr "Соединение с сервером MANAGESIEVE не удалось, проверьте конфигурацию"
2105
-
2106
2108
  #: imap_migration/checks.py:12
2107
2109
  msgid ""
2108
2110
  "Automatic domain/mailbox creation is disabled which means IMAP "
@@ -2207,10 +2209,11 @@ msgstr "Синонимы доменов"
2207
2209
 
2208
2210
  #: limits/app_settings.py:52
2209
2211
  #, fuzzy
2210
- #| msgid "Maximum number of allowed domain aliases for a new administrator"
2212
+ #| msgid ""
2213
+ #| "Maximum number of allowed domain aliases for a new administrator"
2211
2214
  msgid ""
2212
- "Maximum number of allowed domain aliases for a new administrator. (0 to deny "
2213
- "any creation, -1 to allow unlimited creations)"
2215
+ "Maximum number of allowed domain aliases for a new administrator. (0 to deny"
2216
+ " any creation, -1 to allow unlimited creations)"
2214
2217
  msgstr "Максимальное количество синонимов доменов для нового администратора"
2215
2218
 
2216
2219
  #: limits/app_settings.py:64
@@ -2263,14 +2266,15 @@ msgstr ""
2263
2266
  #| msgid ""
2264
2267
  #| "Maximum number of allowed domain administrators for a new administrator"
2265
2268
  msgid ""
2266
- "Maximum number of allowed domain administrators for a new domain. (0 to deny "
2267
- "any creation, -1 to allow unlimited creations)"
2269
+ "Maximum number of allowed domain administrators for a new domain. (0 to deny"
2270
+ " any creation, -1 to allow unlimited creations)"
2268
2271
  msgstr ""
2269
2272
  "Максимальное количество администраторов домена для нового администратора"
2270
2273
 
2271
2274
  #: limits/app_settings.py:126
2272
2275
  #, fuzzy
2273
- #| msgid "Maximum number of allowed domain aliases for a new administrator"
2276
+ #| msgid ""
2277
+ #| "Maximum number of allowed domain aliases for a new administrator"
2274
2278
  msgid ""
2275
2279
  "Maximum number of allowed domain aliases for a new domain. (0 to deny any "
2276
2280
  "creation, -1 to allow unlimited creations)"
@@ -2288,8 +2292,8 @@ msgstr "Максимальное количество почтовых ящик
2288
2292
  #, fuzzy
2289
2293
  #| msgid "Maximum number of allowed aliases for a new administrator"
2290
2294
  msgid ""
2291
- "Maximum number of allowed aliases for a new domain. (0 to deny any creation, "
2292
- "-1 to allow unlimited creations)"
2295
+ "Maximum number of allowed aliases for a new domain. (0 to deny any creation,"
2296
+ " -1 to allow unlimited creations)"
2293
2297
  msgstr "Максимальное количество синонимов для нового администратора"
2294
2298
 
2295
2299
  #: limits/apps.py:16
@@ -2487,13 +2491,13 @@ msgstr ""
2487
2491
  msgid "Personal account information"
2488
2492
  msgstr "Обновить личную информацию"
2489
2493
 
2490
- #: pdfcredentials/api/v2/serializers.py:81
2494
+ #: pdfcredentials/api/v2/serializers.py:86
2491
2495
  #, fuzzy
2492
2496
  #| msgid "Domain modified"
2493
2497
  msgid "Directory is not writable"
2494
2498
  msgstr "Домен изменен"
2495
2499
 
2496
- #: pdfcredentials/api/v2/serializers.py:102
2500
+ #: pdfcredentials/api/v2/serializers.py:114
2497
2501
  msgid "No document available for this user"
2498
2502
  msgstr ""
2499
2503
 
@@ -2777,8 +2781,8 @@ msgstr ""
2777
2781
 
2778
2782
  #: rspamd/app_settings.py:21
2779
2783
  msgid ""
2780
- "Absolute path of the file which contains paths to DKIM private keys. Must be "
2781
- "readable by _rspamd group or user."
2784
+ "Absolute path of the file which contains paths to DKIM private keys. Must be"
2785
+ " readable by _rspamd group or user."
2782
2786
  msgstr ""
2783
2787
 
2784
2788
  #: rspamd/app_settings.py:30
@@ -2797,8 +2801,8 @@ msgstr ""
2797
2801
 
2798
2802
  #: rspamd/app_settings.py:53
2799
2803
  msgid ""
2800
- "Location of the rspamd dashboard. Can either be a relative URL (eg. '/"
2801
- "rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2804
+ "Location of the rspamd dashboard. Can either be a relative URL (eg. "
2805
+ "'/rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2802
2806
  "guidance on the Super-Admin dashboard."
2803
2807
  msgstr ""
2804
2808
 
@@ -3085,8 +3089,8 @@ msgstr "Старый пароль"
3085
3089
 
3086
3090
  #: templates/registration/twofactor_code_verify.html:35
3087
3091
  msgid ""
3088
- "Enter the code from the two-factor app on your mobile device. If you've lost "
3089
- "your device, you may enter one of your recovery codes."
3092
+ "Enter the code from the two-factor app on your mobile device. If you've lost"
3093
+ " your device, you may enter one of your recovery codes."
3090
3094
  msgstr ""
3091
3095
 
3092
3096
  #: templates/registration/twofactor_code_verify.html:42
@@ -3289,16 +3293,32 @@ msgstr "Тест подписи"
3289
3293
  msgid "User defined email signature"
3290
3294
  msgstr "Пользовательская подпись"
3291
3295
 
3296
+ #: webmail/exceptions.py:18
3297
+ #, fuzzy
3298
+ #| msgid "Server address"
3299
+ msgid "Server response"
3300
+ msgstr "Адрес сервера"
3301
+
3292
3302
  #: webmail/lib/attachments.py:112
3293
3303
  #, fuzzy
3294
3304
  #| msgid "Failed to remove filter"
3295
3305
  msgid "Failed to remove attachment: "
3296
3306
  msgstr "Не удалось удалить вложение:"
3297
3307
 
3308
+ #: webmail/lib/imapemail.py:272
3309
+ msgid "wrote:"
3310
+ msgstr ""
3311
+
3298
3312
  #: webmail/lib/imapemail.py:306
3299
3313
  msgid "Date"
3300
3314
  msgstr "Дата"
3301
3315
 
3316
+ #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3317
+ #, fuzzy
3318
+ #| msgid "sent messages"
3319
+ msgid "Original message"
3320
+ msgstr "Все сообщения"
3321
+
3302
3322
  #: webmail/lib/imaputils.py:221
3303
3323
  msgid "Failed to retrieve hierarchy delimiter"
3304
3324
  msgstr "Не удалось получить разделитель уровней иерархии"
@@ -3329,3 +3349,7 @@ msgstr "Корзина"
3329
3349
  #, python-format
3330
3350
  msgid "Attachment is too big (limit: %s)"
3331
3351
  msgstr "Вложения слишком велики (лимит: %s)"
3352
+
3353
+ #, fuzzy, python-brace-format
3354
+ #~ msgid "Connection to IMAP server failed: {error}"
3355
+ #~ msgstr "Соединение с сервером MANAGESIEVE не удалось, проверьте конфигурацию"