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