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: Tydýt _, 2023\n"
17
17
  "Language-Team: Czech (https://www.transifex.com/tonio/teams/13749/cs/)\n"
@@ -45,14 +45,14 @@ msgid "Cannot be greater than domain quota"
45
45
  msgstr ""
46
46
 
47
47
  #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
48
- #: admin/api/v2/serializers.py:570 admin/models/alias.py:45
48
+ #: admin/api/v2/serializers.py:571 admin/models/alias.py:45
49
49
  msgid "Permission denied."
50
50
  msgstr ""
51
51
 
52
52
  #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
53
- #: admin/api/v2/serializers.py:491 amavis/serializers.py:39
54
- #: core/api/v2/serializers.py:255 core/api/v2/serializers.py:257
55
- #: core/api/v2/serializers.py:266 transport/backends.py:40
53
+ #: admin/api/v2/serializers.py:492 amavis/serializers.py:39
54
+ #: core/api/v2/serializers.py:248 core/api/v2/serializers.py:250
55
+ #: core/api/v2/serializers.py:259 transport/backends.py:40
56
56
  msgid "This field is required"
57
57
  msgstr ""
58
58
 
@@ -61,7 +61,7 @@ msgid ""
61
61
  "List of administered domains (resellers and domain administrators only)."
62
62
  msgstr ""
63
63
 
64
- #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:552
64
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:553
65
65
  msgid "Not allowed for this role."
66
66
  msgstr ""
67
67
 
@@ -69,13 +69,12 @@ msgstr ""
69
69
  msgid "Must be equal to mailbox full_address"
70
70
  msgstr ""
71
71
 
72
- #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:604
73
- #: calendars/serializers.py:175 calendars/serializers.py:177
74
- #: pdfcredentials/api/v2/serializers.py:91
72
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:605
73
+ #: calendars/serializers.py:182 pdfcredentials/api/v2/serializers.py:91
75
74
  msgid "This field is required."
76
75
  msgstr ""
77
76
 
78
- #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:621
77
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:622
79
78
  msgid "Local domain {} does not exist"
80
79
  msgstr ""
81
80
 
@@ -116,39 +115,39 @@ msgstr ""
116
115
  msgid "User '%s' already exists"
117
116
  msgstr ""
118
117
 
119
- #: admin/api/v2/serializers.py:255 admin/api/v2/serializers.py:261
118
+ #: admin/api/v2/serializers.py:256 admin/api/v2/serializers.py:262
120
119
  msgid "Must be a positive integer"
121
120
  msgstr ""
122
121
 
123
- #: admin/api/v2/serializers.py:270
122
+ #: admin/api/v2/serializers.py:271
124
123
  msgid "openssl not found, please make sure it is installed."
125
124
  msgstr ""
126
125
 
127
- #: admin/api/v2/serializers.py:273 pdfcredentials/api/v2/serializers.py:84
126
+ #: admin/api/v2/serializers.py:274 pdfcredentials/api/v2/serializers.py:84
128
127
  msgid "Directory not found."
129
128
  msgstr ""
130
129
 
131
- #: admin/api/v2/serializers.py:284
130
+ #: admin/api/v2/serializers.py:285
132
131
  msgid "This field only allows valid IP addresses (or networks)"
133
132
  msgstr ""
134
133
 
135
- #: admin/api/v2/serializers.py:297
134
+ #: admin/api/v2/serializers.py:298
136
135
  msgid "Please disable imap migration before disabling this option."
137
136
  msgstr ""
138
137
 
139
- #: admin/api/v2/serializers.py:310
138
+ #: admin/api/v2/serializers.py:311
140
139
  msgid "Define at least one authorized network / address"
141
140
  msgstr ""
142
141
 
143
- #: admin/api/v2/serializers.py:587
142
+ #: admin/api/v2/serializers.py:588
144
143
  msgid "The left part of an email address can't be more than 64 characters."
145
144
  msgstr ""
146
145
 
147
- #: admin/api/v2/serializers.py:609
146
+ #: admin/api/v2/serializers.py:610
148
147
  msgid "A mailbox is required to create aliases."
149
148
  msgstr ""
150
149
 
151
- #: admin/api/v2/serializers.py:782
150
+ #: admin/api/v2/serializers.py:783
152
151
  msgid "Unknown status"
153
152
  msgstr ""
154
153
 
@@ -240,141 +239,151 @@ msgstr ""
240
239
  msgid "Check every domain against major DNSBL providers"
241
240
  msgstr ""
242
241
 
243
- #: admin/app_settings.py:116
242
+ #: admin/app_settings.py:117
243
+ msgid "Notify domain admins about DNS issues"
244
+ msgstr ""
245
+
246
+ #: admin/app_settings.py:120
247
+ msgid ""
248
+ "Send a notification by email to domain administrators when DNS issues are "
249
+ "encountered"
250
+ msgstr ""
251
+
252
+ #: admin/app_settings.py:128
244
253
  msgid "Custom DNS server"
245
254
  msgstr ""
246
255
 
247
- #: admin/app_settings.py:118
256
+ #: admin/app_settings.py:130
248
257
  msgid "Use a custom DNS server instead of local server configuration"
249
258
  msgstr ""
250
259
 
251
- #: admin/app_settings.py:126
260
+ #: admin/app_settings.py:138
252
261
  msgid "DKIM keys storage directory"
253
262
  msgstr ""
254
263
 
255
- #: admin/app_settings.py:128
264
+ #: admin/app_settings.py:140
256
265
  msgid ""
257
266
  "Absolute path of the directory where DKIM private keys will be stored. Make "
258
267
  "sure this directory belongs to root user and is not readable by the outside "
259
268
  "world."
260
269
  msgstr ""
261
270
 
262
- #: admin/app_settings.py:137
271
+ #: admin/app_settings.py:149
263
272
  msgid "Default DKIM key length"
264
273
  msgstr ""
265
274
 
266
- #: admin/app_settings.py:139
275
+ #: admin/app_settings.py:151
267
276
  msgid "Default length in bits for newly generated DKIM keys."
268
277
  msgstr ""
269
278
 
270
- #: admin/app_settings.py:146
279
+ #: admin/app_settings.py:158
271
280
  msgid "Default domain quota"
272
281
  msgstr ""
273
282
 
274
- #: admin/app_settings.py:148
283
+ #: admin/app_settings.py:160
275
284
  msgid ""
276
285
  "Default quota (in MB) applied to freshly created domains with no value "
277
286
  "specified. A value of 0 means no quota."
278
287
  msgstr ""
279
288
 
280
- #: admin/app_settings.py:156
289
+ #: admin/app_settings.py:168
281
290
  msgid "Default domain sending limit"
282
291
  msgstr ""
283
292
 
284
- #: admin/app_settings.py:158
293
+ #: admin/app_settings.py:170
285
294
  msgid ""
286
295
  "Number of messages freshly created domains will be allowed to send per day. "
287
296
  "Leave empty for no limit."
288
297
  msgstr ""
289
298
 
290
- #: admin/app_settings.py:170 limits/app_settings.py:61
299
+ #: admin/app_settings.py:182 limits/app_settings.py:61
291
300
  #: limits/app_settings.py:135 limits/constants.py:31 limits/constants.py:84
