modoboa 2.4.10__py3-none-any.whl → 2.5.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 (331) hide show
  1. modoboa/admin/api/v1/serializers.py +1 -0
  2. modoboa/admin/api/v2/serializers.py +15 -1
  3. modoboa/admin/api/v2/tests.py +11 -1
  4. modoboa/admin/lib.py +1 -1
  5. modoboa/admin/models/mailbox.py +15 -13
  6. modoboa/admin/models/mxrecord.py +4 -0
  7. modoboa/admin/tests/test_import_.py +11 -11
  8. modoboa/amavis/__init__.py +3 -0
  9. modoboa/amavis/app_settings.py +276 -0
  10. modoboa/amavis/apps.py +18 -0
  11. modoboa/amavis/checks/__init__.py +2 -0
  12. modoboa/amavis/checks/settings_checks.py +59 -0
  13. modoboa/amavis/dbrouter.py +35 -0
  14. modoboa/amavis/factories.py +164 -0
  15. modoboa/amavis/handlers.py +146 -0
  16. modoboa/amavis/lib.py +381 -0
  17. modoboa/amavis/management/__init__.py +0 -0
  18. modoboa/amavis/management/commands/__init__.py +0 -0
  19. modoboa/amavis/management/commands/amnotify.py +99 -0
  20. modoboa/amavis/management/commands/qcleanup.py +84 -0
  21. modoboa/amavis/migrations/0001_initial.py +340 -0
  22. modoboa/amavis/migrations/__init__.py +0 -0
  23. modoboa/amavis/models.py +226 -0
  24. modoboa/amavis/serializers.py +139 -0
  25. modoboa/amavis/sql_connector.py +240 -0
  26. modoboa/amavis/sql_email.py +66 -0
  27. modoboa/amavis/tasks.py +33 -0
  28. modoboa/amavis/templates/amavis/notifications/pending_requests.html +16 -0
  29. modoboa/amavis/tests/__init__.py +0 -0
  30. modoboa/amavis/tests/sa-learn +3 -0
  31. modoboa/amavis/tests/sample_messages/quarantined-input.txt +80 -0
  32. modoboa/amavis/tests/sample_messages/quarantined-output-plain_nolinks.txt +17 -0
  33. modoboa/amavis/tests/spamc +3 -0
  34. modoboa/amavis/tests/test_checks.py +25 -0
  35. modoboa/amavis/tests/test_handlers.py +214 -0
  36. modoboa/amavis/tests/test_lib.py +90 -0
  37. modoboa/amavis/tests/test_management_commands.py +45 -0
  38. modoboa/amavis/tests/test_sql_email.py +67 -0
  39. modoboa/amavis/tests/test_utils.py +19 -0
  40. modoboa/amavis/tests/test_viewsets.py +319 -0
  41. modoboa/amavis/urls.py +11 -0
  42. modoboa/amavis/utils.py +105 -0
  43. modoboa/amavis/viewsets.py +265 -0
  44. modoboa/core/api/v1/serializers.py +7 -5
  45. modoboa/core/api/v2/serializers.py +13 -2
  46. modoboa/core/api/v2/tests.py +34 -4
  47. modoboa/core/api/v2/urls.py +10 -5
  48. modoboa/core/api/v2/views.py +23 -2
  49. modoboa/core/api/v2/viewsets.py +24 -3
  50. modoboa/core/app_settings.py +11 -0
  51. modoboa/core/fido2_auth.py +1 -2
  52. modoboa/core/handlers.py +6 -2
  53. modoboa/core/management/commands/add_allowed_hosts.py +33 -0
  54. modoboa/core/management/commands/cleanlogs.py +9 -0
  55. modoboa/core/management/commands/load_initial_data.py +10 -0
  56. modoboa/core/migrations/0025_rename_user_email_is_active_core_user_email_c0c03f_idx.py +23 -5
  57. modoboa/core/tests/test_core.py +29 -0
  58. modoboa/core/utils.py +6 -0
  59. modoboa/dnstools/api/v2/serializers.py +9 -11
  60. modoboa/frontend_dist/assets/AccountAliasForm-BuSy_1n9.js +1 -0
  61. modoboa/frontend_dist/assets/AccountEditView-qdJmLM_e.js +1 -0
  62. modoboa/frontend_dist/assets/AccountLayout-DrN7vHsX.js +1 -0
  63. modoboa/frontend_dist/assets/AccountPasswordSubForm-DZGt_Xgq.js +1 -0
  64. modoboa/frontend_dist/assets/AccountView-CO65y0vZ.js +1 -0
  65. modoboa/frontend_dist/assets/AddressBook-BZNUlhek.js +1 -0
  66. modoboa/frontend_dist/assets/AdminLayout-CTNhuwTw.js +1 -0
  67. modoboa/frontend_dist/assets/AlarmsView-9yKGbmkC.css +1 -0
  68. modoboa/frontend_dist/assets/AlarmsView-DN_JIw9g.js +1 -0
  69. modoboa/frontend_dist/assets/AliasEditView-DjpPUTp9.js +1 -0
  70. modoboa/frontend_dist/assets/{AliasRecipientForm-DVZXWaUX.js → AliasRecipientForm-B1Y8wFdP.js} +1 -1
  71. modoboa/frontend_dist/assets/AliasView-GOJ5lyQH.js +1 -0
  72. modoboa/frontend_dist/assets/AuditTrailView-fbXmq70e.js +1 -0
  73. modoboa/frontend_dist/assets/CalendarView-LlQQNEPL.js +1 -0
  74. modoboa/frontend_dist/assets/{ChoiceField-7eU7c_rI.js → ChoiceField-B3ReQHVe.js} +1 -1
  75. modoboa/frontend_dist/assets/ComposeEmailForm-Bs1fZXAL.js +1 -0
  76. modoboa/frontend_dist/assets/ComposeEmailView-s3LMl3pO.js +1 -0
  77. modoboa/frontend_dist/assets/ConfirmDialog-DY_kUHLG.js +1 -0
  78. modoboa/frontend_dist/assets/{ConnectedLayout-BaJZ3BeR.css → ConnectedLayout-Bxh21hcH.css} +1 -1
  79. modoboa/frontend_dist/assets/ConnectedLayout-UWjiYBNw.js +1 -0
  80. modoboa/frontend_dist/assets/CreationForm-ORg3fazt.js +1 -0
  81. modoboa/frontend_dist/assets/DashboardView-Dplk9itS.js +1 -0
  82. modoboa/frontend_dist/assets/{DashboardView-BLlMi6Qb.css → DashboardView-gwwVAPvt.css} +1 -1
  83. modoboa/frontend_dist/assets/DomainAdminList-DVn9x0rB.js +1 -0
  84. modoboa/frontend_dist/assets/DomainEditView-nAoL64D_.js +1 -0
  85. modoboa/frontend_dist/assets/{DomainTransportForm-DPnPGBOp.js → DomainTransportForm-CA-DNUxX.js} +1 -1
  86. modoboa/frontend_dist/assets/{DomainView-BDKoBFYr.css → DomainView-CCLYXPHx.css} +1 -1
  87. modoboa/frontend_dist/assets/DomainView-CdXPpwJG.js +5 -0
  88. modoboa/frontend_dist/assets/DomainsView-B_59gowf.js +1 -0
  89. modoboa/frontend_dist/assets/DomainsView-DZ-ss9bI.css +1 -0
  90. modoboa/frontend_dist/assets/EmailField-CwcwI5xW.js +1 -0
  91. modoboa/frontend_dist/assets/EmailView-BshxcfAK.js +1 -0
  92. modoboa/frontend_dist/assets/EmptyLayout-DFfhnhLi.js +1 -0
  93. modoboa/frontend_dist/assets/FiltersView-Cf20MSTK.js +1 -0
  94. modoboa/frontend_dist/assets/ForwardEmailView-CZG062os.js +1 -0
  95. modoboa/frontend_dist/assets/{HtmlEditor-uM4AtIGi.js → HtmlEditor-Bh4c689R.js} +1 -1
  96. modoboa/frontend_dist/assets/IdentitiesView-BXAuU1YX.js +1 -0
  97. modoboa/frontend_dist/assets/{IdentitiesView-jmuItyMZ.css → IdentitiesView-DPrrRMS5.css} +1 -1
  98. modoboa/frontend_dist/assets/InformationView-C9vvvQhJ.css +1 -0
  99. modoboa/frontend_dist/assets/InformationView-Cn5FZW7H.js +1 -0
  100. modoboa/frontend_dist/assets/{LoadingData-CVD2Aen8.js → LoadingData-CdVvm4FI.js} +1 -1
  101. modoboa/frontend_dist/assets/{LoginCallbackView-sWzBke1g.js → LoginCallbackView-B9hAH4MI.js} +1 -1
  102. modoboa/frontend_dist/assets/{LoginView-wmN73W0f.js → LoginView-tHIR4Adc.js} +1 -1
  103. modoboa/frontend_dist/assets/MailboxView-Bugu2vhg.js +1 -0
  104. modoboa/frontend_dist/assets/MenuItems-PXjiG-fs.js +1 -0
  105. modoboa/frontend_dist/assets/MessageView-Cy4STShm.js +1 -0
  106. modoboa/frontend_dist/assets/MessagesView-DdkuEgfX.js +1 -0
  107. modoboa/frontend_dist/assets/MigrationsView-CidSEjCF.js +1 -0
  108. modoboa/frontend_dist/assets/{ParametersForm-BCeQljir.js → ParametersForm-CAv4SH-E.js} +1 -1
  109. modoboa/frontend_dist/assets/ParametersView-CX7Ffemw.js +1 -0
  110. modoboa/frontend_dist/assets/ParametersView-CrbNcmV3.js +1 -0
  111. modoboa/frontend_dist/assets/ProviderEditView-CrltAQXl.js +1 -0
  112. modoboa/frontend_dist/assets/ProviderGeneralForm-BYAzVnXM.js +1 -0
  113. modoboa/frontend_dist/assets/ProvidersView-osjIY4Ex.js +1 -0
  114. modoboa/frontend_dist/assets/QuarantineLayout-B8EcU9vS.js +1 -0
  115. modoboa/frontend_dist/assets/QuarantineView-D4gOE4EQ.css +1 -0
  116. modoboa/frontend_dist/assets/QuarantineView-D8Qg0MXA.js +1 -0
  117. modoboa/frontend_dist/assets/ReplyEmailView-BABPqWhd.js +1 -0
  118. modoboa/frontend_dist/assets/ResourcesForm-OaqdRYVs.js +1 -0
  119. modoboa/frontend_dist/assets/SelfServiceLayout-d277YTGR.js +1 -0
  120. modoboa/frontend_dist/assets/SettingsView-9iNcDhkI.js +6 -0
  121. modoboa/frontend_dist/assets/StatisticsView-cHsPyGkL.js +1 -0
  122. modoboa/frontend_dist/assets/TimeSerieChart--V83dcJ9.js +1 -0
  123. modoboa/frontend_dist/assets/UserLayout-B3sBiTcZ.js +1 -0
  124. modoboa/frontend_dist/assets/VAlert-BuaaYN2h.js +1 -0
  125. modoboa/frontend_dist/assets/VApp-CKP-6zGP.js +1 -0
  126. modoboa/frontend_dist/assets/VAutocomplete-Dwv6_Rzq.js +1 -0
  127. modoboa/frontend_dist/assets/VAvatar-Cmga0vj6.js +1 -0
  128. modoboa/frontend_dist/assets/VBadge-BQrRJ9S0.css +1 -0
  129. modoboa/frontend_dist/assets/VBadge-CixeK87a.js +1 -0
  130. modoboa/frontend_dist/assets/VCard-CxH9DWoK.js +1 -0
  131. modoboa/frontend_dist/assets/VCheckbox-62GOpvvP.js +1 -0
  132. modoboa/frontend_dist/assets/{VCheckboxBtn-j7di4leN.js → VCheckboxBtn-DMoNtKT8.js} +1 -1
  133. modoboa/frontend_dist/assets/VChip-D_styETR.js +1 -0
  134. modoboa/frontend_dist/assets/VColorPicker-BHscBGQV.js +1 -0
  135. modoboa/frontend_dist/assets/VContainer-B46caNs1.js +1 -0
  136. modoboa/frontend_dist/assets/VDataTable-Bh8NbVSx.js +1 -0
  137. modoboa/frontend_dist/assets/VDataTableServer-BDR5hOmo.js +1 -0
  138. modoboa/frontend_dist/assets/VDataTableVirtual-BOQlNtIG.js +1 -0
  139. modoboa/frontend_dist/assets/{VDialog-CZqM2Ofu.js → VDialog-BcTg7w6P.js} +1 -1
  140. modoboa/frontend_dist/assets/VExpansionPanels-BmH5Jl2Z.js +1 -0
  141. modoboa/frontend_dist/assets/VFileInput-BC4yAygd.js +1 -0
  142. modoboa/frontend_dist/assets/VForm-D5iPGkde.js +1 -0
  143. modoboa/frontend_dist/assets/VInput-CcxkaOXT.css +1 -0
  144. modoboa/frontend_dist/assets/VInput-CoDJzvaW.js +1 -0
  145. modoboa/frontend_dist/assets/VMenu-gUG70-zD.js +1 -0
  146. modoboa/frontend_dist/assets/VPicker-BXuKT3zB.js +1 -0
  147. modoboa/frontend_dist/assets/VProgressCircular-BtOPiGCg.js +1 -0
  148. modoboa/frontend_dist/assets/VRadioGroup-DIFZKSn-.js +1 -0
  149. modoboa/frontend_dist/assets/{VRow-C_Ydf6yr.js → VRow-ozg66L7j.js} +1 -1
  150. modoboa/frontend_dist/assets/VSelect-C3RjAa45.js +1 -0
  151. modoboa/frontend_dist/assets/VSelectionControl-zyz-fJvC.js +1 -0
  152. modoboa/frontend_dist/assets/VSheet-BNx2X4Mk.js +1 -0
  153. modoboa/frontend_dist/assets/VSpacer-DinPiXs9.js +1 -0
  154. modoboa/frontend_dist/assets/VSwitch-DwxdeAEq.js +1 -0
  155. modoboa/frontend_dist/assets/VTable-DaLxa4FO.js +1 -0
  156. modoboa/frontend_dist/assets/VTabs-BP0Hgsgm.js +1 -0
  157. modoboa/frontend_dist/assets/VTextField-BzBVKKob.css +1 -0
  158. modoboa/frontend_dist/assets/VTextField-XoGTj1KG.js +1 -0
  159. modoboa/frontend_dist/assets/VTextarea-wBlRMIv_.js +1 -0
  160. modoboa/frontend_dist/assets/VToolbar-CFZfqeOr.js +1 -0
  161. modoboa/frontend_dist/assets/VWindowItem-BB7ETW3b.js +1 -0
  162. modoboa/frontend_dist/assets/WebmailLayout-_Hk1XhVq.js +1 -0
  163. modoboa/frontend_dist/assets/accounts-DUzbx6k8.js +1 -0
  164. modoboa/frontend_dist/assets/admin-DewTk2H8.js +1 -0
  165. modoboa/frontend_dist/assets/{aliases-c3n-dCV_.js → aliases-4sXmjwXp.js} +1 -1
  166. modoboa/frontend_dist/assets/amavis-CC0li7_T.js +1 -0
  167. modoboa/frontend_dist/assets/amavis-DK8SHE6o.js +1 -0
  168. modoboa/frontend_dist/assets/{contacts-Bqckz8sr.js → contacts-BjghrPqZ.js} +1 -1
  169. modoboa/frontend_dist/assets/{domains-nBMR-fRf.js → domains-BSawReeu.js} +1 -1
  170. modoboa/frontend_dist/assets/{domains.store-ChZgLcqP.js → domains.store-D-vWCEIK.js} +1 -1
  171. modoboa/frontend_dist/assets/{filter-D7NrAf6a.js → filter-C82FUCw_.js} +1 -1
  172. modoboa/frontend_dist/assets/forwardRefs-cvcnlhoK.js +1 -0
  173. modoboa/frontend_dist/assets/global.store-DbkcI5o2.js +1 -0
  174. modoboa/frontend_dist/assets/{importExport-Dn9vYw7T.js → importExport-DzoL4Mvc.js} +1 -1
  175. modoboa/frontend_dist/assets/index-BImkz5Jx.js +984 -0
  176. modoboa/frontend_dist/assets/index-DuzUMVLM.js +1 -0
  177. modoboa/frontend_dist/assets/layout-C5FyYCHK.js +1 -0
  178. modoboa/frontend_dist/assets/{layout.store-BxBoBlgf.js → layout.store-NXWtFIwL.js} +1 -1
  179. modoboa/frontend_dist/assets/logos-BswdveCV.js +1 -0
  180. modoboa/frontend_dist/assets/{logs-DrTzylW7.js → logs-6CbtfaZS.js} +1 -1
  181. modoboa/frontend_dist/assets/{parameters-Lgiqp7aw.js → parameters-aSQiR7kN.js} +1 -1
  182. modoboa/frontend_dist/assets/{parameters.store-C9k9DuTj.js → parameters.store-CzQqVatx.js} +1 -1
  183. modoboa/frontend_dist/assets/permissions-DNoefz-n.js +1 -0
  184. modoboa/frontend_dist/assets/{ssrBoot-BsxW6uW4.js → ssrBoot-CKUX4kcb.js} +1 -1
  185. modoboa/frontend_dist/assets/{tag-CFK9dzMJ.js → tag-B_yWNNJD.js} +1 -1
  186. modoboa/frontend_dist/assets/transports-BDNB9wR5.js +1 -0
  187. modoboa/frontend_dist/assets/{webmail-KrD8ZhNM.js → webmail-CdU6CD9b.js} +1 -1
  188. modoboa/frontend_dist/index.html +1 -1
  189. modoboa/lib/email_utils.py +2 -2
  190. modoboa/lib/permissions.py +7 -0
  191. modoboa/lib/redis.py +1 -5
  192. modoboa/lib/test_runners.py +29 -0
  193. modoboa/lib/tests/__init__.py +5 -1
  194. modoboa/locale/br/LC_MESSAGES/django.po +87 -75
  195. modoboa/locale/cs/LC_MESSAGES/django.po +82 -74
  196. modoboa/locale/cs_CZ/LC_MESSAGES/django.po +145 -121
  197. modoboa/locale/de/LC_MESSAGES/django.mo +0 -0
  198. modoboa/locale/de/LC_MESSAGES/django.po +339 -651
  199. modoboa/locale/de_DE/LC_MESSAGES/django.po +87 -75
  200. modoboa/locale/el_GR/LC_MESSAGES/django.po +160 -135
  201. modoboa/locale/en/LC_MESSAGES/django.po +82 -74
  202. modoboa/locale/es/LC_MESSAGES/django.po +158 -131
  203. modoboa/locale/es_MX/LC_MESSAGES/django.po +82 -74
  204. modoboa/locale/fi/LC_MESSAGES/django.po +87 -75
  205. modoboa/locale/fr/LC_MESSAGES/django.mo +0 -0
  206. modoboa/locale/fr/LC_MESSAGES/django.po +469 -201
  207. modoboa/locale/hu/LC_MESSAGES/django.po +82 -74
  208. modoboa/locale/it/LC_MESSAGES/django.mo +0 -0
  209. modoboa/locale/it/LC_MESSAGES/django.po +148 -122
  210. modoboa/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
  211. modoboa/locale/ja_JP/LC_MESSAGES/django.po +201 -334
  212. modoboa/locale/ka/LC_MESSAGES/django.po +82 -74
  213. modoboa/locale/nl_NL/LC_MESSAGES/django.po +160 -132
  214. modoboa/locale/no/LC_MESSAGES/django.po +82 -74
  215. modoboa/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  216. modoboa/locale/pl_PL/LC_MESSAGES/django.po +172 -149
  217. modoboa/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  218. modoboa/locale/pt_BR/LC_MESSAGES/django.po +172 -144
  219. modoboa/locale/pt_PT/LC_MESSAGES/django.po +135 -112
  220. modoboa/locale/ro_RO/LC_MESSAGES/django.po +87 -75
  221. modoboa/locale/ru/LC_MESSAGES/django.po +142 -118
  222. modoboa/locale/si/LC_MESSAGES/django.po +82 -74
  223. modoboa/locale/sk/LC_MESSAGES/django.po +82 -74
  224. modoboa/locale/sk_SK/LC_MESSAGES/django.po +84 -76
  225. modoboa/locale/sl_SI/LC_MESSAGES/django.po +90 -76
  226. modoboa/locale/sv/LC_MESSAGES/django.mo +0 -0
  227. modoboa/locale/sv/LC_MESSAGES/django.po +172 -139
  228. modoboa/locale/tr/LC_MESSAGES/django.po +87 -75
  229. modoboa/locale/tr_TR/LC_MESSAGES/django.po +84 -74
  230. modoboa/locale/uk/LC_MESSAGES/django.po +82 -74
  231. modoboa/locale/zh/LC_MESSAGES/django.po +82 -74
  232. modoboa/locale/zh_CN/LC_MESSAGES/django.po +82 -74
  233. modoboa/locale/zh_TW/LC_MESSAGES/django.po +87 -75
  234. modoboa/parameters/api/v2/tests.py +2 -2
  235. modoboa/parameters/api/v2/viewsets.py +2 -0
  236. modoboa/policyd/tests.py +2 -0
  237. modoboa/urls_api_v2.py +6 -0
  238. {modoboa-2.4.10.dist-info → modoboa-2.5.0.dist-info}/METADATA +6 -4
  239. {modoboa-2.4.10.dist-info → modoboa-2.5.0.dist-info}/RECORD +244 -193
  240. modoboa/frontend_dist/assets/AccountAliasForm-DVXatAhB.js +0 -1
  241. modoboa/frontend_dist/assets/AccountEditView-DmvQjxpx.js +0 -1
  242. modoboa/frontend_dist/assets/AccountLayout-OGtZvlHR.js +0 -1
  243. modoboa/frontend_dist/assets/AccountPasswordSubForm-g3IEGrgM.js +0 -1
  244. modoboa/frontend_dist/assets/AccountView-DsxYqr3k.js +0 -1
  245. modoboa/frontend_dist/assets/AddressBook-3RoKiKon.js +0 -1
  246. modoboa/frontend_dist/assets/AdminLayout-CWfn8zaQ.js +0 -1
  247. modoboa/frontend_dist/assets/AlarmsView-Bheey-gp.css +0 -1
  248. modoboa/frontend_dist/assets/AlarmsView-D3Mh8ntf.js +0 -1
  249. modoboa/frontend_dist/assets/AliasEditView-C15eUZ11.js +0 -1
  250. modoboa/frontend_dist/assets/AliasView-Cyvc5vMb.js +0 -1
  251. modoboa/frontend_dist/assets/AuditTrailView-LI2XuLLn.js +0 -1
  252. modoboa/frontend_dist/assets/CalendarView-BpOlPh3f.js +0 -1
  253. modoboa/frontend_dist/assets/ComposeEmailForm-CNfI7ept.js +0 -1
  254. modoboa/frontend_dist/assets/ComposeEmailView-B866Xsrc.js +0 -1
  255. modoboa/frontend_dist/assets/ConfirmDialog-BvqxQsD1.js +0 -1
  256. modoboa/frontend_dist/assets/ConnectedLayout-BQ3ug6Jh.js +0 -1
  257. modoboa/frontend_dist/assets/CreationForm-C9Kh05ax.js +0 -1
  258. modoboa/frontend_dist/assets/DashboardView-Cw-gIcuB.js +0 -1
  259. modoboa/frontend_dist/assets/DomainAdminList-CsWUNKVk.js +0 -1
  260. modoboa/frontend_dist/assets/DomainEditView-DocxeOeW.js +0 -1
  261. modoboa/frontend_dist/assets/DomainView-Djc_0PsF.js +0 -5
  262. modoboa/frontend_dist/assets/DomainsView-B-Lxru7P.js +0 -1
  263. modoboa/frontend_dist/assets/DomainsView-DasJ0NdZ.css +0 -1
  264. modoboa/frontend_dist/assets/EmailField-BEKxuYni.js +0 -1
  265. modoboa/frontend_dist/assets/EmailView-BsR1Wes5.js +0 -1
  266. modoboa/frontend_dist/assets/EmptyLayout-BzPFOeLU.js +0 -1
  267. modoboa/frontend_dist/assets/FiltersView-5rmpC5cC.js +0 -1
  268. modoboa/frontend_dist/assets/ForwardEmailView-D7MbetcT.js +0 -1
  269. modoboa/frontend_dist/assets/IdentitiesView-BqjD9Lue.js +0 -1
  270. modoboa/frontend_dist/assets/InformationView-CghcvPn2.js +0 -1
  271. modoboa/frontend_dist/assets/InformationView-U5Ww-Sx1.css +0 -1
  272. modoboa/frontend_dist/assets/MailboxView-T_p-_ZtJ.js +0 -1
  273. modoboa/frontend_dist/assets/MenuItems-kHCMzR5E.js +0 -1
  274. modoboa/frontend_dist/assets/MessagesView-Cerv3xsy.js +0 -1
  275. modoboa/frontend_dist/assets/MigrationsView-7kjqPyYU.js +0 -1
  276. modoboa/frontend_dist/assets/ParametersView-DspBxVMV.js +0 -1
  277. modoboa/frontend_dist/assets/ParametersView-Dy0H5ep1.js +0 -1
  278. modoboa/frontend_dist/assets/ProviderEditView-DDLMOylC.js +0 -1
  279. modoboa/frontend_dist/assets/ProviderGeneralForm-BwOSKNHK.js +0 -1
  280. modoboa/frontend_dist/assets/ProvidersView-C99UD0WB.js +0 -1
  281. modoboa/frontend_dist/assets/ReplyEmailView-DAPBHldd.js +0 -1
  282. modoboa/frontend_dist/assets/ResourcesForm-D87PHeH0.js +0 -1
  283. modoboa/frontend_dist/assets/SettingsView-OxDo9wNd.js +0 -6
  284. modoboa/frontend_dist/assets/StatisticsView-CM__Eqku.js +0 -1
  285. modoboa/frontend_dist/assets/TimeSerieChart-C6j0uYR_.js +0 -1
  286. modoboa/frontend_dist/assets/UserLayout-CckCGnPS.js +0 -1
  287. modoboa/frontend_dist/assets/VAlert-B7mzOJIO.js +0 -1
  288. modoboa/frontend_dist/assets/VApp-BKxnjOoi.js +0 -1
  289. modoboa/frontend_dist/assets/VAutocomplete-Cc4_tcl1.js +0 -1
  290. modoboa/frontend_dist/assets/VAvatar-BAgTUIvX.js +0 -1
  291. modoboa/frontend_dist/assets/VCard-DFWiFORP.js +0 -1
  292. modoboa/frontend_dist/assets/VCheckbox-CKsH_vq3.js +0 -1
  293. modoboa/frontend_dist/assets/VChip-nZ0uhY7t.js +0 -1
  294. modoboa/frontend_dist/assets/VColorPicker-Os2aeP6J.js +0 -1
  295. modoboa/frontend_dist/assets/VContainer-Btam4lk2.js +0 -1
  296. modoboa/frontend_dist/assets/VDataTable-D_0_xJTl.js +0 -1
  297. modoboa/frontend_dist/assets/VDataTableServer-BWTt4Mzi.js +0 -1
  298. modoboa/frontend_dist/assets/VDataTableVirtual-BwVmkt4u.js +0 -1
  299. modoboa/frontend_dist/assets/VExpansionPanels-B5D6GOa3.js +0 -1
  300. modoboa/frontend_dist/assets/VFileInput-Cv9DIPki.js +0 -1
  301. modoboa/frontend_dist/assets/VForm-CpoZf60D.js +0 -1
  302. modoboa/frontend_dist/assets/VMenu-B_dVqOmo.js +0 -1
  303. modoboa/frontend_dist/assets/VPicker-CXkIGEze.js +0 -1
  304. modoboa/frontend_dist/assets/VProgressCircular-CrEXxs7k.js +0 -1
  305. modoboa/frontend_dist/assets/VRadioGroup-D8ypjYOO.js +0 -1
  306. modoboa/frontend_dist/assets/VSelect-CS51PDEt.js +0 -1
  307. modoboa/frontend_dist/assets/VSelectionControl-DiOqtY38.js +0 -1
  308. modoboa/frontend_dist/assets/VSheet-5VVWtHvs.js +0 -1
  309. modoboa/frontend_dist/assets/VSpacer-C6PZ3X24.js +0 -1
  310. modoboa/frontend_dist/assets/VSwitch-Chg5o-Cp.js +0 -1
  311. modoboa/frontend_dist/assets/VTable-KsiZ3cBz.js +0 -1
  312. modoboa/frontend_dist/assets/VTabs-tNrJIYO0.js +0 -1
  313. modoboa/frontend_dist/assets/VTextField-C-J20yj_.css +0 -1
  314. modoboa/frontend_dist/assets/VTextField-CLwRV0Cb.js +0 -1
  315. modoboa/frontend_dist/assets/VTextarea-Di8jbl8m.js +0 -1
  316. modoboa/frontend_dist/assets/VToolbar-CGwhgdmI.js +0 -1
  317. modoboa/frontend_dist/assets/VWindowItem-wWSFAGI-.js +0 -1
  318. modoboa/frontend_dist/assets/WebmailLayout-DsYThBrz.js +0 -1
  319. modoboa/frontend_dist/assets/admin-CJVLMHh9.js +0 -1
  320. modoboa/frontend_dist/assets/forwardRefs-Cpc3YYl6.js +0 -1
  321. modoboa/frontend_dist/assets/global.store-DUP26-A5.js +0 -1
  322. modoboa/frontend_dist/assets/index-DV9Li2cg.js +0 -852
  323. modoboa/frontend_dist/assets/index-DzL89N4E.js +0 -1
  324. modoboa/frontend_dist/assets/layout-CHO37cA6.js +0 -1
  325. modoboa/frontend_dist/assets/permissions-mL5hLHcW.js +0 -1
  326. modoboa/frontend_dist/assets/transports-TO08iTXJ.js +0 -1
  327. {modoboa-2.4.10.data → modoboa-2.5.0.data}/scripts/modoboa-admin.py +0 -0
  328. {modoboa-2.4.10.dist-info → modoboa-2.5.0.dist-info}/WHEEL +0 -0
  329. {modoboa-2.4.10.dist-info → modoboa-2.5.0.dist-info}/entry_points.txt +0 -0
  330. {modoboa-2.4.10.dist-info → modoboa-2.5.0.dist-info}/licenses/LICENSE +0 -0
  331. {modoboa-2.4.10.dist-info → modoboa-2.5.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-07-27 10:50+0200\n"
14
+ "POT-Creation-Date: 2025-08-28 09:41+0200\n"
15
15
  "PO-Revision-Date: 2020-05-11 18:45+0000\n"
16
16
  "Last-Translator: 李 正 <364109980@qq.com>, 2021\n"
17
17
  "Language-Team: Chinese (China) (https://www.transifex.com/tonio/teams/13749/"
@@ -32,65 +32,66 @@ msgstr ""
32
32
  msgid "Default quota in MB applied to mailboxes. A value of 0 means no quota."
33
33
  msgstr ""
34
34
 
35
- #: admin/api/v1/serializers.py:88
35
+ #: admin/api/v1/serializers.py:94
36
36
  msgid "domain alias with this name already exists"
37
37
  msgstr ""
38
38
 
39
- #: admin/api/v1/serializers.py:98
39
+ #: admin/api/v1/serializers.py:104
40
40
  msgid "No authorized MX record found for this domain"
41
41
  msgstr ""
42
42
 
43
- #: admin/api/v1/serializers.py:116
43
+ #: admin/api/v1/serializers.py:122
44
44
  msgid "Cannot be greater than domain quota"
45
45
  msgstr ""
46
46
 
47
- #: admin/api/v1/serializers.py:162 admin/api/v1/serializers.py:357
48
- #: admin/api/v2/serializers.py:548 admin/models/alias.py:44
47
+ #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
48
+ #: admin/api/v2/serializers.py:564 admin/models/alias.py:44
49
49
  msgid "Permission denied."
50
50
  msgstr ""
51
51
 
52
- #: admin/api/v1/serializers.py:224 admin/api/v2/serializers.py:88
53
- #: admin/api/v2/serializers.py:470 core/api/v2/serializers.py:235
54
- #: core/api/v2/serializers.py:237 core/api/v2/serializers.py:246
52
+ #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
53
+ #: admin/api/v2/serializers.py:486 core/api/v2/serializers.py:255
54
+ #: core/api/v2/serializers.py:257 core/api/v2/serializers.py:266
55
55
  #: transport/backends.py:40
56
56
  msgid "This field is required"
57
57
  msgstr ""
58
58
 
59
- #: admin/api/v1/serializers.py:236
59
+ #: admin/api/v1/serializers.py:243
60
60
  msgid ""
61
61
  "List of administered domains (resellers and domain administrators only)."
62
62
  msgstr ""
63
63
 
64
- #: admin/api/v1/serializers.py:330 admin/api/v2/serializers.py:530
64
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:546
65
65
  msgid "Not allowed for this role."
66
66
  msgstr ""
67
67
 
68
- #: admin/api/v1/serializers.py:348
68
+ #: admin/api/v1/serializers.py:355
69
69
  msgid "Must be equal to mailbox full_address"
70
70
  msgstr ""
71
71
 
72
- #: admin/api/v1/serializers.py:390 admin/api/v2/serializers.py:582
72
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:598
73
73
  #: calendars/serializers.py:175 calendars/serializers.py:177
74
+ #: pdfcredentials/api/v2/serializers.py:91
74
75
  msgid "This field is required."
75
76
  msgstr ""
76
77
 
77
- #: admin/api/v1/serializers.py:402 admin/api/v2/serializers.py:599
78
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:615
78
79
  msgid "Local domain {} does not exist"
79
80
  msgstr ""
80
81
 
81
- #: admin/api/v1/serializers.py:492
82
+ #: admin/api/v1/serializers.py:499
82
83
  msgid "A list of recipient"
83
84
  msgstr ""
84
85
 
85
- #: admin/api/v1/serializers.py:508 admin/api/v2/viewsets.py:286
86
+ #: admin/api/v1/serializers.py:515 admin/api/v2/viewsets.py:286
86
87
  msgid "This alias already exists"
87
88
  msgstr ""
88
89
 
89
- #: admin/api/v1/serializers.py:544
90
+ #: admin/api/v1/serializers.py:551
90
91
  msgid "You don't have access to this domain."
91
92
  msgstr ""
92
93
 
93
- #: admin/api/v1/serializers.py:553
94
+ #: admin/api/v1/serializers.py:560
94
95
  msgid "You don't have access to this mailbox."
95
96
  msgstr ""
96
97
 
@@ -98,56 +99,56 @@ msgstr ""
98
99
  msgid "Here is your new Modoboa password: {}"
99
100
  msgstr ""
100
101
 
101
- #: admin/api/v2/serializers.py:80
102
+ #: admin/api/v2/serializers.py:82
102
103
  msgid "DKIM keys storage directory not configured"
103
104
  msgstr ""
104
105
 
105
- #: admin/api/v2/serializers.py:92
106
+ #: admin/api/v2/serializers.py:94
106
107
  msgid "This field is valid when type is relaydomain"
107
108
  msgstr ""
108
109
 
109
- #: admin/api/v2/serializers.py:99
110
+ #: admin/api/v2/serializers.py:101
110
111
  msgid "You can't define an unlimited quota."
111
112
  msgstr ""
112
113
 
113
- #: admin/api/v2/serializers.py:133
114
+ #: admin/api/v2/serializers.py:135
114
115
  #, python-format
115
116
  msgid "User '%s' already exists"
116
117
  msgstr ""
117
118
 
118
- #: admin/api/v2/serializers.py:248 admin/api/v2/serializers.py:254
119
+ #: admin/api/v2/serializers.py:250 admin/api/v2/serializers.py:256
119
120
  msgid "Must be a positive integer"
120
121
  msgstr ""
121
122
 
122
- #: admin/api/v2/serializers.py:263
123
+ #: admin/api/v2/serializers.py:265
123
124
  msgid "openssl not found, please make sure it is installed."
124
125
  msgstr ""
125
126
 
126
- #: admin/api/v2/serializers.py:266 pdfcredentials/api/v2/serializers.py:79
127
+ #: admin/api/v2/serializers.py:268 pdfcredentials/api/v2/serializers.py:84
127
128
  msgid "Directory not found."
128
129
  msgstr ""
129
130
 
130
- #: admin/api/v2/serializers.py:277
131
+ #: admin/api/v2/serializers.py:279
131
132
  msgid "This field only allows valid IP addresses (or networks)"
132
133
  msgstr ""
133
134
 
134
- #: admin/api/v2/serializers.py:290
135
+ #: admin/api/v2/serializers.py:292
135
136
  msgid "Please disable imap migration before disabling this option."
136
137
  msgstr ""
137
138
 
138
- #: admin/api/v2/serializers.py:303
139
+ #: admin/api/v2/serializers.py:305
139
140
  msgid "Define at least one authorized network / address"
140
141
  msgstr ""
141
142
 
142
- #: admin/api/v2/serializers.py:565
143
+ #: admin/api/v2/serializers.py:581
143
144
  msgid "The left part of an email address can't be more than 64 characters."
144
145
  msgstr ""
145
146
 
146
- #: admin/api/v2/serializers.py:587
147
+ #: admin/api/v2/serializers.py:603
147
148
  msgid "A mailbox is required to create aliases."
148
149
  msgstr ""
149
150
 
150
- #: admin/api/v2/serializers.py:751
151
+ #: admin/api/v2/serializers.py:772
151
152
  msgid "Unknown status"
152
153
  msgstr ""
153
154
 
@@ -159,14 +160,6 @@ msgstr ""
159
160
  msgid "You can't delete your own domain"
160
161
  msgstr ""
161
162
 
162
- #: admin/api/v2/viewsets.py:407
163
- msgid "No alarm ID provided"
164
- msgstr ""
165
-
166
- #: admin/api/v2/viewsets.py:411
167
- msgid "Received invalid alarm id(s)"
168
- msgstr ""
169
-
170
163
  #: admin/app_settings.py:19 limits/app_settings.py:38 limits/constants.py:13
171
164
  msgid "Domains"
172
165
  msgstr ""
@@ -353,7 +346,7 @@ msgstr ""
353
346
  msgid "Create an alias using the old address when a mailbox is renamed."
354
347
  msgstr ""
355
348
 
356
- #: admin/app_settings.py:287 core/api/v2/viewsets.py:162
349
+ #: admin/app_settings.py:287 core/api/v2/viewsets.py:174
357
350
  msgid "Administration"
358
351
  msgstr ""
359
352
 
@@ -382,7 +375,7 @@ msgstr ""
382
375
  msgid "Account import failed (%s): domain does not exist"
383
376
  msgstr ""
384
377
 
385
- #: admin/handlers.py:242 admin/models/mailbox.py:340
378
+ #: admin/handlers.py:242 admin/models/mailbox.py:342
386
379
  msgid "Mailbox {} already exists"
387
380
  msgstr ""
388
381
 
@@ -640,7 +633,7 @@ msgstr ""
640
633
  msgid "{}: domain quota exceeded"
641
634
  msgstr ""
642
635
 
643
- #: admin/models/mailbox.py:308
636
+ #: admin/models/mailbox.py:310
644
637
  msgid "Domain does not exist"
645
638
  msgstr ""
646
639
 
@@ -792,7 +785,7 @@ msgid ""
792
785
  "Maximum size in bytes of imported ICS files (or KB, MB, GB if specified)"
793
786
  msgstr ""
794
787
 
795
- #: calendars/app_settings.py:89 core/api/v2/viewsets.py:172
788
+ #: calendars/app_settings.py:89 core/api/v2/viewsets.py:195
796
789
  msgid "Calendars"
797
790
  msgstr ""
798
791
 
@@ -826,7 +819,7 @@ msgstr ""
826
819
  msgid "Interval in seconds between 2 synchronization requests"
827
820
  msgstr ""
828
821
 
829
- #: contacts/app_settings.py:51 core/api/v2/viewsets.py:179
822
+ #: contacts/app_settings.py:51 core/api/v2/viewsets.py:185
830
823
  msgid "Contacts"
831
824
  msgstr ""
832
825
 
@@ -874,12 +867,12 @@ msgstr ""
874
867
  msgid "2FA is already enabled"
875
868
  msgstr ""
876
869
 
877
- #: core/api/v1/serializers.py:87
870
+ #: core/api/v1/serializers.py:86
878
871
  #, python-format
879
- msgid "Failed TFA settings editing attempt from '%s' as user '%s'"
872
+ msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
880
873
  msgstr ""
881
874
 
882
- #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:425
875
+ #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:445
883
876
  msgid "Invalid password"
884
877
  msgstr ""
885
878
 
@@ -891,40 +884,40 @@ msgstr ""
891
884
  msgid "Local"
892
885
  msgstr ""
893
886
 
894
- #: core/api/v2/serializers.py:175 core/app_settings.py:17
887
+ #: core/api/v2/serializers.py:194 core/app_settings.py:17
895
888
  msgid "User profile"
896
889
  msgstr ""
897
890
 
898
- #: core/api/v2/serializers.py:194 core/api/v2/serializers.py:201
899
- #: core/api/v2/serializers.py:208
891
+ #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
892
+ #: core/api/v2/serializers.py:228
900
893
  msgid "Invalid syntax"
901
894
  msgstr ""
902
895
 
903
- #: core/api/v2/serializers.py:213
896
+ #: core/api/v2/serializers.py:233
904
897
  msgid "Invalid rounds number"
905
898
  msgstr ""
906
899
 
907
- #: core/api/v2/serializers.py:413 core/forms.py:81
900
+ #: core/api/v2/serializers.py:433 core/forms.py:81
908
901
  msgid "This code is invalid"
909
902
  msgstr ""
910
903
 
911
- #: core/api/v2/serializers.py:483 core/views/auth.py:194 core/views/auth.py:247
904
+ #: core/api/v2/serializers.py:503 core/views/auth.py:194 core/views/auth.py:247
912
905
  msgid "Please use the following code to recover your Modoboa password: {}"
913
906
  msgstr ""
914
907
 
915
- #: core/api/v2/viewsets.py:164
908
+ #: core/api/v2/viewsets.py:176
916
909
  msgid "Administration console"
917
910
  msgstr ""
918
911
 
919
- #: core/api/v2/viewsets.py:174
920
- msgid "Calendar"
912
+ #: core/api/v2/viewsets.py:187
913
+ msgid "Address book"
921
914
  msgstr ""
922
915
 
923
- #: core/api/v2/viewsets.py:181
924
- msgid "Address book"
916
+ #: core/api/v2/viewsets.py:197
917
+ msgid "Calendar"
925
918
  msgstr ""
926
919
 
927
- #: core/api/v2/viewsets.py:186 core/api/v2/viewsets.py:188
920
+ #: core/api/v2/viewsets.py:205 core/api/v2/viewsets.py:207
928
921
  #: webmail/app_settings.py:258 webmail/app_settings.py:265
929
922
  msgid "Webmail"
930
923
  msgstr ""
@@ -1420,19 +1413,27 @@ msgstr ""
1420
1413
  msgid "The maximum age in days of a log record"
1421
1414
  msgstr ""
1422
1415
 
1423
- #: core/app_settings.py:726
1416
+ #: core/app_settings.py:727
1417
+ msgid "Retention time in message history"
1418
+ msgstr ""
1419
+
1420
+ #: core/app_settings.py:730
1421
+ msgid "Retention time (in days) of a message in the message history section"
1422
+ msgstr ""
1423
+
1424
+ #: core/app_settings.py:737
1424
1425
  msgid "Items per page"
1425
1426
  msgstr ""
1426
1427
 
1427
- #: core/app_settings.py:728
1428
+ #: core/app_settings.py:739
1428
1429
  msgid "Number of displayed items per page"
1429
1430
  msgstr ""
1430
1431
 
1431
- #: core/app_settings.py:735
1432
+ #: core/app_settings.py:746
1432
1433
  msgid "Default top redirection"
1433
1434
  msgstr ""
1434
1435
 
1435
- #: core/app_settings.py:737
1436
+ #: core/app_settings.py:748
1436
1437
  msgid "The default redirection used when no application is specified"
1437
1438
  msgstr ""
1438
1439
 
@@ -1463,8 +1464,8 @@ msgstr ""
1463
1464
 
1464
1465
  #: core/checks.py:34
1465
1466
  msgid ""
1466
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot."
1467
- "html#dovecot-oauth2"
1467
+ "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/"
1468
+ "dovecot.html#dovecot-oauth2"
1468
1469
  msgstr ""
1469
1470
 
1470
1471
  #: core/checks.py:41
@@ -1938,19 +1939,14 @@ msgstr ""
1938
1939
  #: imap_migration/app_settings.py:76
1939
1940
  msgid ""
1940
1941
  "A comma seperated list of folders to explicitly include in sync even if "
1941
- "filtered by the Folder Filter Exclusions. Example: debian.user, debian."
1942
- "personal "
1942
+ "filtered by the Folder Filter Exclusions. Example: debian.user, "
1943
+ "debian.personal "
1943
1944
  msgstr ""
1944
1945
 
1945
1946
  #: imap_migration/apps.py:20
1946
1947
  msgid "IMAP Migration"
1947
1948
  msgstr ""
1948
1949
 
1949
- #: imap_migration/auth_backends.py:49 webmail/lib/imaputils.py:240
1950
- #, python-brace-format
1951
- msgid "Connection to IMAP server failed: {error}"
1952
- msgstr ""
1953
-
1954
1950
  #: imap_migration/checks.py:12
1955
1951
  msgid ""
1956
1952
  "Automatic domain/mailbox creation is disabled which means IMAP "
@@ -2274,11 +2270,11 @@ msgstr ""
2274
2270
  msgid "Personal account information"
2275
2271
  msgstr ""
2276
2272
 
2277
- #: pdfcredentials/api/v2/serializers.py:81
2273
+ #: pdfcredentials/api/v2/serializers.py:86
2278
2274
  msgid "Directory is not writable"
2279
2275
  msgstr ""
2280
2276
 
2281
- #: pdfcredentials/api/v2/serializers.py:102
2277
+ #: pdfcredentials/api/v2/serializers.py:114
2282
2278
  msgid "No document available for this user"
2283
2279
  msgstr ""
2284
2280
 
@@ -2988,16 +2984,28 @@ msgstr ""
2988
2984
  msgid "User defined email signature"
2989
2985
  msgstr ""
2990
2986
 
2987
+ #: webmail/exceptions.py:18
2988
+ msgid "Server response"
2989
+ msgstr ""
2990
+
2991
2991
  #: webmail/lib/attachments.py:112
2992
2992
  #, fuzzy
2993
2993
  #| msgid "Failed to create LDAP account: {}"
2994
2994
  msgid "Failed to remove attachment: "
2995
2995
  msgstr "无法创建LDAP帐户: {}"
2996
2996
 
2997
+ #: webmail/lib/imapemail.py:272
2998
+ msgid "wrote:"
2999
+ msgstr ""
3000
+
2997
3001
  #: webmail/lib/imapemail.py:306
2998
3002
  msgid "Date"
2999
3003
  msgstr ""
3000
3004
 
3005
+ #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3006
+ msgid "Original message"
3007
+ msgstr ""
3008
+
3001
3009
  #: webmail/lib/imaputils.py:221
3002
3010
  msgid "Failed to retrieve hierarchy delimiter"
3003
3011
  msgstr ""