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