292
301
  msgid "Mailboxes"
293
302
  msgstr ""
294
303
 
295
- #: admin/app_settings.py:176
304
+ #: admin/app_settings.py:188
296
305
  msgid "Handle mailboxes on filesystem"
297
306
  msgstr ""
298
307
 
299
- #: admin/app_settings.py:178
308
+ #: admin/app_settings.py:190
300
309
  msgid ""
301
310
  "Rename or remove mailboxes on the filesystem when they get renamed or "
302
311
  "removed within Modoboa"
303
312
  msgstr ""
304
313
 
305
- #: admin/app_settings.py:186 admin/models/domain.py:36
314
+ #: admin/app_settings.py:198 admin/models/domain.py:36
306
315
  msgid "Default mailbox quota"
307
316
  msgstr ""
308
317
 
309
- #: admin/app_settings.py:188
318
+ #: admin/app_settings.py:200
310
319
  msgid ""
311
320
  "Default mailbox quota (in MB) applied to freshly created domains with no "
312
321
  "value specified. A value of 0 means no quota."
313
322
  msgstr ""
314
323
 
315
- #: admin/app_settings.py:197
324
+ #: admin/app_settings.py:209
316
325
  msgid "Default mailbox sending limit"
317
326
  msgstr ""
318
327
 
319
- #: admin/app_settings.py:199
328
+ #: admin/app_settings.py:211
320
329
  msgid ""
321
330
  "Number of messages freshly created mailboxes will be allowed to send per "
322
331
  "day. Leave empty for no limit."
323
332
  msgstr ""
324
333
 
325
- #: admin/app_settings.py:207
334
+ #: admin/app_settings.py:219
326
335
  msgid "Automatic account removal"
327
336
  msgstr ""
328
337
 
329
- #: admin/app_settings.py:209
338
+ #: admin/app_settings.py:221
330
339
  msgid "When a mailbox is removed, also remove the associated account"
331
340
  msgstr ""
332
341
 
333
- #: admin/app_settings.py:218
342
+ #: admin/app_settings.py:230
334
343
  msgid "Automatic domain/mailbox creation"
335
344
  msgstr ""
336
345
 
337
- #: admin/app_settings.py:221
346
+ #: admin/app_settings.py:233
338
347
  msgid "Create a domain and a mailbox when an account is automatically created."
339
348
  msgstr ""
340
349
 
341
- #: admin/app_settings.py:230
350
+ #: admin/app_settings.py:242
342
351
  msgid "Create an alias when a mailbox is renamed"
343
352
  msgstr ""
344
353
 
345
- #: admin/app_settings.py:233
354
+ #: admin/app_settings.py:245
346
355
  msgid "Create an alias using the old address when a mailbox is renamed."
347
356
  msgstr ""
348
357
 
349
- #: admin/app_settings.py:245
358
+ #: admin/app_settings.py:257
350
359
  msgid "Aliases"
351
360
  msgstr ""
352
361
 
353
- #: admin/app_settings.py:251
362
+ #: admin/app_settings.py:263
354
363
  msgid "Alias can target any domain"
355
364
  msgstr ""
356
365
 
357
- #: admin/app_settings.py:253
366
+ #: admin/app_settings.py:265
358
367
  msgid "Allow aliases to target any domain, not just the local domains."
359
368
  msgstr ""
360
369
 
361
- #: admin/app_settings.py:260
370
+ #: admin/app_settings.py:272
362
371
  msgid "Alias target block list"
363
372
  msgstr ""
364
373
 
365
- #: admin/app_settings.py:262
374
+ #: admin/app_settings.py:274
366
375
  msgid "A list of domains that aliases cannot target (comma separated)."
367
376
  msgstr ""
368
377
 
369
- #: admin/app_settings.py:270
378
+ #: admin/app_settings.py:282
370
379
  msgid "Alias target allow list"
371
380
  msgstr ""
372
381
 
373
- #: admin/app_settings.py:272
382
+ #: admin/app_settings.py:284
374
383
  msgid "A list of domains that aliases can target (comma separated)."
375
384
  msgstr ""
376
385
 
377
- #: admin/app_settings.py:326 core/api/v2/viewsets.py:174
386
+ #: admin/app_settings.py:338 core/api/v2/viewsets.py:174
378
387
  msgid "Administration"
379
388
  msgstr ""
380
389
 
@@ -394,6 +403,35 @@ msgstr ""
394
403
  msgid "Closed"
395
404
  msgstr ""
396
405
 
406
+ #: admin/dns_checker.py:96
407
+ msgid "MX {} listed by DNSBL provider {}"
408
+ msgstr ""
409
+
410
+ #: admin/dns_checker.py:138
411
+ msgid "Domain has no MX record"
412
+ msgstr ""
413
+
414
+ #: admin/dns_checker.py:141
415
+ msgid "Domain {} has no MX record"
416
+ msgstr ""
417
+
418
+ #: admin/dns_checker.py:159
419
+ msgid "Invalid MX record: {}"
420
+ msgstr ""
421
+
422
+ #: admin/dns_checker.py:166
423
+ #, python-brace-format
424
+ msgid "MX record for domain {0} is invalid: {1}"
425
+ msgstr ""
426
+
427
+ #: admin/dns_checker.py:177
428
+ msgid "[modoboa] MX issue(s) for domain {}"
429
+ msgstr ""
430
+
431
+ #: admin/dns_checker.py:224
432
+ msgid "[modoboa] DNSBL issue(s) for domain {}"
433
+ msgstr ""
434
+
397
435
  #: admin/handlers.py:179
398
436
  msgid "domain alias"
399
437
  msgstr ""
@@ -416,8 +454,8 @@ msgstr ""
416
454
  msgid "You are not allowed to import domain aliases."
417
455
  msgstr ""
418
456
 
419
- #: admin/lib.py:227 admin/tests/test_mx.py:153 admin/tests/test_mx.py:166
420
- #: admin/tests/test_mx.py:171
457
+ #: admin/lib.py:227 admin/tests/test_mx.py:139 admin/tests/test_mx.py:152
458
+ #: admin/tests/test_mx.py:157
421
459
  #, python-format
422
460
  msgid "No DNS record found for %s"
423
461
  msgstr ""
@@ -427,11 +465,11 @@ msgstr ""
427
465
  msgid "No %(type)s record for %(name)s"
428
466
  msgstr ""
429
467
 
430
- #: admin/lib.py:234 admin/tests/test_mx.py:156
468
+ #: admin/lib.py:234 admin/tests/test_mx.py:142
431
469
  msgid "No working name servers found"
432
470
  msgstr ""
433
471
 
434
- #: admin/lib.py:237 admin/tests/test_mx.py:160
472
+ #: admin/lib.py:237 admin/tests/test_mx.py:146
435
473
  #, python-format
436
474
  msgid "DNS resolution timeout, unable to query %s at the moment"
437
475
  msgstr ""
@@ -483,35 +521,6 @@ msgstr ""
483
521
  msgid "Failed to generate DKIM public key"
484
522
  msgstr ""
485
523
 
