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