modoboa 2.6.4__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 (364) 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/autoreply/models.py +4 -4
  16. modoboa/calendars/backends/caldav_.py +17 -13
  17. modoboa/calendars/jobs.py +7 -0
  18. modoboa/calendars/mocks.py +4 -1
  19. modoboa/calendars/serializers.py +14 -9
  20. modoboa/calendars/tests.py +10 -9
  21. modoboa/calendars/viewsets.py +3 -1
  22. modoboa/contacts/migrations/0008_addressbook_syncing.py +18 -0
  23. modoboa/contacts/models.py +1 -0
  24. modoboa/contacts/serializers.py +5 -2
  25. modoboa/contacts/tasks.py +9 -3
  26. modoboa/contacts/tests.py +32 -6
  27. modoboa/contacts/viewsets.py +7 -1
  28. modoboa/core/api/v2/serializers.py +0 -7
  29. modoboa/core/api/v2/tests.py +0 -10
  30. modoboa/core/app_settings.py +0 -22
  31. modoboa/core/commands/deploy.py +13 -0
  32. modoboa/core/commands/templates/cron_config.py.tpl +33 -0
  33. modoboa/core/commands/templates/settings.py.tpl +21 -0
  34. modoboa/core/jobs.py +34 -0
  35. modoboa/core/management/commands/load_initial_data.py +1 -1
  36. modoboa/core/password_hashers/base.py +4 -1
  37. modoboa/core/tests/test_core.py +0 -14
  38. modoboa/core/tests/test_jobs.py +40 -0
  39. modoboa/frontend_dist/assets/{AccountAliasForm-tLHotdIR.js → AccountAliasForm-DO6DwfjE.js} +1 -1
  40. modoboa/frontend_dist/assets/{AccountEditView-DnQIIg47.js → AccountEditView-CCuN9mGB.js} +1 -1
  41. modoboa/frontend_dist/assets/AccountLayout-Ge7fzuZg.js +1 -0
  42. modoboa/frontend_dist/assets/AccountPasswordSubForm-PkFPblkR.js +1 -0
  43. modoboa/frontend_dist/assets/AccountView-dgseekZ8.js +1 -0
  44. modoboa/frontend_dist/assets/AddressBook-DZWOHOJj.js +1 -0
  45. modoboa/frontend_dist/assets/AdminLayout-itB_mmH_.js +1 -0
  46. modoboa/frontend_dist/assets/AlarmsView-King6zb6.js +1 -0
  47. modoboa/frontend_dist/assets/{AliasEditView-n75NEN_s.js → AliasEditView-CTjrXYPf.js} +1 -1
  48. modoboa/frontend_dist/assets/AliasRecipientForm-CI7bXqVp.js +1 -0
  49. modoboa/frontend_dist/assets/{AliasView-DFIvPeIm.js → AliasView-BN13MNN_.js} +1 -1
  50. modoboa/frontend_dist/assets/AuditTrailView-C1jQwgoo.js +1 -0
  51. modoboa/frontend_dist/assets/CalendarView-juHVIHU5.css +1 -0
  52. modoboa/frontend_dist/assets/CalendarView-rRSzqxrH.js +1 -0
  53. modoboa/frontend_dist/assets/ChoiceField-DCr12shR.js +1 -0
  54. modoboa/frontend_dist/assets/ComposeEmailForm-BmtKwFb1.js +2 -0
  55. modoboa/frontend_dist/assets/ComposeEmailForm-CVNDl-Mq.css +1 -0
  56. modoboa/frontend_dist/assets/ComposeEmailView-JW22Phrb.js +1 -0
  57. modoboa/frontend_dist/assets/ConfirmDialog-CWpdwSQ6.js +1 -0
  58. modoboa/frontend_dist/assets/ConnectedLayout-BP8pO27H.js +1 -0
  59. modoboa/frontend_dist/assets/{ConnectedLayout-C6HNXWkp.css → ConnectedLayout-Ddpb_6yT.css} +1 -1
  60. modoboa/frontend_dist/assets/CreationForm-CzelJsVQ.js +1 -0
  61. modoboa/frontend_dist/assets/DashboardView-BBkBodVj.js +1 -0
  62. modoboa/frontend_dist/assets/{DomainAdminList-BjtfbhRj.js → DomainAdminList-DD7p3i6F.js} +1 -1
  63. modoboa/frontend_dist/assets/{DomainEditView-Cq5Ea4RW.js → DomainEditView-DoIoNYC4.js} +1 -1
  64. modoboa/frontend_dist/assets/{DomainTransportForm-DAXJGNLA.js → DomainTransportForm-CbiJF9z5.js} +1 -1
  65. modoboa/frontend_dist/assets/{DomainView-BfpK7U14.js → DomainView-BXvznFYz.js} +3 -3
  66. modoboa/frontend_dist/assets/DomainsView-ffYjiffp.js +1 -0
  67. modoboa/frontend_dist/assets/EmailField-KhhJYA4D.js +1 -0
  68. modoboa/frontend_dist/assets/EmailSchedulingForm-CQL5Vfdr.js +1 -0
  69. modoboa/frontend_dist/assets/EmailView-Bq2bHZBO.js +1 -0
  70. modoboa/frontend_dist/assets/EmptyLayout-NrTftp18.js +1 -0
  71. modoboa/frontend_dist/assets/FiltersView-SOQy0U_3.js +1 -0
  72. modoboa/frontend_dist/assets/ForwardEmailView-kEPDjWUw.js +1 -0
  73. modoboa/frontend_dist/assets/{HtmlEditor-D753fIAJ.js → HtmlEditor-CyBl5wj2.js} +15 -15
  74. modoboa/frontend_dist/assets/IdentitiesView-CZFf4oR9.js +1 -0
  75. modoboa/frontend_dist/assets/InformationView-CAtneAqM.js +1 -0
  76. modoboa/frontend_dist/assets/{LoadingData-Tm56XNwj.js → LoadingData-C2txD49L.js} +1 -1
  77. modoboa/frontend_dist/assets/{LoginCallbackView-DjCHUgz5.js → LoginCallbackView-DAvty3CI.js} +1 -1
  78. modoboa/frontend_dist/assets/{LoginView-D0r4XBEl.js → LoginView-DHYITkn4.js} +1 -1
  79. modoboa/frontend_dist/assets/MailboxView-BNg2v7mi.css +1 -0
  80. modoboa/frontend_dist/assets/MailboxView-DHg5A78D.js +5 -0
  81. modoboa/frontend_dist/assets/MenuItems-C9p70bSC.js +1 -0
  82. modoboa/frontend_dist/assets/{MessageView-BWh9BqzS.js → MessageView-CrrEJpNI.js} +1 -1
  83. modoboa/frontend_dist/assets/MessagesView-CyecRd4I.js +1 -0
  84. modoboa/frontend_dist/assets/MigrationsView-DXGKKz2h.js +1 -0
  85. modoboa/frontend_dist/assets/{ParametersForm-y02-GM0r.js → ParametersForm-DFKYkPAs.js} +1 -1
  86. modoboa/frontend_dist/assets/ParametersView-B1wT5oyt.js +1 -0
  87. modoboa/frontend_dist/assets/ParametersView-CfvVzKea.js +1 -0
  88. modoboa/frontend_dist/assets/ProviderEditView-De-8ggBp.js +1 -0
  89. modoboa/frontend_dist/assets/ProviderGeneralForm-DO-IpJMQ.js +1 -0
  90. modoboa/frontend_dist/assets/ProvidersView-Bhk7sCz4.js +1 -0
  91. modoboa/frontend_dist/assets/QuarantineLayout-C1YszNmP.js +1 -0
  92. modoboa/frontend_dist/assets/QuarantineView-cElD_rS-.js +1 -0
  93. modoboa/frontend_dist/assets/ReplyEmailView-BvuOZdLl.js +1 -0
  94. modoboa/frontend_dist/assets/ResourcesForm-FWxrmVwo.js +1 -0
  95. modoboa/frontend_dist/assets/SelfServiceLayout-JHRvfvQf.js +1 -0
  96. modoboa/frontend_dist/assets/SettingsView-SIsKAXtQ.css +1 -0
  97. modoboa/frontend_dist/assets/SettingsView-s2l2Xl1L.js +6 -0
  98. modoboa/frontend_dist/assets/StatisticsView-FiidWvad.js +1 -0
  99. modoboa/frontend_dist/assets/TimeSerieChart-CdqUHiO_.js +1 -0
  100. modoboa/frontend_dist/assets/TimeSerieChart-nLIFGI0y.css +1 -0
  101. modoboa/frontend_dist/assets/UserLayout-DyvI8duf.js +1 -0
  102. modoboa/frontend_dist/assets/{VAlert-CNys_LUS.js → VAlert-MDbeolOo.js} +1 -1
  103. modoboa/frontend_dist/assets/VApp-DM1KLQfQ.js +1 -0
  104. modoboa/frontend_dist/assets/VAutocomplete-C9NL5_uo.css +1 -0
  105. modoboa/frontend_dist/assets/VAutocomplete-CQsWYWNX.js +1 -0
  106. modoboa/frontend_dist/assets/VAvatar-CXV_FqpP.js +1 -0
  107. modoboa/frontend_dist/assets/VBadge-7tDx7aI3.js +1 -0
  108. modoboa/frontend_dist/assets/{VCard-BoH6kjPa.js → VCard-CBtX8JF-.js} +1 -1
  109. modoboa/frontend_dist/assets/VCheckbox-zY1MApOy.js +1 -0
  110. modoboa/frontend_dist/assets/{VCheckboxBtn-Ccl786Rg.js → VCheckboxBtn-B0mIT3E0.js} +1 -1
  111. modoboa/frontend_dist/assets/VColorPicker-BbCHvk6K.js +1 -0
  112. modoboa/frontend_dist/assets/{VColorPicker-B_lVDaYR.css → VColorPicker-C9m8L-6U.css} +1 -1
  113. modoboa/frontend_dist/assets/{VContainer-DKMcKasC.js → VContainer-Cn-vKB3s.js} +1 -1
  114. modoboa/frontend_dist/assets/VDataTable-CNT9KOSp.js +1 -0
  115. modoboa/frontend_dist/assets/VDataTableServer-_yn4Ry6U.js +1 -0
  116. modoboa/frontend_dist/assets/VDataTableVirtual-Csxh3Gp6.js +1 -0
  117. modoboa/frontend_dist/assets/VDatePicker-_OUDqShN.css +1 -0
  118. modoboa/frontend_dist/assets/VDatePicker-iFu13xIP.js +2 -0
  119. modoboa/frontend_dist/assets/VDialog-lKtBdqnp.js +1 -0
  120. modoboa/frontend_dist/assets/VExpansionPanels-CaIvk9iF.js +1 -0
  121. modoboa/frontend_dist/assets/VFileInput-C7J_qVmk.js +1 -0
  122. modoboa/frontend_dist/assets/VForm-fdQ5d-CH.js +1 -0
  123. modoboa/frontend_dist/assets/VInput-BwHvhzAe.js +1 -0
  124. modoboa/frontend_dist/assets/VMenu-BpmJf4X2.js +1 -0
  125. modoboa/frontend_dist/assets/VMenu-C5A_5Hs5.css +1 -0
  126. modoboa/frontend_dist/assets/VPicker-B7cB3kJg.css +1 -0
  127. modoboa/frontend_dist/assets/VPicker-BZho70wU.js +1 -0
  128. modoboa/frontend_dist/assets/VProgressCircular-DRw_-iNj.js +1 -0
  129. modoboa/frontend_dist/assets/VRadioGroup--eiP5xtJ.js +1 -0
  130. modoboa/frontend_dist/assets/{VRow-CuVZGqBj.js → VRow-83Qnr5iB.js} +1 -1
  131. modoboa/frontend_dist/assets/VSelect-BcmGFGif.js +1 -0
  132. modoboa/frontend_dist/assets/{VSelectionControl-uKY9Zull.js → VSelectionControl-Cqi1xt-q.js} +1 -1
  133. modoboa/frontend_dist/assets/VSheet-C3MaHhtw.js +1 -0
  134. modoboa/frontend_dist/assets/VSpacer-CuSkdJZL.js +1 -0
  135. modoboa/frontend_dist/assets/VSwitch-XumUl685.js +1 -0
  136. modoboa/frontend_dist/assets/{VTable-gDsAUSLX.js → VTable-f7wcr2AZ.js} +1 -1
  137. modoboa/frontend_dist/assets/VTabs-CDfdejXj.css +1 -0
  138. modoboa/frontend_dist/assets/VTabs-y4wNP4im.js +1 -0
  139. modoboa/frontend_dist/assets/VTextField-BPIvtrn4.js +1 -0
  140. modoboa/frontend_dist/assets/VTextField-DjbYGlzs.css +1 -0
  141. modoboa/frontend_dist/assets/VTextarea-B6bGYcC3.js +1 -0
  142. modoboa/frontend_dist/assets/VTextarea-f6vTjzFy.css +1 -0
  143. modoboa/frontend_dist/assets/VToolbar-BYDPtwf0.css +1 -0
  144. modoboa/frontend_dist/assets/VToolbar-CB6wwtYc.js +1 -0
  145. modoboa/frontend_dist/assets/VWindowItem-CDtLLEkg.js +1 -0
  146. modoboa/frontend_dist/assets/WebmailLayout-CQQAolnl.css +1 -0
  147. modoboa/frontend_dist/assets/WebmailLayout-tosQSHLS.js +1 -0
  148. modoboa/frontend_dist/assets/{accounts-DqbBlaLK.js → accounts-KUsk6LHW.js} +1 -1
  149. modoboa/frontend_dist/assets/{admin-D36m_nXq.js → admin-BW9cZW0P.js} +1 -1
  150. modoboa/frontend_dist/assets/{aliases-BtyF8GC8.js → aliases-Ge0hjIsH.js} +1 -1
  151. modoboa/frontend_dist/assets/{amavis-DySmsCJQ.js → amavis-BbFeFfsk.js} +1 -1
  152. modoboa/frontend_dist/assets/{amavis-B4QhM5Fa.js → amavis-DtuzP_CS.js} +1 -1
  153. modoboa/frontend_dist/assets/{contacts-Df8ptuMn.js → contacts-DMJlQTe0.js} +1 -1
  154. modoboa/frontend_dist/assets/{domains-CSxtTvUh.js → domains-Du64lcXT.js} +1 -1
  155. modoboa/frontend_dist/assets/domains.store-1U61jeCV.js +1 -0
  156. modoboa/frontend_dist/assets/events-BM3in65C.js +1 -0
  157. modoboa/frontend_dist/assets/filter-Dihm6o59.js +1 -0
  158. modoboa/frontend_dist/assets/importExport-HGcNGWOm.js +1 -0
  159. modoboa/frontend_dist/assets/{index-B9q1vO3K.css → index-B1EK3MQe.css} +1 -1
  160. modoboa/frontend_dist/assets/{index-Bp9Fb67E.js → index-Dv00bmw9.js} +1 -1
  161. modoboa/frontend_dist/assets/index-jui3edpn.js +1001 -0
  162. modoboa/frontend_dist/assets/{language.store-_-zrrEiS.js → language.store-OcfdXL_-.js} +1 -1
  163. modoboa/frontend_dist/assets/languages-CF8hxo7x.js +1 -0
  164. modoboa/frontend_dist/assets/{layout-CjSP_k58.js → layout-DOO7TRTJ.js} +1 -1
  165. modoboa/frontend_dist/assets/{layout.store-CF5WRevH.js → layout.store-C0g-piJn.js} +1 -1
  166. modoboa/frontend_dist/assets/{logos-95XYS6uH.js → logos-Dz2Gzei-.js} +1 -1
  167. modoboa/frontend_dist/assets/{logs-CyU_PIDh.js → logs-CLm32Weu.js} +1 -1
  168. modoboa/frontend_dist/assets/{parameters-BxAXBXU1.js → parameters-DMIAQ7cd.js} +1 -1
  169. modoboa/frontend_dist/assets/{parameters.store-CATOSoQZ.js → parameters.store-DLnFzCwV.js} +1 -1
  170. modoboa/frontend_dist/assets/{permissions-cSkGqV3M.js → permissions-CrpE0b4w.js} +1 -1
  171. modoboa/frontend_dist/assets/{ssrBoot-05WtbG6H.js → ssrBoot-B7cr7q9U.js} +1 -1
  172. modoboa/frontend_dist/assets/{tag-BmV84V2s.js → tag-WF93n81Q.js} +1 -1
  173. modoboa/frontend_dist/assets/{theme-myV4ekXo.js → theme-_0oOYChG.js} +1 -1
  174. modoboa/frontend_dist/assets/transports-CS61syt-.js +1 -0
  175. modoboa/frontend_dist/assets/webmail-CYDXU0DS.js +1 -0
  176. modoboa/frontend_dist/assets/webmail.store-BvHCQSjM.js +1 -0
  177. modoboa/frontend_dist/index.html +2 -2
  178. modoboa/imap_migration/api/v2/serializers.py +13 -0
  179. modoboa/imap_migration/models.py +3 -3
  180. modoboa/imap_migration/templates/imap_migration/offlineimap.conf +2 -2
  181. modoboa/imap_migration/tests.py +28 -0
  182. modoboa/lib/cryptutils.py +2 -2
  183. modoboa/lib/sysutils.py +1 -1
  184. modoboa/lib/tests/__init__.py +0 -1
  185. modoboa/locale/br/LC_MESSAGES/django.mo +0 -0
  186. modoboa/locale/br/LC_MESSAGES/django.po +753 -317
  187. modoboa/locale/cs/LC_MESSAGES/django.po +671 -309
  188. modoboa/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
  189. modoboa/locale/cs_CZ/LC_MESSAGES/django.po +801 -378
  190. modoboa/locale/de/LC_MESSAGES/django.mo +0 -0
  191. modoboa/locale/de/LC_MESSAGES/django.po +1116 -455
  192. modoboa/locale/de_DE/LC_MESSAGES/django.mo +0 -0
  193. modoboa/locale/de_DE/LC_MESSAGES/django.po +745 -318
  194. modoboa/locale/el_GR/LC_MESSAGES/django.mo +0 -0
  195. modoboa/locale/el_GR/LC_MESSAGES/django.po +825 -393
  196. modoboa/locale/en/LC_MESSAGES/django.po +669 -309
  197. modoboa/locale/es/LC_MESSAGES/django.mo +0 -0
  198. modoboa/locale/es/LC_MESSAGES/django.po +810 -390
  199. modoboa/locale/es_MX/LC_MESSAGES/django.po +669 -309
  200. modoboa/locale/fi/LC_MESSAGES/django.mo +0 -0
  201. modoboa/locale/fi/LC_MESSAGES/django.po +756 -316
  202. modoboa/locale/fr/LC_MESSAGES/django.mo +0 -0
  203. modoboa/locale/fr/LC_MESSAGES/django.po +674 -313
  204. modoboa/locale/hu/LC_MESSAGES/django.po +669 -309
  205. modoboa/locale/it/LC_MESSAGES/django.mo +0 -0
  206. modoboa/locale/it/LC_MESSAGES/django.po +807 -380
  207. modoboa/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
  208. modoboa/locale/ja_JP/LC_MESSAGES/django.po +951 -419
  209. modoboa/locale/ka/LC_MESSAGES/django.po +669 -309
  210. modoboa/locale/nl_NL/LC_MESSAGES/django.mo +0 -0
  211. modoboa/locale/nl_NL/LC_MESSAGES/django.po +807 -387
  212. modoboa/locale/no/LC_MESSAGES/django.po +669 -309
  213. modoboa/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  214. modoboa/locale/pl_PL/LC_MESSAGES/django.po +826 -396
  215. modoboa/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  216. modoboa/locale/pt_BR/LC_MESSAGES/django.po +830 -392
  217. modoboa/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
  218. modoboa/locale/pt_PT/LC_MESSAGES/django.po +788 -371
  219. modoboa/locale/ro_RO/LC_MESSAGES/django.mo +0 -0
  220. modoboa/locale/ro_RO/LC_MESSAGES/django.po +763 -316
  221. modoboa/locale/ru/LC_MESSAGES/django.mo +0 -0
  222. modoboa/locale/ru/LC_MESSAGES/django.po +1336 -1046
  223. modoboa/locale/si/LC_MESSAGES/django.po +669 -309
  224. modoboa/locale/sk/LC_MESSAGES/django.po +671 -309
  225. modoboa/locale/sk_SK/LC_MESSAGES/django.po +671 -309
  226. modoboa/locale/sl_SI/LC_MESSAGES/django.po +695 -315
  227. modoboa/locale/sv/LC_MESSAGES/django.mo +0 -0
  228. modoboa/locale/sv/LC_MESSAGES/django.po +819 -387
  229. modoboa/locale/tr/LC_MESSAGES/django.mo +0 -0
  230. modoboa/locale/tr/LC_MESSAGES/django.po +737 -315
  231. modoboa/locale/tr_TR/LC_MESSAGES/django.mo +0 -0
  232. modoboa/locale/tr_TR/LC_MESSAGES/django.po +711 -310
  233. modoboa/locale/uk/LC_MESSAGES/django.po +671 -309
  234. modoboa/locale/zh/LC_MESSAGES/django.po +668 -309
  235. modoboa/locale/zh_CN/LC_MESSAGES/django.po +668 -309
  236. modoboa/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
  237. modoboa/locale/zh_TW/LC_MESSAGES/django.po +747 -316
  238. modoboa/maillog/jobs.py +11 -0
  239. modoboa/maillog/tests/test_views.py +5 -4
  240. modoboa/parameters/api/v2/tests.py +1 -1
  241. modoboa/policyd/management/commands/policy_daemon.py +5 -1
  242. modoboa/policyd/tests.py +4 -2
  243. modoboa/rspamd/tests.py +20 -0
  244. modoboa/templates/registration/twofactor_code_verify.html +1 -1
  245. modoboa/webmail/app_settings.py +37 -0
  246. modoboa/webmail/constants.py +21 -1
  247. modoboa/webmail/factories.py +19 -0
  248. modoboa/webmail/jobs.py +27 -0
  249. modoboa/webmail/lib/__init__.py +0 -2
  250. modoboa/webmail/lib/imapemail.py +9 -11
  251. modoboa/webmail/lib/imapheader.py +25 -13
  252. modoboa/webmail/lib/imaputils.py +51 -13
  253. modoboa/webmail/lib/sendmail.py +88 -105
  254. modoboa/webmail/lib/utils.py +109 -0
  255. modoboa/webmail/migrations/0001_initial.py +90 -0
  256. modoboa/webmail/migrations/__init__.py +0 -0
  257. modoboa/webmail/mocks.py +12 -3
  258. modoboa/webmail/models.py +102 -0
  259. modoboa/webmail/serializers.py +84 -4
  260. modoboa/webmail/tests/data.py +21 -0
  261. modoboa/webmail/tests/test_lib_imaputils.py +33 -0
  262. modoboa/webmail/tests/test_viewsets.py +108 -0
  263. modoboa/webmail/urls.py +5 -0
  264. modoboa/webmail/viewsets.py +39 -9
  265. {modoboa-2.6.4.dist-info → modoboa-2.7.0.dist-info}/METADATA +16 -13
  266. {modoboa-2.6.4.dist-info → modoboa-2.7.0.dist-info}/RECORD +271 -254
  267. {modoboa-2.6.4.dist-info → modoboa-2.7.0.dist-info}/WHEEL +1 -1
  268. modoboa/admin/management/commands/handle_mailbox_operations.py +0 -103
  269. modoboa/core/management/commands/cleanlogs.py +0 -53
  270. modoboa/frontend_dist/assets/AccountLayout-B2HptJzY.js +0 -1
  271. modoboa/frontend_dist/assets/AccountPasswordSubForm-DpADntAL.js +0 -1
  272. modoboa/frontend_dist/assets/AccountView-CJBGh9Oe.js +0 -1
  273. modoboa/frontend_dist/assets/AddressBook-CrFqzlzZ.js +0 -1
  274. modoboa/frontend_dist/assets/AdminLayout-BbCt7YxX.js +0 -1
  275. modoboa/frontend_dist/assets/AlarmsView-CIlt_IKQ.js +0 -1
  276. modoboa/frontend_dist/assets/AliasRecipientForm-jjj5yJJw.js +0 -1
  277. modoboa/frontend_dist/assets/AuditTrailView-sWnED3E9.js +0 -1
  278. modoboa/frontend_dist/assets/CalendarView-DSCBIvef.js +0 -1
  279. modoboa/frontend_dist/assets/ChoiceField-RDT6XcnX.js +0 -1
  280. modoboa/frontend_dist/assets/ComposeEmailForm-D3yUbBJX.css +0 -1
  281. modoboa/frontend_dist/assets/ComposeEmailForm-G3sXQAwI.js +0 -1
  282. modoboa/frontend_dist/assets/ComposeEmailView-Ce1CtFjD.js +0 -1
  283. modoboa/frontend_dist/assets/ConfirmDialog-Du7aqKbR.js +0 -1
  284. modoboa/frontend_dist/assets/ConnectedLayout-BHWaBAzH.js +0 -1
  285. modoboa/frontend_dist/assets/CreationForm-CjtILq0_.js +0 -1
  286. modoboa/frontend_dist/assets/DashboardView-DFNwusDZ.js +0 -1
  287. modoboa/frontend_dist/assets/DomainsView-CYxLy-3Y.js +0 -1
  288. modoboa/frontend_dist/assets/EmailField-DmPc4pyP.js +0 -1
  289. modoboa/frontend_dist/assets/EmailView-BE3vYZtJ.js +0 -1
  290. modoboa/frontend_dist/assets/EmptyLayout-DMwKNHfI.js +0 -1
  291. modoboa/frontend_dist/assets/FiltersView-Dps3_fAh.js +0 -1
  292. modoboa/frontend_dist/assets/ForwardEmailView-C0I00eXf.js +0 -1
  293. modoboa/frontend_dist/assets/IdentitiesView-CoGBVhZx.js +0 -1
  294. modoboa/frontend_dist/assets/InformationView-eB2ayeLD.js +0 -1
  295. modoboa/frontend_dist/assets/MailboxView-DIVABvk5.css +0 -1
  296. modoboa/frontend_dist/assets/MailboxView-DNokO2WZ.js +0 -5
  297. modoboa/frontend_dist/assets/MenuItems-dl38msRA.js +0 -1
  298. modoboa/frontend_dist/assets/MessagesView-BZ7NUOwo.js +0 -1
  299. modoboa/frontend_dist/assets/MigrationsView-DcOVgmcH.js +0 -1
  300. modoboa/frontend_dist/assets/ParametersView-B6abt-LH.js +0 -1
  301. modoboa/frontend_dist/assets/ParametersView-v0YS6WU4.js +0 -1
  302. modoboa/frontend_dist/assets/ProviderEditView-BaL9mKxJ.js +0 -1
  303. modoboa/frontend_dist/assets/ProviderGeneralForm-eoHMDO5v.js +0 -1
  304. modoboa/frontend_dist/assets/ProvidersView-Zu-G35u7.js +0 -1
  305. modoboa/frontend_dist/assets/QuarantineLayout-BHiiksnP.js +0 -1
  306. modoboa/frontend_dist/assets/QuarantineView-BOXSobRz.js +0 -1
  307. modoboa/frontend_dist/assets/ReplyEmailView-JmSiNWPy.js +0 -1
  308. modoboa/frontend_dist/assets/ResourcesForm-D0YBapCG.js +0 -1
  309. modoboa/frontend_dist/assets/SelfServiceLayout-DUmQzUDk.js +0 -1
  310. modoboa/frontend_dist/assets/SettingsView-DIvKGRBY.css +0 -1
  311. modoboa/frontend_dist/assets/SettingsView-DMuaKagM.js +0 -6
  312. modoboa/frontend_dist/assets/StatisticsView-CyY_CNcI.js +0 -1
  313. modoboa/frontend_dist/assets/TimeSerieChart-BTDBH33K.js +0 -1
  314. modoboa/frontend_dist/assets/TimeSerieChart-C3XHmlRd.css +0 -1
  315. modoboa/frontend_dist/assets/UserLayout-DwxcQr4L.js +0 -1
  316. modoboa/frontend_dist/assets/VApp-B0vRc3-6.js +0 -1
  317. modoboa/frontend_dist/assets/VAutocomplete-Huaz_-hf.js +0 -1
  318. modoboa/frontend_dist/assets/VAutocomplete-hzGuLlUI.css +0 -1
  319. modoboa/frontend_dist/assets/VAvatar-JdJfoK0C.js +0 -1
  320. modoboa/frontend_dist/assets/VBadge-Cg5iu5LG.js +0 -1
  321. modoboa/frontend_dist/assets/VCheckbox-CCLOJFKF.js +0 -1
  322. modoboa/frontend_dist/assets/VColorPicker-452uc3tY.js +0 -1
  323. modoboa/frontend_dist/assets/VDataTable-BkLLfcQK.js +0 -1
  324. modoboa/frontend_dist/assets/VDataTableServer-B_6fWBA3.js +0 -1
  325. modoboa/frontend_dist/assets/VDataTableVirtual-Ike7oqcC.js +0 -1
  326. modoboa/frontend_dist/assets/VDialog-DIUeAIpw.js +0 -1
  327. modoboa/frontend_dist/assets/VExpansionPanels-BeMgiS7A.js +0 -1
  328. modoboa/frontend_dist/assets/VFileInput-Dvj95FL5.js +0 -1
  329. modoboa/frontend_dist/assets/VForm-DkphQD3e.js +0 -1
  330. modoboa/frontend_dist/assets/VInput-CbqehdOu.js +0 -1
  331. modoboa/frontend_dist/assets/VMenu-B6SCtOwT.js +0 -1
  332. modoboa/frontend_dist/assets/VMenu-BEipA1lw.css +0 -1
  333. modoboa/frontend_dist/assets/VPicker-BUx70Wjg.js +0 -1
  334. modoboa/frontend_dist/assets/VPicker-ClSXs6kv.css +0 -1
  335. modoboa/frontend_dist/assets/VProgressCircular-DTDGzl2O.js +0 -1
  336. modoboa/frontend_dist/assets/VRadioGroup-CS9ULZ1c.js +0 -1
  337. modoboa/frontend_dist/assets/VSelect-D5IXDPEX.js +0 -1
  338. modoboa/frontend_dist/assets/VSheet-HeHw6g5_.js +0 -1
  339. modoboa/frontend_dist/assets/VSpacer-BUxSSJbH.js +0 -1
  340. modoboa/frontend_dist/assets/VSwitch-Dh_dserW.js +0 -1
  341. modoboa/frontend_dist/assets/VTabs-5XSICLQP.js +0 -1
  342. modoboa/frontend_dist/assets/VTabs-NzpINroH.css +0 -1
  343. modoboa/frontend_dist/assets/VTextField-Cow3HZvI.css +0 -1
  344. modoboa/frontend_dist/assets/VTextField-QXQFhKxm.js +0 -1
  345. modoboa/frontend_dist/assets/VTextarea-Bdy4UKmV.js +0 -1
  346. modoboa/frontend_dist/assets/VTextarea-DyGjqrlm.css +0 -1
  347. modoboa/frontend_dist/assets/VToolbar-CB2GrZpA.css +0 -1
  348. modoboa/frontend_dist/assets/VToolbar-CyrYSqJZ.js +0 -1
  349. modoboa/frontend_dist/assets/VWindowItem-kZpArwK1.js +0 -1
  350. modoboa/frontend_dist/assets/WebmailLayout-BzW0LWYp.css +0 -1
  351. modoboa/frontend_dist/assets/WebmailLayout-CNUHODnw.js +0 -1
  352. modoboa/frontend_dist/assets/domains.store-D4ZqCQ-O.js +0 -1
  353. modoboa/frontend_dist/assets/filter-DHKXX97M.js +0 -1
  354. modoboa/frontend_dist/assets/global.store-DYMmGKpn.js +0 -1
  355. modoboa/frontend_dist/assets/importExport-C-adpHJX.js +0 -1
  356. modoboa/frontend_dist/assets/index-B1bntsLR.js +0 -995
  357. modoboa/frontend_dist/assets/languages-CxjoT69j.js +0 -1
  358. modoboa/frontend_dist/assets/transports-ChdHV5hX.js +0 -1
  359. modoboa/frontend_dist/assets/webmail-B7MNMkv_.js +0 -1
  360. modoboa/frontend_dist/assets/webmail.store-Cm-h6hhE.js +0 -1
  361. {modoboa-2.6.4.data → modoboa-2.7.0.data}/scripts/modoboa-admin.py +0 -0
  362. {modoboa-2.6.4.dist-info → modoboa-2.7.0.dist-info}/entry_points.txt +0 -0
  363. {modoboa-2.6.4.dist-info → modoboa-2.7.0.dist-info}/licenses/LICENSE +0 -0
  364. {modoboa-2.6.4.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-08-28 09:41+0200\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"
@@ -42,14 +42,14 @@ msgid "Cannot be greater than domain quota"
42
42
  msgstr ""
43
43
 
44
44
  #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
45
- #: admin/api/v2/serializers.py:564 admin/models/alias.py:44
45
+ #: admin/api/v2/serializers.py:571 admin/models/alias.py:45
46
46
  msgid "Permission denied."
47
47
  msgstr ""
48
48
 
49
49
  #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
50
- #: admin/api/v2/serializers.py:486 core/api/v2/serializers.py:255
51
- #: core/api/v2/serializers.py:257 core/api/v2/serializers.py:266
52
- #: transport/backends.py:40
50
+ #: admin/api/v2/serializers.py:492 amavis/serializers.py:39
51
+ #: core/api/v2/serializers.py:248 core/api/v2/serializers.py:250
52
+ #: core/api/v2/serializers.py:259 transport/backends.py:40
53
53
  msgid "This field is required"
54
54
  msgstr ""
55
55
 
@@ -58,7 +58,7 @@ msgid ""
58
58
  "List of administered domains (resellers and domain administrators only)."
59
59
  msgstr ""
60
60
 
61
- #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:546
61
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:553
62
62
  msgid "Not allowed for this role."
63
63
  msgstr ""
64
64
 
@@ -66,13 +66,12 @@ msgstr ""
66
66
  msgid "Must be equal to mailbox full_address"
67
67
  msgstr ""
68
68
 
69
- #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:598
70
- #: calendars/serializers.py:175 calendars/serializers.py:177
71
- #: pdfcredentials/api/v2/serializers.py:91
69
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:605
70
+ #: calendars/serializers.py:182 pdfcredentials/api/v2/serializers.py:91
72
71
  msgid "This field is required."
73
72
  msgstr ""
74
73
 
75
- #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:615
74
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:622
76
75
  msgid "Local domain {} does not exist"
77
76
  msgstr ""
78
77
 
@@ -80,7 +79,7 @@ msgstr ""
80
79
  msgid "A list of recipient"
81
80
  msgstr ""
82
81
 
83
- #: admin/api/v1/serializers.py:515 admin/api/v2/viewsets.py:286
82
+ #: admin/api/v1/serializers.py:515 admin/api/v2/viewsets.py:313
84
83
  msgid "This alias already exists"
85
84
  msgstr ""
86
85
 
@@ -113,47 +112,47 @@ msgstr ""
113
112
  msgid "User '%s' already exists"
114
113
  msgstr ""
115
114
 
116
- #: admin/api/v2/serializers.py:250 admin/api/v2/serializers.py:256
115
+ #: admin/api/v2/serializers.py:256 admin/api/v2/serializers.py:262
117
116
  msgid "Must be a positive integer"
118
117
  msgstr ""
119
118
 
120
- #: admin/api/v2/serializers.py:265
119
+ #: admin/api/v2/serializers.py:271
121
120
  msgid "openssl not found, please make sure it is installed."
122
121
  msgstr ""
123
122
 
124
- #: admin/api/v2/serializers.py:268 pdfcredentials/api/v2/serializers.py:84
123
+ #: admin/api/v2/serializers.py:274 pdfcredentials/api/v2/serializers.py:84
125
124
  msgid "Directory not found."
126
125
  msgstr ""
127
126
 
128
- #: admin/api/v2/serializers.py:279
127
+ #: admin/api/v2/serializers.py:285
129
128
  msgid "This field only allows valid IP addresses (or networks)"
130
129
  msgstr ""
131
130
 
132
- #: admin/api/v2/serializers.py:292
131
+ #: admin/api/v2/serializers.py:298
133
132
  msgid "Please disable imap migration before disabling this option."
134
133
  msgstr ""
135
134
 
136
- #: admin/api/v2/serializers.py:305
135
+ #: admin/api/v2/serializers.py:311
137
136
  msgid "Define at least one authorized network / address"
138
137
  msgstr ""
139
138
 
140
- #: admin/api/v2/serializers.py:581
139
+ #: admin/api/v2/serializers.py:588
141
140
  msgid "The left part of an email address can't be more than 64 characters."
142
141
  msgstr ""
143
142
 
144
- #: admin/api/v2/serializers.py:603
143
+ #: admin/api/v2/serializers.py:610
145
144
  msgid "A mailbox is required to create aliases."
146
145
  msgstr ""
147
146
 
148
- #: admin/api/v2/serializers.py:772
147
+ #: admin/api/v2/serializers.py:783
149
148
  msgid "Unknown status"
150
149
  msgstr ""
151
150
 
152
- #: admin/api/v2/viewsets.py:84
151
+ #: admin/api/v2/viewsets.py:95
153
152
  msgid "You don't have access to this domain"
154
153
  msgstr ""
155
154
 
156
- #: admin/api/v2/viewsets.py:87
155
+ #: admin/api/v2/viewsets.py:98
157
156
  msgid "You can't delete your own domain"
158
157
  msgstr ""
159
158
 
@@ -237,113 +236,151 @@ msgstr ""
237
236
  msgid "Check every domain against major DNSBL providers"
238
237
  msgstr ""
239
238
 
240
- #: admin/app_settings.py:116
239
+ #: admin/app_settings.py:117
240
+ msgid "Notify domain admins about DNS issues"
241
+ msgstr ""
242
+
243
+ #: admin/app_settings.py:120
244
+ msgid ""
245
+ "Send a notification by email to domain administrators when DNS issues are "
246
+ "encountered"
247
+ msgstr ""
248
+
249
+ #: admin/app_settings.py:128
241
250
  msgid "Custom DNS server"
242
251
  msgstr ""
243
252
 
244
- #: admin/app_settings.py:118
253
+ #: admin/app_settings.py:130
245
254
  msgid "Use a custom DNS server instead of local server configuration"
246
255
  msgstr ""
247
256
 
248
- #: admin/app_settings.py:126
257
+ #: admin/app_settings.py:138
249
258
  msgid "DKIM keys storage directory"
250
259
  msgstr ""
251
260
 
252
- #: admin/app_settings.py:128
261
+ #: admin/app_settings.py:140
253
262
  msgid ""
254
263
  "Absolute path of the directory where DKIM private keys will be stored. Make "
255
264
  "sure this directory belongs to root user and is not readable by the outside "
256
265
  "world."
257
266
  msgstr ""
258
267
 
259
- #: admin/app_settings.py:137
268
+ #: admin/app_settings.py:149
260
269
  msgid "Default DKIM key length"
261
270
  msgstr ""
262
271
 
263
- #: admin/app_settings.py:139
272
+ #: admin/app_settings.py:151
264
273
  msgid "Default length in bits for newly generated DKIM keys."
265
274
  msgstr ""
266
275
 
267
- #: admin/app_settings.py:146
276
+ #: admin/app_settings.py:158
268
277
  msgid "Default domain quota"
269
278
  msgstr ""
270
279
 
271
- #: admin/app_settings.py:148
280
+ #: admin/app_settings.py:160
272
281
  msgid ""
273
282
  "Default quota (in MB) applied to freshly created domains with no value "
274
283
  "specified. A value of 0 means no quota."
275
284
  msgstr ""
276
285
 
277
- #: admin/app_settings.py:156
286
+ #: admin/app_settings.py:168
278
287
  msgid "Default domain sending limit"
279
288
  msgstr ""
280
289
 
281
- #: admin/app_settings.py:158
290
+ #: admin/app_settings.py:170
282
291
  msgid ""
283
292
  "Number of messages freshly created domains will be allowed to send per day. "
284
293
  "Leave empty for no limit."
285
294
  msgstr ""
286
295
 
287
- #: admin/app_settings.py:170 limits/app_settings.py:61
296
+ #: admin/app_settings.py:182 limits/app_settings.py:61
288
297
  #: limits/app_settings.py:135 limits/constants.py:31 limits/constants.py:84
289
298
  msgid "Mailboxes"
290
299
  msgstr ""
291
300
 
292
- #: admin/app_settings.py:176
301
+ #: admin/app_settings.py:188
293
302
  msgid "Handle mailboxes on filesystem"
294
303
  msgstr ""
295
304
 
296
- #: admin/app_settings.py:178
305
+ #: admin/app_settings.py:190
297
306
  msgid ""
298
307
  "Rename or remove mailboxes on the filesystem when they get renamed or "
299
308
  "removed within Modoboa"
300
309
  msgstr ""
301
310
 
302
- #: admin/app_settings.py:186 admin/models/domain.py:36
311
+ #: admin/app_settings.py:198 admin/models/domain.py:36
303
312
  msgid "Default mailbox quota"
304
313
  msgstr ""
305
314
 
306
- #: admin/app_settings.py:188
315
+ #: admin/app_settings.py:200
307
316
  msgid ""
308
317
  "Default mailbox quota (in MB) applied to freshly created domains with no "
309
318
  "value specified. A value of 0 means no quota."
310
319
  msgstr ""
311
320
 
312
- #: admin/app_settings.py:197
321
+ #: admin/app_settings.py:209
313
322
  msgid "Default mailbox sending limit"
314
323
  msgstr ""
315
324
 
316
- #: admin/app_settings.py:199
325
+ #: admin/app_settings.py:211
317
326
  msgid ""
318
327
  "Number of messages freshly created mailboxes will be allowed to send per "
319
328
  "day. Leave empty for no limit."
320
329
  msgstr ""
321
330
 
322
- #: admin/app_settings.py:207
331
+ #: admin/app_settings.py:219
323
332
  msgid "Automatic account removal"
324
333
  msgstr ""
325
334
 
326
- #: admin/app_settings.py:209
335
+ #: admin/app_settings.py:221
327
336
  msgid "When a mailbox is removed, also remove the associated account"
328
337
  msgstr ""
329
338
 
330
- #: admin/app_settings.py:218
339
+ #: admin/app_settings.py:230
331
340
  msgid "Automatic domain/mailbox creation"
332
341
  msgstr ""
333
342
 
334
- #: admin/app_settings.py:221
343
+ #: admin/app_settings.py:233
335
344
  msgid "Create a domain and a mailbox when an account is automatically created."
336
345
  msgstr ""
337
346
 
338
- #: admin/app_settings.py:230
347
+ #: admin/app_settings.py:242
339
348
  msgid "Create an alias when a mailbox is renamed"
340
349
  msgstr ""
341
350
 
342
- #: admin/app_settings.py:233
351
+ #: admin/app_settings.py:245
343
352
  msgid "Create an alias using the old address when a mailbox is renamed."
344
353
  msgstr ""
345
354
 
346
- #: admin/app_settings.py:287 core/api/v2/viewsets.py:174
355
+ #: admin/app_settings.py:257
356
+ msgid "Aliases"
357
+ msgstr ""
358
+
359
+ #: admin/app_settings.py:263
360
+ msgid "Alias can target any domain"
361
+ msgstr ""
362
+
363
+ #: admin/app_settings.py:265
364
+ msgid "Allow aliases to target any domain, not just the local domains."
365
+ msgstr ""
366
+
367
+ #: admin/app_settings.py:272
368
+ msgid "Alias target block list"
369
+ msgstr ""
370
+
371
+ #: admin/app_settings.py:274
372
+ msgid "A list of domains that aliases cannot target (comma separated)."
373
+ msgstr ""
374
+
375
+ #: admin/app_settings.py:282
376
+ msgid "Alias target allow list"
377
+ msgstr ""
378
+
379
+ #: admin/app_settings.py:284
380
+ msgid "A list of domains that aliases can target (comma separated)."
381
+ msgstr ""
382
+
383
+ #: admin/app_settings.py:338 core/api/v2/viewsets.py:174
347
384
  msgid "Administration"
348
385
  msgstr ""
349
386
 
@@ -363,6 +400,35 @@ msgstr ""
363
400
  msgid "Closed"
364
401
  msgstr ""
365
402
 
403
+ #: admin/dns_checker.py:96
404
+ msgid "MX {} listed by DNSBL provider {}"
405
+ msgstr ""
406
+
407
+ #: admin/dns_checker.py:138
408
+ msgid "Domain has no MX record"
409
+ msgstr ""
410
+
411
+ #: admin/dns_checker.py:141
412
+ msgid "Domain {} has no MX record"
413
+ msgstr ""
414
+
415
+ #: admin/dns_checker.py:159
416
+ msgid "Invalid MX record: {}"
417
+ msgstr ""
418
+
419
+ #: admin/dns_checker.py:166
420
+ #, python-brace-format
421
+ msgid "MX record for domain {0} is invalid: {1}"
422
+ msgstr ""
423
+
424
+ #: admin/dns_checker.py:177
425
+ msgid "[modoboa] MX issue(s) for domain {}"
426
+ msgstr ""
427
+
428
+ #: admin/dns_checker.py:224
429
+ msgid "[modoboa] DNSBL issue(s) for domain {}"
430
+ msgstr ""
431
+
366
432
  #: admin/handlers.py:179
367
433
  msgid "domain alias"
368
434
  msgstr ""
@@ -372,58 +438,54 @@ msgstr ""
372
438
  msgid "Account import failed (%s): domain does not exist"
373
439
  msgstr ""
374
440
 
375
- #: admin/handlers.py:242 admin/models/mailbox.py:342
376
- msgid "Mailbox {} already exists"
377
- msgstr ""
378
-
379
- #: admin/handlers.py:251
441
+ #: admin/handlers.py:246
380
442
  #, python-format
381
443
  msgid "Account import failed (%s): wrong quota value"
382
444
  msgstr ""
383
445
 
384
- #: admin/lib.py:121
446
+ #: admin/lib.py:126
385
447
  msgid "You are not allowed to import domains"
386
448
  msgstr ""
387
449
 
388
- #: admin/lib.py:130
450
+ #: admin/lib.py:135
389
451
  msgid "You are not allowed to import domain aliases."
390
452
  msgstr ""
391
453
 
392
- #: admin/lib.py:222 admin/tests/test_mx.py:153 admin/tests/test_mx.py:166
393
- #: admin/tests/test_mx.py:171
454
+ #: admin/lib.py:227 admin/tests/test_mx.py:139 admin/tests/test_mx.py:152
455
+ #: admin/tests/test_mx.py:157
394
456
  #, python-format
395
457
  msgid "No DNS record found for %s"
396
458
  msgstr ""
397
459
 
398
- #: admin/lib.py:225
460
+ #: admin/lib.py:230
399
461
  #, python-format
400
462
  msgid "No %(type)s record for %(name)s"
401
463
  msgstr ""
402
464
 
403
- #: admin/lib.py:229 admin/tests/test_mx.py:156
465
+ #: admin/lib.py:234 admin/tests/test_mx.py:142
404
466
  msgid "No working name servers found"
405
467
  msgstr ""
406
468
 
407
- #: admin/lib.py:232 admin/tests/test_mx.py:160
469
+ #: admin/lib.py:237 admin/tests/test_mx.py:146
408
470
  #, python-format
409
471
  msgid "DNS resolution timeout, unable to query %s at the moment"
410
472
  msgstr ""
411
473
 
412
- #: admin/lib.py:236
474
+ #: admin/lib.py:241
413
475
  msgid "DNS name is too long: {}"
414
476
  msgstr ""
415
477
 
416
- #: admin/lib.py:267
478
+ #: admin/lib.py:272
417
479
  #, python-brace-format
418
480
  msgid "Invalid IP address format for {domain}; {addr}"
419
481
  msgstr ""
420
482
 
421
- #: admin/lib.py:360
483
+ #: admin/lib.py:365
422
484
  #, python-format
423
485
  msgid "Object already exists: %s"
424
486
  msgstr ""
425
487
 
426
- #: admin/lib.py:364
488
+ #: admin/lib.py:369
427
489
  #, python-format
428
490
  msgid "%d objects imported successfully"
429
491
  msgstr ""
@@ -456,77 +518,52 @@ msgstr ""
456
518
  msgid "Failed to generate DKIM public key"
457
519
  msgstr ""
458
520
 
459
- #: admin/management/commands/subcommands/_mx.py:133
460
- msgid "MX {} listed by DNSBL provider {}"
461
- msgstr ""
462
-
463
- #: admin/management/commands/subcommands/_mx.py:174
464
- msgid "Domain has no MX record"
465
- msgstr ""
466
-
467
- #: admin/management/commands/subcommands/_mx.py:177
468
- msgid "Domain {} has no MX record"
469
- msgstr ""
470
-
471
- #: admin/management/commands/subcommands/_mx.py:195
472
- msgid "Invalid MX record: {}"
473
- msgstr ""
474
-
475
- #: admin/management/commands/subcommands/_mx.py:202
476
- #, python-brace-format
477
- msgid "MX record for domain {0} is invalid: {1}"
478
- msgstr ""
479
-
480
- #: admin/management/commands/subcommands/_mx.py:213
481
- msgid "[modoboa] MX issue(s) for domain {}"
482
- msgstr ""
483
-
484
- #: admin/management/commands/subcommands/_mx.py:269
485
- msgid "[modoboa] DNSBL issue(s) for domain {}"
486
- msgstr ""
487
-
488
- #: admin/models/alias.py:42
521
+ #: admin/models/alias.py:43
489
522
  msgid "Domain not found."
490
523
  msgstr ""
491
524
 
492
- #: admin/models/alias.py:97 admin/models/mailbox.py:85
525
+ #: admin/models/alias.py:117 admin/models/mailbox.py:85
493
526
  msgid "address"
494
527
  msgstr ""
495
528
 
496
- #: admin/models/alias.py:99
529
+ #: admin/models/alias.py:119
497
530
  msgid "The alias address."
498
531
  msgstr ""
499
532
 
500
- #: admin/models/alias.py:103 admin/models/domain.py:45
533
+ #: admin/models/alias.py:123 admin/models/domain.py:45
501
534
  #: admin/models/domain_alias.py:45 autoreply/models.py:25
502
535
  msgid "enabled"
503
536
  msgstr ""
504
537
 
505
- #: admin/models/alias.py:104 admin/models/domain_alias.py:46
538
+ #: admin/models/alias.py:124 admin/models/domain_alias.py:46
506
539
  msgid "Check to activate this alias"
507
540
  msgstr ""
508
541
 
509
- #: admin/models/alias.py:108
542
+ #: admin/models/alias.py:128
510
543
  msgid "Description"
511
544
  msgstr ""
512
545
 
513
- #: admin/models/alias.py:109
546
+ #: admin/models/alias.py:129
514
547
  msgid "Expire at"
515
548
  msgstr ""
516
549
 
517
- #: admin/models/alias.py:150
550
+ #: admin/models/alias.py:170
518
551
  msgid "alias"
519
552
  msgstr ""
520
553
 
521
- #: admin/models/alias.py:183
554
+ #: admin/models/alias.py:203
522
555
  msgid "Invalid address"
523
556
  msgstr ""
524
557
 
525
- #: admin/models/alias.py:202
558
+ #: admin/models/alias.py:206
559
+ msgid "Target domain not allowed"
560
+ msgstr ""
561
+
562
+ #: admin/models/alias.py:224
526
563
  msgid "Local recipient {}@{} not found"
527
564
  msgstr ""
528
565
 
529
- #: admin/models/alias.py:251
566
+ #: admin/models/alias.py:273
530
567
  msgid "Invalid line: {}"
531
568
  msgstr ""
532
569
 
@@ -634,6 +671,10 @@ msgstr ""
634
671
  msgid "Domain does not exist"
635
672
  msgstr ""
636
673
 
674
+ #: admin/models/mailbox.py:342
675
+ msgid "Mailbox {} already exists"
676
+ msgstr ""
677
+
637
678
  #: admin/templates/admin/notifications/domain_in_dnsbl.html:3
638
679
  #, python-format
639
680
  msgid ""
@@ -653,21 +694,334 @@ msgstr ""
653
694
  msgid "Modoboa detected that domain %(domain)s has no valid MX record:"
654
695
  msgstr ""
655
696
 
656
- #: admin/tests/test_mx.py:155
697
+ #: admin/tests/test_mx.py:141
657
698
  #, python-format
658
699
  msgid "No MX record for %s"
659
700
  msgstr ""
660
701
 
661
- #: admin/tests/test_mx.py:176 admin/tests/test_mx.py:182
702
+ #: admin/tests/test_mx.py:162 admin/tests/test_mx.py:168
662
703
  #, python-format
663
704
  msgid "Invalid IP address format for %(domain)s; %(addr)s"
664
705
  msgstr ""
665
706
 
666
- #: admin/tests/test_mx.py:199
707
+ #: admin/tests/test_mx.py:185
667
708
  #, python-format
668
709
  msgid "No AAAA record for %s"
669
710
  msgstr ""
670
711
 
712
+ #: amavis/app_settings.py:11
713
+ msgid "Amavis settings"
714
+ msgstr ""
715
+
716
+ #: amavis/app_settings.py:17
717
+ msgid "Localpart is case sensitive"
718
+ msgstr ""
719
+
720
+ #: amavis/app_settings.py:19
721
+ msgid "Value should match amavisd.conf variable $localpart_is_case_sensitive"
722
+ msgstr ""
723
+
724
+ #: amavis/app_settings.py:27
725
+ msgid "Recipient delimiter"
726
+ msgstr ""
727
+
728
+ #: amavis/app_settings.py:29
729
+ msgid "Value should match amavisd.conf variable $recipient_delimiter"
730
+ msgstr ""
731
+
732
+ #: amavis/app_settings.py:41
733
+ msgid "Quarantine settings"
734
+ msgstr ""
735
+
736
+ #: amavis/app_settings.py:47
737
+ msgid "Maximum message age"
738
+ msgstr ""
739
+
740
+ #: amavis/app_settings.py:49
741
+ msgid "Quarantine messages maximum age (in days) before deletion"
742
+ msgstr ""
743
+
744
+ #: amavis/app_settings.py:60
745
+ msgid "Message releasing"
746
+ msgstr ""
747
+
748
+ #: amavis/app_settings.py:66
749
+ msgid "Remove released messages"
750
+ msgstr ""
751
+
752
+ #: amavis/app_settings.py:68
753
+ msgid "Remove messages marked as released while cleaning up the database"
754
+ msgstr ""
755
+
756
+ #: amavis/app_settings.py:76
757
+ msgid "Amavis connection mode"
758
+ msgstr ""
759
+
760
+ #: amavis/app_settings.py:78
761
+ msgid "Mode used to access the PDP server"
762
+ msgstr ""
763
+
764
+ #: amavis/app_settings.py:85
765
+ msgid "PDP server address"
766
+ msgstr ""
767
+
768
+ #: amavis/app_settings.py:87
769
+ msgid "PDP server address (if inet mode)"
770
+ msgstr ""
771
+
772
+ #: amavis/app_settings.py:95
773
+ msgid "PDP server port"
774
+ msgstr ""
775
+
776
+ #: amavis/app_settings.py:97
777
+ msgid "PDP server port (if inet mode)"
778
+ msgstr ""
779
+
780
+ #: amavis/app_settings.py:105
781
+ msgid "PDP server socket"
782
+ msgstr ""
783
+
784
+ #: amavis/app_settings.py:107
785
+ msgid "Path to the PDP server socket (if unix mode)"
786
+ msgstr ""
787
+
788
+ #: amavis/app_settings.py:115
789
+ msgid "Allow direct release"
790
+ msgstr ""
791
+
792
+ #: amavis/app_settings.py:117
793
+ msgid "Allow users to directly release their messages"
794
+ msgstr ""
795
+
796
+ #: amavis/app_settings.py:124
797
+ msgid "Enable self-service mode"
798
+ msgstr ""
799
+
800
+ #: amavis/app_settings.py:126
801
+ msgid "Activate the 'self-service' mode"
802
+ msgstr ""
803
+
804
+ #: amavis/app_settings.py:133
805
+ msgid "Notifications sender"
806
+ msgstr ""
807
+
808
+ #: amavis/app_settings.py:135
809
+ msgid "The e-mail address used to send notitications"
810
+ msgstr ""
811
+
812
+ #: amavis/app_settings.py:146
813
+ msgid "Manual learning"
814
+ msgstr ""
815
+
816
+ #: amavis/app_settings.py:152
817
+ msgid "Enable manual learning"
818
+ msgstr ""
819
+
820
+ #: amavis/app_settings.py:154
821
+ msgid "Allow super administrators to manually train Spamassassin"
822
+ msgstr ""
823
+
824
+ #: amavis/app_settings.py:161
825
+ msgid "Is Spamassassin local?"
826
+ msgstr ""
827
+
828
+ #: amavis/app_settings.py:163
829
+ msgid "Tell if Spamassassin is running on the same server than modoboa"
830
+ msgstr ""
831
+
832
+ #: amavis/app_settings.py:171
833
+ msgid "Default user"
834
+ msgstr ""
835
+
836
+ #: amavis/app_settings.py:173
837
+ msgid "Name of the user owning the default bayesian database"
838
+ msgstr ""
839
+
840
+ #: amavis/app_settings.py:181
841
+ msgid "Spamd address"
842
+ msgstr ""
843
+
844
+ #: amavis/app_settings.py:183
845
+ msgid "The IP address where spamd can be reached"
846
+ msgstr ""
847
+
848
+ #: amavis/app_settings.py:191
849
+ msgid "Spamd port"
850
+ msgstr ""
851
+
852
+ #: amavis/app_settings.py:193
853
+ msgid "The TCP port spamd is listening on"
854
+ msgstr ""
855
+
856
+ #: amavis/app_settings.py:202
857
+ msgid "Enable per-domain manual learning"
858
+ msgstr ""
859
+
860
+ #: amavis/app_settings.py:205
861
+ msgid ""
862
+ "Allow domain administrators to train Spamassassin (within dedicated per-"
863
+ "domain databases)"
864
+ msgstr ""
865
+
866
+ #: amavis/app_settings.py:215
867
+ msgid "Enable per-user manual learning"
868
+ msgstr ""
869
+
870
+ #: amavis/app_settings.py:218
871
+ msgid ""
872
+ "Allow simple users to personally train Spamassassin (within a dedicated "
873
+ "database)"
874
+ msgstr ""
875
+
876
+ #: amavis/app_settings.py:236 webmail/app_settings.py:155
877
+ msgid "Display"
878
+ msgstr ""
879
+
880
+ #: amavis/app_settings.py:243 webmail/app_settings.py:181
881
+ msgid "Number of displayed emails per page"
882
+ msgstr ""
883
+
884
+ #: amavis/app_settings.py:246
885
+ msgid "Set the maximum number of messages displayed in a page"
886
+ msgstr ""
887
+
888
+ #: amavis/app_settings.py:266 amavis/app_settings.py:273
889
+ msgid "Amavis"
890
+ msgstr ""
891
+
892
+ #: amavis/checks/settings_checks.py:8
893
+ msgid ""
894
+ "AMAVIS_DEFAULT_DATABASE_ENCODING does not match the character encoding used "
895
+ "by the Amavis database."
896
+ msgstr ""
897
+
898
+ #: amavis/checks/settings_checks.py:12
899
+ msgid ""
900
+ "Check your database character encoding and set/update "
901
+ "AMAVIS_DEFAULT_DATABASE_ENCODING."
902
+ msgstr ""
903
+
904
+ #: amavis/checks/settings_checks.py:19
905
+ msgid "Modoboa Amavis has not been tested using the selected database engine."
906
+ msgstr ""
907
+
908
+ #: amavis/checks/settings_checks.py:20
909
+ msgid "Try using PostgreSQL, MySQL or MariaDB."
910
+ msgstr ""
911
+
912
+ #: amavis/handlers.py:141
913
+ msgid "Pending requests"
914
+ msgstr ""
915
+
916
+ #: amavis/lib.py:59
917
+ #, python-format
918
+ msgid "Connection to amavis failed: %s"
919
+ msgstr ""
920
+
921
+ #: amavis/lib.py:133
922
+ msgid "Failed to find {} binary"
923
+ msgstr ""
924
+
925
+ #: amavis/lib.py:148
926
+ msgid "No recipient found"
927
+ msgstr ""
928
+
929
+ #: amavis/lib.py:159
930
+ msgid "Local domain not found"
931
+ msgstr ""
932
+
933
+ #: amavis/management/commands/amnotify.py:59
934
+ msgid "[modoboa] Pending release requests"
935
+ msgstr ""
936
+
937
+ #: amavis/models.py:101
938
+ msgid "Virus filter"
939
+ msgstr ""
940
+
941
+ #: amavis/models.py:105 amavis/models.py:119 amavis/models.py:133
942
+ msgid "yes"
943
+ msgstr ""
944
+
945
+ #: amavis/models.py:106 amavis/models.py:120 amavis/models.py:134
946
+ msgid "no"
947
+ msgstr ""
948
+
949
+ #: amavis/models.py:107 amavis/models.py:121 amavis/models.py:135
950
+ msgid "default"
951
+ msgstr ""
952
+
953
+ #: amavis/models.py:111
954
+ msgid "Bypass virus checks or not. Choose 'default' to use global settings."
955
+ msgstr ""
956
+
957
+ #: amavis/models.py:115
958
+ msgid "Spam filter"
959
+ msgstr ""
960
+
961
+ #: amavis/models.py:125
962
+ msgid "Bypass spam checks or not. Choose 'default' to use global settings."
963
+ msgstr ""
964
+
965
+ #: amavis/models.py:129
966
+ msgid "Banned filter"
967
+ msgstr ""
968
+
969
+ #: amavis/models.py:139
970
+ msgid "Bypass banned checks or not. Choose 'default' to use global settings."
971
+ msgstr ""
972
+
973
+ #: amavis/models.py:170
974
+ msgid "Spam marker"
975
+ msgstr ""
976
+
977
+ #: amavis/models.py:176
978
+ msgid ""
979
+ "Modify spam subject using the specified text. Choose 'default' to use global "
980
+ "settings."
981
+ msgstr ""
982
+
983
+ #: amavis/templates/amavis/notifications/pending_requests.html:3
984
+ #, python-format
985
+ msgid "%(counter)s release request is pending for action."
986
+ msgid_plural "%(counter)s release requests are pending for action."
987
+ msgstr[0] ""
988
+ msgstr[1] ""
989
+ msgstr[2] ""
990
+ msgstr[3] ""
991
+
992
+ #: amavis/templates/amavis/notifications/pending_requests.html:8
993
+ msgid "Sketch:"
994
+ msgstr ""
995
+
996
+ #: amavis/templates/amavis/notifications/pending_requests.html:10
997
+ msgid "From:"
998
+ msgstr ""
999
+
1000
+ #: amavis/templates/amavis/notifications/pending_requests.html:11
1001
+ msgid "To:"
1002
+ msgstr ""
1003
+
1004
+ #: amavis/templates/amavis/notifications/pending_requests.html:12
1005
+ msgid "Date:"
1006
+ msgstr ""
1007
+
1008
+ #: amavis/templates/amavis/notifications/pending_requests.html:13
1009
+ msgid "Subject:"
1010
+ msgstr ""
1011
+
1012
+ #: amavis/templates/amavis/notifications/pending_requests.html:14
1013
+ msgid "Act on this message:"
1014
+ msgstr ""
1015
+
1016
+ #: amavis/templates/amavis/notifications/pending_requests.html:16
1017
+ #, python-format
1018
+ msgid "Please visit %(listingurl)s for a full listing."
1019
+ msgstr ""
1020
+
1021
+ #: amavis/viewsets.py:122
1022
+ msgid "Invalid request"
1023
+ msgstr ""
1024
+
671
1025
  #: autoreply/api/v2/serializers.py:27
672
1026
  msgid "Value can't be less than 1 day"
673
1027
  msgstr ""
@@ -768,7 +1122,7 @@ msgstr ""
768
1122
  msgid "Allow domain administrators to manage user calendars (read and write)"
769
1123
  msgstr ""
770
1124
 
771
- #: calendars/app_settings.py:60 core/app_settings.py:676
1125
+ #: calendars/app_settings.py:60 core/app_settings.py:664
772
1126
  #: rspamd/app_settings.py:45
773
1127
  msgid "Miscellaneous"
774
1128
  msgstr ""
@@ -782,15 +1136,15 @@ msgid ""
782
1136
  "Maximum size in bytes of imported ICS files (or KB, MB, GB if specified)"
783
1137
  msgstr ""
784
1138
 
785
- #: calendars/app_settings.py:89 core/api/v2/viewsets.py:195
1139
+ #: calendars/app_settings.py:89 core/api/v2/viewsets.py:205
786
1140
  msgid "Calendars"
787
1141
  msgstr ""
788
1142
 
789
- #: 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
790
1144
  msgid "Server location is not set, please fix it."
791
1145
  msgstr ""
792
1146
 
793
- #: calendars/viewsets.py:197
1147
+ #: calendars/viewsets.py:199
794
1148
  msgid "Uploaded file is too big (max: {} bytes)"
795
1149
  msgstr ""
796
1150
 
@@ -816,7 +1170,7 @@ msgstr ""
816
1170
  msgid "Interval in seconds between 2 synchronization requests"
817
1171
  msgstr ""
818
1172
 
819
- #: contacts/app_settings.py:51 core/api/v2/viewsets.py:185
1173
+ #: contacts/app_settings.py:51 core/api/v2/viewsets.py:195
820
1174
  msgid "Contacts"
821
1175
  msgstr ""
822
1176
 
@@ -864,12 +1218,12 @@ msgstr ""
864
1218
  msgid "2FA is already enabled"
865
1219
  msgstr ""
866
1220
 
867
- #: core/api/v1/serializers.py:86
1221
+ #: core/api/v1/serializers.py:87
868
1222
  #, python-format
869
1223
  msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
870
1224
  msgstr ""
871
1225
 
872
- #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:445
1226
+ #: core/api/v1/serializers.py:93 core/api/v2/serializers.py:438
873
1227
  msgid "Invalid password"
874
1228
  msgstr ""
875
1229
 
@@ -881,24 +1235,20 @@ msgstr ""
881
1235
  msgid "Local"
882
1236
  msgstr ""
883
1237
 
884
- #: core/api/v2/serializers.py:194 core/app_settings.py:17
885
- msgid "User profile"
886
- msgstr ""
887
-
888
- #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
889
- #: 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
890
1240
  msgid "Invalid syntax"
891
1241
  msgstr ""
892
1242
 
893
- #: core/api/v2/serializers.py:233
1243
+ #: core/api/v2/serializers.py:226
894
1244
  msgid "Invalid rounds number"
895
1245
  msgstr ""
896
1246
 
897
- #: core/api/v2/serializers.py:433 core/forms.py:81
1247
+ #: core/api/v2/serializers.py:426 core/forms.py:81
898
1248
  msgid "This code is invalid"
899
1249
  msgstr ""
900
1250
 
901
- #: core/api/v2/serializers.py:503 core/views/auth.py:194 core/views/auth.py:247
1251
+ #: core/api/v2/serializers.py:496 core/views/auth.py:213 core/views/auth.py:266
902
1252
  msgid "Please use the following code to recover your Modoboa password: {}"
903
1253
  msgstr ""
904
1254
 
@@ -906,534 +1256,534 @@ msgstr ""
906
1256
  msgid "Administration console"
907
1257
  msgstr ""
908
1258
 
909
- #: core/api/v2/viewsets.py:187
910
- msgid "Address book"
1259
+ #: core/api/v2/viewsets.py:184 dmarc/models.py:11
1260
+ msgid "Quarantine"
1261
+ msgstr ""
1262
+
1263
+ #: core/api/v2/viewsets.py:186
1264
+ msgid "Amavis quarantine"
911
1265
  msgstr ""
912
1266
 
913
1267
  #: core/api/v2/viewsets.py:197
1268
+ msgid "Address book"
1269
+ msgstr ""
1270
+
1271
+ #: core/api/v2/viewsets.py:207
914
1272
  msgid "Calendar"
915
1273
  msgstr ""
916
1274
 
917
- #: core/api/v2/viewsets.py:205 core/api/v2/viewsets.py:207
918
- #: webmail/app_settings.py:258 webmail/app_settings.py:265
1275
+ #: core/api/v2/viewsets.py:215 core/api/v2/viewsets.py:217
1276
+ #: webmail/app_settings.py:295 webmail/app_settings.py:302
919
1277
  msgid "Webmail"
920
1278
  msgstr ""
921
1279
 
922
- #: core/app_settings.py:37
1280
+ #: core/app_settings.py:25
923
1281
  msgid "Authentication"
924
1282
  msgstr ""
925
1283
 
926
- #: core/app_settings.py:43
1284
+ #: core/app_settings.py:31
927
1285
  msgid "Authentication type"
928
1286
  msgstr ""
929
1287
 
930
- #: core/app_settings.py:45
1288
+ #: core/app_settings.py:33
931
1289
  msgid "The backend used for authentication"
932
1290
  msgstr ""
933
1291
 
934
- #: core/app_settings.py:52
1292
+ #: core/app_settings.py:40
935
1293
  msgid "Default password scheme"
936
1294
  msgstr ""
937
1295
 
938
- #: core/app_settings.py:54
1296
+ #: core/app_settings.py:42
939
1297
  msgid "Scheme used to crypt mailbox passwords"
940
1298
  msgstr ""
941
1299
 
942
- #: core/app_settings.py:61
1300
+ #: core/app_settings.py:49
943
1301
  msgid "Rounds"
944
1302
  msgstr ""
945
1303
 
946
- #: core/app_settings.py:63
1304
+ #: core/app_settings.py:51
947
1305
  msgid ""
948
1306
  "Number of rounds to use (only used by sha256crypt and sha512crypt). Must be "
949
1307
  "between 1000 and 999999999, inclusive."
950
1308
  msgstr ""
951
1309
 
952
- #: core/app_settings.py:73
1310
+ #: core/app_settings.py:61
953
1311
  msgid "Update password scheme at login"
954
1312
  msgstr ""
955
1313
 
956
- #: core/app_settings.py:76
1314
+ #: core/app_settings.py:64
957
1315
  msgid "Update user password at login to use the default password scheme"
958
1316
  msgstr ""
959
1317
 
960
- #: core/app_settings.py:84
1318
+ #: core/app_settings.py:72
961
1319
  msgid "Default password"
962
1320
  msgstr ""
963
1321
 
964
- #: core/app_settings.py:86
1322
+ #: core/app_settings.py:74
965
1323
  msgid "Default password for automatically created accounts."
966
1324
  msgstr ""
967
1325
 
968
- #: core/app_settings.py:93
1326
+ #: core/app_settings.py:81
969
1327
  msgid "Random password length"
970
1328
  msgstr ""
971
1329
 
972
- #: core/app_settings.py:95
1330
+ #: core/app_settings.py:83
973
1331
  msgid "Length of randomly generated passwords."
974
1332
  msgstr ""
975
1333
 
976
- #: core/app_settings.py:103
1334
+ #: core/app_settings.py:91
977
1335
  msgid "Allow special characters for random password"
978
1336
  msgstr ""
979
1337
 
980
- #: core/app_settings.py:106
1338
+ #: core/app_settings.py:94
981
1339
  msgid "Enable special characters in randomly generated passwords."
982
1340
  msgstr ""
983
1341
 
984
- #: core/app_settings.py:114
1342
+ #: core/app_settings.py:102
985
1343
  msgid "Update password service URL"
986
1344
  msgstr ""
987
1345
 
988
- #: core/app_settings.py:116
1346
+ #: core/app_settings.py:104
989
1347
  msgid ""
990
1348
  "The URL of an external page where users will be able to update their "
991
1349
  "password. It applies only to non local users, ie. those automatically "
992
1350
  "created after a successful external authentication (LDAP, SMTP)."
993
1351
  msgstr ""
994
1352
 
995
- #: core/app_settings.py:126
1353
+ #: core/app_settings.py:114
996
1354
  msgid "Password recovery announcement"
997
1355
  msgstr ""
998
1356
 
999
- #: core/app_settings.py:128
1357
+ #: core/app_settings.py:116
1000
1358
  msgid "A temporary message that will be displayed on the reset password page."
1001
1359
  msgstr ""
1002
1360
 
1003
- #: core/app_settings.py:137
1361
+ #: core/app_settings.py:125
1004
1362
  msgid "Enable password recovery by SMS"
1005
1363
  msgstr ""
1006
1364
 
1007
- #: core/app_settings.py:140
1365
+ #: core/app_settings.py:128
1008
1366
  msgid "Enable password recovery by SMS for users who filled a phone number."
1009
1367
  msgstr ""
1010
1368
 
1011
- #: core/app_settings.py:148
1369
+ #: core/app_settings.py:136
1012
1370
  msgid "SMS provider"
1013
1371
  msgstr ""
1014
1372
 
1015
- #: core/app_settings.py:151
1373
+ #: core/app_settings.py:139
1016
1374
  msgid "Choose a provider to send password recovery SMS"
1017
1375
  msgstr ""
1018
1376
 
1019
- #: core/app_settings.py:163
1377
+ #: core/app_settings.py:151
1020
1378
  msgid "LDAP"
1021
1379
  msgstr ""
1022
1380
 
1023
- #: core/app_settings.py:169 sievefilters/app_settings.py:18
1381
+ #: core/app_settings.py:157 sievefilters/app_settings.py:18
1024
1382
  #: sievefilters/app_settings.py:51 webmail/app_settings.py:36
1025
- #: webmail/app_settings.py:73
1383
+ #: webmail/app_settings.py:73 webmail/app_settings.py:119
1026
1384
  msgid "Server address"
1027
1385
  msgstr ""
1028
1386
 
1029
- #: core/app_settings.py:171
1387
+ #: core/app_settings.py:159
1030
1388
  msgid "The IP address or the DNS name of the LDAP server"
1031
1389
  msgstr ""
1032
1390
 
1033
- #: core/app_settings.py:178 sievefilters/app_settings.py:25
1391
+ #: core/app_settings.py:166 sievefilters/app_settings.py:25
1034
1392
  #: sievefilters/app_settings.py:67 webmail/app_settings.py:54
1035
- #: webmail/app_settings.py:91
1393
+ #: webmail/app_settings.py:91 webmail/app_settings.py:137
1036
1394
  msgid "Server port"
1037
1395
  msgstr ""
1038
1396
 
1039
- #: core/app_settings.py:180
1397
+ #: core/app_settings.py:168
1040
1398
  msgid "The TCP port number used by the LDAP server"
1041
1399
  msgstr ""
1042
1400
 
1043
- #: core/app_settings.py:188
1401
+ #: core/app_settings.py:176
1044
1402
  msgid "Enable secondary server (fallback)"
1045
1403
  msgstr ""
1046
1404
 
1047
- #: core/app_settings.py:191
1405
+ #: core/app_settings.py:179
1048
1406
  msgid ""
1049
1407
  "Enable a secondary LDAP server which will be used if the primary one fails"
1050
1408
  msgstr ""
1051
1409
 
1052
- #: core/app_settings.py:199
1410
+ #: core/app_settings.py:187
1053
1411
  msgid "Secondary server address"
1054
1412
  msgstr ""
1055
1413
 
1056
- #: core/app_settings.py:202
1414
+ #: core/app_settings.py:190
1057
1415
  msgid "The IP address or the DNS name of the seondary LDAP server"
1058
1416
  msgstr ""
1059
1417
 
1060
- #: core/app_settings.py:209
1418
+ #: core/app_settings.py:197
1061
1419
  msgid "Secondary server port"
1062
1420
  msgstr ""
1063
1421
 
1064
- #: core/app_settings.py:212
1422
+ #: core/app_settings.py:200
1065
1423
  msgid "The TCP port number used by the LDAP secondary server"
1066
1424
  msgstr ""
1067
1425
 
1068
- #: core/app_settings.py:219 sievefilters/app_settings.py:58
1426
+ #: core/app_settings.py:207 sievefilters/app_settings.py:58
1069
1427
  #: webmail/app_settings.py:45
1070
1428
  msgid "Use a secured connection"
1071
1429
  msgstr ""
1072
1430
 
1073
- #: core/app_settings.py:221
1431
+ #: core/app_settings.py:209
1074
1432
  msgid "Use an SSL/STARTTLS connection to access the LDAP server"
1075
1433
  msgstr ""
1076
1434
 
1077
- #: core/app_settings.py:228
1435
+ #: core/app_settings.py:216
1078
1436
  msgid "Active Directory"
1079
1437
  msgstr ""
1080
1438
 
1081
- #: core/app_settings.py:230
1439
+ #: core/app_settings.py:218
1082
1440
  msgid "Tell if the LDAP server is an Active Directory one"
1083
1441
  msgstr ""
1084
1442
 
1085
- #: core/app_settings.py:237
1443
+ #: core/app_settings.py:225
1086
1444
  msgid "Administrator groups"
1087
1445
  msgstr ""
1088
1446
 
1089
- #: core/app_settings.py:239
1447
+ #: core/app_settings.py:227
1090
1448
  msgid ""
1091
1449
  "Members of those LDAP Posix groups will be created as domain administrators. "
1092
1450
  "Use ';' characters to separate groups."
1093
1451
  msgstr ""
1094
1452
 
1095
- #: core/app_settings.py:248
1453
+ #: core/app_settings.py:236
1096
1454
  msgid "Group type"
1097
1455
  msgstr ""
1098
1456
 
1099
- #: core/app_settings.py:250
1457
+ #: core/app_settings.py:238
1100
1458
  msgid "The LDAP group type to use with your directory."
1101
1459
  msgstr ""
1102
1460
 
1103
- #: core/app_settings.py:257
1461
+ #: core/app_settings.py:245
1104
1462
  msgid "Groups search base"
1105
1463
  msgstr ""
1106
1464
 
1107
- #: core/app_settings.py:259
1465
+ #: core/app_settings.py:247
1108
1466
  msgid "The distinguished name of the search base used to find groups"
1109
1467
  msgstr ""
1110
1468
 
1111
- #: core/app_settings.py:267
1469
+ #: core/app_settings.py:255
1112
1470
  msgid "Password attribute"
1113
1471
  msgstr ""
1114
1472
 
1115
- #: core/app_settings.py:269
1473
+ #: core/app_settings.py:257
1116
1474
  msgid "The attribute used to store user passwords"
1117
1475
  msgstr ""
1118
1476
 
1119
- #: core/app_settings.py:276
1477
+ #: core/app_settings.py:264
1120
1478
  msgid "LDAP authentication settings"
1121
1479
  msgstr ""
1122
1480
 
1123
- #: core/app_settings.py:284
1481
+ #: core/app_settings.py:272
1124
1482
  msgid "Authentication method"
1125
1483
  msgstr ""
1126
1484
 
1127
- #: core/app_settings.py:287
1485
+ #: core/app_settings.py:275
1128
1486
  msgid "Choose the authentication method to use"
1129
1487
  msgstr ""
1130
1488
 
1131
- #: core/app_settings.py:294 core/app_settings.py:357
1489
+ #: core/app_settings.py:282 core/app_settings.py:345
1132
1490
  msgid "Bind DN"
1133
1491
  msgstr ""
1134
1492
 
1135
- #: core/app_settings.py:296 core/app_settings.py:359
1493
+ #: core/app_settings.py:284 core/app_settings.py:347
1136
1494
  msgid ""
1137
1495
  "The distinguished name to use when binding to the LDAP server. Leave empty "
1138
1496
  "for an anonymous bind"
1139
1497
  msgstr ""
1140
1498
 
1141
- #: core/app_settings.py:305 core/app_settings.py:367
1499
+ #: core/app_settings.py:293 core/app_settings.py:355
1142
1500
  msgid "Bind password"
1143
1501
  msgstr ""
1144
1502
 
1145
- #: core/app_settings.py:307 core/app_settings.py:369
1503
+ #: core/app_settings.py:295 core/app_settings.py:357
1146
1504
  msgid "The password to use when binding to the LDAP server (with 'Bind DN')"
1147
1505
  msgstr ""
1148
1506
 
1149
- #: core/app_settings.py:317 core/app_settings.py:422
1507
+ #: core/app_settings.py:305 core/app_settings.py:410
1150
1508
  msgid "Users search base"
1151
1509
  msgstr ""
1152
1510
 
1153
- #: core/app_settings.py:319 core/app_settings.py:424
1511
+ #: core/app_settings.py:307 core/app_settings.py:412
1154
1512
  msgid "The distinguished name of the search base used to find users"
1155
1513
  msgstr ""
1156
1514
 
1157
- #: core/app_settings.py:328 core/app_settings.py:433
1515
+ #: core/app_settings.py:316 core/app_settings.py:421
1158
1516
  msgid "Search filter"
1159
1517
  msgstr ""
1160
1518
 
1161
- #: core/app_settings.py:330 core/app_settings.py:435
1519
+ #: core/app_settings.py:318 core/app_settings.py:423
1162
1520
  msgid ""
1163
1521
  "An optional filter string (e.g. '(objectClass=person)'). In order to be "
1164
1522
  "valid, it must be enclosed in parentheses."
1165
1523
  msgstr ""
1166
1524
 
1167
- #: core/app_settings.py:339
1525
+ #: core/app_settings.py:327
1168
1526
  msgid "User DN template"
1169
1527
  msgstr ""
1170
1528
 
1171
- #: core/app_settings.py:341
1529
+ #: core/app_settings.py:329
1172
1530
  #, python-format
1173
1531
  msgid ""
1174
1532
  "The template used to construct a user's DN. It should contain one "
1175
1533
  "placeholder (ie. %(user)s)"
1176
1534
  msgstr ""
1177
1535
 
1178
- #: core/app_settings.py:350
1536
+ #: core/app_settings.py:338
1179
1537
  msgid "LDAP synchronization settings"
1180
1538
  msgstr ""
1181
1539
 
1182
- #: core/app_settings.py:378
1540
+ #: core/app_settings.py:366
1183
1541
  msgid "Enable export to LDAP"
1184
1542
  msgstr ""
1185
1543
 
1186
- #: core/app_settings.py:380
1544
+ #: core/app_settings.py:368
1187
1545
  msgid ""
1188
1546
  "Enable automatic synchronization between local database and LDAP directory"
1189
1547
  msgstr ""
1190
1548
 
1191
- #: core/app_settings.py:389
1549
+ #: core/app_settings.py:377
1192
1550
  msgid "Delete remote LDAP account when local account is deleted"
1193
1551
  msgstr ""
1194
1552
 
1195
- #: core/app_settings.py:392
1553
+ #: core/app_settings.py:380
1196
1554
  msgid ""
1197
1555
  "Delete remote LDAP account when local account is deleted, otherwise it will "
1198
1556
  "be disabled."
1199
1557
  msgstr ""
1200
1558
 
1201
- #: core/app_settings.py:401
1559
+ #: core/app_settings.py:389
1202
1560
  msgid "Account DN template"
1203
1561
  msgstr ""
1204
1562
 
1205
- #: core/app_settings.py:403
1563
+ #: core/app_settings.py:391
1206
1564
  #, python-format
1207
1565
  msgid ""
1208
1566
  "The template used to construct an account's DN. It should contain one "
1209
1567
  "placeholder (ie. %(user)s)"
1210
1568
  msgstr ""
1211
1569
 
1212
- #: core/app_settings.py:412
1570
+ #: core/app_settings.py:400
1213
1571
  msgid "Enable import from LDAP"
1214
1572
  msgstr ""
1215
1573
 
1216
- #: core/app_settings.py:414
1574
+ #: core/app_settings.py:402
1217
1575
  msgid "Enable account synchronization from LDAP directory to local database"
1218
1576
  msgstr ""
1219
1577
 
1220
- #: core/app_settings.py:444
1578
+ #: core/app_settings.py:432
1221
1579
  msgid "Username attribute"
1222
1580
  msgstr ""
1223
1581
 
1224
- #: core/app_settings.py:446
1582
+ #: core/app_settings.py:434
1225
1583
  msgid "The name of the LDAP attribute where the username can be found."
1226
1584
  msgstr ""
1227
1585
 
1228
- #: core/app_settings.py:455
1586
+ #: core/app_settings.py:443
1229
1587
  msgid "Enable Dovecot LDAP sync"
1230
1588
  msgstr ""
1231
1589
 
1232
- #: core/app_settings.py:457
1590
+ #: core/app_settings.py:445
1233
1591
  msgid "LDAP authentication settings will be applied to Dovecot configuration."
1234
1592
  msgstr ""
1235
1593
 
1236
- #: core/app_settings.py:465
1594
+ #: core/app_settings.py:453
1237
1595
  msgid "Dovecot LDAP config file"
1238
1596
  msgstr ""
1239
1597
 
1240
- #: core/app_settings.py:467
1598
+ #: core/app_settings.py:455
1241
1599
  msgid ""
1242
1600
  "Location of the configuration file which contains Dovecot LDAP settings."
1243
1601
  msgstr ""
1244
1602
 
1245
- #: core/app_settings.py:480
1603
+ #: core/app_settings.py:468
1246
1604
  msgid "Dashboard"
1247
1605
  msgstr ""
1248
1606
 
1249
- #: core/app_settings.py:486
1607
+ #: core/app_settings.py:474
1250
1608
  msgid "Custom welcome message"
1251
1609
  msgstr ""
1252
1610
 
1253
- #: core/app_settings.py:488
1611
+ #: core/app_settings.py:476
1254
1612
  msgid "A welcome message that will be displayed instead the default one"
1255
1613
  msgstr ""
1256
1614
 
1257
- #: core/app_settings.py:495
1615
+ #: core/app_settings.py:483
1258
1616
  msgid "Custom RSS feed"
1259
1617
  msgstr ""
1260
1618
 
1261
- #: core/app_settings.py:497
1619
+ #: core/app_settings.py:485
1262
1620
  msgid "Display custom RSS feed to resellers and domain administrators"
1263
1621
  msgstr ""
1264
1622
 
1265
- #: core/app_settings.py:506
1623
+ #: core/app_settings.py:494
1266
1624
  msgid "Display custom RSS feed to super admins"
1267
1625
  msgstr ""
1268
1626
 
1269
- #: core/app_settings.py:509
1627
+ #: core/app_settings.py:497
1270
1628
  msgid "Display custom RSS feed also to super administrators"
1271
1629
  msgstr ""
1272
1630
 
1273
- #: core/app_settings.py:517
1631
+ #: core/app_settings.py:505
1274
1632
  msgid "Hide features widget"
1275
1633
  msgstr ""
1276
1634
 
1277
- #: core/app_settings.py:519
1635
+ #: core/app_settings.py:507
1278
1636
  msgid "Hide features widget for resellers and domain administrators"
1279
1637
  msgstr ""
1280
1638
 
1281
- #: core/app_settings.py:531
1639
+ #: core/app_settings.py:519
1282
1640
  msgid "Theme"
1283
1641
  msgstr ""
1284
1642
 
1285
- #: core/app_settings.py:537
1643
+ #: core/app_settings.py:525
1286
1644
  msgid "Primary theme color"
1287
1645
  msgstr ""
1288
1646
 
1289
- #: core/app_settings.py:539
1647
+ #: core/app_settings.py:527
1290
1648
  msgid ""
1291
1649
  "Primary color of the theme (hexadecimal code), used as the background color "
1292
1650
  "of the left menu for example"
1293
1651
  msgstr ""
1294
1652
 
1295
- #: core/app_settings.py:548
1653
+ #: core/app_settings.py:536
1296
1654
  msgid "Primary theme color (lighter version)"
1297
1655
  msgstr ""
1298
1656
 
1299
- #: core/app_settings.py:551 core/app_settings.py:563
1657
+ #: core/app_settings.py:539 core/app_settings.py:551
1300
1658
  msgid "Primary color of the theme (hexadecimal code)"
1301
1659
  msgstr ""
1302
1660
 
1303
- #: core/app_settings.py:560
1661
+ #: core/app_settings.py:548
1304
1662
  msgid "Primary theme color (darker version)"
1305
1663
  msgstr ""
1306
1664
 
1307
- #: core/app_settings.py:571
1665
+ #: core/app_settings.py:559
1308
1666
  msgid "Secondary theme color"
1309
1667
  msgstr ""
1310
1668
 
1311
- #: core/app_settings.py:573
1669
+ #: core/app_settings.py:561
1312
1670
  msgid ""
1313
1671
  "Secondary color of the theme (hexadecimal code), used as the background "
1314
1672
  "color of some buttons for example"
1315
1673
  msgstr ""
1316
1674
 
1317
- #: core/app_settings.py:581
1675
+ #: core/app_settings.py:569
1318
1676
  msgid "Labels theme color"
1319
1677
  msgstr ""
1320
1678
 
1321
- #: core/app_settings.py:583
1679
+ #: core/app_settings.py:571
1322
1680
  msgid "Theme color for labels (hexadecimal code)"
1323
1681
  msgstr ""
1324
1682
 
1325
- #: core/app_settings.py:595
1683
+ #: core/app_settings.py:583
1326
1684
  msgid "Notifications"
1327
1685
  msgstr ""
1328
1686
 
1329
- #: core/app_settings.py:601
1687
+ #: core/app_settings.py:589
1330
1688
  msgid "Sender address"
1331
1689
  msgstr ""
1332
1690
 
1333
- #: core/app_settings.py:603
1691
+ #: core/app_settings.py:591
1334
1692
  msgid "Email address used to send notifications."
1335
1693
  msgstr ""
1336
1694
 
1337
- #: core/app_settings.py:614
1695
+ #: core/app_settings.py:602
1338
1696
  msgid "Public API"
1339
1697
  msgstr ""
1340
1698
 
1341
- #: core/app_settings.py:620
1699
+ #: core/app_settings.py:608
1342
1700
  msgid "Enable communication"
1343
1701
  msgstr ""
1344
1702
 
1345
- #: core/app_settings.py:622 core/app_settings.py:632
1703
+ #: core/app_settings.py:610 core/app_settings.py:620
1346
1704
  msgid "Automatically checks if a newer version is available"
1347
1705
  msgstr ""
1348
1706
 
1349
- #: core/app_settings.py:629
1707
+ #: core/app_settings.py:617
1350
1708
  msgid "Check new versions"
1351
1709
  msgstr ""
1352
1710
 
1353
- #: core/app_settings.py:640
1711
+ #: core/app_settings.py:628
1354
1712
  msgid "Send an email when new versions are found"
1355
1713
  msgstr ""
1356
1714
 
1357
- #: core/app_settings.py:644
1715
+ #: core/app_settings.py:632
1358
1716
  msgid "Send an email to notify admins about new versions"
1359
1717
  msgstr ""
1360
1718
 
1361
- #: core/app_settings.py:651 sievefilters/constants.py:25
1719
+ #: core/app_settings.py:639 sievefilters/constants.py:25
1362
1720
  msgid "Recipient"
1363
1721
  msgstr ""
1364
1722
 
1365
- #: core/app_settings.py:654
1723
+ #: core/app_settings.py:642
1366
1724
  msgid "Recipient of new versions notification emails."
1367
1725
  msgstr ""
1368
1726
 
1369
- #: core/app_settings.py:661
1727
+ #: core/app_settings.py:649
1370
1728
  msgid "Send statistics"
1371
1729
  msgstr ""
1372
1730
 
1373
- #: core/app_settings.py:664
1731
+ #: core/app_settings.py:652
1374
1732
  msgid "Send statistics to Modoboa public API (counters and used extensions)"
1375
1733
  msgstr ""
1376
1734
 
1377
- #: core/app_settings.py:683
1735
+ #: core/app_settings.py:671
1378
1736
  msgid "Enable inactive account tracking"
1379
1737
  msgstr ""
1380
1738
 
1381
- #: core/app_settings.py:686
1739
+ #: core/app_settings.py:674
1382
1740
  msgid ""
1383
1741
  "Allow the administrator to set a threshold (in days) beyond which an account "
1384
1742
  "is considered inactive if the user hasn't logged in"
1385
1743
  msgstr ""
1386
1744
 
1387
- #: core/app_settings.py:695
1745
+ #: core/app_settings.py:683
1388
1746
  msgid "Inactive account threshold"
1389
1747
  msgstr ""
1390
1748
 
1391
- #: core/app_settings.py:698
1749
+ #: core/app_settings.py:686
1392
1750
  msgid ""
1393
1751
  "An account with a last login date greater than this threshold (in days) will "
1394
1752
  "be considered as inactive"
1395
1753
  msgstr ""
1396
1754
 
1397
- #: core/app_settings.py:707
1755
+ #: core/app_settings.py:695
1398
1756
  msgid "Top notifications check interval"
1399
1757
  msgstr ""
1400
1758
 
1401
- #: core/app_settings.py:710
1759
+ #: core/app_settings.py:698
1402
1760
  msgid "Interval between two top notification checks (in seconds)"
1403
1761
  msgstr ""
1404
1762
 
1405
- #: core/app_settings.py:717
1763
+ #: core/app_settings.py:705
1406
1764
  msgid "Maximum log record age"
1407
1765
  msgstr ""
1408
1766
 
1409
- #: core/app_settings.py:719
1767
+ #: core/app_settings.py:707
1410
1768
  msgid "The maximum age in days of a log record"
1411
1769
  msgstr ""
1412
1770
 
1413
- #: core/app_settings.py:727
1771
+ #: core/app_settings.py:715
1414
1772
  msgid "Retention time in message history"
1415
1773
  msgstr ""
1416
1774
 
1417
- #: core/app_settings.py:730
1775
+ #: core/app_settings.py:718
1418
1776
  msgid "Retention time (in days) of a message in the message history section"
1419
1777
  msgstr ""
1420
1778
 
1421
- #: core/app_settings.py:737
1779
+ #: core/app_settings.py:725
1422
1780
  msgid "Items per page"
1423
1781
  msgstr ""
1424
1782
 
1425
- #: core/app_settings.py:739
1783
+ #: core/app_settings.py:727
1426
1784
  msgid "Number of displayed items per page"
1427
1785
  msgstr ""
1428
1786
 
1429
- #: core/app_settings.py:746
1430
- msgid "Default top redirection"
1431
- msgstr ""
1432
-
1433
- #: core/app_settings.py:748
1434
- msgid "The default redirection used when no application is specified"
1435
- msgstr ""
1436
-
1437
1787
  #: core/checks.py:15
1438
1788
  msgid ""
1439
1789
  "You have USE_TZ set to False, this may result in issues during transitions "
@@ -1559,7 +1909,7 @@ msgstr ""
1559
1909
  msgid "One or more updates are available"
1560
1910
  msgstr ""
1561
1911
 
1562
- #: core/handlers.py:138
1912
+ #: core/handlers.py:140
1563
1913
  #, python-format
1564
1914
  msgid "You are still using a deprecated password scheme (%s)"
1565
1915
  msgstr ""
@@ -1714,22 +2064,22 @@ msgstr[1] ""
1714
2064
  msgid "The core part of Modoboa"
1715
2065
  msgstr ""
1716
2066
 
1717
- #: core/views/auth.py:65
2067
+ #: core/views/auth.py:82
1718
2068
  #, python-format
1719
2069
  msgid "User '%s' successfully logged in"
1720
2070
  msgstr ""
1721
2071
 
1722
- #: core/views/auth.py:109
2072
+ #: core/views/auth.py:128
1723
2073
  #, python-format
1724
2074
  msgid "Password scheme mismatch. Updating %s password"
1725
2075
  msgstr ""
1726
2076
 
1727
- #: core/views/auth.py:116
2077
+ #: core/views/auth.py:135
1728
2078
  #, python-format
1729
2079
  msgid "Password hash parameter missmatch. Updating %s password"
1730
2080
  msgstr ""
1731
2081
 
1732
- #: core/views/auth.py:154
2082
+ #: core/views/auth.py:173
1733
2083
  msgid "User '{}' successfully logged out"
1734
2084
  msgstr ""
1735
2085
 
@@ -1754,14 +2104,10 @@ msgid "Not resolved"
1754
2104
  msgstr ""
1755
2105
 
1756
2106
  #: dmarc/models.py:10 dmarc/models.py:16 pdfcredentials/constants.py:7
1757
- #: webmail/constants.py:18
2107
+ #: webmail/constants.py:38
1758
2108
  msgid "None"
1759
2109
  msgstr ""
1760
2110
 
1761
- #: dmarc/models.py:11
1762
- msgid "Quarantine"
1763
- msgstr ""
1764
-
1765
2111
  #: dmarc/models.py:12
1766
2112
  msgid "Reject"
1767
2113
  msgstr ""
@@ -1886,7 +2232,11 @@ msgstr ""
1886
2232
  msgid "Public key mismatchs"
1887
2233
  msgstr ""
1888
2234
 
1889
- #: imap_migration/api/v2/serializers.py:117
2235
+ #: imap_migration/api/v2/serializers.py:66
2236
+ msgid "Migrated domain with name {} already exists"
2237
+ msgstr ""
2238
+
2239
+ #: imap_migration/api/v2/serializers.py:130
1890
2240
  msgid "Access denied"
1891
2241
  msgstr ""
1892
2242
 
@@ -2559,7 +2909,7 @@ msgstr ""
2559
2909
  msgid "Rspamd"
2560
2910
  msgstr ""
2561
2911
 
2562
- #: sievefilters/api/v2/viewsets.py:193
2912
+ #: sievefilters/api/v2/viewsets.py:203
2563
2913
  #, python-format
2564
2914
  msgid "Filter %s already exists"
2565
2915
  msgstr ""
@@ -2632,7 +2982,7 @@ msgstr ""
2632
2982
  msgid "is not"
2633
2983
  msgstr ""
2634
2984
 
2635
- #: sievefilters/constants.py:23 webmail/lib/imapemail.py:304
2985
+ #: sievefilters/constants.py:23 webmail/lib/imapemail.py:302
2636
2986
  msgid "Subject"
2637
2987
  msgstr ""
2638
2988
 
@@ -2858,19 +3208,19 @@ msgstr ""
2858
3208
  msgid "SMTP settings"
2859
3209
  msgstr ""
2860
3210
 
2861
- #: webmail/app_settings.py:75
3211
+ #: webmail/app_settings.py:75 webmail/app_settings.py:121
2862
3212
  msgid "Address of your SMTP server"
2863
3213
  msgstr ""
2864
3214
 
2865
- #: webmail/app_settings.py:82
3215
+ #: webmail/app_settings.py:82 webmail/app_settings.py:128
2866
3216
  msgid "Secured connection mode"
2867
3217
  msgstr ""
2868
3218
 
2869
- #: webmail/app_settings.py:84
3219
+ #: webmail/app_settings.py:84 webmail/app_settings.py:130
2870
3220
  msgid "Use a secured connection to access SMTP server"
2871
3221
  msgstr ""
2872
3222
 
2873
- #: webmail/app_settings.py:93
3223
+ #: webmail/app_settings.py:93 webmail/app_settings.py:139
2874
3224
  msgid "Listening port of your SMTP server"
2875
3225
  msgstr ""
2876
3226
 
@@ -2882,103 +3232,99 @@ msgstr ""
2882
3232
  msgid "Server needs authentication"
2883
3233
  msgstr ""
2884
3234
 
2885
- #: webmail/app_settings.py:118
2886
- msgid "Display"
3235
+ #: webmail/app_settings.py:113
3236
+ msgid "Scheduling settings"
2887
3237
  msgstr ""
2888
3238
 
2889
- #: webmail/app_settings.py:124
3239
+ #: webmail/app_settings.py:161
2890
3240
  msgid "Default message display mode"
2891
3241
  msgstr ""
2892
3242
 
2893
- #: webmail/app_settings.py:126
3243
+ #: webmail/app_settings.py:163
2894
3244
  msgid "The default mode used when displaying a message"
2895
3245
  msgstr ""
2896
3246
 
2897
- #: webmail/app_settings.py:133
3247
+ #: webmail/app_settings.py:170
2898
3248
  msgid "Enable HTML links display"
2899
3249
  msgstr ""
2900
3250
 
2901
- #: webmail/app_settings.py:136
3251
+ #: webmail/app_settings.py:173
2902
3252
  msgid "Enable/Disable HTML links display"
2903
3253
  msgstr ""
2904
3254
 
2905
- #: webmail/app_settings.py:144
2906
- msgid "Number of displayed emails per page"
2907
- msgstr ""
2908
-
2909
- #: webmail/app_settings.py:147
3255
+ #: webmail/app_settings.py:184
2910
3256
  msgid "Sets the maximum number of messages displayed in a page"
2911
3257
  msgstr ""
2912
3258
 
2913
- #: webmail/app_settings.py:154
3259
+ #: webmail/app_settings.py:191
2914
3260
  msgid "Listing refresh rate"
2915
3261
  msgstr ""
2916
3262
 
2917
- #: webmail/app_settings.py:156
3263
+ #: webmail/app_settings.py:193
2918
3264
  msgid "Automatic listing refresh rate (in secconds)"
2919
3265
  msgstr ""
2920
3266
 
2921
- #: webmail/app_settings.py:163
3267
+ #: webmail/app_settings.py:200
2922
3268
  msgid "Folder container's width"
2923
3269
  msgstr ""
2924
3270
 
2925
- #: webmail/app_settings.py:165
3271
+ #: webmail/app_settings.py:202
2926
3272
  msgid "The width of the folder list container"
2927
3273
  msgstr ""
2928
3274
 
2929
- #: webmail/app_settings.py:176
3275
+ #: webmail/app_settings.py:213
2930
3276
  msgid "Folders"
2931
3277
  msgstr ""
2932
3278
 
2933
- #: webmail/app_settings.py:182
3279
+ #: webmail/app_settings.py:219
2934
3280
  msgid "Trash folder"
2935
3281
  msgstr ""
2936
3282
 
2937
- #: webmail/app_settings.py:184
3283
+ #: webmail/app_settings.py:221
2938
3284
  msgid "Folder where deleted messages go"
2939
3285
  msgstr ""
2940
3286
 
2941
- #: webmail/app_settings.py:191
3287
+ #: webmail/app_settings.py:228
2942
3288
  msgid "Sent folder"
2943
3289
  msgstr ""
2944
3290
 
2945
- #: webmail/app_settings.py:193
3291
+ #: webmail/app_settings.py:230
2946
3292
  msgid "Folder where copies of sent messages go"
2947
3293
  msgstr ""
2948
3294
 
2949
- #: webmail/app_settings.py:200
3295
+ #: webmail/app_settings.py:237
2950
3296
  msgid "Drafts folder"
2951
3297
  msgstr ""
2952
3298
 
2953
- #: webmail/app_settings.py:201
3299
+ #: webmail/app_settings.py:238
2954
3300
  msgid "Folder where drafts go"
2955
3301
  msgstr ""
2956
3302
 
2957
- #: webmail/app_settings.py:207
3303
+ #: webmail/app_settings.py:244
2958
3304
  msgid "Junk folder"
2959
3305
  msgstr ""
2960
3306
 
2961
- #: webmail/app_settings.py:209
3307
+ #: webmail/app_settings.py:246
2962
3308
  msgid "Folder where junk messages should go"
2963
3309
  msgstr ""
2964
3310
 
2965
- #: webmail/app_settings.py:220
3311
+ #: webmail/app_settings.py:257
2966
3312
  msgid "Composing messages"
2967
3313
  msgstr ""
2968
3314
 
2969
- #: webmail/app_settings.py:226
3315
+ #: webmail/app_settings.py:263
2970
3316
  msgid "Default editor"
2971
3317
  msgstr ""
2972
3318
 
2973
- #: webmail/app_settings.py:228
3319
+ #: webmail/app_settings.py:265
2974
3320
  msgid "The default editor to use when composing a message"
2975
3321
  msgstr ""
2976
3322
 
2977
- #: webmail/app_settings.py:235
3323
+ #: webmail/app_settings.py:272
2978
3324
  msgid "Signature text"
2979
3325
  msgstr ""
2980
3326
 
2981
- #: webmail/app_settings.py:237
3327
+ #: webmail/app_settings.py:274
2982
3328
  msgid "User defined email signature"
2983
3329
  msgstr ""
2984
3330
 
@@ -2990,43 +3336,59 @@ msgstr ""
2990
3336
  msgid "Failed to remove attachment: "
2991
3337
  msgstr ""
2992
3338
 
2993
- #: webmail/lib/imapemail.py:272
3339
+ #: webmail/lib/imapemail.py:270
2994
3340
  msgid "wrote:"
2995
3341
  msgstr ""
2996
3342
 
2997
- #: webmail/lib/imapemail.py:306
3343
+ #: webmail/lib/imapemail.py:304
2998
3344
  msgid "Date"
2999
3345
  msgstr ""
3000
3346
 
3001
- #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3347
+ #: webmail/lib/imapemail.py:320 webmail/lib/imapemail.py:323
3002
3348
  msgid "Original message"
3003
3349
  msgstr ""
3004
3350
 
3005
- #: webmail/lib/imaputils.py:221
3351
+ #: webmail/lib/imaputils.py:222
3006
3352
  msgid "Failed to retrieve hierarchy delimiter"
3007
3353
  msgstr ""
3008
3354
 
3009
- #: webmail/lib/imaputils.py:472
3355
+ #: webmail/lib/imaputils.py:478
3010
3356
  msgid "Inbox"
3011
3357
  msgstr ""
3012
3358
 
3013
- #: webmail/lib/imaputils.py:476
3359
+ #: webmail/lib/imaputils.py:482
3014
3360
  msgid "Drafts"
3015
3361
  msgstr ""
3016
3362
 
3017
- #: webmail/lib/imaputils.py:481
3363
+ #: webmail/lib/imaputils.py:487
3018
3364
  msgid "Junk"
3019
3365
  msgstr ""
3020
3366
 
3021
- #: webmail/lib/imaputils.py:486
3367
+ #: webmail/lib/imaputils.py:492
3022
3368
  msgid "Sent"
3023
3369
  msgstr ""
3024
3370
 
3025
- #: webmail/lib/imaputils.py:491
3371
+ #: webmail/lib/imaputils.py:500
3372
+ msgid "Scheduled"
3373
+ msgstr ""
3374
+
3375
+ #: webmail/lib/imaputils.py:507
3026
3376
  msgid "Trash"
3027
3377
  msgstr ""
3028
3378
 
3029
- #: webmail/viewsets.py:343
3379
+ #: webmail/serializers.py:220
3380
+ msgid "Moving scheduled messages is forbidden"
3381
+ msgstr ""
3382
+
3383
+ #: webmail/serializers.py:253
3384
+ msgid "Only datetime in the future is allowed"
3385
+ msgstr ""
3386
+
3387
+ #: webmail/serializers.py:258
3388
+ msgid "Provived datetime must be one minute in the future at least"
3389
+ msgstr ""
3390
+
3391
+ #: webmail/viewsets.py:359
3030
3392
  #, python-format
3031
3393
  msgid "Attachment is too big (limit: %s)"
3032
3394
  msgstr ""