486
- #: admin/management/commands/subcommands/_mx.py:133
487
- msgid "MX {} listed by DNSBL provider {}"
488
- msgstr ""
489
-
490
- #: admin/management/commands/subcommands/_mx.py:174
491
- msgid "Domain has no MX record"
492
- msgstr ""
493
-
494
- #: admin/management/commands/subcommands/_mx.py:177
495
- msgid "Domain {} has no MX record"
496
- msgstr ""
497
-
498
- #: admin/management/commands/subcommands/_mx.py:195
499
- msgid "Invalid MX record: {}"
500
- msgstr ""
501
-
502
- #: admin/management/commands/subcommands/_mx.py:202
503
- #, python-brace-format
504
- msgid "MX record for domain {0} is invalid: {1}"
505
- msgstr ""
506
-
507
- #: admin/management/commands/subcommands/_mx.py:213
508
- msgid "[modoboa] MX issue(s) for domain {}"
509
- msgstr ""
510
-
511
- #: admin/management/commands/subcommands/_mx.py:269
512
- msgid "[modoboa] DNSBL issue(s) for domain {}"
513
- msgstr ""
514
-
515
524
  #: admin/models/alias.py:43
516
525
  msgid "Domain not found."
517
526
  msgstr ""
@@ -688,17 +697,17 @@ msgstr ""
688
697
  msgid "Modoboa detected that domain %(domain)s has no valid MX record:"
689
698
  msgstr ""
690
699
 
691
- #: admin/tests/test_mx.py:155
700
+ #: admin/tests/test_mx.py:141
692
701
  #, python-format
693
702
  msgid "No MX record for %s"
694
703
  msgstr ""
695
704
 
696
- #: admin/tests/test_mx.py:176 admin/tests/test_mx.py:182
705
+ #: admin/tests/test_mx.py:162 admin/tests/test_mx.py:168
697
706
  #, python-format
698
707
  msgid "Invalid IP address format for %(domain)s; %(addr)s"
699
708
  msgstr ""
700
709
 
701
- #: admin/tests/test_mx.py:199
710
+ #: admin/tests/test_mx.py:185
702
711
  #, python-format
703
712
  msgid "No AAAA record for %s"
704
713
  msgstr ""
@@ -867,11 +876,11 @@ msgid ""
867
876
  "database)"
868
877
  msgstr ""
869
878
 
870
- #: amavis/app_settings.py:236 webmail/app_settings.py:118
879
+ #: amavis/app_settings.py:236 webmail/app_settings.py:155
871
880
  msgid "Display"
872
881
  msgstr ""
873
882
 
874
- #: amavis/app_settings.py:243 webmail/app_settings.py:144
883
+ #: amavis/app_settings.py:243 webmail/app_settings.py:181
875
884
  msgid "Number of displayed emails per page"
876
885
  msgstr ""
877
886
 
@@ -1116,7 +1125,7 @@ msgstr ""
1116
1125
  msgid "Allow domain administrators to manage user calendars (read and write)"
1117
1126
  msgstr ""
1118
1127
 
1119
- #: calendars/app_settings.py:60 core/app_settings.py:676
1128
+ #: calendars/app_settings.py:60 core/app_settings.py:664
1120
1129
  #: rspamd/app_settings.py:45
1121
1130
  msgid "Miscellaneous"
1122
1131
  msgstr ""
@@ -1134,11 +1143,11 @@ msgstr ""
1134
1143
  msgid "Calendars"
1135
1144
  msgstr ""
1136
1145
 
1137
- #: calendars/models.py:48 calendars/models.py:65 contacts/models.py:38
1146
+ #: calendars/models.py:48 calendars/models.py:65 contacts/models.py:39
1138
1147
  msgid "Server location is not set, please fix it."
1139
1148
  msgstr ""
1140
1149
 
1141
- #: calendars/viewsets.py:197
1150
+ #: calendars/viewsets.py:199
1142
1151
  msgid "Uploaded file is too big (max: {} bytes)"
1143
1152
  msgstr ""
1144
1153
 
@@ -1217,7 +1226,7 @@ msgstr ""
1217
1226
  msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
1218
1227
  msgstr ""
1219
1228
 
1220
- #: core/api/v1/serializers.py:93 core/api/v2/serializers.py:445
1229
+ #: core/api/v1/serializers.py:93 core/api/v2/serializers.py:438
1221
1230
  msgid "Invalid password"
1222
1231
  msgstr ""
1223
1232
 
@@ -1229,24 +1238,20 @@ msgstr ""
1229
1238
  msgid "Local"
1230
1239
  msgstr ""
1231
1240
 
1232
- #: core/api/v2/serializers.py:194 core/app_settings.py:17
1233
- msgid "User profile"
1234
- msgstr ""
1235
-
1236
- #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
1237
- #: core/api/v2/serializers.py:228
1241
+ #: core/api/v2/serializers.py:206 core/api/v2/serializers.py:214
1242
+ #: core/api/v2/serializers.py:221
1238
1243
  msgid "Invalid syntax"
1239
1244
  msgstr ""
1240
1245
 
1241
- #: core/api/v2/serializers.py:233
1246
+ #: core/api/v2/serializers.py:226
1242
1247
  msgid "Invalid rounds number"
1243
1248
  msgstr ""
1244
1249
 
1245
- #: core/api/v2/serializers.py:433 core/forms.py:81
1250
+ #: core/api/v2/serializers.py:426 core/forms.py:81
1246
1251
  msgid "This code is invalid"
1247
1252
  msgstr ""
1248
1253
 
1249
- #: core/api/v2/serializers.py:503 core/views/auth.py:213 core/views/auth.py:266
1254
+ #: core/api/v2/serializers.py:496 core/views/auth.py:213 core/views/auth.py:266
1250
1255
  msgid "Please use the following code to recover your Modoboa password: {}"
1251
1256
  msgstr ""
1252
1257
 
@@ -1271,525 +1276,517 @@ msgid "Calendar"
1271
1276
  msgstr ""
1272
1277
 
1273
1278
  #: core/api/v2/viewsets.py:215 core/api/v2/viewsets.py:217
1274
- #: webmail/app_settings.py:258 webmail/app_settings.py:265
1279
+ #: webmail/app_settings.py:295 webmail/app_settings.py:302
1275
1280
  msgid "Webmail"
1276
1281
  msgstr ""
1277
1282
 
1278
- #: core/app_settings.py:37
1283
+ #: core/app_settings.py:25
1279
1284
  msgid "Authentication"
1280
1285
  msgstr ""
1281
1286
 
1282
- #: core/app_settings.py:43
1287
+ #: core/app_settings.py:31
1283
1288
  msgid "Authentication type"
1284
1289
  msgstr ""
1285
1290
 
1286
- #: core/app_settings.py:45
1291
+ #: core/app_settings.py:33
1287
1292
  msgid "The backend used for authentication"
1288
1293
  msgstr ""
1289
1294
 
1290
- #: core/app_settings.py:52
1295
+ #: core/app_settings.py:40
1291
1296
  msgid "Default password scheme"
1292
1297
  msgstr ""
1293
1298
 
1294
- #: core/app_settings.py:54
1299
+ #: core/app_settings.py:42
1295
1300
  msgid "Scheme used to crypt mailbox passwords"
