modoboa 2.6.5__py3-none-any.whl → 2.7.0__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 (359) hide show
  1. modoboa/admin/api/v2/serializers.py +1 -0
  2. modoboa/admin/app_settings.py +12 -0
  3. modoboa/admin/{management/commands/subcommands/_mx.py → dns_checker.py} +41 -111
  4. modoboa/admin/jobs.py +86 -0
  5. modoboa/admin/management/commands/modo.py +0 -2
  6. modoboa/admin/tests/test_mailbox_operations.py +4 -4
  7. modoboa/admin/tests/test_mx.py +68 -56
  8. modoboa/amavis/jobs.py +11 -0
  9. modoboa/amavis/tests/test_jobs.py +18 -0
  10. modoboa/amavis/tests/test_viewsets.py +2 -3
  11. modoboa/autoconfig/templates/autoconfig/autoconfig.xml +2 -2
  12. modoboa/autoconfig/templates/autoconfig/autodiscover.xml +14 -0
  13. modoboa/autoconfig/tests.py +2 -1
  14. modoboa/autoconfig/views.py +11 -3
  15. modoboa/calendars/backends/caldav_.py +17 -13
  16. modoboa/calendars/jobs.py +7 -0
  17. modoboa/calendars/mocks.py +4 -1
  18. modoboa/calendars/serializers.py +14 -9
  19. modoboa/calendars/tests.py +10 -9
  20. modoboa/calendars/viewsets.py +3 -1
  21. modoboa/contacts/migrations/0008_addressbook_syncing.py +18 -0
  22. modoboa/contacts/models.py +1 -0
  23. modoboa/contacts/serializers.py +5 -2
  24. modoboa/contacts/tasks.py +9 -3
  25. modoboa/contacts/tests.py +32 -6
  26. modoboa/contacts/viewsets.py +7 -1
  27. modoboa/core/api/v2/serializers.py +0 -7
  28. modoboa/core/api/v2/tests.py +0 -10
  29. modoboa/core/app_settings.py +0 -22
  30. modoboa/core/commands/deploy.py +13 -0
  31. modoboa/core/commands/templates/cron_config.py.tpl +33 -0
  32. modoboa/core/commands/templates/settings.py.tpl +21 -0
  33. modoboa/core/jobs.py +34 -0
  34. modoboa/core/management/commands/load_initial_data.py +1 -1
  35. modoboa/core/password_hashers/base.py +4 -1
  36. modoboa/core/tests/test_core.py +0 -14
  37. modoboa/core/tests/test_jobs.py +40 -0
  38. modoboa/frontend_dist/assets/{AccountAliasForm-B-hTKSFr.js → AccountAliasForm-DO6DwfjE.js} +1 -1
  39. modoboa/frontend_dist/assets/{AccountEditView-LkP_qhf_.js → AccountEditView-CCuN9mGB.js} +1 -1
  40. modoboa/frontend_dist/assets/AccountLayout-Ge7fzuZg.js +1 -0
  41. modoboa/frontend_dist/assets/AccountPasswordSubForm-PkFPblkR.js +1 -0
  42. modoboa/frontend_dist/assets/AccountView-dgseekZ8.js +1 -0
  43. modoboa/frontend_dist/assets/AddressBook-DZWOHOJj.js +1 -0
  44. modoboa/frontend_dist/assets/AdminLayout-itB_mmH_.js +1 -0
  45. modoboa/frontend_dist/assets/AlarmsView-King6zb6.js +1 -0
  46. modoboa/frontend_dist/assets/{AliasEditView-BVjNJekt.js → AliasEditView-CTjrXYPf.js} +1 -1
  47. modoboa/frontend_dist/assets/AliasRecipientForm-CI7bXqVp.js +1 -0
  48. modoboa/frontend_dist/assets/{AliasView-DvvI6cV9.js → AliasView-BN13MNN_.js} +1 -1
  49. modoboa/frontend_dist/assets/AuditTrailView-C1jQwgoo.js +1 -0
  50. modoboa/frontend_dist/assets/CalendarView-juHVIHU5.css +1 -0
  51. modoboa/frontend_dist/assets/CalendarView-rRSzqxrH.js +1 -0
  52. modoboa/frontend_dist/assets/ChoiceField-DCr12shR.js +1 -0
  53. modoboa/frontend_dist/assets/ComposeEmailForm-BmtKwFb1.js +2 -0
  54. modoboa/frontend_dist/assets/ComposeEmailForm-CVNDl-Mq.css +1 -0
  55. modoboa/frontend_dist/assets/ComposeEmailView-JW22Phrb.js +1 -0
  56. modoboa/frontend_dist/assets/ConfirmDialog-CWpdwSQ6.js +1 -0
  57. modoboa/frontend_dist/assets/ConnectedLayout-BP8pO27H.js +1 -0
  58. modoboa/frontend_dist/assets/{ConnectedLayout-C6HNXWkp.css → ConnectedLayout-Ddpb_6yT.css} +1 -1
  59. modoboa/frontend_dist/assets/CreationForm-CzelJsVQ.js +1 -0
  60. modoboa/frontend_dist/assets/DashboardView-BBkBodVj.js +1 -0
  61. modoboa/frontend_dist/assets/{DomainAdminList-BO8_4Cwt.js → DomainAdminList-DD7p3i6F.js} +1 -1
  62. modoboa/frontend_dist/assets/{DomainEditView-BXylM4aB.js → DomainEditView-DoIoNYC4.js} +1 -1
  63. modoboa/frontend_dist/assets/{DomainTransportForm-Ccw5BXyM.js → DomainTransportForm-CbiJF9z5.js} +1 -1
  64. modoboa/frontend_dist/assets/{DomainView-Bd5XQI-1.js → DomainView-BXvznFYz.js} +3 -3
  65. modoboa/frontend_dist/assets/DomainsView-ffYjiffp.js +1 -0
  66. modoboa/frontend_dist/assets/EmailField-KhhJYA4D.js +1 -0
  67. modoboa/frontend_dist/assets/EmailSchedulingForm-CQL5Vfdr.js +1 -0
  68. modoboa/frontend_dist/assets/EmailView-Bq2bHZBO.js +1 -0
  69. modoboa/frontend_dist/assets/EmptyLayout-NrTftp18.js +1 -0
  70. modoboa/frontend_dist/assets/FiltersView-SOQy0U_3.js +1 -0
  71. modoboa/frontend_dist/assets/ForwardEmailView-kEPDjWUw.js +1 -0
  72. modoboa/frontend_dist/assets/{HtmlEditor-DNn3CY-w.js → HtmlEditor-CyBl5wj2.js} +15 -15
  73. modoboa/frontend_dist/assets/IdentitiesView-CZFf4oR9.js +1 -0
  74. modoboa/frontend_dist/assets/InformationView-CAtneAqM.js +1 -0
  75. modoboa/frontend_dist/assets/{LoadingData-CnQ_aVqa.js → LoadingData-C2txD49L.js} +1 -1
  76. modoboa/frontend_dist/assets/{LoginCallbackView-Nh_gmh8e.js → LoginCallbackView-DAvty3CI.js} +1 -1
  77. modoboa/frontend_dist/assets/{LoginView-BtC9BHuJ.js → LoginView-DHYITkn4.js} +1 -1
  78. modoboa/frontend_dist/assets/MailboxView-BNg2v7mi.css +1 -0
  79. modoboa/frontend_dist/assets/MailboxView-DHg5A78D.js +5 -0
  80. modoboa/frontend_dist/assets/MenuItems-C9p70bSC.js +1 -0
  81. modoboa/frontend_dist/assets/{MessageView-C1Goz-hY.js → MessageView-CrrEJpNI.js} +1 -1
  82. modoboa/frontend_dist/assets/MessagesView-CyecRd4I.js +1 -0
  83. modoboa/frontend_dist/assets/MigrationsView-DXGKKz2h.js +1 -0
  84. modoboa/frontend_dist/assets/{ParametersForm-BegEnkQM.js → ParametersForm-DFKYkPAs.js} +1 -1
  85. modoboa/frontend_dist/assets/ParametersView-B1wT5oyt.js +1 -0
  86. modoboa/frontend_dist/assets/ParametersView-CfvVzKea.js +1 -0
  87. modoboa/frontend_dist/assets/ProviderEditView-De-8ggBp.js +1 -0
  88. modoboa/frontend_dist/assets/{ProviderGeneralForm-BAELnXh6.js → ProviderGeneralForm-DO-IpJMQ.js} +1 -1
  89. modoboa/frontend_dist/assets/ProvidersView-Bhk7sCz4.js +1 -0
  90. modoboa/frontend_dist/assets/QuarantineLayout-C1YszNmP.js +1 -0
  91. modoboa/frontend_dist/assets/QuarantineView-cElD_rS-.js +1 -0
  92. modoboa/frontend_dist/assets/ReplyEmailView-BvuOZdLl.js +1 -0
  93. modoboa/frontend_dist/assets/ResourcesForm-FWxrmVwo.js +1 -0
  94. modoboa/frontend_dist/assets/SelfServiceLayout-JHRvfvQf.js +1 -0
  95. modoboa/frontend_dist/assets/SettingsView-SIsKAXtQ.css +1 -0
  96. modoboa/frontend_dist/assets/SettingsView-s2l2Xl1L.js +6 -0
  97. modoboa/frontend_dist/assets/StatisticsView-FiidWvad.js +1 -0
  98. modoboa/frontend_dist/assets/TimeSerieChart-CdqUHiO_.js +1 -0
  99. modoboa/frontend_dist/assets/TimeSerieChart-nLIFGI0y.css +1 -0
  100. modoboa/frontend_dist/assets/UserLayout-DyvI8duf.js +1 -0
  101. modoboa/frontend_dist/assets/{VAlert-Buv8Z5G4.js → VAlert-MDbeolOo.js} +1 -1
  102. modoboa/frontend_dist/assets/VApp-DM1KLQfQ.js +1 -0
  103. modoboa/frontend_dist/assets/VAutocomplete-C9NL5_uo.css +1 -0
  104. modoboa/frontend_dist/assets/VAutocomplete-CQsWYWNX.js +1 -0
  105. modoboa/frontend_dist/assets/VAvatar-CXV_FqpP.js +1 -0
  106. modoboa/frontend_dist/assets/VBadge-7tDx7aI3.js +1 -0
  107. modoboa/frontend_dist/assets/{VCard-D7AwBs4w.js → VCard-CBtX8JF-.js} +1 -1
  108. modoboa/frontend_dist/assets/VCheckbox-zY1MApOy.js +1 -0
  109. modoboa/frontend_dist/assets/{VCheckboxBtn-B5evxN9K.js → VCheckboxBtn-B0mIT3E0.js} +1 -1
  110. modoboa/frontend_dist/assets/VColorPicker-BbCHvk6K.js +1 -0
  111. modoboa/frontend_dist/assets/{VColorPicker-B_lVDaYR.css → VColorPicker-C9m8L-6U.css} +1 -1
  112. modoboa/frontend_dist/assets/{VContainer-DY9021j4.js → VContainer-Cn-vKB3s.js} +1 -1
  113. modoboa/frontend_dist/assets/VDataTable-CNT9KOSp.js +1 -0
  114. modoboa/frontend_dist/assets/VDataTableServer-_yn4Ry6U.js +1 -0
  115. modoboa/frontend_dist/assets/VDataTableVirtual-Csxh3Gp6.js +1 -0
  116. modoboa/frontend_dist/assets/VDatePicker-_OUDqShN.css +1 -0
  117. modoboa/frontend_dist/assets/VDatePicker-iFu13xIP.js +2 -0
  118. modoboa/frontend_dist/assets/VDialog-lKtBdqnp.js +1 -0
  119. modoboa/frontend_dist/assets/VExpansionPanels-CaIvk9iF.js +1 -0
  120. modoboa/frontend_dist/assets/VFileInput-C7J_qVmk.js +1 -0
  121. modoboa/frontend_dist/assets/VForm-fdQ5d-CH.js +1 -0
  122. modoboa/frontend_dist/assets/VInput-BwHvhzAe.js +1 -0
  123. modoboa/frontend_dist/assets/VMenu-BpmJf4X2.js +1 -0
  124. modoboa/frontend_dist/assets/VMenu-C5A_5Hs5.css +1 -0
  125. modoboa/frontend_dist/assets/VPicker-B7cB3kJg.css +1 -0
  126. modoboa/frontend_dist/assets/VPicker-BZho70wU.js +1 -0
  127. modoboa/frontend_dist/assets/VProgressCircular-DRw_-iNj.js +1 -0
  128. modoboa/frontend_dist/assets/VRadioGroup--eiP5xtJ.js +1 -0
  129. modoboa/frontend_dist/assets/{VRow-DyK_Mj7R.js → VRow-83Qnr5iB.js} +1 -1
  130. modoboa/frontend_dist/assets/VSelect-BcmGFGif.js +1 -0
  131. modoboa/frontend_dist/assets/{VSelectionControl-Dkms9_P5.js → VSelectionControl-Cqi1xt-q.js} +1 -1
  132. modoboa/frontend_dist/assets/VSheet-C3MaHhtw.js +1 -0
  133. modoboa/frontend_dist/assets/VSpacer-CuSkdJZL.js +1 -0
  134. modoboa/frontend_dist/assets/VSwitch-XumUl685.js +1 -0
  135. modoboa/frontend_dist/assets/{VTable-D8ZwwC_B.js → VTable-f7wcr2AZ.js} +1 -1
  136. modoboa/frontend_dist/assets/VTabs-CDfdejXj.css +1 -0
  137. modoboa/frontend_dist/assets/VTabs-y4wNP4im.js +1 -0
  138. modoboa/frontend_dist/assets/VTextField-BPIvtrn4.js +1 -0
  139. modoboa/frontend_dist/assets/VTextField-DjbYGlzs.css +1 -0
  140. modoboa/frontend_dist/assets/VTextarea-B6bGYcC3.js +1 -0
  141. modoboa/frontend_dist/assets/VTextarea-f6vTjzFy.css +1 -0
  142. modoboa/frontend_dist/assets/VToolbar-BYDPtwf0.css +1 -0
  143. modoboa/frontend_dist/assets/VToolbar-CB6wwtYc.js +1 -0
  144. modoboa/frontend_dist/assets/VWindowItem-CDtLLEkg.js +1 -0
  145. modoboa/frontend_dist/assets/WebmailLayout-CQQAolnl.css +1 -0
  146. modoboa/frontend_dist/assets/WebmailLayout-tosQSHLS.js +1 -0
  147. modoboa/frontend_dist/assets/{accounts-BZBqbAmd.js → accounts-KUsk6LHW.js} +1 -1
  148. modoboa/frontend_dist/assets/{admin-uCrKjpln.js → admin-BW9cZW0P.js} +1 -1
  149. modoboa/frontend_dist/assets/{aliases-CFwFkX45.js → aliases-Ge0hjIsH.js} +1 -1
  150. modoboa/frontend_dist/assets/{amavis-DCy0U0TD.js → amavis-BbFeFfsk.js} +1 -1
  151. modoboa/frontend_dist/assets/{amavis-B4ScfQsG.js → amavis-DtuzP_CS.js} +1 -1
  152. modoboa/frontend_dist/assets/{contacts-DKmh2q-4.js → contacts-DMJlQTe0.js} +1 -1
  153. modoboa/frontend_dist/assets/{domains-CDE4_LDF.js → domains-Du64lcXT.js} +1 -1
  154. modoboa/frontend_dist/assets/{domains.store-a9Y5UlDV.js → domains.store-1U61jeCV.js} +1 -1
  155. modoboa/frontend_dist/assets/events-BM3in65C.js +1 -0
  156. modoboa/frontend_dist/assets/filter-Dihm6o59.js +1 -0
  157. modoboa/frontend_dist/assets/importExport-HGcNGWOm.js +1 -0
  158. modoboa/frontend_dist/assets/{index-B9q1vO3K.css → index-B1EK3MQe.css} +1 -1
  159. modoboa/frontend_dist/assets/{index-Dwg6jPTX.js → index-Dv00bmw9.js} +1 -1
  160. modoboa/frontend_dist/assets/{index-BjibLozh.js → index-jui3edpn.js} +47 -41
  161. modoboa/frontend_dist/assets/{language.store-DGuI8jG0.js → language.store-OcfdXL_-.js} +1 -1
  162. modoboa/frontend_dist/assets/languages-CF8hxo7x.js +1 -0
  163. modoboa/frontend_dist/assets/{layout-5PvsmkGR.js → layout-DOO7TRTJ.js} +1 -1
  164. modoboa/frontend_dist/assets/{layout.store-DJVcXtxk.js → layout.store-C0g-piJn.js} +1 -1
  165. modoboa/frontend_dist/assets/{logos-CMmd0hOG.js → logos-Dz2Gzei-.js} +1 -1
  166. modoboa/frontend_dist/assets/{logs-D2GOydPZ.js → logs-CLm32Weu.js} +1 -1
  167. modoboa/frontend_dist/assets/{parameters-DJdlq9sh.js → parameters-DMIAQ7cd.js} +1 -1
  168. modoboa/frontend_dist/assets/{parameters.store-DH3pPlaT.js → parameters.store-DLnFzCwV.js} +1 -1
  169. modoboa/frontend_dist/assets/{permissions-CgFJFhCp.js → permissions-CrpE0b4w.js} +1 -1
  170. modoboa/frontend_dist/assets/{ssrBoot-ChTB-PYP.js → ssrBoot-B7cr7q9U.js} +1 -1
  171. modoboa/frontend_dist/assets/{tag-CvrHE14f.js → tag-WF93n81Q.js} +1 -1
  172. modoboa/frontend_dist/assets/{theme-DFzlhSh5.js → theme-_0oOYChG.js} +1 -1
  173. modoboa/frontend_dist/assets/transports-CS61syt-.js +1 -0
  174. modoboa/frontend_dist/assets/webmail-CYDXU0DS.js +1 -0
  175. modoboa/frontend_dist/assets/webmail.store-BvHCQSjM.js +1 -0
  176. modoboa/frontend_dist/index.html +2 -2
  177. modoboa/imap_migration/models.py +3 -3
  178. modoboa/imap_migration/templates/imap_migration/offlineimap.conf +2 -2
  179. modoboa/imap_migration/tests.py +21 -0
  180. modoboa/lib/cryptutils.py +2 -2
  181. modoboa/lib/sysutils.py +1 -1
  182. modoboa/lib/tests/__init__.py +0 -1
  183. modoboa/locale/br/LC_MESSAGES/django.mo +0 -0
  184. modoboa/locale/br/LC_MESSAGES/django.po +301 -273
  185. modoboa/locale/cs/LC_MESSAGES/django.po +286 -269
  186. modoboa/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  187. modoboa/locale/cs_CZ/LC_MESSAGES/django.po +303 -275
  188. modoboa/locale/de/LC_MESSAGES/django.mo +0 -0
  189. modoboa/locale/de/LC_MESSAGES/django.po +297 -269
  190. modoboa/locale/de_DE/LC_MESSAGES/django.mo +0 -0
  191. modoboa/locale/de_DE/LC_MESSAGES/django.po +303 -275
  192. modoboa/locale/el_GR/LC_MESSAGES/django.mo +0 -0
  193. modoboa/locale/el_GR/LC_MESSAGES/django.po +303 -275
  194. modoboa/locale/en/LC_MESSAGES/django.po +286 -269
  195. modoboa/locale/es/LC_MESSAGES/django.mo +0 -0
  196. modoboa/locale/es/LC_MESSAGES/django.po +302 -274
  197. modoboa/locale/es_MX/LC_MESSAGES/django.po +286 -269
  198. modoboa/locale/fi/LC_MESSAGES/django.mo +0 -0
  199. modoboa/locale/fi/LC_MESSAGES/django.po +299 -271
  200. modoboa/locale/fr/LC_MESSAGES/django.mo +0 -0
  201. modoboa/locale/fr/LC_MESSAGES/django.po +288 -271
  202. modoboa/locale/hu/LC_MESSAGES/django.po +286 -269
  203. modoboa/locale/it/LC_MESSAGES/django.mo +0 -0
  204. modoboa/locale/it/LC_MESSAGES/django.po +303 -275
  205. modoboa/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
  206. modoboa/locale/ja_JP/LC_MESSAGES/django.po +390 -413
  207. modoboa/locale/ka/LC_MESSAGES/django.po +286 -269
  208. modoboa/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  209. modoboa/locale/nl_NL/LC_MESSAGES/django.po +299 -271
  210. modoboa/locale/no/LC_MESSAGES/django.po +286 -269
  211. modoboa/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  212. modoboa/locale/pl_PL/LC_MESSAGES/django.po +297 -269
  213. modoboa/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  214. modoboa/locale/pt_BR/LC_MESSAGES/django.po +298 -270
  215. modoboa/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  216. modoboa/locale/pt_PT/LC_MESSAGES/django.po +303 -275
  217. modoboa/locale/ro_RO/LC_MESSAGES/django.mo +0 -0
  218. modoboa/locale/ro_RO/LC_MESSAGES/django.po +299 -271
  219. modoboa/locale/ru/LC_MESSAGES/django.mo +0 -0
  220. modoboa/locale/ru/LC_MESSAGES/django.po +993 -1096
  221. modoboa/locale/si/LC_MESSAGES/django.po +286 -269
  222. modoboa/locale/sk/LC_MESSAGES/django.po +286 -269
  223. modoboa/locale/sk_SK/LC_MESSAGES/django.po +286 -269
  224. modoboa/locale/sl_SI/LC_MESSAGES/django.po +288 -269
  225. modoboa/locale/sv/LC_MESSAGES/django.mo +0 -0
  226. modoboa/locale/sv/LC_MESSAGES/django.po +297 -269
  227. modoboa/locale/tr/LC_MESSAGES/django.mo +0 -0
  228. modoboa/locale/tr/LC_MESSAGES/django.po +301 -272
  229. modoboa/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  230. modoboa/locale/tr_TR/LC_MESSAGES/django.po +291 -269
  231. modoboa/locale/uk/LC_MESSAGES/django.po +286 -269
  232. modoboa/locale/zh/LC_MESSAGES/django.po +286 -269
  233. modoboa/locale/zh_CN/LC_MESSAGES/django.po +286 -269
  234. modoboa/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
  235. modoboa/locale/zh_TW/LC_MESSAGES/django.po +295 -273
  236. modoboa/maillog/jobs.py +11 -0
  237. modoboa/maillog/tests/test_views.py +5 -4
  238. modoboa/parameters/api/v2/tests.py +1 -1
  239. modoboa/policyd/management/commands/policy_daemon.py +5 -1
  240. modoboa/policyd/tests.py +4 -2
  241. modoboa/rspamd/tests.py +20 -0
  242. modoboa/templates/registration/twofactor_code_verify.html +1 -1
  243. modoboa/webmail/app_settings.py +37 -0
  244. modoboa/webmail/constants.py +21 -1
  245. modoboa/webmail/factories.py +19 -0
  246. modoboa/webmail/jobs.py +27 -0
  247. modoboa/webmail/lib/__init__.py +0 -2
  248. modoboa/webmail/lib/imapemail.py +9 -11
  249. modoboa/webmail/lib/imapheader.py +25 -13
  250. modoboa/webmail/lib/imaputils.py +51 -13
  251. modoboa/webmail/lib/sendmail.py +88 -105
  252. modoboa/webmail/lib/utils.py +109 -0
  253. modoboa/webmail/migrations/0001_initial.py +90 -0
  254. modoboa/webmail/migrations/__init__.py +0 -0
  255. modoboa/webmail/mocks.py +12 -3
  256. modoboa/webmail/models.py +102 -0
  257. modoboa/webmail/serializers.py +84 -4
  258. modoboa/webmail/tests/data.py +21 -0
  259. modoboa/webmail/tests/test_lib_imaputils.py +33 -0
  260. modoboa/webmail/tests/test_viewsets.py +108 -0
  261. modoboa/webmail/urls.py +5 -0
  262. modoboa/webmail/viewsets.py +39 -9
  263. {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/METADATA +16 -13
  264. {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/RECORD +269 -252
  265. {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/WHEEL +1 -1
  266. modoboa/admin/management/commands/handle_mailbox_operations.py +0 -103
  267. modoboa/core/management/commands/cleanlogs.py +0 -53
  268. modoboa/frontend_dist/assets/AccountLayout-APeC9bsN.js +0 -1
  269. modoboa/frontend_dist/assets/AccountPasswordSubForm-D4vB2yQK.js +0 -1
  270. modoboa/frontend_dist/assets/AccountView-CloBP1BY.js +0 -1
  271. modoboa/frontend_dist/assets/AddressBook-C03MXg3y.js +0 -1
  272. modoboa/frontend_dist/assets/AdminLayout-DFmyKOo6.js +0 -1
  273. modoboa/frontend_dist/assets/AlarmsView-CFhH0I5d.js +0 -1
  274. modoboa/frontend_dist/assets/AliasRecipientForm-CZ_SvjtG.js +0 -1
  275. modoboa/frontend_dist/assets/AuditTrailView-Cyq25Jle.js +0 -1
  276. modoboa/frontend_dist/assets/CalendarView-C_dSXRp9.js +0 -1
  277. modoboa/frontend_dist/assets/ChoiceField-BPhUvoyr.js +0 -1
  278. modoboa/frontend_dist/assets/ComposeEmailForm-D3yUbBJX.css +0 -1
  279. modoboa/frontend_dist/assets/ComposeEmailForm-Ns5SYs4J.js +0 -1
  280. modoboa/frontend_dist/assets/ComposeEmailView-DgUfiWEH.js +0 -1
  281. modoboa/frontend_dist/assets/ConfirmDialog-BMIg94-U.js +0 -1
  282. modoboa/frontend_dist/assets/ConnectedLayout-CSXdVJtV.js +0 -1
  283. modoboa/frontend_dist/assets/CreationForm-CaAZYATm.js +0 -1
  284. modoboa/frontend_dist/assets/DashboardView-DErmyUoy.js +0 -1
  285. modoboa/frontend_dist/assets/DomainsView-CC1EwRId.js +0 -1
  286. modoboa/frontend_dist/assets/EmailField-BFgga4zp.js +0 -1
  287. modoboa/frontend_dist/assets/EmailView-DPWTch_6.js +0 -1
  288. modoboa/frontend_dist/assets/EmptyLayout-DAw7fAab.js +0 -1
  289. modoboa/frontend_dist/assets/FiltersView-Cg9lkLw0.js +0 -1
  290. modoboa/frontend_dist/assets/ForwardEmailView-Dd1sxgaP.js +0 -1
  291. modoboa/frontend_dist/assets/IdentitiesView-CiHIQ9Qt.js +0 -1
  292. modoboa/frontend_dist/assets/InformationView-Cc0aBA5j.js +0 -1
  293. modoboa/frontend_dist/assets/MailboxView-DIVABvk5.css +0 -1
  294. modoboa/frontend_dist/assets/MailboxView-DplC0IXR.js +0 -5
  295. modoboa/frontend_dist/assets/MenuItems-efx2rqwT.js +0 -1
  296. modoboa/frontend_dist/assets/MessagesView-CesYYZ9f.js +0 -1
  297. modoboa/frontend_dist/assets/MigrationsView-DSBk8T0y.js +0 -1
  298. modoboa/frontend_dist/assets/ParametersView-B8W_PAiz.js +0 -1
  299. modoboa/frontend_dist/assets/ParametersView-Dsx2M_g9.js +0 -1
  300. modoboa/frontend_dist/assets/ProviderEditView-PEAr7MA1.js +0 -1
  301. modoboa/frontend_dist/assets/ProvidersView-CHvQf3Vv.js +0 -1
  302. modoboa/frontend_dist/assets/QuarantineLayout-BWEaBK48.js +0 -1
  303. modoboa/frontend_dist/assets/QuarantineView-BzjeDhTm.js +0 -1
  304. modoboa/frontend_dist/assets/ReplyEmailView-CwQ9jsce.js +0 -1
  305. modoboa/frontend_dist/assets/ResourcesForm-noC3AXd9.js +0 -1
  306. modoboa/frontend_dist/assets/SelfServiceLayout-DQgRMu0L.js +0 -1
  307. modoboa/frontend_dist/assets/SettingsView-DJTdIeRK.css +0 -1
  308. modoboa/frontend_dist/assets/SettingsView-Dgwpfd8O.js +0 -6
  309. modoboa/frontend_dist/assets/StatisticsView-BZkVSh5o.js +0 -1
  310. modoboa/frontend_dist/assets/TimeSerieChart-BXJwhTMO.js +0 -1
  311. modoboa/frontend_dist/assets/TimeSerieChart-C3XHmlRd.css +0 -1
  312. modoboa/frontend_dist/assets/UserLayout-CWK9ICfE.js +0 -1
  313. modoboa/frontend_dist/assets/VApp-CiIBWB_Q.js +0 -1
  314. modoboa/frontend_dist/assets/VAutocomplete-DcNqTIie.js +0 -1
  315. modoboa/frontend_dist/assets/VAutocomplete-hzGuLlUI.css +0 -1
  316. modoboa/frontend_dist/assets/VAvatar-BsHplcRP.js +0 -1
  317. modoboa/frontend_dist/assets/VBadge-CavP_E2g.js +0 -1
  318. modoboa/frontend_dist/assets/VCheckbox-CKW9lz5i.js +0 -1
  319. modoboa/frontend_dist/assets/VColorPicker-Bsrz8yif.js +0 -1
  320. modoboa/frontend_dist/assets/VDataTable-ocZo8ju0.js +0 -1
  321. modoboa/frontend_dist/assets/VDataTableServer-CJfpYXQW.js +0 -1
  322. modoboa/frontend_dist/assets/VDataTableVirtual-Cr8yw49k.js +0 -1
  323. modoboa/frontend_dist/assets/VDialog-CUMh3paI.js +0 -1
  324. modoboa/frontend_dist/assets/VExpansionPanels-CkwHiKsA.js +0 -1
  325. modoboa/frontend_dist/assets/VFileInput-D5qlksIG.js +0 -1
  326. modoboa/frontend_dist/assets/VForm-ClJU5x_v.js +0 -1
  327. modoboa/frontend_dist/assets/VInput-DhzSMFXh.js +0 -1
  328. modoboa/frontend_dist/assets/VMenu-B53a3gm6.js +0 -1
  329. modoboa/frontend_dist/assets/VMenu-BEipA1lw.css +0 -1
  330. modoboa/frontend_dist/assets/VPicker-B928ZVJQ.js +0 -1
  331. modoboa/frontend_dist/assets/VPicker-ClSXs6kv.css +0 -1
  332. modoboa/frontend_dist/assets/VProgressCircular-viI3jDXe.js +0 -1
  333. modoboa/frontend_dist/assets/VRadioGroup-C0bqFrYg.js +0 -1
  334. modoboa/frontend_dist/assets/VSelect-y0E5_vPn.js +0 -1
  335. modoboa/frontend_dist/assets/VSheet-DQkh_hsX.js +0 -1
  336. modoboa/frontend_dist/assets/VSpacer-CBqB9uSt.js +0 -1
  337. modoboa/frontend_dist/assets/VSwitch-D4xdR9jz.js +0 -1
  338. modoboa/frontend_dist/assets/VTabs-D2c0KeF2.js +0 -1
  339. modoboa/frontend_dist/assets/VTabs-NzpINroH.css +0 -1
  340. modoboa/frontend_dist/assets/VTextField-Cow3HZvI.css +0 -1
  341. modoboa/frontend_dist/assets/VTextField-DvvH1ciR.js +0 -1
  342. modoboa/frontend_dist/assets/VTextarea-DHtXtzqP.js +0 -1
  343. modoboa/frontend_dist/assets/VTextarea-DyGjqrlm.css +0 -1
  344. modoboa/frontend_dist/assets/VToolbar-CB2GrZpA.css +0 -1
  345. modoboa/frontend_dist/assets/VToolbar-pvLQtmbU.js +0 -1
  346. modoboa/frontend_dist/assets/VWindowItem-DErNPSH8.js +0 -1
  347. modoboa/frontend_dist/assets/WebmailLayout-BzW0LWYp.css +0 -1
  348. modoboa/frontend_dist/assets/WebmailLayout-D7J-QJ-0.js +0 -1
  349. modoboa/frontend_dist/assets/filter-BVvMTmPG.js +0 -1
  350. modoboa/frontend_dist/assets/global.store-Bha4Z76j.js +0 -1
  351. modoboa/frontend_dist/assets/importExport-EgijWlC1.js +0 -1
  352. modoboa/frontend_dist/assets/languages-Cge6pECg.js +0 -1
  353. modoboa/frontend_dist/assets/transports-BUSYxSF4.js +0 -1
  354. modoboa/frontend_dist/assets/webmail-HVg3ZHC0.js +0 -1
  355. modoboa/frontend_dist/assets/webmail.store-D-d88s4w.js +0 -1
  356. {modoboa-2.6.5.data → modoboa-2.7.0.data}/scripts/modoboa-admin.py +0 -0
  357. {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/entry_points.txt +0 -0
  358. {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/licenses/LICENSE +0 -0
  359. {modoboa-2.6.5.dist-info → modoboa-2.7.0.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,7 @@ msgid ""
11
11
  msgstr ""
12
12
  "Project-Id-Version: PACKAGE VERSION\n"
13
13
  "Report-Msgid-Bugs-To: \n"
14
- "POT-Creation-Date: 2025-12-02 16:07+0100\n"
14
+ "POT-Creation-Date: 2026-02-04 09:30+0100\n"
15
15
  "PO-Revision-Date: 2020-05-11 18:45+0000\n"
16
16
  "Last-Translator: R .. <nordscan@gmail.com>, 2020\n"
17
17
  "Language-Team: Slovak (Slovakia) (https://www.transifex.com/tonio/teams/"
@@ -46,14 +46,14 @@ msgid "Cannot be greater than domain quota"
46
46
  msgstr ""
47
47
 
48
48
  #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
49
- #: admin/api/v2/serializers.py:570 admin/models/alias.py:45
49
+ #: admin/api/v2/serializers.py:571 admin/models/alias.py:45
50
50
  msgid "Permission denied."
51
51
  msgstr ""
52
52
 
53
53
  #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
54
- #: admin/api/v2/serializers.py:491 amavis/serializers.py:39
55
- #: core/api/v2/serializers.py:255 core/api/v2/serializers.py:257
56
- #: core/api/v2/serializers.py:266 transport/backends.py:40
54
+ #: admin/api/v2/serializers.py:492 amavis/serializers.py:39
55
+ #: core/api/v2/serializers.py:248 core/api/v2/serializers.py:250
56
+ #: core/api/v2/serializers.py:259 transport/backends.py:40
57
57
  msgid "This field is required"
58
58
  msgstr ""
59
59
 
@@ -62,7 +62,7 @@ msgid ""
62
62
  "List of administered domains (resellers and domain administrators only)."
63
63
  msgstr ""
64
64
 
65
- #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:552
65
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:553
66
66
  msgid "Not allowed for this role."
67
67
  msgstr ""
68
68
 
@@ -70,13 +70,12 @@ msgstr ""
70
70
  msgid "Must be equal to mailbox full_address"
71
71
  msgstr ""
72
72
 
73
- #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:604
74
- #: calendars/serializers.py:175 calendars/serializers.py:177
75
- #: pdfcredentials/api/v2/serializers.py:91
73
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:605
74
+ #: calendars/serializers.py:182 pdfcredentials/api/v2/serializers.py:91
76
75
  msgid "This field is required."
77
76
  msgstr ""
78
77
 
79
- #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:621
78
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:622
80
79
  msgid "Local domain {} does not exist"
81
80
  msgstr ""
82
81
 
@@ -117,39 +116,39 @@ msgstr ""
117
116
  msgid "User '%s' already exists"
118
117
  msgstr ""
119
118
 
120
- #: admin/api/v2/serializers.py:255 admin/api/v2/serializers.py:261
119
+ #: admin/api/v2/serializers.py:256 admin/api/v2/serializers.py:262
121
120
  msgid "Must be a positive integer"
122
121
  msgstr ""
123
122
 
124
- #: admin/api/v2/serializers.py:270
123
+ #: admin/api/v2/serializers.py:271
125
124
  msgid "openssl not found, please make sure it is installed."
126
125
  msgstr ""
127
126
 
128
- #: admin/api/v2/serializers.py:273 pdfcredentials/api/v2/serializers.py:84
127
+ #: admin/api/v2/serializers.py:274 pdfcredentials/api/v2/serializers.py:84
129
128
  msgid "Directory not found."
130
129
  msgstr ""
131
130
 
132
- #: admin/api/v2/serializers.py:284
131
+ #: admin/api/v2/serializers.py:285
133
132
  msgid "This field only allows valid IP addresses (or networks)"
134
133
  msgstr ""
135
134
 
136
- #: admin/api/v2/serializers.py:297
135
+ #: admin/api/v2/serializers.py:298
137
136
  msgid "Please disable imap migration before disabling this option."
138
137
  msgstr ""
139
138
 
140
- #: admin/api/v2/serializers.py:310
139
+ #: admin/api/v2/serializers.py:311
141
140
  msgid "Define at least one authorized network / address"
142
141
  msgstr ""
143
142
 
144
- #: admin/api/v2/serializers.py:587
143
+ #: admin/api/v2/serializers.py:588
145
144
  msgid "The left part of an email address can't be more than 64 characters."
146
145
  msgstr ""
147
146
 
148
- #: admin/api/v2/serializers.py:609
147
+ #: admin/api/v2/serializers.py:610
149
148
  msgid "A mailbox is required to create aliases."
150
149
  msgstr ""
151
150
 
152
- #: admin/api/v2/serializers.py:782
151
+ #: admin/api/v2/serializers.py:783
153
152
  msgid "Unknown status"
154
153
  msgstr ""
155
154
 
@@ -241,141 +240,151 @@ msgstr ""
241
240
  msgid "Check every domain against major DNSBL providers"
242
241
  msgstr ""
243
242
 
244
- #: admin/app_settings.py:116
243
+ #: admin/app_settings.py:117
244
+ msgid "Notify domain admins about DNS issues"
245
+ msgstr ""
246
+
247
+ #: admin/app_settings.py:120
248
+ msgid ""
249
+ "Send a notification by email to domain administrators when DNS issues are "
250
+ "encountered"
251
+ msgstr ""
252
+
253
+ #: admin/app_settings.py:128
245
254
  msgid "Custom DNS server"
246
255
  msgstr ""
247
256
 
248
- #: admin/app_settings.py:118
257
+ #: admin/app_settings.py:130
249
258
  msgid "Use a custom DNS server instead of local server configuration"
250
259
  msgstr ""
251
260
 
252
- #: admin/app_settings.py:126
261
+ #: admin/app_settings.py:138
253
262
  msgid "DKIM keys storage directory"
254
263
  msgstr ""
255
264
 
256
- #: admin/app_settings.py:128
265
+ #: admin/app_settings.py:140
257
266
  msgid ""
258
267
  "Absolute path of the directory where DKIM private keys will be stored. Make "
259
268
  "sure this directory belongs to root user and is not readable by the outside "
260
269
  "world."
261
270
  msgstr ""
262
271
 
263
- #: admin/app_settings.py:137
272
+ #: admin/app_settings.py:149
264
273
  msgid "Default DKIM key length"
265
274
  msgstr ""
266
275
 
267
- #: admin/app_settings.py:139
276
+ #: admin/app_settings.py:151
268
277
  msgid "Default length in bits for newly generated DKIM keys."
269
278
  msgstr ""
270
279
 
271
- #: admin/app_settings.py:146
280
+ #: admin/app_settings.py:158
272
281
  msgid "Default domain quota"
273
282
  msgstr ""
274
283
 
275
- #: admin/app_settings.py:148
284
+ #: admin/app_settings.py:160
276
285
  msgid ""
277
286
  "Default quota (in MB) applied to freshly created domains with no value "
278
287
  "specified. A value of 0 means no quota."
279
288
  msgstr ""
280
289
 
281
- #: admin/app_settings.py:156
290
+ #: admin/app_settings.py:168
282
291
  msgid "Default domain sending limit"
283
292
  msgstr ""
284
293
 
285
- #: admin/app_settings.py:158
294
+ #: admin/app_settings.py:170
286
295
  msgid ""
287
296
  "Number of messages freshly created domains will be allowed to send per day. "
288
297
  "Leave empty for no limit."
289
298
  msgstr ""
290
299
 
291
- #: admin/app_settings.py:170 limits/app_settings.py:61
300
+ #: admin/app_settings.py:182 limits/app_settings.py:61
292
301
  #: limits/app_settings.py:135 limits/constants.py:31 limits/constants.py:84
293
302
  msgid "Mailboxes"
294
303
  msgstr ""
295
304
 
296
- #: admin/app_settings.py:176
305
+ #: admin/app_settings.py:188
297
306
  msgid "Handle mailboxes on filesystem"
298
307
  msgstr ""
299
308
 
300
- #: admin/app_settings.py:178
309
+ #: admin/app_settings.py:190
301
310
  msgid ""
302
311
  "Rename or remove mailboxes on the filesystem when they get renamed or "
303
312
  "removed within Modoboa"
304
313
  msgstr ""
305
314
 
306
- #: admin/app_settings.py:186 admin/models/domain.py:36
315
+ #: admin/app_settings.py:198 admin/models/domain.py:36
307
316
  msgid "Default mailbox quota"
308
317
  msgstr ""
309
318
 
310
- #: admin/app_settings.py:188
319
+ #: admin/app_settings.py:200
311
320
  msgid ""
312
321
  "Default mailbox quota (in MB) applied to freshly created domains with no "
313
322
  "value specified. A value of 0 means no quota."
314
323
  msgstr ""
315
324
 
316
- #: admin/app_settings.py:197
325
+ #: admin/app_settings.py:209
317
326
  msgid "Default mailbox sending limit"
318
327
  msgstr ""
319
328
 
320
- #: admin/app_settings.py:199
329
+ #: admin/app_settings.py:211
321
330
  msgid ""
322
331
  "Number of messages freshly created mailboxes will be allowed to send per "
323
332
  "day. Leave empty for no limit."
324
333
  msgstr ""
325
334
 
326
- #: admin/app_settings.py:207
335
+ #: admin/app_settings.py:219
327
336
  msgid "Automatic account removal"
328
337
  msgstr ""
329
338
 
330
- #: admin/app_settings.py:209
339
+ #: admin/app_settings.py:221
331
340
  msgid "When a mailbox is removed, also remove the associated account"
332
341
  msgstr ""
333
342
 
334
- #: admin/app_settings.py:218
343
+ #: admin/app_settings.py:230
335
344
  msgid "Automatic domain/mailbox creation"
336
345
  msgstr ""
337
346
 
338
- #: admin/app_settings.py:221
347
+ #: admin/app_settings.py:233
339
348
  msgid "Create a domain and a mailbox when an account is automatically created."
340
349
  msgstr ""
341
350
 
342
- #: admin/app_settings.py:230
351
+ #: admin/app_settings.py:242
343
352
  msgid "Create an alias when a mailbox is renamed"
344
353
  msgstr ""
345
354
 
346
- #: admin/app_settings.py:233
355
+ #: admin/app_settings.py:245
347
356
  msgid "Create an alias using the old address when a mailbox is renamed."
348
357
  msgstr ""
349
358
 
350
- #: admin/app_settings.py:245
359
+ #: admin/app_settings.py:257
351
360
  msgid "Aliases"
352
361
  msgstr ""
353
362
 
354
- #: admin/app_settings.py:251
363
+ #: admin/app_settings.py:263
355
364
  msgid "Alias can target any domain"
356
365
  msgstr ""
357
366
 
358
- #: admin/app_settings.py:253
367
+ #: admin/app_settings.py:265
359
368
  msgid "Allow aliases to target any domain, not just the local domains."
360
369
  msgstr ""
361
370
 
362
- #: admin/app_settings.py:260
371
+ #: admin/app_settings.py:272
363
372
  msgid "Alias target block list"
364
373
  msgstr ""
365
374
 
366
- #: admin/app_settings.py:262
375
+ #: admin/app_settings.py:274
367
376
  msgid "A list of domains that aliases cannot target (comma separated)."
368
377
  msgstr ""
369
378
 
370
- #: admin/app_settings.py:270
379
+ #: admin/app_settings.py:282
371
380
  msgid "Alias target allow list"
372
381
  msgstr ""
373
382
 
374
- #: admin/app_settings.py:272
383
+ #: admin/app_settings.py:284
375
384
  msgid "A list of domains that aliases can target (comma separated)."
376
385
  msgstr ""
377
386
 
378
- #: admin/app_settings.py:326 core/api/v2/viewsets.py:174
387
+ #: admin/app_settings.py:338 core/api/v2/viewsets.py:174
379
388
  msgid "Administration"
380
389
  msgstr ""
381
390
 
@@ -395,6 +404,35 @@ msgstr ""
395
404
  msgid "Closed"
396
405
  msgstr ""
397
406
 
407
+ #: admin/dns_checker.py:96
408
+ msgid "MX {} listed by DNSBL provider {}"
409
+ msgstr ""
410
+
411
+ #: admin/dns_checker.py:138
412
+ msgid "Domain has no MX record"
413
+ msgstr ""
414
+
415
+ #: admin/dns_checker.py:141
416
+ msgid "Domain {} has no MX record"
417
+ msgstr ""
418
+
419
+ #: admin/dns_checker.py:159
420
+ msgid "Invalid MX record: {}"
421
+ msgstr ""
422
+
423
+ #: admin/dns_checker.py:166
424
+ #, python-brace-format
425
+ msgid "MX record for domain {0} is invalid: {1}"
426
+ msgstr ""
427
+
428
+ #: admin/dns_checker.py:177
429
+ msgid "[modoboa] MX issue(s) for domain {}"
430
+ msgstr ""
431
+
432
+ #: admin/dns_checker.py:224
433
+ msgid "[modoboa] DNSBL issue(s) for domain {}"
434
+ msgstr ""
435
+
398
436
  #: admin/handlers.py:179
399
437
  msgid "domain alias"
400
438
  msgstr ""
@@ -417,8 +455,8 @@ msgstr ""
417
455
  msgid "You are not allowed to import domain aliases."
418
456
  msgstr ""
419
457
 
420
- #: admin/lib.py:227 admin/tests/test_mx.py:153 admin/tests/test_mx.py:166
421
- #: admin/tests/test_mx.py:171
458
+ #: admin/lib.py:227 admin/tests/test_mx.py:139 admin/tests/test_mx.py:152
459
+ #: admin/tests/test_mx.py:157
422
460
  #, python-format
423
461
  msgid "No DNS record found for %s"
424
462
  msgstr ""
@@ -428,11 +466,11 @@ msgstr ""
428
466
  msgid "No %(type)s record for %(name)s"
429
467
  msgstr ""
430
468
 
431
- #: admin/lib.py:234 admin/tests/test_mx.py:156
469
+ #: admin/lib.py:234 admin/tests/test_mx.py:142
432
470
  msgid "No working name servers found"
433
471
  msgstr ""
434
472
 
435
- #: admin/lib.py:237 admin/tests/test_mx.py:160
473
+ #: admin/lib.py:237 admin/tests/test_mx.py:146
436
474
  #, python-format
437
475
  msgid "DNS resolution timeout, unable to query %s at the moment"
438
476
  msgstr ""
@@ -484,35 +522,6 @@ msgstr ""
484
522
  msgid "Failed to generate DKIM public key"
485
523
  msgstr ""
486
524
 
487
- #: admin/management/commands/subcommands/_mx.py:133
488
- msgid "MX {} listed by DNSBL provider {}"
489
- msgstr ""
490
-
491
- #: admin/management/commands/subcommands/_mx.py:174
492
- msgid "Domain has no MX record"
493
- msgstr ""
494
-
495
- #: admin/management/commands/subcommands/_mx.py:177
496
- msgid "Domain {} has no MX record"
497
- msgstr ""
498
-
499
- #: admin/management/commands/subcommands/_mx.py:195
500
- msgid "Invalid MX record: {}"
501
- msgstr ""
502
-
503
- #: admin/management/commands/subcommands/_mx.py:202
504
- #, python-brace-format
505
- msgid "MX record for domain {0} is invalid: {1}"
506
- msgstr ""
507
-
508
- #: admin/management/commands/subcommands/_mx.py:213
509
- msgid "[modoboa] MX issue(s) for domain {}"
510
- msgstr ""
511
-
512
- #: admin/management/commands/subcommands/_mx.py:269
513
- msgid "[modoboa] DNSBL issue(s) for domain {}"
514
- msgstr ""
515
-
516
525
  #: admin/models/alias.py:43
517
526
  msgid "Domain not found."
518
527
  msgstr ""
@@ -689,17 +698,17 @@ msgstr ""
689
698
  msgid "Modoboa detected that domain %(domain)s has no valid MX record:"
690
699
  msgstr ""
691
700
 
692
- #: admin/tests/test_mx.py:155
701
+ #: admin/tests/test_mx.py:141
693
702
  #, python-format
694
703
  msgid "No MX record for %s"
695
704
  msgstr ""
696
705
 
697
- #: admin/tests/test_mx.py:176 admin/tests/test_mx.py:182
706
+ #: admin/tests/test_mx.py:162 admin/tests/test_mx.py:168
698
707
  #, python-format
699
708
  msgid "Invalid IP address format for %(domain)s; %(addr)s"
700
709
  msgstr ""
701
710
 
702
- #: admin/tests/test_mx.py:199
711
+ #: admin/tests/test_mx.py:185
703
712
  #, python-format
704
713
  msgid "No AAAA record for %s"
705
714
  msgstr ""
@@ -868,11 +877,11 @@ msgid ""
868
877
  "database)"
869
878
  msgstr ""
870
879
 
871
- #: amavis/app_settings.py:236 webmail/app_settings.py:118
880
+ #: amavis/app_settings.py:236 webmail/app_settings.py:155
872
881
  msgid "Display"
873
882
  msgstr ""
874
883
 
875
- #: amavis/app_settings.py:243 webmail/app_settings.py:144
884
+ #: amavis/app_settings.py:243 webmail/app_settings.py:181
876
885
  msgid "Number of displayed emails per page"
877
886
  msgstr ""
878
887
 
@@ -1117,7 +1126,7 @@ msgstr ""
1117
1126
  msgid "Allow domain administrators to manage user calendars (read and write)"
1118
1127
  msgstr ""
1119
1128
 
1120
- #: calendars/app_settings.py:60 core/app_settings.py:676
1129
+ #: calendars/app_settings.py:60 core/app_settings.py:664
1121
1130
  #: rspamd/app_settings.py:45
1122
1131
  msgid "Miscellaneous"
1123
1132
  msgstr ""
@@ -1135,11 +1144,11 @@ msgstr ""
1135
1144
  msgid "Calendars"
1136
1145
  msgstr ""
1137
1146
 
1138
- #: calendars/models.py:48 calendars/models.py:65 contacts/models.py:38
1147
+ #: calendars/models.py:48 calendars/models.py:65 contacts/models.py:39
1139
1148
  msgid "Server location is not set, please fix it."
1140
1149
  msgstr ""
1141
1150
 
1142
- #: calendars/viewsets.py:197
1151
+ #: calendars/viewsets.py:199
1143
1152
  msgid "Uploaded file is too big (max: {} bytes)"
1144
1153
  msgstr ""
1145
1154
 
@@ -1218,7 +1227,7 @@ msgstr ""
1218
1227
  msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
1219
1228
  msgstr ""
1220
1229
 
1221
- #: core/api/v1/serializers.py:93 core/api/v2/serializers.py:445
1230
+ #: core/api/v1/serializers.py:93 core/api/v2/serializers.py:438
1222
1231
  msgid "Invalid password"
1223
1232
  msgstr ""
1224
1233
 
@@ -1230,24 +1239,20 @@ msgstr ""
1230
1239
  msgid "Local"
1231
1240
  msgstr ""
1232
1241
 
1233
- #: core/api/v2/serializers.py:194 core/app_settings.py:17
1234
- msgid "User profile"
1235
- msgstr ""
1236
-
1237
- #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
1238
- #: core/api/v2/serializers.py:228
1242
+ #: core/api/v2/serializers.py:206 core/api/v2/serializers.py:214
1243
+ #: core/api/v2/serializers.py:221
1239
1244
  msgid "Invalid syntax"
1240
1245
  msgstr ""
1241
1246
 
1242
- #: core/api/v2/serializers.py:233
1247
+ #: core/api/v2/serializers.py:226
1243
1248
  msgid "Invalid rounds number"
1244
1249
  msgstr ""
1245
1250
 
1246
- #: core/api/v2/serializers.py:433 core/forms.py:81
1251
+ #: core/api/v2/serializers.py:426 core/forms.py:81
1247
1252
  msgid "This code is invalid"
1248
1253
  msgstr ""
1249
1254
 
1250
- #: core/api/v2/serializers.py:503 core/views/auth.py:213 core/views/auth.py:266
1255
+ #: core/api/v2/serializers.py:496 core/views/auth.py:213 core/views/auth.py:266
1251
1256
  msgid "Please use the following code to recover your Modoboa password: {}"
1252
1257
  msgstr ""
1253
1258
 
@@ -1272,525 +1277,517 @@ msgid "Calendar"
1272
1277
  msgstr ""
1273
1278
 
1274
1279
  #: core/api/v2/viewsets.py:215 core/api/v2/viewsets.py:217
1275
- #: webmail/app_settings.py:258 webmail/app_settings.py:265
1280
+ #: webmail/app_settings.py:295 webmail/app_settings.py:302
1276
1281
  msgid "Webmail"
1277
1282
  msgstr ""
1278
1283
 
1279
- #: core/app_settings.py:37
1284
+ #: core/app_settings.py:25
1280
1285
  msgid "Authentication"
1281
1286
  msgstr ""
1282
1287
 
1283
- #: core/app_settings.py:43
1288
+ #: core/app_settings.py:31
1284
1289
  msgid "Authentication type"
1285
1290
  msgstr ""
1286
1291
 
1287
- #: core/app_settings.py:45
1292
+ #: core/app_settings.py:33
1288
1293
  msgid "The backend used for authentication"
1289
1294
  msgstr ""
1290
1295
 
1291
- #: core/app_settings.py:52
1296
+ #: core/app_settings.py:40
1292
1297
  msgid "Default password scheme"
1293
1298
  msgstr ""
1294
1299
 
1295
- #: core/app_settings.py:54
1300
+ #: core/app_settings.py:42
1296
1301
  msgid "Scheme used to crypt mailbox passwords"
1297
1302
  msgstr ""
1298
1303
 
1299
- #: core/app_settings.py:61
1304
+ #: core/app_settings.py:49
1300
1305
  msgid "Rounds"
1301
1306
  msgstr ""
1302
1307
 
1303
- #: core/app_settings.py:63
1308
+ #: core/app_settings.py:51
1304
1309
  msgid ""
1305
1310
  "Number of rounds to use (only used by sha256crypt and sha512crypt). Must be "
1306
1311
  "between 1000 and 999999999, inclusive."
1307
1312
  msgstr ""
1308
1313
 
1309
- #: core/app_settings.py:73
1314
+ #: core/app_settings.py:61
1310
1315
  msgid "Update password scheme at login"
1311
1316
  msgstr ""
1312
1317
 
1313
- #: core/app_settings.py:76
1318
+ #: core/app_settings.py:64
1314
1319
  msgid "Update user password at login to use the default password scheme"
1315
1320
  msgstr ""
1316
1321
 
1317
- #: core/app_settings.py:84
1322
+ #: core/app_settings.py:72
1318
1323
  msgid "Default password"
1319
1324
  msgstr ""
1320
1325
 
1321
- #: core/app_settings.py:86
1326
+ #: core/app_settings.py:74
1322
1327
  msgid "Default password for automatically created accounts."
1323
1328
  msgstr ""
1324
1329
 
1325
- #: core/app_settings.py:93
1330
+ #: core/app_settings.py:81
1326
1331
  msgid "Random password length"
1327
1332
  msgstr ""
1328
1333
 
1329
- #: core/app_settings.py:95
1334
+ #: core/app_settings.py:83
1330
1335
  msgid "Length of randomly generated passwords."
1331
1336
  msgstr ""
1332
1337
 
1333
- #: core/app_settings.py:103
1338
+ #: core/app_settings.py:91
1334
1339
  msgid "Allow special characters for random password"
1335
1340
  msgstr ""
1336
1341
 
1337
- #: core/app_settings.py:106
1342
+ #: core/app_settings.py:94
1338
1343
  msgid "Enable special characters in randomly generated passwords."
1339
1344
  msgstr ""
1340
1345
 
1341
- #: core/app_settings.py:114
1346
+ #: core/app_settings.py:102
1342
1347
  msgid "Update password service URL"
1343
1348
  msgstr ""
1344
1349
 
1345
- #: core/app_settings.py:116
1350
+ #: core/app_settings.py:104
1346
1351
  msgid ""
1347
1352
  "The URL of an external page where users will be able to update their "
1348
1353
  "password. It applies only to non local users, ie. those automatically "
1349
1354
  "created after a successful external authentication (LDAP, SMTP)."
1350
1355
  msgstr ""
1351
1356
 
1352
- #: core/app_settings.py:126
1357
+ #: core/app_settings.py:114
1353
1358
  msgid "Password recovery announcement"
1354
1359
  msgstr ""
1355
1360
 
1356
- #: core/app_settings.py:128
1361
+ #: core/app_settings.py:116
1357
1362
  msgid "A temporary message that will be displayed on the reset password page."
1358
1363
  msgstr ""
1359
1364
 
1360
- #: core/app_settings.py:137
1365
+ #: core/app_settings.py:125
1361
1366
  msgid "Enable password recovery by SMS"
1362
1367
  msgstr ""
1363
1368
 
1364
- #: core/app_settings.py:140
1369
+ #: core/app_settings.py:128
1365
1370
  msgid "Enable password recovery by SMS for users who filled a phone number."
1366
1371
  msgstr ""
1367
1372
 
1368
- #: core/app_settings.py:148
1373
+ #: core/app_settings.py:136
1369
1374
  msgid "SMS provider"
1370
1375
  msgstr ""
1371
1376
 
1372
- #: core/app_settings.py:151
1377
+ #: core/app_settings.py:139
1373
1378
  msgid "Choose a provider to send password recovery SMS"
1374
1379
  msgstr ""
1375
1380
 
1376
- #: core/app_settings.py:163
1381
+ #: core/app_settings.py:151
1377
1382
  msgid "LDAP"
1378
1383
  msgstr ""
1379
1384
 
1380
- #: core/app_settings.py:169 sievefilters/app_settings.py:18
1385
+ #: core/app_settings.py:157 sievefilters/app_settings.py:18
1381
1386
  #: sievefilters/app_settings.py:51 webmail/app_settings.py:36
1382
- #: webmail/app_settings.py:73
1387
+ #: webmail/app_settings.py:73 webmail/app_settings.py:119
1383
1388
  msgid "Server address"
1384
1389
  msgstr ""
1385
1390
 
1386
- #: core/app_settings.py:171
1391
+ #: core/app_settings.py:159
1387
1392
  msgid "The IP address or the DNS name of the LDAP server"
1388
1393
  msgstr ""
1389
1394
 
1390
- #: core/app_settings.py:178 sievefilters/app_settings.py:25
1395
+ #: core/app_settings.py:166 sievefilters/app_settings.py:25
1391
1396
  #: sievefilters/app_settings.py:67 webmail/app_settings.py:54
1392
- #: webmail/app_settings.py:91
1397
+ #: webmail/app_settings.py:91 webmail/app_settings.py:137
1393
1398
  msgid "Server port"
1394
1399
  msgstr ""
1395
1400
 
1396
- #: core/app_settings.py:180
1401
+ #: core/app_settings.py:168
1397
1402
  msgid "The TCP port number used by the LDAP server"
1398
1403
  msgstr ""
1399
1404
 
1400
- #: core/app_settings.py:188
1405
+ #: core/app_settings.py:176
1401
1406
  msgid "Enable secondary server (fallback)"
1402
1407
  msgstr ""
1403
1408
 
1404
- #: core/app_settings.py:191
1409
+ #: core/app_settings.py:179
1405
1410
  msgid ""
1406
1411
  "Enable a secondary LDAP server which will be used if the primary one fails"
1407
1412
  msgstr ""
1408
1413
 
1409
- #: core/app_settings.py:199
1414
+ #: core/app_settings.py:187
1410
1415
  msgid "Secondary server address"
1411
1416
  msgstr ""
1412
1417
 
1413
- #: core/app_settings.py:202
1418
+ #: core/app_settings.py:190
1414
1419
  msgid "The IP address or the DNS name of the seondary LDAP server"
1415
1420
  msgstr ""
1416
1421
 
1417
- #: core/app_settings.py:209
1422
+ #: core/app_settings.py:197
1418
1423
  msgid "Secondary server port"
1419
1424
  msgstr ""
1420
1425
 
1421
- #: core/app_settings.py:212
1426
+ #: core/app_settings.py:200
1422
1427
  msgid "The TCP port number used by the LDAP secondary server"
1423
1428
  msgstr ""
1424
1429
 
1425
- #: core/app_settings.py:219 sievefilters/app_settings.py:58
1430
+ #: core/app_settings.py:207 sievefilters/app_settings.py:58
1426
1431
  #: webmail/app_settings.py:45
1427
1432
  msgid "Use a secured connection"
1428
1433
  msgstr ""
1429
1434
 
1430
- #: core/app_settings.py:221
1435
+ #: core/app_settings.py:209
1431
1436
  msgid "Use an SSL/STARTTLS connection to access the LDAP server"
1432
1437
  msgstr ""
1433
1438
 
1434
- #: core/app_settings.py:228
1439
+ #: core/app_settings.py:216
1435
1440
  msgid "Active Directory"
1436
1441
  msgstr ""
1437
1442
 
1438
- #: core/app_settings.py:230
1443
+ #: core/app_settings.py:218
1439
1444
  msgid "Tell if the LDAP server is an Active Directory one"
1440
1445
  msgstr ""
1441
1446
 
1442
- #: core/app_settings.py:237
1447
+ #: core/app_settings.py:225
1443
1448
  msgid "Administrator groups"
1444
1449
  msgstr ""
1445
1450
 
1446
- #: core/app_settings.py:239
1451
+ #: core/app_settings.py:227
1447
1452
  msgid ""
1448
1453
  "Members of those LDAP Posix groups will be created as domain administrators. "
1449
1454
  "Use ';' characters to separate groups."
1450
1455
  msgstr ""
1451
1456
 
1452
- #: core/app_settings.py:248
1457
+ #: core/app_settings.py:236
1453
1458
  msgid "Group type"
1454
1459
  msgstr ""
1455
1460
 
1456
- #: core/app_settings.py:250
1461
+ #: core/app_settings.py:238
1457
1462
  msgid "The LDAP group type to use with your directory."
1458
1463
  msgstr ""
1459
1464
 
1460
- #: core/app_settings.py:257
1465
+ #: core/app_settings.py:245
1461
1466
  msgid "Groups search base"
1462
1467
  msgstr ""
1463
1468
 
1464
- #: core/app_settings.py:259
1469
+ #: core/app_settings.py:247
1465
1470
  msgid "The distinguished name of the search base used to find groups"
1466
1471
  msgstr ""
1467
1472
 
1468
- #: core/app_settings.py:267
1473
+ #: core/app_settings.py:255
1469
1474
  msgid "Password attribute"
1470
1475
  msgstr ""
1471
1476
 
1472
- #: core/app_settings.py:269
1477
+ #: core/app_settings.py:257
1473
1478
  msgid "The attribute used to store user passwords"
1474
1479
  msgstr ""
1475
1480
 
1476
- #: core/app_settings.py:276
1481
+ #: core/app_settings.py:264
1477
1482
  msgid "LDAP authentication settings"
1478
1483
  msgstr ""
1479
1484
 
1480
- #: core/app_settings.py:284
1485
+ #: core/app_settings.py:272
1481
1486
  msgid "Authentication method"
1482
1487
  msgstr ""
1483
1488
 
1484
- #: core/app_settings.py:287
1489
+ #: core/app_settings.py:275
1485
1490
  msgid "Choose the authentication method to use"
1486
1491
  msgstr ""
1487
1492
 
1488
- #: core/app_settings.py:294 core/app_settings.py:357
1493
+ #: core/app_settings.py:282 core/app_settings.py:345
1489
1494
  msgid "Bind DN"
1490
1495
  msgstr ""
1491
1496
 
1492
- #: core/app_settings.py:296 core/app_settings.py:359
1497
+ #: core/app_settings.py:284 core/app_settings.py:347
1493
1498
  msgid ""
1494
1499
  "The distinguished name to use when binding to the LDAP server. Leave empty "
1495
1500
  "for an anonymous bind"
1496
1501
  msgstr ""
1497
1502
 
1498
- #: core/app_settings.py:305 core/app_settings.py:367
1503
+ #: core/app_settings.py:293 core/app_settings.py:355
1499
1504
  msgid "Bind password"
1500
1505
  msgstr ""
1501
1506
 
1502
- #: core/app_settings.py:307 core/app_settings.py:369
1507
+ #: core/app_settings.py:295 core/app_settings.py:357
1503
1508
  msgid "The password to use when binding to the LDAP server (with 'Bind DN')"
1504
1509
  msgstr ""
1505
1510
 
1506
- #: core/app_settings.py:317 core/app_settings.py:422
1511
+ #: core/app_settings.py:305 core/app_settings.py:410
1507
1512
  msgid "Users search base"
1508
1513
  msgstr ""
1509
1514
 
1510
- #: core/app_settings.py:319 core/app_settings.py:424
1515
+ #: core/app_settings.py:307 core/app_settings.py:412
1511
1516
  msgid "The distinguished name of the search base used to find users"
1512
1517
  msgstr ""
1513
1518
 
1514
- #: core/app_settings.py:328 core/app_settings.py:433
1519
+ #: core/app_settings.py:316 core/app_settings.py:421
1515
1520
  msgid "Search filter"
1516
1521
  msgstr ""
1517
1522
 
1518
- #: core/app_settings.py:330 core/app_settings.py:435
1523
+ #: core/app_settings.py:318 core/app_settings.py:423
1519
1524
  msgid ""
1520
1525
  "An optional filter string (e.g. '(objectClass=person)'). In order to be "
1521
1526
  "valid, it must be enclosed in parentheses."
1522
1527
  msgstr ""
1523
1528
 
1524
- #: core/app_settings.py:339
1529
+ #: core/app_settings.py:327
1525
1530
  msgid "User DN template"
1526
1531
  msgstr ""
1527
1532
 
1528
- #: core/app_settings.py:341
1533
+ #: core/app_settings.py:329
1529
1534
  #, python-format
1530
1535
  msgid ""
1531
1536
  "The template used to construct a user's DN. It should contain one "
1532
1537
  "placeholder (ie. %(user)s)"
1533
1538
  msgstr ""
1534
1539
 
1535
- #: core/app_settings.py:350
1540
+ #: core/app_settings.py:338
1536
1541
  msgid "LDAP synchronization settings"
1537
1542
  msgstr ""
1538
1543
 
1539
- #: core/app_settings.py:378
1544
+ #: core/app_settings.py:366
1540
1545
  msgid "Enable export to LDAP"
1541
1546
  msgstr ""
1542
1547
 
1543
- #: core/app_settings.py:380
1548
+ #: core/app_settings.py:368
1544
1549
  msgid ""
1545
1550
  "Enable automatic synchronization between local database and LDAP directory"
1546
1551
  msgstr ""
1547
1552
 
1548
- #: core/app_settings.py:389
1553
+ #: core/app_settings.py:377
1549
1554
  msgid "Delete remote LDAP account when local account is deleted"
1550
1555
  msgstr ""
1551
1556
 
1552
- #: core/app_settings.py:392
1557
+ #: core/app_settings.py:380
1553
1558
  msgid ""
1554
1559
  "Delete remote LDAP account when local account is deleted, otherwise it will "
1555
1560
  "be disabled."
1556
1561
  msgstr ""
1557
1562
 
1558
- #: core/app_settings.py:401
1563
+ #: core/app_settings.py:389
1559
1564
  msgid "Account DN template"
1560
1565
  msgstr ""
1561
1566
 
1562
- #: core/app_settings.py:403
1567
+ #: core/app_settings.py:391
1563
1568
  #, python-format
1564
1569
  msgid ""
1565
1570
  "The template used to construct an account's DN. It should contain one "
1566
1571
  "placeholder (ie. %(user)s)"
1567
1572
  msgstr ""
1568
1573
 
1569
- #: core/app_settings.py:412
1574
+ #: core/app_settings.py:400
1570
1575
  msgid "Enable import from LDAP"
1571
1576
  msgstr ""
1572
1577
 
1573
- #: core/app_settings.py:414
1578
+ #: core/app_settings.py:402
1574
1579
  msgid "Enable account synchronization from LDAP directory to local database"
1575
1580
  msgstr ""
1576
1581
 
1577
- #: core/app_settings.py:444
1582
+ #: core/app_settings.py:432
1578
1583
  msgid "Username attribute"
1579
1584
  msgstr ""
1580
1585
 
1581
- #: core/app_settings.py:446
1586
+ #: core/app_settings.py:434
1582
1587
  msgid "The name of the LDAP attribute where the username can be found."
1583
1588
  msgstr ""
1584
1589
 
1585
- #: core/app_settings.py:455
1590
+ #: core/app_settings.py:443
1586
1591
  msgid "Enable Dovecot LDAP sync"
1587
1592
  msgstr ""
1588
1593
 
1589
- #: core/app_settings.py:457
1594
+ #: core/app_settings.py:445
1590
1595
  msgid "LDAP authentication settings will be applied to Dovecot configuration."
1591
1596
  msgstr ""
1592
1597
 
1593
- #: core/app_settings.py:465
1598
+ #: core/app_settings.py:453
1594
1599
  msgid "Dovecot LDAP config file"
1595
1600
  msgstr ""
1596
1601
 
1597
- #: core/app_settings.py:467
1602
+ #: core/app_settings.py:455
1598
1603
  msgid ""
1599
1604
  "Location of the configuration file which contains Dovecot LDAP settings."
1600
1605
  msgstr ""
1601
1606
 
1602
- #: core/app_settings.py:480
1607
+ #: core/app_settings.py:468
1603
1608
  msgid "Dashboard"
1604
1609
  msgstr ""
1605
1610
 
1606
- #: core/app_settings.py:486
1611
+ #: core/app_settings.py:474
1607
1612
  msgid "Custom welcome message"
1608
1613
  msgstr ""
1609
1614
 
1610
- #: core/app_settings.py:488
1615
+ #: core/app_settings.py:476
1611
1616
  msgid "A welcome message that will be displayed instead the default one"
1612
1617
  msgstr ""
1613
1618
 
1614
- #: core/app_settings.py:495
1619
+ #: core/app_settings.py:483
1615
1620
  msgid "Custom RSS feed"
1616
1621
  msgstr ""
1617
1622
 
1618
- #: core/app_settings.py:497
1623
+ #: core/app_settings.py:485
1619
1624
  msgid "Display custom RSS feed to resellers and domain administrators"
1620
1625
  msgstr ""
1621
1626
 
1622
- #: core/app_settings.py:506
1627
+ #: core/app_settings.py:494
1623
1628
  msgid "Display custom RSS feed to super admins"
1624
1629
  msgstr ""
1625
1630
 
1626
- #: core/app_settings.py:509
1631
+ #: core/app_settings.py:497
1627
1632
  msgid "Display custom RSS feed also to super administrators"
1628
1633
  msgstr ""
1629
1634
 
1630
- #: core/app_settings.py:517
1635
+ #: core/app_settings.py:505
1631
1636
  msgid "Hide features widget"
1632
1637
  msgstr ""
1633
1638
 
1634
- #: core/app_settings.py:519
1639
+ #: core/app_settings.py:507
1635
1640
  msgid "Hide features widget for resellers and domain administrators"
1636
1641
  msgstr ""
1637
1642
 
1638
- #: core/app_settings.py:531
1643
+ #: core/app_settings.py:519
1639
1644
  msgid "Theme"
1640
1645
  msgstr ""
1641
1646
 
1642
- #: core/app_settings.py:537
1647
+ #: core/app_settings.py:525
1643
1648
  msgid "Primary theme color"
1644
1649
  msgstr ""
1645
1650
 
1646
- #: core/app_settings.py:539
1651
+ #: core/app_settings.py:527
1647
1652
  msgid ""
1648
1653
  "Primary color of the theme (hexadecimal code), used as the background color "
1649
1654
  "of the left menu for example"
1650
1655
  msgstr ""
1651
1656
 
1652
- #: core/app_settings.py:548
1657
+ #: core/app_settings.py:536
1653
1658
  msgid "Primary theme color (lighter version)"
1654
1659
  msgstr ""
1655
1660
 
1656
- #: core/app_settings.py:551 core/app_settings.py:563
1661
+ #: core/app_settings.py:539 core/app_settings.py:551
1657
1662
  msgid "Primary color of the theme (hexadecimal code)"
1658
1663
  msgstr ""
1659
1664
 
1660
- #: core/app_settings.py:560
1665
+ #: core/app_settings.py:548
1661
1666
  msgid "Primary theme color (darker version)"
1662
1667
  msgstr ""
1663
1668
 
1664
- #: core/app_settings.py:571
1669
+ #: core/app_settings.py:559
1665
1670
  msgid "Secondary theme color"
1666
1671
  msgstr ""
1667
1672
 
1668
- #: core/app_settings.py:573
1673
+ #: core/app_settings.py:561
1669
1674
  msgid ""
1670
1675
  "Secondary color of the theme (hexadecimal code), used as the background "
1671
1676
  "color of some buttons for example"
1672
1677
  msgstr ""
1673
1678
 
1674
- #: core/app_settings.py:581
1679
+ #: core/app_settings.py:569
1675
1680
  msgid "Labels theme color"
1676
1681
  msgstr ""
1677
1682
 
1678
- #: core/app_settings.py:583
1683
+ #: core/app_settings.py:571
1679
1684
  msgid "Theme color for labels (hexadecimal code)"
1680
1685
  msgstr ""
1681
1686
 
1682
- #: core/app_settings.py:595
1687
+ #: core/app_settings.py:583
1683
1688
  msgid "Notifications"
1684
1689
  msgstr ""
1685
1690
 
1686
- #: core/app_settings.py:601
1691
+ #: core/app_settings.py:589
1687
1692
  msgid "Sender address"
1688
1693
  msgstr ""
1689
1694
 
1690
- #: core/app_settings.py:603
1695
+ #: core/app_settings.py:591
1691
1696
  msgid "Email address used to send notifications."
1692
1697
  msgstr ""
1693
1698
 
1694
- #: core/app_settings.py:614
1699
+ #: core/app_settings.py:602
1695
1700
  msgid "Public API"
1696
1701
  msgstr ""
1697
1702
 
1698
- #: core/app_settings.py:620
1703
+ #: core/app_settings.py:608
1699
1704
  msgid "Enable communication"
1700
1705
  msgstr ""
1701
1706
 
1702
- #: core/app_settings.py:622 core/app_settings.py:632
1707
+ #: core/app_settings.py:610 core/app_settings.py:620
1703
1708
  msgid "Automatically checks if a newer version is available"
1704
1709
  msgstr ""
1705
1710
 
1706
- #: core/app_settings.py:629
1711
+ #: core/app_settings.py:617
1707
1712
  msgid "Check new versions"
1708
1713
  msgstr ""
1709
1714
 
1710
- #: core/app_settings.py:640
1715
+ #: core/app_settings.py:628
1711
1716
  msgid "Send an email when new versions are found"
1712
1717
  msgstr ""
1713
1718
 
1714
- #: core/app_settings.py:644
1719
+ #: core/app_settings.py:632
1715
1720
  msgid "Send an email to notify admins about new versions"
1716
1721
  msgstr ""
1717
1722
 
1718
- #: core/app_settings.py:651 sievefilters/constants.py:25
1723
+ #: core/app_settings.py:639 sievefilters/constants.py:25
1719
1724
  msgid "Recipient"
1720
1725
  msgstr ""
1721
1726
 
1722
- #: core/app_settings.py:654
1727
+ #: core/app_settings.py:642
1723
1728
  msgid "Recipient of new versions notification emails."
1724
1729
  msgstr ""
1725
1730
 
1726
- #: core/app_settings.py:661
1731
+ #: core/app_settings.py:649
1727
1732
  msgid "Send statistics"
1728
1733
  msgstr ""
1729
1734
 
1730
- #: core/app_settings.py:664
1735
+ #: core/app_settings.py:652
1731
1736
  msgid "Send statistics to Modoboa public API (counters and used extensions)"
1732
1737
  msgstr ""
1733
1738
 
1734
- #: core/app_settings.py:683
1739
+ #: core/app_settings.py:671
1735
1740
  msgid "Enable inactive account tracking"
1736
1741
  msgstr ""
1737
1742
 
1738
- #: core/app_settings.py:686
1743
+ #: core/app_settings.py:674
1739
1744
  msgid ""
1740
1745
  "Allow the administrator to set a threshold (in days) beyond which an account "
1741
1746
  "is considered inactive if the user hasn't logged in"
1742
1747
  msgstr ""
1743
1748
 
1744
- #: core/app_settings.py:695
1749
+ #: core/app_settings.py:683
1745
1750
  msgid "Inactive account threshold"
1746
1751
  msgstr ""
1747
1752
 
1748
- #: core/app_settings.py:698
1753
+ #: core/app_settings.py:686
1749
1754
  msgid ""
1750
1755
  "An account with a last login date greater than this threshold (in days) will "
1751
1756
  "be considered as inactive"
1752
1757
  msgstr ""
1753
1758
 
1754
- #: core/app_settings.py:707
1759
+ #: core/app_settings.py:695
1755
1760
  msgid "Top notifications check interval"
1756
1761
  msgstr ""
1757
1762
 
1758
- #: core/app_settings.py:710
1763
+ #: core/app_settings.py:698
1759
1764
  msgid "Interval between two top notification checks (in seconds)"
1760
1765
  msgstr ""
1761
1766
 
1762
- #: core/app_settings.py:717
1767
+ #: core/app_settings.py:705
1763
1768
  msgid "Maximum log record age"
1764
1769
  msgstr ""
1765
1770
 
1766
- #: core/app_settings.py:719
1771
+ #: core/app_settings.py:707
1767
1772
  msgid "The maximum age in days of a log record"
1768
1773
  msgstr ""
1769
1774
 
1770
- #: core/app_settings.py:727
1775
+ #: core/app_settings.py:715
1771
1776
  msgid "Retention time in message history"
1772
1777
  msgstr ""
1773
1778
 
1774
- #: core/app_settings.py:730
1779
+ #: core/app_settings.py:718
1775
1780
  msgid "Retention time (in days) of a message in the message history section"
1776
1781
  msgstr ""
1777
1782
 
1778
- #: core/app_settings.py:737
1783
+ #: core/app_settings.py:725
1779
1784
  msgid "Items per page"
1780
1785
  msgstr ""
1781
1786
 
1782
- #: core/app_settings.py:739
1787
+ #: core/app_settings.py:727
1783
1788
  msgid "Number of displayed items per page"
1784
1789
  msgstr ""
1785
1790
 
1786
- #: core/app_settings.py:746
1787
- msgid "Default top redirection"
1788
- msgstr ""
1789
-
1790
- #: core/app_settings.py:748
1791
- msgid "The default redirection used when no application is specified"
1792
- msgstr ""
1793
-
1794
1791
  #: core/checks.py:15
1795
1792
  msgid ""
1796
1793
  "You have USE_TZ set to False, this may result in issues during transitions "
@@ -2123,7 +2120,7 @@ msgid "Not resolved"
2123
2120
  msgstr ""
2124
2121
 
2125
2122
  #: dmarc/models.py:10 dmarc/models.py:16 pdfcredentials/constants.py:7
2126
- #: webmail/constants.py:18
2123
+ #: webmail/constants.py:38
2127
2124
  msgid "None"
2128
2125
  msgstr ""
2129
2126
 
@@ -3003,7 +3000,7 @@ msgstr ""
3003
3000
  msgid "is not"
3004
3001
  msgstr ""
3005
3002
 
3006
- #: sievefilters/constants.py:23 webmail/lib/imapemail.py:304
3003
+ #: sievefilters/constants.py:23 webmail/lib/imapemail.py:302
3007
3004
  msgid "Subject"
3008
3005
  msgstr ""
3009
3006
 
@@ -3229,19 +3226,19 @@ msgstr ""
3229
3226
  msgid "SMTP settings"
3230
3227
  msgstr ""
3231
3228
 
3232
- #: webmail/app_settings.py:75
3229
+ #: webmail/app_settings.py:75 webmail/app_settings.py:121
3233
3230
  msgid "Address of your SMTP server"
3234
3231
  msgstr ""
3235
3232
 
3236
- #: webmail/app_settings.py:82
3233
+ #: webmail/app_settings.py:82 webmail/app_settings.py:128
3237
3234
  msgid "Secured connection mode"
3238
3235
  msgstr ""
3239
3236
 
3240
- #: webmail/app_settings.py:84
3237
+ #: webmail/app_settings.py:84 webmail/app_settings.py:130
3241
3238
  msgid "Use a secured connection to access SMTP server"
3242
3239
  msgstr ""
3243
3240
 
3244
- #: webmail/app_settings.py:93
3241
+ #: webmail/app_settings.py:93 webmail/app_settings.py:139
3245
3242
  msgid "Listening port of your SMTP server"
3246
3243
  msgstr ""
3247
3244
 
@@ -3253,95 +3250,99 @@ msgstr ""
3253
3250
  msgid "Server needs authentication"
3254
3251
  msgstr ""
3255
3252
 
3256
- #: webmail/app_settings.py:124
3253
+ #: webmail/app_settings.py:113
3254
+ msgid "Scheduling settings"
3255
+ msgstr ""
3256
+
3257
+ #: webmail/app_settings.py:161
3257
3258
  msgid "Default message display mode"
3258
3259
  msgstr ""
3259
3260
 
3260
- #: webmail/app_settings.py:126
3261
+ #: webmail/app_settings.py:163
3261
3262
  msgid "The default mode used when displaying a message"
3262
3263
  msgstr ""
3263
3264
 
3264
- #: webmail/app_settings.py:133
3265
+ #: webmail/app_settings.py:170
3265
3266
  msgid "Enable HTML links display"
3266
3267
  msgstr ""
3267
3268
 
3268
- #: webmail/app_settings.py:136
3269
+ #: webmail/app_settings.py:173
3269
3270
  msgid "Enable/Disable HTML links display"
3270
3271
  msgstr ""
3271
3272
 
3272
- #: webmail/app_settings.py:147
3273
+ #: webmail/app_settings.py:184
3273
3274
  msgid "Sets the maximum number of messages displayed in a page"
3274
3275
  msgstr ""
3275
3276
 
3276
- #: webmail/app_settings.py:154
3277
+ #: webmail/app_settings.py:191
3277
3278
  msgid "Listing refresh rate"
3278
3279
  msgstr ""
3279
3280
 
3280
- #: webmail/app_settings.py:156
3281
+ #: webmail/app_settings.py:193
3281
3282
  msgid "Automatic listing refresh rate (in secconds)"
3282
3283
  msgstr ""
3283
3284
 
3284
- #: webmail/app_settings.py:163
3285
+ #: webmail/app_settings.py:200
3285
3286
  msgid "Folder container's width"
3286
3287
  msgstr ""
3287
3288
 
3288
- #: webmail/app_settings.py:165
3289
+ #: webmail/app_settings.py:202
3289
3290
  msgid "The width of the folder list container"
3290
3291
  msgstr ""
3291
3292
 
3292
- #: webmail/app_settings.py:176
3293
+ #: webmail/app_settings.py:213
3293
3294
  msgid "Folders"
3294
3295
  msgstr ""
3295
3296
 
3296
- #: webmail/app_settings.py:182
3297
+ #: webmail/app_settings.py:219
3297
3298
  msgid "Trash folder"
3298
3299
  msgstr ""
3299
3300
 
3300
- #: webmail/app_settings.py:184
3301
+ #: webmail/app_settings.py:221
3301
3302
  msgid "Folder where deleted messages go"
3302
3303
  msgstr ""
3303
3304
 
3304
- #: webmail/app_settings.py:191
3305
+ #: webmail/app_settings.py:228
3305
3306
  msgid "Sent folder"
3306
3307
  msgstr ""
3307
3308
 
3308
- #: webmail/app_settings.py:193
3309
+ #: webmail/app_settings.py:230
3309
3310
  msgid "Folder where copies of sent messages go"
3310
3311
  msgstr ""
3311
3312
 
3312
- #: webmail/app_settings.py:200
3313
+ #: webmail/app_settings.py:237
3313
3314
  msgid "Drafts folder"
3314
3315
  msgstr ""
3315
3316
 
3316
- #: webmail/app_settings.py:201
3317
+ #: webmail/app_settings.py:238
3317
3318
  msgid "Folder where drafts go"
3318
3319
  msgstr ""
3319
3320
 
3320
- #: webmail/app_settings.py:207
3321
+ #: webmail/app_settings.py:244
3321
3322
  msgid "Junk folder"
3322
3323
  msgstr ""
3323
3324
 
3324
- #: webmail/app_settings.py:209
3325
+ #: webmail/app_settings.py:246
3325
3326
  msgid "Folder where junk messages should go"
3326
3327
  msgstr ""
3327
3328
 
3328
- #: webmail/app_settings.py:220
3329
+ #: webmail/app_settings.py:257
3329
3330
  msgid "Composing messages"
3330
3331
  msgstr ""
3331
3332
 
3332
- #: webmail/app_settings.py:226
3333
+ #: webmail/app_settings.py:263
3333
3334
  msgid "Default editor"
3334
3335
  msgstr ""
3335
3336
 
3336
- #: webmail/app_settings.py:228
3337
+ #: webmail/app_settings.py:265
3337
3338
  msgid "The default editor to use when composing a message"
3338
3339
  msgstr ""
3339
3340
 
3340
- #: webmail/app_settings.py:235
3341
+ #: webmail/app_settings.py:272
3341
3342
  msgid "Signature text"
3342
3343
  msgstr ""
3343
3344
 
3344
- #: webmail/app_settings.py:237
3345
+ #: webmail/app_settings.py:274
3345
3346
  msgid "User defined email signature"
3346
3347
  msgstr ""
3347
3348
 
@@ -3355,43 +3356,59 @@ msgstr ""
3355
3356
  msgid "Failed to remove attachment: "
3356
3357
  msgstr "Nepodarilo sa vytvoriť účet LDAP: {}"
3357
3358
 
3358
- #: webmail/lib/imapemail.py:272
3359
+ #: webmail/lib/imapemail.py:270
3359
3360
  msgid "wrote:"
3360
3361
  msgstr ""
3361
3362
 
3362
- #: webmail/lib/imapemail.py:306
3363
+ #: webmail/lib/imapemail.py:304
3363
3364
  msgid "Date"
3364
3365
  msgstr ""
3365
3366
 
3366
- #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3367
+ #: webmail/lib/imapemail.py:320 webmail/lib/imapemail.py:323
3367
3368
  msgid "Original message"
3368
3369
  msgstr ""
3369
3370
 
3370
- #: webmail/lib/imaputils.py:221
3371
+ #: webmail/lib/imaputils.py:222
3371
3372
  msgid "Failed to retrieve hierarchy delimiter"
3372
3373
  msgstr ""
3373
3374
 
3374
- #: webmail/lib/imaputils.py:472
3375
+ #: webmail/lib/imaputils.py:478
3375
3376
  msgid "Inbox"
3376
3377
  msgstr ""
3377
3378
 
3378
- #: webmail/lib/imaputils.py:476
3379
+ #: webmail/lib/imaputils.py:482
3379
3380
  msgid "Drafts"
3380
3381
  msgstr ""
3381
3382
 
3382
- #: webmail/lib/imaputils.py:481
3383
+ #: webmail/lib/imaputils.py:487
3383
3384
  msgid "Junk"
3384
3385
  msgstr ""
3385
3386
 
3386
- #: webmail/lib/imaputils.py:486
3387
+ #: webmail/lib/imaputils.py:492
3387
3388
  msgid "Sent"
3388
3389
  msgstr ""
3389
3390
 
3390
- #: webmail/lib/imaputils.py:491
3391
+ #: webmail/lib/imaputils.py:500
3392
+ msgid "Scheduled"
3393
+ msgstr ""
3394
+
3395
+ #: webmail/lib/imaputils.py:507
3391
3396
  msgid "Trash"
3392
3397
  msgstr ""
3393
3398
 
3394
- #: webmail/viewsets.py:357
3399
+ #: webmail/serializers.py:220
3400
+ msgid "Moving scheduled messages is forbidden"
3401
+ msgstr ""
3402
+
3403
+ #: webmail/serializers.py:253
3404
+ msgid "Only datetime in the future is allowed"
3405
+ msgstr ""
3406
+
3407
+ #: webmail/serializers.py:258
3408
+ msgid "Provived datetime must be one minute in the future at least"
3409
+ msgstr ""
3410
+
3411
+ #: webmail/viewsets.py:359
3395
3412
  #, python-format
3396
3413
  msgid "Attachment is too big (limit: %s)"
3397
3414
  msgstr ""