modoboa 2.6.5__py3-none-any.whl → 2.7.0__py3-none-any.whl

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