1296
1301
  msgstr ""
1297
1302
 
1298
- #: core/app_settings.py:61
1303
+ #: core/app_settings.py:49
1299
1304
  msgid "Rounds"
1300
1305
  msgstr ""
1301
1306
 
1302
- #: core/app_settings.py:63
1307
+ #: core/app_settings.py:51
1303
1308
  msgid ""
1304
1309
  "Number of rounds to use (only used by sha256crypt and sha512crypt). Must be "
1305
1310
  "between 1000 and 999999999, inclusive."
1306
1311
  msgstr ""
1307
1312
 
1308
- #: core/app_settings.py:73
1313
+ #: core/app_settings.py:61
1309
1314
  msgid "Update password scheme at login"
1310
1315
  msgstr ""
1311
1316
 
1312
- #: core/app_settings.py:76
1317
+ #: core/app_settings.py:64
1313
1318
  msgid "Update user password at login to use the default password scheme"
1314
1319
  msgstr ""
1315
1320
 
1316
- #: core/app_settings.py:84
1321
+ #: core/app_settings.py:72
1317
1322
  msgid "Default password"
1318
1323
  msgstr ""
1319
1324
 
1320
- #: core/app_settings.py:86
1325
+ #: core/app_settings.py:74
1321
1326
  msgid "Default password for automatically created accounts."
1322
1327
  msgstr ""
1323
1328
 
1324
- #: core/app_settings.py:93
1329
+ #: core/app_settings.py:81
1325
1330
  msgid "Random password length"
1326
1331
  msgstr ""
1327
1332
 
1328
- #: core/app_settings.py:95
1333
+ #: core/app_settings.py:83
1329
1334
  msgid "Length of randomly generated passwords."
1330
1335
  msgstr ""
1331
1336
 
1332
- #: core/app_settings.py:103
1337
+ #: core/app_settings.py:91
1333
1338
  msgid "Allow special characters for random password"
1334
1339
  msgstr ""
1335
1340
 
1336
- #: core/app_settings.py:106
1341
+ #: core/app_settings.py:94
1337
1342
  msgid "Enable special characters in randomly generated passwords."
1338
1343
  msgstr ""
1339
1344
 
1340
- #: core/app_settings.py:114
1345
+ #: core/app_settings.py:102
1341
1346
  msgid "Update password service URL"
1342
1347
  msgstr ""
1343
1348
 
1344
- #: core/app_settings.py:116
1349
+ #: core/app_settings.py:104
1345
1350
  msgid ""
1346
1351
  "The URL of an external page where users will be able to update their "
1347
1352
  "password. It applies only to non local users, ie. those automatically "
1348
1353
  "created after a successful external authentication (LDAP, SMTP)."
1349
1354
  msgstr ""
1350
1355
 
1351
- #: core/app_settings.py:126
1356
+ #: core/app_settings.py:114
1352
1357
  msgid "Password recovery announcement"
1353
1358
  msgstr ""
1354
1359
 
1355
- #: core/app_settings.py:128
1360
+ #: core/app_settings.py:116
1356
1361
  msgid "A temporary message that will be displayed on the reset password page."
1357
1362
  msgstr ""
1358
1363
 
1359
- #: core/app_settings.py:137
1364
+ #: core/app_settings.py:125
1360
1365
  msgid "Enable password recovery by SMS"
1361
1366
  msgstr ""
1362
1367
 
1363
- #: core/app_settings.py:140
1368
+ #: core/app_settings.py:128
1364
1369
  msgid "Enable password recovery by SMS for users who filled a phone number."
1365
1370
  msgstr ""
1366
1371
 
1367
- #: core/app_settings.py:148
1372
+ #: core/app_settings.py:136
1368
1373
  msgid "SMS provider"
1369
1374
  msgstr ""
1370
1375
 
1371
- #: core/app_settings.py:151
1376
+ #: core/app_settings.py:139
1372
1377
  msgid "Choose a provider to send password recovery SMS"
1373
1378
  msgstr ""
1374
1379
 
1375
- #: core/app_settings.py:163
1380
+ #: core/app_settings.py:151
1376
1381
  msgid "LDAP"
1377
1382
  msgstr ""
1378
1383
 
1379
- #: core/app_settings.py:169 sievefilters/app_settings.py:18
1384
+ #: core/app_settings.py:157 sievefilters/app_settings.py:18
1380
1385
  #: sievefilters/app_settings.py:51 webmail/app_settings.py:36
1381
- #: webmail/app_settings.py:73
1386
+ #: webmail/app_settings.py:73 webmail/app_settings.py:119
1382
1387
  msgid "Server address"
1383
1388
  msgstr ""
1384
1389
 
1385
- #: core/app_settings.py:171
1390
+ #: core/app_settings.py:159
1386
1391
  msgid "The IP address or the DNS name of the LDAP server"
1387
1392
  msgstr ""
1388
1393
 
1389
- #: core/app_settings.py:178 sievefilters/app_settings.py:25
1394
+ #: core/app_settings.py:166 sievefilters/app_settings.py:25
1390
1395
  #: sievefilters/app_settings.py:67 webmail/app_settings.py:54
1391
- #: webmail/app_settings.py:91
1396
+ #: webmail/app_settings.py:91 webmail/app_settings.py:137
1392
1397
  msgid "Server port"
1393
1398
  msgstr ""
1394
1399
 
1395
- #: core/app_settings.py:180
1400
+ #: core/app_settings.py:168
1396
1401
  msgid "The TCP port number used by the LDAP server"
1397
1402
  msgstr ""
1398
1403
 
1399
- #: core/app_settings.py:188
1404
+ #: core/app_settings.py:176
1400
1405
  msgid "Enable secondary server (fallback)"
1401
1406
  msgstr ""
1402
1407
 
1403
- #: core/app_settings.py:191
1408
+ #: core/app_settings.py:179
1404
1409
  msgid ""
1405
1410
  "Enable a secondary LDAP server which will be used if the primary one fails"
1406
1411
  msgstr ""
1407
1412
 
1408
- #: core/app_settings.py:199
1413
+ #: core/app_settings.py:187
1409
1414
  msgid "Secondary server address"
1410
1415
  msgstr ""
1411
1416
 
1412
- #: core/app_settings.py:202
1417
+ #: core/app_settings.py:190
1413
1418
  msgid "The IP address or the DNS name of the seondary LDAP server"
1414
1419
  msgstr ""
1415
1420
 
1416
- #: core/app_settings.py:209
1421
+ #: core/app_settings.py:197
1417
1422
  msgid "Secondary server port"
1418
1423
  msgstr ""
1419
1424
 
1420
- #: core/app_settings.py:212
1425
+ #: core/app_settings.py:200
1421
1426
  msgid "The TCP port number used by the LDAP secondary server"
1422
1427
  msgstr ""
1423
1428
 
1424
- #: core/app_settings.py:219 sievefilters/app_settings.py:58
1429
+ #: core/app_settings.py:207 sievefilters/app_settings.py:58
1425
1430
  #: webmail/app_settings.py:45
1426
1431
  msgid "Use a secured connection"
1427
1432
  msgstr ""
1428
1433
 
1429
- #: core/app_settings.py:221
1434
+ #: core/app_settings.py:209
1430
1435
  msgid "Use an SSL/STARTTLS connection to access the LDAP server"
1431
1436
  msgstr ""
1432
1437
 
1433
- #: core/app_settings.py:228
1438
+ #: core/app_settings.py:216
1434
1439
  msgid "Active Directory"
1435
1440
  msgstr ""
1436
1441
 
1437
- #: core/app_settings.py:230
1442
+ #: core/app_settings.py:218
1438
1443
  msgid "Tell if the LDAP server is an Active Directory one"
1439
1444
  msgstr ""
1440
1445
 
1441
- #: core/app_settings.py:237
1446
+ #: core/app_settings.py:225
1442
1447
  msgid "Administrator groups"
1443
1448
  msgstr ""
1444
1449
 
1445
- #: core/app_settings.py:239
1450
+ #: core/app_settings.py:227
1446
1451
  msgid ""
1447
1452
  "Members of those LDAP Posix groups will be created as domain administrators. "
1448
1453
  "Use ';' characters to separate groups."
1449
1454
  msgstr ""
1450
1455
 
1451
- #: core/app_settings.py:248
1456
+ #: core/app_settings.py:236
1452
1457
  msgid "Group type"
1453
1458
  msgstr ""
1454
1459
 
1455
- #: core/app_settings.py:250
1460
+ #: core/app_settings.py:238
1456
1461
  msgid "The LDAP group type to use with your directory."
1457
1462
  msgstr ""
1458
1463
 
1459
- #: core/app_settings.py:257
1464
+ #: core/app_settings.py:245
1460
1465
  msgid "Groups search base"
1461
1466
  msgstr ""
1462
1467
 
1463
- #: core/app_settings.py:259
1468
+ #: core/app_settings.py:247
1464
1469
  msgid "The distinguished name of the search base used to find groups"
1465
1470
  msgstr ""
1466
1471
 
1467
- #: core/app_settings.py:267
1472
+ #: core/app_settings.py:255
1468
1473
  msgid "Password attribute"
1469
1474
  msgstr ""
1470
1475
 
1471
- #: core/app_settings.py:269
1476
+ #: core/app_settings.py:257
1472
1477
  msgid "The attribute used to store user passwords"
1473
1478
  msgstr ""
1474
1479
 
1475
- #: core/app_settings.py:276
1480
+ #: core/app_settings.py:264
1476
1481
  msgid "LDAP authentication settings"
1477
1482
  msgstr ""
1478
1483
 
1479
- #: core/app_settings.py:284
1484
+ #: core/app_settings.py:272
1480
1485
  msgid "Authentication method"
1481
1486
  msgstr ""
1482
1487
 
1483
- #: core/app_settings.py:287
1488
+ #: core/app_settings.py:275
1484
1489
  msgid "Choose the authentication method to use"
1485
1490
  msgstr ""
1486
1491
 
1487
- #: core/app_settings.py:294 core/app_settings.py:357
1492
+ #: core/app_settings.py:282 core/app_settings.py:345
1488
1493
  msgid "Bind DN"
1489
1494
  msgstr ""
1490
1495
 
1491
- #: core/app_settings.py:296 core/app_settings.py:359
1496
+ #: core/app_settings.py:284 core/app_settings.py:347
1492
1497
  msgid ""
1493
1498
  "The distinguished name to use when binding to the LDAP server. Leave empty "
1494
1499
  "for an anonymous bind"
1495
1500
  msgstr ""
1496
1501
 
1497
- #: core/app_settings.py:305 core/app_settings.py:367
1502
+ #: core/app_settings.py:293 core/app_settings.py:355
1498
1503
  msgid "Bind password"
1499
1504
  msgstr ""
1500
1505
 
1501
- #: core/app_settings.py:307 core/app_settings.py:369
1506
+ #: core/app_settings.py:295 core/app_settings.py:357
1502
1507
  msgid "The password to use when binding to the LDAP server (with 'Bind DN')"
1503
1508
  msgstr ""
1504
1509
 
1505
- #: core/app_settings.py:317 core/app_settings.py:422
1510
+ #: core/app_settings.py:305 core/app_settings.py:410
1506
1511
  msgid "Users search base"
1507
1512
  msgstr ""
1508
1513
 
1509
- #: core/app_settings.py:319 core/app_settings.py:424
1514
+ #: core/app_settings.py:307 core/app_settings.py:412
1510
1515
  msgid "The distinguished name of the search base used to find users"
1511
1516
  msgstr ""
1512
1517
 
1513
- #: core/app_settings.py:328 core/app_settings.py:433
1518
+ #: core/app_settings.py:316 core/app_settings.py:421
1514
1519
  msgid "Search filter"
1515
1520
  msgstr ""
1516
1521
 
1517
- #: core/app_settings.py:330 core/app_settings.py:435
1522
+ #: core/app_settings.py:318 core/app_settings.py:423
1518
1523
  msgid ""
1519
1524
  "An optional filter string (e.g. '(objectClass=person)'). In order to be "
1520
1525
  "valid, it must be enclosed in parentheses."
1521
1526
  msgstr ""
1522
1527
 
1523
- #: core/app_settings.py:339
1528
+ #: core/app_settings.py:327
1524
1529
  msgid "User DN template"
1525
1530
  msgstr ""
1526
1531
 
1527
- #: core/app_settings.py:341
1532
+ #: core/app_settings.py:329
1528
1533
  #, python-format
1529
1534
  msgid ""
1530
1535
  "The template used to construct a user's DN. It should contain one "
1531
1536
  "placeholder (ie. %(user)s)"
1532
1537
  msgstr ""
1533
1538
 
1534
- #: core/app_settings.py:350
1539
+ #: core/app_settings.py:338
1535
1540
  msgid "LDAP synchronization settings"
1536
1541
  msgstr ""
1537
1542
 
1538
- #: core/app_settings.py:378
1543
+ #: core/app_settings.py:366
1539
1544
  msgid "Enable export to LDAP"
1540
1545
  msgstr ""
1541
1546
 
1542
- #: core/app_settings.py:380
1547
+ #: core/app_settings.py:368
1543
1548
  msgid ""
1544
1549
  "Enable automatic synchronization between local database and LDAP directory"
1545
1550
  msgstr ""
1546
1551
 
1547
- #: core/app_settings.py:389
1552
+ #: core/app_settings.py:377
1548
1553
  msgid "Delete remote LDAP account when local account is deleted"
1549
1554
  msgstr ""
1550
1555
 
1551
- #: core/app_settings.py:392
1556
+ #: core/app_settings.py:380
1552
1557
  msgid ""
1553
1558
  "Delete remote LDAP account when local account is deleted, otherwise it will "
1554
1559
  "be disabled."
1555
1560
  msgstr ""
1556
1561
 
1557
- #: core/app_settings.py:401
1562
+ #: core/app_settings.py:389
1558
1563
  msgid "Account DN template"
1559
1564
  msgstr ""
1560
1565
 
1561
- #: core/app_settings.py:403
1566
+ #: core/app_settings.py:391
1562
1567
  #, python-format
1563
1568
  msgid ""
1564
1569
  "The template used to construct an account's DN. It should contain one "
1565
1570
  "placeholder (ie. %(user)s)"
1566
1571
  msgstr ""
1567
1572
 
1568
- #: core/app_settings.py:412
1573
+ #: core/app_settings.py:400
1569
1574
  msgid "Enable import from LDAP"
1570
1575
  msgstr ""
1571
1576
 
1572
- #: core/app_settings.py:414
1577
+ #: core/app_settings.py:402
1573
1578
  msgid "Enable account synchronization from LDAP directory to local database"
1574
1579
  msgstr ""
1575
1580
 
1576
- #: core/app_settings.py:444
1581
+ #: core/app_settings.py:432
1577
1582
  msgid "Username attribute"
1578
1583
  msgstr ""
1579
1584
 
1580
- #: core/app_settings.py:446
1585
+ #: core/app_settings.py:434
1581
1586
  msgid "The name of the LDAP attribute where the username can be found."
1582
1587
  msgstr ""
1583
1588
 
1584
- #: core/app_settings.py:455
1589
+ #: core/app_settings.py:443
1585
1590
  msgid "Enable Dovecot LDAP sync"
1586
1591
  msgstr ""
1587
1592
 
1588
- #: core/app_settings.py:457
1593
+ #: core/app_settings.py:445
1589
1594
  msgid "LDAP authentication settings will be applied to Dovecot configuration."
1590
1595
  msgstr ""
1591
1596
 
1592
- #: core/app_settings.py:465
1597
+ #: core/app_settings.py:453
1593
1598
  msgid "Dovecot LDAP config file"
1594
1599
  msgstr ""
1595
1600
 
1596
- #: core/app_settings.py:467
1601
+ #: core/app_settings.py:455
1597
1602
  msgid ""
1598
1603
  "Location of the configuration file which contains Dovecot LDAP settings."
1599
1604
  msgstr ""
1600
1605
 
1601
- #: core/app_settings.py:480
1606
+ #: core/app_settings.py:468
1602
1607
  msgid "Dashboard"
1603
1608
  msgstr ""
1604
1609
 
1605
- #: core/app_settings.py:486
1610
+ #: core/app_settings.py:474
1606
1611
  msgid "Custom welcome message"
1607
1612
  msgstr ""
1608
1613
 
1609
- #: core/app_settings.py:488
1614
+ #: core/app_settings.py:476
1610
1615
  msgid "A welcome message that will be displayed instead the default one"
1611
1616
  msgstr ""
1612
1617
 
1613
- #: core/app_settings.py:495
1618
+ #: core/app_settings.py:483
1614
1619
  msgid "Custom RSS feed"
1615
1620
  msgstr ""
1616
1621
 
1617
- #: core/app_settings.py:497
1622
+ #: core/app_settings.py:485
1618
1623
  msgid "Display custom RSS feed to resellers and domain administrators"
1619
1624
  msgstr ""
1620
1625
 
1621
- #: core/app_settings.py:506
1626
+ #: core/app_settings.py:494
1622
1627
  msgid "Display custom RSS feed to super admins"
1623
1628
  msgstr ""
1624
1629
 
1625
- #: core/app_settings.py:509
1630
+ #: core/app_settings.py:497
1626
1631
  msgid "Display custom RSS feed also to super administrators"
1627
1632
  msgstr ""
1628
1633
 
1629
- #: core/app_settings.py:517
1634
+ #: core/app_settings.py:505
1630
1635
  msgid "Hide features widget"
1631
1636
  msgstr ""
1632
1637
 
1633
- #: core/app_settings.py:519
1638
+ #: core/app_settings.py:507
1634
1639
  msgid "Hide features widget for resellers and domain administrators"
1635
1640
  msgstr ""
1636
1641
 
1637
- #: core/app_settings.py:531
1642
+ #: core/app_settings.py:519
1638
1643
  msgid "Theme"
1639
1644
  msgstr ""
1640
1645
 
1641
- #: core/app_settings.py:537
1646
+ #: core/app_settings.py:525
1642
1647
  msgid "Primary theme color"
1643
1648
  msgstr ""
1644
1649
 
1645
- #: core/app_settings.py:539
1650
+ #: core/app_settings.py:527
1646
1651
  msgid ""
1647
1652
  "Primary color of the theme (hexadecimal code), used as the background color "
1648
1653
  "of the left menu for example"
1649
1654
  msgstr ""
1650
1655
 
1651
- #: core/app_settings.py:548
1656
+ #: core/app_settings.py:536
1652
1657
  msgid "Primary theme color (lighter version)"
1653
1658
  msgstr ""
1654
1659
 
1655
- #: core/app_settings.py:551 core/app_settings.py:563
1660
+ #: core/app_settings.py:539 core/app_settings.py:551
1656
1661
  msgid "Primary color of the theme (hexadecimal code)"
1657
1662
  msgstr ""
1658
1663
 
1659
- #: core/app_settings.py:560
1664
+ #: core/app_settings.py:548
1660
1665
  msgid "Primary theme color (darker version)"
1661
1666
  msgstr ""
1662
1667
 
1663
- #: core/app_settings.py:571
1668
+ #: core/app_settings.py:559
1664
1669
  msgid "Secondary theme color"
1665
1670
  msgstr ""
1666
1671
 
1667
- #: core/app_settings.py:573
1672
+ #: core/app_settings.py:561
1668
1673
  msgid ""
1669
1674
  "Secondary color of the theme (hexadecimal code), used as the background "
1670
1675
  "color of some buttons for example"
1671
1676
  msgstr ""
1672
1677
 
1673
- #: core/app_settings.py:581
1678
+ #: core/app_settings.py:569
1674
1679
  msgid "Labels theme color"
1675
1680
  msgstr ""
1676
1681
 
1677
- #: core/app_settings.py:583
1682
+ #: core/app_settings.py:571
1678
1683
  msgid "Theme color for labels (hexadecimal code)"
1679
1684
  msgstr ""
1680
1685
 
1681
- #: core/app_settings.py:595
1686
+ #: core/app_settings.py:583
1682
1687
  msgid "Notifications"
1683
1688
  msgstr ""
1684
1689
 
1685
- #: core/app_settings.py:601
1690
+ #: core/app_settings.py:589
1686
1691
  msgid "Sender address"
1687
1692
  msgstr ""
1688
1693
 
1689
- #: core/app_settings.py:603
1694
+ #: core/app_settings.py:591
1690
1695
  msgid "Email address used to send notifications."
1691
1696
  msgstr ""
1692
1697
 
1693
- #: core/app_settings.py:614
1698
+ #: core/app_settings.py:602
1694
1699
  msgid "Public API"
1695
1700
  msgstr ""
1696
1701
 
1697
- #: core/app_settings.py:620
1702
+ #: core/app_settings.py:608
1698
1703
  msgid "Enable communication"
1699
1704
  msgstr ""
1700
1705
 
1701
- #: core/app_settings.py:622 core/app_settings.py:632
1706
+ #: core/app_settings.py:610 core/app_settings.py:620
1702
1707
  msgid "Automatically checks if a newer version is available"
1703
1708
  msgstr ""
1704
1709
 
1705
- #: core/app_settings.py:629
1710
+ #: core/app_settings.py:617
1706
1711
  msgid "Check new versions"
1707
1712
  msgstr ""
1708
1713
 
1709
- #: core/app_settings.py:640
1714
+ #: core/app_settings.py:628
1710
1715
  msgid "Send an email when new versions are found"
1711
1716
  msgstr ""
1712
1717
 
1713
- #: core/app_settings.py:644
1718
+ #: core/app_settings.py:632
1714
1719
  msgid "Send an email to notify admins about new versions"
1715
1720
  msgstr ""
1716
1721
 
1717
- #: core/app_settings.py:651 sievefilters/constants.py:25
1722
+ #: core/app_settings.py:639 sievefilters/constants.py:25
1718
1723
  msgid "Recipient"
1719
1724
  msgstr ""
1720
1725
 
1721
- #: core/app_settings.py:654
1726
+ #: core/app_settings.py:642
1722
1727
  msgid "Recipient of new versions notification emails."
1723
1728
  msgstr ""
1724
1729
 
1725
- #: core/app_settings.py:661
1730
+ #: core/app_settings.py:649
1726
1731
  msgid "Send statistics"
1727
1732
  msgstr ""
1728
1733
 
1729
- #: core/app_settings.py:664
1734
+ #: core/app_settings.py:652
1730
1735
  msgid "Send statistics to Modoboa public API (counters and used extensions)"
1731
1736
  msgstr ""
1732
1737
 
1733
- #: core/app_settings.py:683
1738
+ #: core/app_settings.py:671
1734
1739
  msgid "Enable inactive account tracking"
1735
1740
  msgstr ""
1736
1741
 
1737
- #: core/app_settings.py:686
1742
+ #: core/app_settings.py:674
1738
1743
  msgid ""
1739
1744
  "Allow the administrator to set a threshold (in days) beyond which an account "
1740
1745
  "is considered inactive if the user hasn't logged in"
1741
1746
  msgstr ""
1742
1747
 
1743
- #: core/app_settings.py:695
1748
+ #: core/app_settings.py:683
1744
1749
  msgid "Inactive account threshold"
1745
1750
  msgstr ""
1746
1751
 
1747
- #: core/app_settings.py:698
1752
+ #: core/app_settings.py:686
1748
1753
  msgid ""
1749
1754
  "An account with a last login date greater than this threshold (in days) will "
1750
1755
  "be considered as inactive"
1751
1756
  msgstr ""
1752
1757
 
1753
- #: core/app_settings.py:707
1758
+ #: core/app_settings.py:695
1754
1759
  msgid "Top notifications check interval"
1755
1760
  msgstr ""
1756
1761
 
1757
- #: core/app_settings.py:710
1762
+ #: core/app_settings.py:698
1758
1763
  msgid "Interval between two top notification checks (in seconds)"
1759
1764
  msgstr ""
1760
1765
 
1761
- #: core/app_settings.py:717
1766
+ #: core/app_settings.py:705
1762
1767
  msgid "Maximum log record age"
1763
1768
  msgstr ""
1764
1769
 
1765
- #: core/app_settings.py:719
1770
+ #: core/app_settings.py:707
1766
1771
  msgid "The maximum age in days of a log record"
1767
1772
  msgstr ""
1768
1773
 
1769
- #: core/app_settings.py:727
1774
+ #: core/app_settings.py:715
1770
1775
  msgid "Retention time in message history"
1771
1776
  msgstr ""
1772
1777
 
1773
- #: core/app_settings.py:730
1778
+ #: core/app_settings.py:718
1774
1779
  msgid "Retention time (in days) of a message in the message history section"
1775
1780
  msgstr ""
1776
1781
 
1777
- #: core/app_settings.py:737
1782
+ #: core/app_settings.py:725
1778
1783
  msgid "Items per page"
1779
1784
  msgstr ""
1780
1785
 
1781
- #: core/app_settings.py:739
1786
+ #: core/app_settings.py:727
1782
1787
  msgid "Number of displayed items per page"
1783
1788
  msgstr ""
1784
1789
 
1785
- #: core/app_settings.py:746
1786
- msgid "Default top redirection"
1787
- msgstr ""
1788
-
1789
- #: core/app_settings.py:748
1790
- msgid "The default redirection used when no application is specified"
1791
- msgstr ""
1792
-
1793
1790
  #: core/checks.py:15
1794
1791
  msgid ""
1795
1792
  "You have USE_TZ set to False, this may result in issues during transitions "
@@ -2122,7 +2119,7 @@ msgid "Not resolved"
2122
2119
  msgstr ""
2123
2120
 
2124
2121
  #: dmarc/models.py:10 dmarc/models.py:16 pdfcredentials/constants.py:7
2125
- #: webmail/constants.py:18
2122
+ #: webmail/constants.py:38
2126
2123
  msgid "None"
2127
2124
  msgstr ""
2128
2125
 
@@ -3002,7 +2999,7 @@ msgstr ""
3002
2999
  msgid "is not"
3003
3000
  msgstr ""
3004
3001
 
3005
- #: sievefilters/constants.py:23 webmail/lib/imapemail.py:304
3002
+ #: sievefilters/constants.py:23 webmail/lib/imapemail.py:302
3006
3003
  msgid "Subject"
3007
3004
  msgstr ""
3008
3005
 
@@ -3228,19 +3225,19 @@ msgstr ""
3228
3225
  msgid "SMTP settings"
3229
3226
  msgstr ""
3230
3227
 
3231
- #: webmail/app_settings.py:75
3228
+ #: webmail/app_settings.py:75 webmail/app_settings.py:121
3232
3229
  msgid "Address of your SMTP server"
3233
3230
  msgstr ""
3234
3231
 
3235
- #: webmail/app_settings.py:82
3232
+ #: webmail/app_settings.py:82 webmail/app_settings.py:128
3236
3233
  msgid "Secured connection mode"
3237
3234
  msgstr ""
3238
3235
 
3239
- #: webmail/app_settings.py:84
3236
+ #: webmail/app_settings.py:84 webmail/app_settings.py:130
3240
3237
  msgid "Use a secured connection to access SMTP server"
3241
3238
  msgstr ""
3242
3239
 
3243
- #: webmail/app_settings.py:93
3240
+ #: webmail/app_settings.py:93 webmail/app_settings.py:139
3244
3241
  msgid "Listening port of your SMTP server"
3245
3242
  msgstr ""
3246
3243
 
@@ -3252,95 +3249,99 @@ msgstr ""
3252
3249
  msgid "Server needs authentication"
3253
3250
  msgstr ""
3254
3251
 
3255
- #: webmail/app_settings.py:124
3252
+ #: webmail/app_settings.py:113
3253
+ msgid "Scheduling settings"
3254
+ msgstr ""
3255
+
3256
+ #: webmail/app_settings.py:161
3256
3257
  msgid "Default message display mode"
3257
3258
  msgstr ""
3258
3259
 
3259
- #: webmail/app_settings.py:126
3260
+ #: webmail/app_settings.py:163
3260
3261
  msgid "The default mode used when displaying a message"
3261
3262
  msgstr ""
3262
3263
 
3263
- #: webmail/app_settings.py:133
3264
+ #: webmail/app_settings.py:170
3264
3265
  msgid "Enable HTML links display"
3265
3266
  msgstr ""
3266
3267
 
3267
- #: webmail/app_settings.py:136
3268
+ #: webmail/app_settings.py:173
3268
3269
  msgid "Enable/Disable HTML links display"
3269
3270
  msgstr ""
3270
3271
 
3271
- #: webmail/app_settings.py:147
3272
+ #: webmail/app_settings.py:184
3272
3273
  msgid "Sets the maximum number of messages displayed in a page"
3273
3274
  msgstr ""
3274
3275
 
3275
- #: webmail/app_settings.py:154
3276
+ #: webmail/app_settings.py:191
3276
3277
  msgid "Listing refresh rate"
3277
3278
  msgstr ""
3278
3279
 
3279
- #: webmail/app_settings.py:156
3280
+ #: webmail/app_settings.py:193
3280
3281
  msgid "Automatic listing refresh rate (in secconds)"
3281
3282
  msgstr ""
3282
3283
 
3283
- #: webmail/app_settings.py:163
3284
+ #: webmail/app_settings.py:200
3284
3285
  msgid "Folder container's width"
3285
3286
  msgstr ""
3286
3287
 
3287
- #: webmail/app_settings.py:165
3288
+ #: webmail/app_settings.py:202
3288
3289
  msgid "The width of the folder list container"
3289
3290
  msgstr ""
3290
3291
 
3291
- #: webmail/app_settings.py:176
3292
+ #: webmail/app_settings.py:213
3292
3293
  msgid "Folders"
3293
3294
  msgstr ""
3294
3295
 
3295
- #: webmail/app_settings.py:182
3296
+ #: webmail/app_settings.py:219
3296
3297
  msgid "Trash folder"
3297
3298
  msgstr ""
3298
3299
 
3299
- #: webmail/app_settings.py:184
3300
+ #: webmail/app_settings.py:221
3300
3301
  msgid "Folder where deleted messages go"
3301
3302
  msgstr ""
3302
3303
 
3303
- #: webmail/app_settings.py:191
3304
+ #: webmail/app_settings.py:228
3304
3305
  msgid "Sent folder"
3305
3306
  msgstr ""
3306
3307
 
3307
- #: webmail/app_settings.py:193
3308
+ #: webmail/app_settings.py:230
3308
3309
  msgid "Folder where copies of sent messages go"
3309
3310
  msgstr ""
3310
3311
 
3311
- #: webmail/app_settings.py:200
3312
+ #: webmail/app_settings.py:237
3312
3313
  msgid "Drafts folder"
3313
3314
  msgstr ""
3314
3315
 
3315
- #: webmail/app_settings.py:201
3316
+ #: webmail/app_settings.py:238
3316
3317
  msgid "Folder where drafts go"
3317
3318
  msgstr ""
3318
3319
 
3319
- #: webmail/app_settings.py:207
3320
+ #: webmail/app_settings.py:244
3320
3321
  msgid "Junk folder"
3321
3322
  msgstr ""
3322
3323
 
3323
- #: webmail/app_settings.py:209
3324
+ #: webmail/app_settings.py:246
3324
3325
  msgid "Folder where junk messages should go"
3325
3326
  msgstr ""
3326
3327
 
3327
- #: webmail/app_settings.py:220
3328
+ #: webmail/app_settings.py:257
3328
3329
  msgid "Composing messages"
3329
3330
  msgstr ""
3330
3331
 
3331
- #: webmail/app_settings.py:226
3332
+ #: webmail/app_settings.py:263
3332
3333
  msgid "Default editor"
3333
3334
  msgstr ""
3334
3335
 
3335
- #: webmail/app_settings.py:228
3336
+ #: webmail/app_settings.py:265
3336
3337
  msgid "The default editor to use when composing a message"
3337
3338
  msgstr ""
3338
3339
 
3339
- #: webmail/app_settings.py:235
3340
+ #: webmail/app_settings.py:272
3340
3341
  msgid "Signature text"
3341
3342
  msgstr ""
3342
3343
 
3343
- #: webmail/app_settings.py:237
3344
+ #: webmail/app_settings.py:274
3344
3345
  msgid "User defined email signature"
3345
3346
  msgstr ""
3346
3347
 
@@ -3354,43 +3355,59 @@ msgstr ""
3354
3355
  msgid "Failed to remove attachment: "
3355
3356
  msgstr "Nepodařilo se vytvořit LDAT účet: {}"
3356
3357
 
3357
- #: webmail/lib/imapemail.py:272
3358
+ #: webmail/lib/imapemail.py:270
3358
3359
  msgid "wrote:"
3359
3360
  msgstr ""
3360
3361
 
3361
- #: webmail/lib/imapemail.py:306
3362
+ #: webmail/lib/imapemail.py:304
3362
3363
  msgid "Date"
3363
3364
  msgstr ""
3364
3365
 
3365
- #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3366
+ #: webmail/lib/imapemail.py:320 webmail/lib/imapemail.py:323
3366
3367
  msgid "Original message"
3367
3368
  msgstr ""
3368
3369
 
3369
- #: webmail/lib/imaputils.py:221
3370
+ #: webmail/lib/imaputils.py:222
3370
3371
  msgid "Failed to retrieve hierarchy delimiter"
3371
3372
  msgstr ""
3372
3373
 
3373
- #: webmail/lib/imaputils.py:472
3374
+ #: webmail/lib/imaputils.py:478
3374
3375
  msgid "Inbox"
3375
3376
  msgstr ""
3376
3377
 
3377
- #: webmail/lib/imaputils.py:476
3378
+ #: webmail/lib/imaputils.py:482
3378
3379
  msgid "Drafts"
3379
3380
  msgstr ""
3380
3381
 
3381
- #: webmail/lib/imaputils.py:481
3382
+ #: webmail/lib/imaputils.py:487
3382
3383
  msgid "Junk"
3383
3384
  msgstr ""
3384
3385
 
3385
- #: webmail/lib/imaputils.py:486
3386
+ #: webmail/lib/imaputils.py:492
3386
3387
  msgid "Sent"
3387
3388
  msgstr ""
3388
3389
 
3389
- #: webmail/lib/imaputils.py:491
3390
+ #: webmail/lib/imaputils.py:500
3391
+ msgid "Scheduled"
3392
+ msgstr ""
3393
+
3394
+ #: webmail/lib/imaputils.py:507
3390
3395
  msgid "Trash"
3391
3396
  msgstr ""
3392
3397
 
3393
- #: webmail/viewsets.py:357
3398
+ #: webmail/serializers.py:220
3399
+ msgid "Moving scheduled messages is forbidden"
3400
+ msgstr ""
3401
+
3402
+ #: webmail/serializers.py:253
3403
+ msgid "Only datetime in the future is allowed"
3404
+ msgstr ""
3405
+
3406
+ #: webmail/serializers.py:258
3407
+ msgid "Provived datetime must be one minute in the future at least"
3408
+ msgstr ""
3409
+
3410
+ #: webmail/viewsets.py:359
3394
3411
  #, python-format
3395
3412
  msgid "Attachment is too big (limit: %s)"
3396
3413
  msgstr ""