modoboa 2.4.11__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 (314) hide show
  1. modoboa/admin/api/v2/serializers.py +14 -0
  2. modoboa/amavis/__init__.py +3 -0
  3. modoboa/amavis/app_settings.py +276 -0
  4. modoboa/amavis/apps.py +18 -0
  5. modoboa/amavis/checks/__init__.py +2 -0
  6. modoboa/amavis/checks/settings_checks.py +59 -0
  7. modoboa/amavis/dbrouter.py +35 -0
  8. modoboa/amavis/factories.py +164 -0
  9. modoboa/amavis/handlers.py +146 -0
  10. modoboa/amavis/lib.py +381 -0
  11. modoboa/amavis/management/__init__.py +0 -0
  12. modoboa/amavis/management/commands/__init__.py +0 -0
  13. modoboa/amavis/management/commands/amnotify.py +99 -0
  14. modoboa/amavis/management/commands/qcleanup.py +84 -0
  15. modoboa/amavis/migrations/0001_initial.py +340 -0
  16. modoboa/amavis/migrations/__init__.py +0 -0
  17. modoboa/amavis/models.py +226 -0
  18. modoboa/amavis/serializers.py +139 -0
  19. modoboa/amavis/sql_connector.py +240 -0
  20. modoboa/amavis/sql_email.py +66 -0
  21. modoboa/amavis/tasks.py +33 -0
  22. modoboa/amavis/templates/amavis/notifications/pending_requests.html +16 -0
  23. modoboa/amavis/tests/__init__.py +0 -0
  24. modoboa/amavis/tests/sa-learn +3 -0
  25. modoboa/amavis/tests/sample_messages/quarantined-input.txt +80 -0
  26. modoboa/amavis/tests/sample_messages/quarantined-output-plain_nolinks.txt +17 -0
  27. modoboa/amavis/tests/spamc +3 -0
  28. modoboa/amavis/tests/test_checks.py +25 -0
  29. modoboa/amavis/tests/test_handlers.py +214 -0
  30. modoboa/amavis/tests/test_lib.py +90 -0
  31. modoboa/amavis/tests/test_management_commands.py +45 -0
  32. modoboa/amavis/tests/test_sql_email.py +67 -0
  33. modoboa/amavis/tests/test_utils.py +19 -0
  34. modoboa/amavis/tests/test_viewsets.py +319 -0
  35. modoboa/amavis/urls.py +11 -0
  36. modoboa/amavis/utils.py +105 -0
  37. modoboa/amavis/viewsets.py +265 -0
  38. modoboa/core/api/v1/serializers.py +7 -5
  39. modoboa/core/api/v2/serializers.py +4 -2
  40. modoboa/core/api/v2/tests.py +16 -4
  41. modoboa/core/api/v2/urls.py +5 -5
  42. modoboa/core/api/v2/views.py +3 -1
  43. modoboa/core/api/v2/viewsets.py +24 -3
  44. modoboa/core/handlers.py +6 -2
  45. modoboa/core/management/commands/add_allowed_hosts.py +33 -0
  46. modoboa/core/management/commands/load_initial_data.py +10 -0
  47. modoboa/core/migrations/0025_rename_user_email_is_active_core_user_email_c0c03f_idx.py +23 -5
  48. modoboa/core/tests/test_core.py +24 -0
  49. modoboa/core/utils.py +3 -0
  50. modoboa/frontend_dist/assets/AccountAliasForm-BuSy_1n9.js +1 -0
  51. modoboa/frontend_dist/assets/AccountEditView-qdJmLM_e.js +1 -0
  52. modoboa/frontend_dist/assets/AccountLayout-DrN7vHsX.js +1 -0
  53. modoboa/frontend_dist/assets/AccountPasswordSubForm-DZGt_Xgq.js +1 -0
  54. modoboa/frontend_dist/assets/AccountView-CO65y0vZ.js +1 -0
  55. modoboa/frontend_dist/assets/AddressBook-BZNUlhek.js +1 -0
  56. modoboa/frontend_dist/assets/AdminLayout-CTNhuwTw.js +1 -0
  57. modoboa/frontend_dist/assets/AlarmsView-9yKGbmkC.css +1 -0
  58. modoboa/frontend_dist/assets/AlarmsView-DN_JIw9g.js +1 -0
  59. modoboa/frontend_dist/assets/AliasEditView-DjpPUTp9.js +1 -0
  60. modoboa/frontend_dist/assets/{AliasRecipientForm-IOae6sjF.js → AliasRecipientForm-B1Y8wFdP.js} +1 -1
  61. modoboa/frontend_dist/assets/AliasView-GOJ5lyQH.js +1 -0
  62. modoboa/frontend_dist/assets/AuditTrailView-fbXmq70e.js +1 -0
  63. modoboa/frontend_dist/assets/CalendarView-LlQQNEPL.js +1 -0
  64. modoboa/frontend_dist/assets/{ChoiceField-DJ_c78Cm.js → ChoiceField-B3ReQHVe.js} +1 -1
  65. modoboa/frontend_dist/assets/ComposeEmailForm-Bs1fZXAL.js +1 -0
  66. modoboa/frontend_dist/assets/ComposeEmailView-s3LMl3pO.js +1 -0
  67. modoboa/frontend_dist/assets/ConfirmDialog-DY_kUHLG.js +1 -0
  68. modoboa/frontend_dist/assets/{ConnectedLayout-Dvwmicnc.css → ConnectedLayout-Bxh21hcH.css} +1 -1
  69. modoboa/frontend_dist/assets/ConnectedLayout-UWjiYBNw.js +1 -0
  70. modoboa/frontend_dist/assets/CreationForm-ORg3fazt.js +1 -0
  71. modoboa/frontend_dist/assets/DashboardView-Dplk9itS.js +1 -0
  72. modoboa/frontend_dist/assets/DomainAdminList-DVn9x0rB.js +1 -0
  73. modoboa/frontend_dist/assets/DomainEditView-nAoL64D_.js +1 -0
  74. modoboa/frontend_dist/assets/{DomainTransportForm-C2xo0Yd7.js → DomainTransportForm-CA-DNUxX.js} +1 -1
  75. modoboa/frontend_dist/assets/{DomainView-BDKoBFYr.css → DomainView-CCLYXPHx.css} +1 -1
  76. modoboa/frontend_dist/assets/DomainView-CdXPpwJG.js +5 -0
  77. modoboa/frontend_dist/assets/DomainsView-B_59gowf.js +1 -0
  78. modoboa/frontend_dist/assets/DomainsView-DZ-ss9bI.css +1 -0
  79. modoboa/frontend_dist/assets/EmailField-CwcwI5xW.js +1 -0
  80. modoboa/frontend_dist/assets/EmailView-BshxcfAK.js +1 -0
  81. modoboa/frontend_dist/assets/EmptyLayout-DFfhnhLi.js +1 -0
  82. modoboa/frontend_dist/assets/FiltersView-Cf20MSTK.js +1 -0
  83. modoboa/frontend_dist/assets/ForwardEmailView-CZG062os.js +1 -0
  84. modoboa/frontend_dist/assets/{HtmlEditor-CJ9umKeO.js → HtmlEditor-Bh4c689R.js} +1 -1
  85. modoboa/frontend_dist/assets/IdentitiesView-BXAuU1YX.js +1 -0
  86. modoboa/frontend_dist/assets/{IdentitiesView-0ziuQ5s-.css → IdentitiesView-DPrrRMS5.css} +1 -1
  87. modoboa/frontend_dist/assets/InformationView-C9vvvQhJ.css +1 -0
  88. modoboa/frontend_dist/assets/InformationView-Cn5FZW7H.js +1 -0
  89. modoboa/frontend_dist/assets/{LoadingData-CYwX3Jpn.js → LoadingData-CdVvm4FI.js} +1 -1
  90. modoboa/frontend_dist/assets/{LoginCallbackView-E01qkKn0.js → LoginCallbackView-B9hAH4MI.js} +1 -1
  91. modoboa/frontend_dist/assets/{LoginView-Cy4uFV9h.js → LoginView-tHIR4Adc.js} +1 -1
  92. modoboa/frontend_dist/assets/MailboxView-Bugu2vhg.js +1 -0
  93. modoboa/frontend_dist/assets/MenuItems-PXjiG-fs.js +1 -0
  94. modoboa/frontend_dist/assets/MessageView-Cy4STShm.js +1 -0
  95. modoboa/frontend_dist/assets/MessagesView-DdkuEgfX.js +1 -0
  96. modoboa/frontend_dist/assets/MigrationsView-CidSEjCF.js +1 -0
  97. modoboa/frontend_dist/assets/{ParametersForm-BZM0QSvg.js → ParametersForm-CAv4SH-E.js} +1 -1
  98. modoboa/frontend_dist/assets/ParametersView-CX7Ffemw.js +1 -0
  99. modoboa/frontend_dist/assets/ParametersView-CrbNcmV3.js +1 -0
  100. modoboa/frontend_dist/assets/ProviderEditView-CrltAQXl.js +1 -0
  101. modoboa/frontend_dist/assets/ProviderGeneralForm-BYAzVnXM.js +1 -0
  102. modoboa/frontend_dist/assets/ProvidersView-osjIY4Ex.js +1 -0
  103. modoboa/frontend_dist/assets/QuarantineLayout-B8EcU9vS.js +1 -0
  104. modoboa/frontend_dist/assets/QuarantineView-D4gOE4EQ.css +1 -0
  105. modoboa/frontend_dist/assets/QuarantineView-D8Qg0MXA.js +1 -0
  106. modoboa/frontend_dist/assets/ReplyEmailView-BABPqWhd.js +1 -0
  107. modoboa/frontend_dist/assets/ResourcesForm-OaqdRYVs.js +1 -0
  108. modoboa/frontend_dist/assets/SelfServiceLayout-d277YTGR.js +1 -0
  109. modoboa/frontend_dist/assets/{SettingsView-BxLJBFY0.js → SettingsView-9iNcDhkI.js} +2 -2
  110. modoboa/frontend_dist/assets/StatisticsView-cHsPyGkL.js +1 -0
  111. modoboa/frontend_dist/assets/TimeSerieChart--V83dcJ9.js +1 -0
  112. modoboa/frontend_dist/assets/UserLayout-B3sBiTcZ.js +1 -0
  113. modoboa/frontend_dist/assets/VAlert-BuaaYN2h.js +1 -0
  114. modoboa/frontend_dist/assets/VApp-CKP-6zGP.js +1 -0
  115. modoboa/frontend_dist/assets/VAutocomplete-Dwv6_Rzq.js +1 -0
  116. modoboa/frontend_dist/assets/VAvatar-Cmga0vj6.js +1 -0
  117. modoboa/frontend_dist/assets/VBadge-BQrRJ9S0.css +1 -0
  118. modoboa/frontend_dist/assets/VBadge-CixeK87a.js +1 -0
  119. modoboa/frontend_dist/assets/VCard-CxH9DWoK.js +1 -0
  120. modoboa/frontend_dist/assets/VCheckbox-62GOpvvP.js +1 -0
  121. modoboa/frontend_dist/assets/{VCheckboxBtn-Dt810gWf.js → VCheckboxBtn-DMoNtKT8.js} +1 -1
  122. modoboa/frontend_dist/assets/VChip-D_styETR.js +1 -0
  123. modoboa/frontend_dist/assets/VColorPicker-BHscBGQV.js +1 -0
  124. modoboa/frontend_dist/assets/{VContainer-DvTbsotR.js → VContainer-B46caNs1.js} +1 -1
  125. modoboa/frontend_dist/assets/VDataTable-Bh8NbVSx.js +1 -0
  126. modoboa/frontend_dist/assets/VDataTableServer-BDR5hOmo.js +1 -0
  127. modoboa/frontend_dist/assets/VDataTableVirtual-BOQlNtIG.js +1 -0
  128. modoboa/frontend_dist/assets/{VDialog-Bk6EWNhz.js → VDialog-BcTg7w6P.js} +1 -1
  129. modoboa/frontend_dist/assets/VExpansionPanels-BmH5Jl2Z.js +1 -0
  130. modoboa/frontend_dist/assets/VFileInput-BC4yAygd.js +1 -0
  131. modoboa/frontend_dist/assets/VForm-D5iPGkde.js +1 -0
  132. modoboa/frontend_dist/assets/VInput-CcxkaOXT.css +1 -0
  133. modoboa/frontend_dist/assets/VInput-CoDJzvaW.js +1 -0
  134. modoboa/frontend_dist/assets/VMenu-gUG70-zD.js +1 -0
  135. modoboa/frontend_dist/assets/VPicker-BXuKT3zB.js +1 -0
  136. modoboa/frontend_dist/assets/VProgressCircular-BtOPiGCg.js +1 -0
  137. modoboa/frontend_dist/assets/VRadioGroup-DIFZKSn-.js +1 -0
  138. modoboa/frontend_dist/assets/{VRow-BF35mT1S.js → VRow-ozg66L7j.js} +1 -1
  139. modoboa/frontend_dist/assets/VSelect-C3RjAa45.js +1 -0
  140. modoboa/frontend_dist/assets/VSelectionControl-zyz-fJvC.js +1 -0
  141. modoboa/frontend_dist/assets/VSheet-BNx2X4Mk.js +1 -0
  142. modoboa/frontend_dist/assets/VSpacer-DinPiXs9.js +1 -0
  143. modoboa/frontend_dist/assets/VSwitch-DwxdeAEq.js +1 -0
  144. modoboa/frontend_dist/assets/VTable-DaLxa4FO.js +1 -0
  145. modoboa/frontend_dist/assets/VTabs-BP0Hgsgm.js +1 -0
  146. modoboa/frontend_dist/assets/VTextField-BzBVKKob.css +1 -0
  147. modoboa/frontend_dist/assets/VTextField-XoGTj1KG.js +1 -0
  148. modoboa/frontend_dist/assets/VTextarea-wBlRMIv_.js +1 -0
  149. modoboa/frontend_dist/assets/VToolbar-CFZfqeOr.js +1 -0
  150. modoboa/frontend_dist/assets/VWindowItem-BB7ETW3b.js +1 -0
  151. modoboa/frontend_dist/assets/WebmailLayout-_Hk1XhVq.js +1 -0
  152. modoboa/frontend_dist/assets/accounts-DUzbx6k8.js +1 -0
  153. modoboa/frontend_dist/assets/{admin-o-HRGnmT.js → admin-DewTk2H8.js} +1 -1
  154. modoboa/frontend_dist/assets/{aliases-DDVeehyg.js → aliases-4sXmjwXp.js} +1 -1
  155. modoboa/frontend_dist/assets/amavis-CC0li7_T.js +1 -0
  156. modoboa/frontend_dist/assets/amavis-DK8SHE6o.js +1 -0
  157. modoboa/frontend_dist/assets/{contacts-C84DY-Q1.js → contacts-BjghrPqZ.js} +1 -1
  158. modoboa/frontend_dist/assets/{domains-Bgn4ixHL.js → domains-BSawReeu.js} +1 -1
  159. modoboa/frontend_dist/assets/{domains.store-DTE-V7Y1.js → domains.store-D-vWCEIK.js} +1 -1
  160. modoboa/frontend_dist/assets/{filter-CnffiQAW.js → filter-C82FUCw_.js} +1 -1
  161. modoboa/frontend_dist/assets/forwardRefs-cvcnlhoK.js +1 -0
  162. modoboa/frontend_dist/assets/global.store-DbkcI5o2.js +1 -0
  163. modoboa/frontend_dist/assets/{importExport-BlQYb0NO.js → importExport-DzoL4Mvc.js} +1 -1
  164. modoboa/frontend_dist/assets/index-BImkz5Jx.js +984 -0
  165. modoboa/frontend_dist/assets/layout-C5FyYCHK.js +1 -0
  166. modoboa/frontend_dist/assets/{layout.store-DkjrAoXt.js → layout.store-NXWtFIwL.js} +1 -1
  167. modoboa/frontend_dist/assets/{logos-q8SEyAa4.js → logos-BswdveCV.js} +1 -1
  168. modoboa/frontend_dist/assets/{logs-B7IJ7LBa.js → logs-6CbtfaZS.js} +1 -1
  169. modoboa/frontend_dist/assets/{parameters-A6iBEYQq.js → parameters-aSQiR7kN.js} +1 -1
  170. modoboa/frontend_dist/assets/{parameters.store-BiXS4_6w.js → parameters.store-CzQqVatx.js} +1 -1
  171. modoboa/frontend_dist/assets/permissions-DNoefz-n.js +1 -0
  172. modoboa/frontend_dist/assets/{ssrBoot-AzTdjPjk.js → ssrBoot-CKUX4kcb.js} +1 -1
  173. modoboa/frontend_dist/assets/{tag-BnSYRTcD.js → tag-B_yWNNJD.js} +1 -1
  174. modoboa/frontend_dist/assets/transports-BDNB9wR5.js +1 -0
  175. modoboa/frontend_dist/assets/{webmail-CSH_3l6R.js → webmail-CdU6CD9b.js} +1 -1
  176. modoboa/frontend_dist/index.html +1 -1
  177. modoboa/lib/email_utils.py +2 -2
  178. modoboa/lib/permissions.py +7 -0
  179. modoboa/lib/test_runners.py +29 -0
  180. modoboa/lib/tests/__init__.py +5 -1
  181. modoboa/locale/br/LC_MESSAGES/django.po +87 -75
  182. modoboa/locale/cs/LC_MESSAGES/django.po +82 -74
  183. modoboa/locale/cs_CZ/LC_MESSAGES/django.po +145 -121
  184. modoboa/locale/de/LC_MESSAGES/django.mo +0 -0
  185. modoboa/locale/de/LC_MESSAGES/django.po +339 -651
  186. modoboa/locale/de_DE/LC_MESSAGES/django.po +87 -75
  187. modoboa/locale/el_GR/LC_MESSAGES/django.po +160 -135
  188. modoboa/locale/en/LC_MESSAGES/django.po +82 -74
  189. modoboa/locale/es/LC_MESSAGES/django.po +158 -131
  190. modoboa/locale/es_MX/LC_MESSAGES/django.po +82 -74
  191. modoboa/locale/fi/LC_MESSAGES/django.po +87 -75
  192. modoboa/locale/fr/LC_MESSAGES/django.mo +0 -0
  193. modoboa/locale/fr/LC_MESSAGES/django.po +469 -201
  194. modoboa/locale/hu/LC_MESSAGES/django.po +82 -74
  195. modoboa/locale/it/LC_MESSAGES/django.mo +0 -0
  196. modoboa/locale/it/LC_MESSAGES/django.po +148 -122
  197. modoboa/locale/ja_JP/LC_MESSAGES/django.mo +0 -0
  198. modoboa/locale/ja_JP/LC_MESSAGES/django.po +80 -72
  199. modoboa/locale/ka/LC_MESSAGES/django.po +82 -74
  200. modoboa/locale/nl_NL/LC_MESSAGES/django.po +160 -132
  201. modoboa/locale/no/LC_MESSAGES/django.po +82 -74
  202. modoboa/locale/pl_PL/LC_MESSAGES/django.mo +0 -0
  203. modoboa/locale/pl_PL/LC_MESSAGES/django.po +172 -149
  204. modoboa/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
  205. modoboa/locale/pt_BR/LC_MESSAGES/django.po +172 -144
  206. modoboa/locale/pt_PT/LC_MESSAGES/django.po +135 -112
  207. modoboa/locale/ro_RO/LC_MESSAGES/django.po +87 -75
  208. modoboa/locale/ru/LC_MESSAGES/django.po +142 -118
  209. modoboa/locale/si/LC_MESSAGES/django.po +82 -74
  210. modoboa/locale/sk/LC_MESSAGES/django.po +82 -74
  211. modoboa/locale/sk_SK/LC_MESSAGES/django.po +84 -76
  212. modoboa/locale/sl_SI/LC_MESSAGES/django.po +90 -76
  213. modoboa/locale/sv/LC_MESSAGES/django.mo +0 -0
  214. modoboa/locale/sv/LC_MESSAGES/django.po +172 -139
  215. modoboa/locale/tr/LC_MESSAGES/django.po +87 -75
  216. modoboa/locale/tr_TR/LC_MESSAGES/django.po +84 -74
  217. modoboa/locale/uk/LC_MESSAGES/django.po +82 -74
  218. modoboa/locale/zh/LC_MESSAGES/django.po +82 -74
  219. modoboa/locale/zh_CN/LC_MESSAGES/django.po +82 -74
  220. modoboa/locale/zh_TW/LC_MESSAGES/django.po +87 -75
  221. modoboa/parameters/api/v2/tests.py +2 -2
  222. modoboa/parameters/api/v2/viewsets.py +2 -0
  223. modoboa/policyd/tests.py +2 -0
  224. modoboa/urls_api_v2.py +6 -0
  225. {modoboa-2.4.11.dist-info → modoboa-2.5.0.dist-info}/METADATA +6 -4
  226. {modoboa-2.4.11.dist-info → modoboa-2.5.0.dist-info}/RECORD +231 -181
  227. modoboa/frontend_dist/assets/AccountAliasForm-BV6KvTu6.js +0 -1
  228. modoboa/frontend_dist/assets/AccountEditView-DDOFyfBD.js +0 -1
  229. modoboa/frontend_dist/assets/AccountLayout-rX51xgxT.js +0 -1
  230. modoboa/frontend_dist/assets/AccountPasswordSubForm-D9S6LaeH.js +0 -1
  231. modoboa/frontend_dist/assets/AccountView-cmvaZNq3.js +0 -1
  232. modoboa/frontend_dist/assets/AddressBook-DCJxL8SU.js +0 -1
  233. modoboa/frontend_dist/assets/AdminLayout-r0wfG2lO.js +0 -1
  234. modoboa/frontend_dist/assets/AlarmsView-Bheey-gp.css +0 -1
  235. modoboa/frontend_dist/assets/AlarmsView-C0bqC4PA.js +0 -1
  236. modoboa/frontend_dist/assets/AliasEditView-DVoWoCGY.js +0 -1
  237. modoboa/frontend_dist/assets/AliasView-DrONZXOh.js +0 -1
  238. modoboa/frontend_dist/assets/AuditTrailView-OTkoZaMU.js +0 -1
  239. modoboa/frontend_dist/assets/CalendarView-CqF4_Ui9.js +0 -1
  240. modoboa/frontend_dist/assets/ComposeEmailForm-DO5_GB3e.js +0 -1
  241. modoboa/frontend_dist/assets/ComposeEmailView-A91HCBsN.js +0 -1
  242. modoboa/frontend_dist/assets/ConfirmDialog-BBcgdAnO.js +0 -1
  243. modoboa/frontend_dist/assets/ConnectedLayout-1oRW-Rql.js +0 -1
  244. modoboa/frontend_dist/assets/CreationForm-71YJbjsA.js +0 -1
  245. modoboa/frontend_dist/assets/DashboardView-CdLpSfUl.js +0 -1
  246. modoboa/frontend_dist/assets/DomainAdminList-BjC4KsqI.js +0 -1
  247. modoboa/frontend_dist/assets/DomainEditView-CQjKwYxl.js +0 -1
  248. modoboa/frontend_dist/assets/DomainView-BhhuZI_N.js +0 -5
  249. modoboa/frontend_dist/assets/DomainsView-Cft4BP8Z.js +0 -1
  250. modoboa/frontend_dist/assets/DomainsView-DasJ0NdZ.css +0 -1
  251. modoboa/frontend_dist/assets/EmailField-C8umy0EU.js +0 -1
  252. modoboa/frontend_dist/assets/EmailView-ki7uEQPD.js +0 -1
  253. modoboa/frontend_dist/assets/EmptyLayout-DaA1XH9n.js +0 -1
  254. modoboa/frontend_dist/assets/FiltersView-FYFZxG4B.js +0 -1
  255. modoboa/frontend_dist/assets/ForwardEmailView-cUbnSYCF.js +0 -1
  256. modoboa/frontend_dist/assets/IdentitiesView-njNo8N5n.js +0 -1
  257. modoboa/frontend_dist/assets/InformationView-D1h38POt.js +0 -1
  258. modoboa/frontend_dist/assets/InformationView-U5Ww-Sx1.css +0 -1
  259. modoboa/frontend_dist/assets/MailboxView-IlrLWm_H.js +0 -1
  260. modoboa/frontend_dist/assets/MenuItems-BAtHWzAE.js +0 -1
  261. modoboa/frontend_dist/assets/MessagesView-OSpjixFq.js +0 -1
  262. modoboa/frontend_dist/assets/MigrationsView-DKNOsVzF.js +0 -1
  263. modoboa/frontend_dist/assets/ParametersView-C4bXASiq.js +0 -1
  264. modoboa/frontend_dist/assets/ParametersView-CYXgNmc1.js +0 -1
  265. modoboa/frontend_dist/assets/ProviderEditView-CyxCWTST.js +0 -1
  266. modoboa/frontend_dist/assets/ProviderGeneralForm-BYPjNHqB.js +0 -1
  267. modoboa/frontend_dist/assets/ProvidersView-CxrMkRyk.js +0 -1
  268. modoboa/frontend_dist/assets/ReplyEmailView-Dkw9-N26.js +0 -1
  269. modoboa/frontend_dist/assets/ResourcesForm-CuUvrOdY.js +0 -1
  270. modoboa/frontend_dist/assets/StatisticsView-BN7QsZMT.js +0 -1
  271. modoboa/frontend_dist/assets/TimeSerieChart-BMN8BeFZ.js +0 -1
  272. modoboa/frontend_dist/assets/UserLayout-B6-JQg4F.js +0 -1
  273. modoboa/frontend_dist/assets/VAlert-DIQTrRif.js +0 -1
  274. modoboa/frontend_dist/assets/VApp-CpkYA7js.js +0 -1
  275. modoboa/frontend_dist/assets/VAutocomplete-C4IpXyl8.js +0 -1
  276. modoboa/frontend_dist/assets/VAvatar-Lpb-Dion.js +0 -1
  277. modoboa/frontend_dist/assets/VCard-er_isjE_.js +0 -1
  278. modoboa/frontend_dist/assets/VCheckbox-D-u8JXP1.js +0 -1
  279. modoboa/frontend_dist/assets/VChip-B4iSpj8_.js +0 -1
  280. modoboa/frontend_dist/assets/VColorPicker-BAjGDsXv.js +0 -1
  281. modoboa/frontend_dist/assets/VDataTable-4JRjbtgF.js +0 -1
  282. modoboa/frontend_dist/assets/VDataTableServer-tIDT1m3-.js +0 -1
  283. modoboa/frontend_dist/assets/VDataTableVirtual-BlnO18u_.js +0 -1
  284. modoboa/frontend_dist/assets/VExpansionPanels-CwGtXDhr.js +0 -1
  285. modoboa/frontend_dist/assets/VFileInput-D1_7ZkO_.js +0 -1
  286. modoboa/frontend_dist/assets/VForm-DAkW4nfy.js +0 -1
  287. modoboa/frontend_dist/assets/VMenu-BPFJwj2f.js +0 -1
  288. modoboa/frontend_dist/assets/VPicker-CfT82M8N.js +0 -1
  289. modoboa/frontend_dist/assets/VProgressCircular-w75-3ogi.js +0 -1
  290. modoboa/frontend_dist/assets/VRadioGroup-0j6DNC_k.js +0 -1
  291. modoboa/frontend_dist/assets/VSelect-Cs4ARbAS.js +0 -1
  292. modoboa/frontend_dist/assets/VSelectionControl-Dg-XyRRS.js +0 -1
  293. modoboa/frontend_dist/assets/VSheet-Btq_Mu4s.js +0 -1
  294. modoboa/frontend_dist/assets/VSpacer-C7xukQmu.js +0 -1
  295. modoboa/frontend_dist/assets/VSwitch-Cs1NQrmk.js +0 -1
  296. modoboa/frontend_dist/assets/VTable-CNz2SGk4.js +0 -1
  297. modoboa/frontend_dist/assets/VTabs-B1fyVn4M.js +0 -1
  298. modoboa/frontend_dist/assets/VTextField-BdyvgvkG.js +0 -1
  299. modoboa/frontend_dist/assets/VTextField-C-J20yj_.css +0 -1
  300. modoboa/frontend_dist/assets/VTextarea-DnOMpe0Q.js +0 -1
  301. modoboa/frontend_dist/assets/VToolbar-BiCiBxBJ.js +0 -1
  302. modoboa/frontend_dist/assets/VWindowItem-ChWm_kz3.js +0 -1
  303. modoboa/frontend_dist/assets/WebmailLayout-o4uEkp9e.js +0 -1
  304. modoboa/frontend_dist/assets/forwardRefs-Dvjn_Xq4.js +0 -1
  305. modoboa/frontend_dist/assets/global.store-BaiD63EN.js +0 -1
  306. modoboa/frontend_dist/assets/index-I1VDlN4g.js +0 -984
  307. modoboa/frontend_dist/assets/layout-D8ZJPiJ_.js +0 -1
  308. modoboa/frontend_dist/assets/permissions-CITHLHVg.js +0 -1
  309. modoboa/frontend_dist/assets/transports-Dz7c6kIy.js +0 -1
  310. {modoboa-2.4.11.data → modoboa-2.5.0.data}/scripts/modoboa-admin.py +0 -0
  311. {modoboa-2.4.11.dist-info → modoboa-2.5.0.dist-info}/WHEEL +0 -0
  312. {modoboa-2.4.11.dist-info → modoboa-2.5.0.dist-info}/entry_points.txt +0 -0
  313. {modoboa-2.4.11.dist-info → modoboa-2.5.0.dist-info}/licenses/LICENSE +0 -0
  314. {modoboa-2.4.11.dist-info → modoboa-2.5.0.dist-info}/top_level.txt +0 -0
@@ -16,11 +16,10 @@ msgid ""
16
16
  msgstr ""
17
17
  "Project-Id-Version: Modoboa\n"
18
18
  "Report-Msgid-Bugs-To: \n"
19
- "POT-Creation-Date: 2025-07-27 10:50+0200\n"
19
+ "POT-Creation-Date: 2025-08-28 09:41+0200\n"
20
20
  "PO-Revision-Date: 2020-05-06 11:16+0000\n"
21
21
  "Last-Translator: Antoine Nguyen <tonio@ngyn.org>\n"
22
- "Language-Team: Spanish (http://www.transifex.com/tonio/modoboa/language/"
23
- "es/)\n"
22
+ "Language-Team: Spanish (http://www.transifex.com/tonio/modoboa/language/es/)\n"
24
23
  "Language: es\n"
25
24
  "MIME-Version: 1.0\n"
26
25
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,74 +41,75 @@ msgid "Default quota in MB applied to mailboxes. A value of 0 means no quota."
42
41
  msgstr ""
43
42
  "Cuota de mailbox predeterminda en MB. Un valor de 0 significa ningún limite."
44
43
 
45
- #: admin/api/v1/serializers.py:88
44
+ #: admin/api/v1/serializers.py:94
46
45
  #, fuzzy
47
46
  msgid "domain alias with this name already exists"
48
47
  msgstr "Ya existe un alias con este nombre"
49
48
 
50
- #: admin/api/v1/serializers.py:98
49
+ #: admin/api/v1/serializers.py:104
51
50
  #, fuzzy
52
51
  #| msgid "No MX record found for this domain."
53
52
  msgid "No authorized MX record found for this domain"
54
53
  msgstr "No se encontró ningún registro MX para este dominio."
55
54
 
56
- #: admin/api/v1/serializers.py:116
55
+ #: admin/api/v1/serializers.py:122
57
56
  msgid "Cannot be greater than domain quota"
58
57
  msgstr "No puede superar la cuota de dominio"
59
58
 
60
- #: admin/api/v1/serializers.py:162 admin/api/v1/serializers.py:357
61
- #: admin/api/v2/serializers.py:548 admin/models/alias.py:44
59
+ #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
60
+ #: admin/api/v2/serializers.py:564 admin/models/alias.py:44
62
61
  msgid "Permission denied."
63
62
  msgstr "Permiso denegado."
64
63
 
65
- #: admin/api/v1/serializers.py:224 admin/api/v2/serializers.py:88
66
- #: admin/api/v2/serializers.py:470 core/api/v2/serializers.py:235
67
- #: core/api/v2/serializers.py:237 core/api/v2/serializers.py:246
64
+ #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
65
+ #: admin/api/v2/serializers.py:486 core/api/v2/serializers.py:255
66
+ #: core/api/v2/serializers.py:257 core/api/v2/serializers.py:266
68
67
  #: transport/backends.py:40
69
68
  msgid "This field is required"
70
69
  msgstr "Este campo es obligatorio"
71
70
 
72
- #: admin/api/v1/serializers.py:236
71
+ #: admin/api/v1/serializers.py:243
73
72
  msgid ""
74
73
  "List of administered domains (resellers and domain administrators only)."
75
74
  msgstr ""
76
75
  "Lista de dominios administrados (sólo distribuidores y administradores de "
77
76
  "dominio)."
78
77
 
79
- #: admin/api/v1/serializers.py:330 admin/api/v2/serializers.py:530
78
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:546
80
79
  msgid "Not allowed for this role."
81
80
  msgstr "No estás autorizado para esta función."
82
81
 
83
- #: admin/api/v1/serializers.py:348
82
+ #: admin/api/v1/serializers.py:355
84
83
  msgid "Must be equal to mailbox full_address"
85
84
  msgstr "Debe ser igual a la dirección completa del buzón"
86
85
 
87
- #: admin/api/v1/serializers.py:390 admin/api/v2/serializers.py:582
86
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:598
88
87
  #: calendars/serializers.py:175 calendars/serializers.py:177
88
+ #: pdfcredentials/api/v2/serializers.py:91
89
89
  msgid "This field is required."
90
90
  msgstr "Este campo es obligatorio."
91
91
 
92
- #: admin/api/v1/serializers.py:402 admin/api/v2/serializers.py:599
92
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:615
93
93
  msgid "Local domain {} does not exist"
94
94
  msgstr "El dominio local {} no existe"
95
95
 
96
- #: admin/api/v1/serializers.py:492
96
+ #: admin/api/v1/serializers.py:499
97
97
  msgid "A list of recipient"
98
98
  msgstr "Lista de destinatarios"
99
99
 
100
- #: admin/api/v1/serializers.py:508 admin/api/v2/viewsets.py:286
100
+ #: admin/api/v1/serializers.py:515 admin/api/v2/viewsets.py:286
101
101
  #, fuzzy
102
102
  #| msgid "User '%s' already exists"
103
103
  msgid "This alias already exists"
104
104
  msgstr "El usuario '%s' ya existe"
105
105
 
106
- #: admin/api/v1/serializers.py:544
106
+ #: admin/api/v1/serializers.py:551
107
107
  #, fuzzy
108
108
  #| msgid "You don't have access to this domain"
109
109
  msgid "You don't have access to this domain."
110
110
  msgstr "No tienes acceso a este dominio"
111
111
 
112
- #: admin/api/v1/serializers.py:553
112
+ #: admin/api/v1/serializers.py:560
113
113
  #, fuzzy
114
114
  #| msgid "You don't have access to this domain"
115
115
  msgid "You don't have access to this mailbox."
@@ -119,60 +119,60 @@ msgstr "No tienes acceso a este dominio"
119
119
  msgid "Here is your new Modoboa password: {}"
120
120
  msgstr ""
121
121
 
122
- #: admin/api/v2/serializers.py:80
122
+ #: admin/api/v2/serializers.py:82
123
123
  msgid "DKIM keys storage directory not configured"
124
124
  msgstr ""
125
125
 
126
- #: admin/api/v2/serializers.py:92
126
+ #: admin/api/v2/serializers.py:94
127
127
  msgid "This field is valid when type is relaydomain"
128
128
  msgstr ""
129
129
 
130
- #: admin/api/v2/serializers.py:99
130
+ #: admin/api/v2/serializers.py:101
131
131
  msgid "You can't define an unlimited quota."
132
132
  msgstr "No puede definir una cuota ilimitada."
133
133
 
134
- #: admin/api/v2/serializers.py:133
134
+ #: admin/api/v2/serializers.py:135
135
135
  #, python-format
136
136
  msgid "User '%s' already exists"
137
137
  msgstr "El usuario '%s' ya existe"
138
138
 
139
- #: admin/api/v2/serializers.py:248 admin/api/v2/serializers.py:254
139
+ #: admin/api/v2/serializers.py:250 admin/api/v2/serializers.py:256
140
140
  msgid "Must be a positive integer"
141
141
  msgstr "Debe ser un entero positivo"
142
142
 
143
- #: admin/api/v2/serializers.py:263
143
+ #: admin/api/v2/serializers.py:265
144
144
  msgid "openssl not found, please make sure it is installed."
145
145
  msgstr ""
146
146
 
147
- #: admin/api/v2/serializers.py:266 pdfcredentials/api/v2/serializers.py:79
147
+ #: admin/api/v2/serializers.py:268 pdfcredentials/api/v2/serializers.py:84
148
148
  #, fuzzy
149
149
  #| msgid "Domain not found."
150
150
  msgid "Directory not found."
151
151
  msgstr "Dominio no encontrado."
152
152
 
153
- #: admin/api/v2/serializers.py:277
153
+ #: admin/api/v2/serializers.py:279
154
154
  msgid "This field only allows valid IP addresses (or networks)"
155
155
  msgstr ""
156
156
 
157
- #: admin/api/v2/serializers.py:290
157
+ #: admin/api/v2/serializers.py:292
158
158
  msgid "Please disable imap migration before disabling this option."
159
159
  msgstr ""
160
160
 
161
- #: admin/api/v2/serializers.py:303
161
+ #: admin/api/v2/serializers.py:305
162
162
  msgid "Define at least one authorized network / address"
163
163
  msgstr ""
164
164
 
165
- #: admin/api/v2/serializers.py:565
165
+ #: admin/api/v2/serializers.py:581
166
166
  msgid "The left part of an email address can't be more than 64 characters."
167
167
  msgstr ""
168
168
 
169
- #: admin/api/v2/serializers.py:587
169
+ #: admin/api/v2/serializers.py:603
170
170
  #, fuzzy
171
171
  #| msgid "A mailbox is required"
172
172
  msgid "A mailbox is required to create aliases."
173
173
  msgstr "Es obligatorio un buzón"
174
174
 
175
- #: admin/api/v2/serializers.py:751
175
+ #: admin/api/v2/serializers.py:772
176
176
  #, fuzzy
177
177
  #| msgid "Unknown"
178
178
  msgid "Unknown status"
@@ -186,14 +186,6 @@ msgstr "No tienes acceso a este dominio"
186
186
  msgid "You can't delete your own domain"
187
187
  msgstr "No puedo eliminar su propio dominio"
188
188
 
189
- #: admin/api/v2/viewsets.py:407
190
- msgid "No alarm ID provided"
191
- msgstr ""
192
-
193
- #: admin/api/v2/viewsets.py:411
194
- msgid "Received invalid alarm id(s)"
195
- msgstr ""
196
-
197
189
  #: admin/app_settings.py:19 limits/app_settings.py:38 limits/constants.py:13
198
190
  msgid "Domains"
199
191
  msgstr "Dominios"
@@ -212,8 +204,8 @@ msgstr "MX Validos"
212
204
 
213
205
  #: admin/app_settings.py:37
214
206
  msgid ""
215
- "A list of IP or network address every MX record should match. A warning will "
216
- "be sent if a record does not respect it."
207
+ "A list of IP or network address every MX record should match. A warning will"
208
+ " be sent if a record does not respect it."
217
209
  msgstr ""
218
210
  "Una lista de IP o dirección de red, cada registro MX debe coincidir. Se "
219
211
  "enviará una advertencia si un registro no la respeta."
@@ -330,8 +322,9 @@ msgid ""
330
322
  "Default quota (in MB) applied to freshly created domains with no value "
331
323
  "specified. A value of 0 means no quota."
332
324
  msgstr ""
333
- "Cuota por defecto (en MB) que se aplica a la creación de nuevos dominios que "
334
- "no tuvieran un valor especificado. Un valor de 0 significa que no hay cuota."
325
+ "Cuota por defecto (en MB) que se aplica a la creación de nuevos dominios que"
326
+ " no tuvieran un valor especificado. Un valor de 0 significa que no hay "
327
+ "cuota."
335
328
 
336
329
  #: admin/app_settings.py:156
337
330
  #, fuzzy
@@ -403,8 +396,10 @@ msgid "Automatic domain/mailbox creation"
403
396
  msgstr "Creación automática de dominio/buzón"
404
397
 
405
398
  #: admin/app_settings.py:221
406
- msgid "Create a domain and a mailbox when an account is automatically created."
407
- msgstr "Crear un dominio y un buzón cuando se cree automáticamente una cuenta."
399
+ msgid ""
400
+ "Create a domain and a mailbox when an account is automatically created."
401
+ msgstr ""
402
+ "Crear un dominio y un buzón cuando se cree automáticamente una cuenta."
408
403
 
409
404
  #: admin/app_settings.py:230
410
405
  msgid "Create an alias when a mailbox is renamed"
@@ -414,7 +409,7 @@ msgstr ""
414
409
  msgid "Create an alias using the old address when a mailbox is renamed."
415
410
  msgstr ""
416
411
 
417
- #: admin/app_settings.py:287 core/api/v2/viewsets.py:162
412
+ #: admin/app_settings.py:287 core/api/v2/viewsets.py:174
418
413
  msgid "Administration"
419
414
  msgstr "Administración"
420
415
 
@@ -444,7 +439,7 @@ msgstr "alias del dominio"
444
439
  msgid "Account import failed (%s): domain does not exist"
445
440
  msgstr "Falló la importación de la cuenta (%s): el dominio no existe"
446
441
 
447
- #: admin/handlers.py:242 admin/models/mailbox.py:340
442
+ #: admin/handlers.py:242 admin/models/mailbox.py:342
448
443
  msgid "Mailbox {} already exists"
449
444
  msgstr "El buzón {} ya existe"
450
445
 
@@ -723,7 +718,7 @@ msgstr "Una cuota es obligatoria"
723
718
  msgid "{}: domain quota exceeded"
724
719
  msgstr "Cuota de dominio excedida"
725
720
 
726
- #: admin/models/mailbox.py:308
721
+ #: admin/models/mailbox.py:310
727
722
  msgid "Domain does not exist"
728
723
  msgstr "El dominio no existe"
729
724
 
@@ -733,8 +728,8 @@ msgid ""
733
728
  "Modoboa detected that domain %(domain)s is listed by the following DNSBL "
734
729
  "providers:"
735
730
  msgstr ""
736
- "Modoboa detectó que el(los) dominio(s) %(domain)s está(n) listado(s) por los "
737
- "siguientes proveedores DNSBL:"
731
+ "Modoboa detectó que el(los) dominio(s) %(domain)s está(n) listado(s) por los"
732
+ " siguientes proveedores DNSBL:"
738
733
 
739
734
  #: admin/templates/admin/notifications/domain_in_dnsbl.html:11
740
735
  msgid ""
@@ -743,16 +738,16 @@ msgid ""
743
738
  "and ask them to unlist detected IP address(es)."
744
739
  msgstr ""
745
740
  "La reputación de los dominios se verán afectados y existe la posibilidad de "
746
- "que los mensajes de correo electrónico procedentes de él se consideren spam. "
747
- "Debe comunicarse con estos proveedores y pedirles que elimine la(s) "
741
+ "que los mensajes de correo electrónico procedentes de él se consideren spam."
742
+ " Debe comunicarse con estos proveedores y pedirles que elimine la(s) "
748
743
  "dirección(es) IP detectada(s)."
749
744
 
750
745
  #: admin/templates/admin/notifications/domain_invalid_mx.html:3
751
746
  #, python-format
752
747
  msgid "Modoboa detected that domain %(domain)s has no valid MX record:"
753
748
  msgstr ""
754
- "Modoboa detectó que el(los) dominio(s) %(domain)s está(n) listado(s) por los "
755
- "siguientes proveedores DNSBL:"
749
+ "Modoboa detectó que el(los) dominio(s) %(domain)s está(n) listado(s) por los"
750
+ " siguientes proveedores DNSBL:"
756
751
 
757
752
  #: admin/tests/test_mx.py:155
758
753
  #, fuzzy, python-format
@@ -795,13 +790,15 @@ msgstr "General"
795
790
 
796
791
  #: autoreply/app_settings.py:18
797
792
  #, fuzzy
798
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
793
+ #| msgid ""
794
+ #| "Timeout in seconds between two auto-replies to the same recipient"
799
795
  msgid "Period between two auto-replies"
800
796
  msgstr "Tiempo en segundos entre dos autorespuestas para el mismo emisor"
801
797
 
802
798
  #: autoreply/app_settings.py:20
803
799
  #, fuzzy
804
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
800
+ #| msgid ""
801
+ #| "Timeout in seconds between two auto-replies to the same recipient"
805
802
  msgid ""
806
803
  "Number of days to wait before sending a new auto-reply to the same recipient"
807
804
  msgstr "Tiempo en segundos entre dos autorespuestas para el mismo emisor"
@@ -910,7 +907,7 @@ msgid ""
910
907
  "Maximum size in bytes of imported ICS files (or KB, MB, GB if specified)"
911
908
  msgstr ""
912
909
 
913
- #: calendars/app_settings.py:89 core/api/v2/viewsets.py:172
910
+ #: calendars/app_settings.py:89 core/api/v2/viewsets.py:195
914
911
  msgid "Calendars"
915
912
  msgstr ""
916
913
 
@@ -946,7 +943,7 @@ msgstr "Frecuencia de sincronización"
946
943
  msgid "Interval in seconds between 2 synchronization requests"
947
944
  msgstr "Intervalo en segundos entre 2 peticiones de sincronización"
948
945
 
949
- #: contacts/app_settings.py:51 core/api/v2/viewsets.py:179
946
+ #: contacts/app_settings.py:51 core/api/v2/viewsets.py:185
950
947
  #, fuzzy
951
948
  #| msgid "Domains"
952
949
  msgid "Contacts"
@@ -1000,12 +997,12 @@ msgstr "Registros MX de {}"
1000
997
  msgid "2FA is already enabled"
1001
998
  msgstr ""
1002
999
 
1003
- #: core/api/v1/serializers.py:87
1000
+ #: core/api/v1/serializers.py:86
1004
1001
  #, python-format
1005
- msgid "Failed TFA settings editing attempt from '%s' as user '%s'"
1002
+ msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
1006
1003
  msgstr ""
1007
1004
 
1008
- #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:425
1005
+ #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:445
1009
1006
  #, fuzzy
1010
1007
  #| msgid "Old password"
1011
1008
  msgid "Invalid password"
@@ -1019,44 +1016,45 @@ msgstr ""
1019
1016
  msgid "Local"
1020
1017
  msgstr "Local"
1021
1018
 
1022
- #: core/api/v2/serializers.py:175 core/app_settings.py:17
1019
+ #: core/api/v2/serializers.py:194 core/app_settings.py:17
1023
1020
  msgid "User profile"
1024
1021
  msgstr "Perfil de usuario"
1025
1022
 
1026
- #: core/api/v2/serializers.py:194 core/api/v2/serializers.py:201
1027
- #: core/api/v2/serializers.py:208
1023
+ #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
1024
+ #: core/api/v2/serializers.py:228
1028
1025
  msgid "Invalid syntax"
1029
1026
  msgstr "Sintaxis inválida"
1030
1027
 
1031
- #: core/api/v2/serializers.py:213
1028
+ #: core/api/v2/serializers.py:233
1032
1029
  msgid "Invalid rounds number"
1033
1030
  msgstr "Número de rondas inváldo"
1034
1031
 
1035
- #: core/api/v2/serializers.py:413 core/forms.py:81
1032
+ #: core/api/v2/serializers.py:433 core/forms.py:81
1036
1033
  msgid "This code is invalid"
1037
1034
  msgstr ""
1038
1035
 
1039
- #: core/api/v2/serializers.py:483 core/views/auth.py:194 core/views/auth.py:247
1036
+ #: core/api/v2/serializers.py:503 core/views/auth.py:194
1037
+ #: core/views/auth.py:247
1040
1038
  msgid "Please use the following code to recover your Modoboa password: {}"
1041
1039
  msgstr ""
1042
1040
 
1043
- #: core/api/v2/viewsets.py:164
1041
+ #: core/api/v2/viewsets.py:176
1044
1042
  #, fuzzy
1045
1043
  #| msgid "Administration"
1046
1044
  msgid "Administration console"
1047
1045
  msgstr "Administración"
1048
1046
 
1049
- #: core/api/v2/viewsets.py:174
1050
- msgid "Calendar"
1051
- msgstr ""
1052
-
1053
- #: core/api/v2/viewsets.py:181
1047
+ #: core/api/v2/viewsets.py:187
1054
1048
  #, fuzzy
1055
1049
  #| msgid "Address"
1056
1050
  msgid "Address book"
1057
1051
  msgstr "Libro de direcciones"
1058
1052
 
1059
- #: core/api/v2/viewsets.py:186 core/api/v2/viewsets.py:188
1053
+ #: core/api/v2/viewsets.py:197
1054
+ msgid "Calendar"
1055
+ msgstr ""
1056
+
1057
+ #: core/api/v2/viewsets.py:205 core/api/v2/viewsets.py:207
1060
1058
  #: webmail/app_settings.py:258 webmail/app_settings.py:265
1061
1059
  #, fuzzy
1062
1060
  #| msgid "E-mail"
@@ -1092,8 +1090,8 @@ msgid ""
1092
1090
  "Number of rounds to use (only used by sha256crypt and sha512crypt). Must be "
1093
1091
  "between 1000 and 999999999, inclusive."
1094
1092
  msgstr ""
1095
- "Número de rondas a usar (sólo utilizado por sha256crypr y sha512crypt). Debe "
1096
- "estar entre 1000 y 999999999, incluído."
1093
+ "Número de rondas a usar (sólo utilizado por sha256crypr y sha512crypt). Debe"
1094
+ " estar entre 1000 y 999999999, incluído."
1097
1095
 
1098
1096
  #: core/app_settings.py:73
1099
1097
  msgid "Update password scheme at login"
@@ -1238,11 +1236,11 @@ msgstr "Administrador de grupos"
1238
1236
 
1239
1237
  #: core/app_settings.py:239
1240
1238
  msgid ""
1241
- "Members of those LDAP Posix groups will be created as domain administrators. "
1242
- "Use ';' characters to separate groups."
1239
+ "Members of those LDAP Posix groups will be created as domain administrators."
1240
+ " Use ';' characters to separate groups."
1243
1241
  msgstr ""
1244
- "Los miembros de esos grupos Posix LDAP serán creados como administradores de "
1245
- "dominio. Use caracteres \";\" para separar los grupos."
1242
+ "Los miembros de esos grupos Posix LDAP serán creados como administradores de"
1243
+ " dominio. Use caracteres \";\" para separar los grupos."
1246
1244
 
1247
1245
  #: core/app_settings.py:248
1248
1246
  msgid "Group type"
@@ -1289,8 +1287,8 @@ msgid ""
1289
1287
  "The distinguished name to use when binding to the LDAP server. Leave empty "
1290
1288
  "for an anonymous bind"
1291
1289
  msgstr ""
1292
- "El nombre distinguido a usar cuando nos unimos al servidor LDAP. Dejar vació "
1293
- "para una unión anónima"
1290
+ "El nombre distinguido a usar cuando nos unimos al servidor LDAP. Dejar vació"
1291
+ " para una unión anónima"
1294
1292
 
1295
1293
  #: core/app_settings.py:305 core/app_settings.py:367
1296
1294
  msgid "Bind password"
@@ -1428,7 +1426,8 @@ msgstr ""
1428
1426
 
1429
1427
  #: core/app_settings.py:506
1430
1428
  #, fuzzy
1431
- #| msgid "Display custom RSS feed to resellers and domain administrators"
1429
+ #| msgid ""
1430
+ #| "Display custom RSS feed to resellers and domain administrators"
1432
1431
  msgid "Display custom RSS feed to super admins"
1433
1432
  msgstr ""
1434
1433
  "Mostrar una fuente de agregación RSS personalizada a revendedores y "
@@ -1436,7 +1435,8 @@ msgstr ""
1436
1435
 
1437
1436
  #: core/app_settings.py:509
1438
1437
  #, fuzzy
1439
- #| msgid "Display custom RSS feed to resellers and domain administrators"
1438
+ #| msgid ""
1439
+ #| "Display custom RSS feed to resellers and domain administrators"
1440
1440
  msgid "Display custom RSS feed also to super administrators"
1441
1441
  msgstr ""
1442
1442
  "Mostrar una fuente de agregación RSS personalizada a revendedores y "
@@ -1560,8 +1560,8 @@ msgstr "Límite para cuentas inactivas"
1560
1560
 
1561
1561
  #: core/app_settings.py:686
1562
1562
  msgid ""
1563
- "Allow the administrator to set a threshold (in days) beyond which an account "
1564
- "is considered inactive if the user hasn't logged in"
1563
+ "Allow the administrator to set a threshold (in days) beyond which an account"
1564
+ " is considered inactive if the user hasn't logged in"
1565
1565
  msgstr ""
1566
1566
 
1567
1567
  #: core/app_settings.py:695
@@ -1570,8 +1570,8 @@ msgstr "Límite para cuentas inactivas"
1570
1570
 
1571
1571
  #: core/app_settings.py:698
1572
1572
  msgid ""
1573
- "An account with a last login date greater than this threshold (in days) will "
1574
- "be considered as inactive"
1573
+ "An account with a last login date greater than this threshold (in days) will"
1574
+ " be considered as inactive"
1575
1575
  msgstr ""
1576
1576
  "Una cuenta inactiva con una fecha de inicio de sesión previa a este límite "
1577
1577
  "(en días) se considerará como cuenta inactiva"
@@ -1592,19 +1592,27 @@ msgstr "Máximo tiempo de almacenamiento del log"
1592
1592
  msgid "The maximum age in days of a log record"
1593
1593
  msgstr "El tiempo máximo de almacenamiento del log en días"
1594
1594
 
1595
- #: core/app_settings.py:726
1595
+ #: core/app_settings.py:727
1596
+ msgid "Retention time in message history"
1597
+ msgstr ""
1598
+
1599
+ #: core/app_settings.py:730
1600
+ msgid "Retention time (in days) of a message in the message history section"
1601
+ msgstr ""
1602
+
1603
+ #: core/app_settings.py:737
1596
1604
  msgid "Items per page"
1597
1605
  msgstr "Items por página"
1598
1606
 
1599
- #: core/app_settings.py:728
1607
+ #: core/app_settings.py:739
1600
1608
  msgid "Number of displayed items per page"
1601
1609
  msgstr "Número de elementos mostrado por página"
1602
1610
 
1603
- #: core/app_settings.py:735
1611
+ #: core/app_settings.py:746
1604
1612
  msgid "Default top redirection"
1605
1613
  msgstr "Redirección principal por defecto"
1606
1614
 
1607
- #: core/app_settings.py:737
1615
+ #: core/app_settings.py:748
1608
1616
  msgid "The default redirection used when no application is specified"
1609
1617
  msgstr ""
1610
1618
  "La redirección que será usada cuando ninguna aplicación sea especificada."
@@ -1615,9 +1623,9 @@ msgid ""
1615
1623
  "between summer/winter time (ie the same local time occuring twice due to "
1616
1624
  "clock change)."
1617
1625
  msgstr ""
1618
- "A fijado USE_TZ como falso, lo que puede llevar a problemas en la transición "
1619
- "entre los horarios de verano e invierno (p.ej., que la misma hora exista dos "
1620
- "veces debido a cambios del reloj)."
1626
+ "A fijado USE_TZ como falso, lo que puede llevar a problemas en la transición"
1627
+ " entre los horarios de verano e invierno (p.ej., que la misma hora exista "
1628
+ "dos veces debido a cambios del reloj)."
1621
1629
 
1622
1630
  #: core/checks.py:19
1623
1631
  msgid "Set `USE_TZ = True` in settings.py"
@@ -1639,8 +1647,9 @@ msgstr ""
1639
1647
 
1640
1648
  #: core/checks.py:34
1641
1649
  msgid ""
1642
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot."
1643
- "html#dovecot-oauth2"
1650
+ "Visit : "
1651
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot.html#dovecot-"
1652
+ "oauth2"
1644
1653
  msgstr ""
1645
1654
 
1646
1655
  #: core/checks.py:41
@@ -1651,8 +1660,9 @@ msgstr ""
1651
1660
 
1652
1661
  #: core/checks.py:45
1653
1662
  msgid ""
1654
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/"
1655
- "radicale.html#radicale-oauth2"
1663
+ "Visit : "
1664
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/radicale.html#radicale-"
1665
+ "oauth2"
1656
1666
  msgstr ""
1657
1667
 
1658
1668
  #: core/constants.py:6
@@ -1953,7 +1963,7 @@ msgstr "Nada"
1953
1963
  #, fuzzy
1954
1964
  #| msgid "Quantity"
1955
1965
  msgid "Quarantine"
1956
- msgstr "Cantidad"
1966
+ msgstr "Cuarentena"
1957
1967
 
1958
1968
  #: dmarc/models.py:12
1959
1969
  #, fuzzy
@@ -2144,20 +2154,14 @@ msgstr ""
2144
2154
  #: imap_migration/app_settings.py:76
2145
2155
  msgid ""
2146
2156
  "A comma seperated list of folders to explicitly include in sync even if "
2147
- "filtered by the Folder Filter Exclusions. Example: debian.user, debian."
2148
- "personal "
2157
+ "filtered by the Folder Filter Exclusions. Example: debian.user, "
2158
+ "debian.personal "
2149
2159
  msgstr ""
2150
2160
 
2151
2161
  #: imap_migration/apps.py:20
2152
2162
  msgid "IMAP Migration"
2153
2163
  msgstr ""
2154
2164
 
2155
- #: imap_migration/auth_backends.py:49 webmail/lib/imaputils.py:240
2156
- #, fuzzy, python-brace-format
2157
- #| msgid "Connection to IMAP server failed: %s"
2158
- msgid "Connection to IMAP server failed: {error}"
2159
- msgstr "Falló la conexión con el servidor IMAP: %s"
2160
-
2161
2165
  #: imap_migration/checks.py:12
2162
2166
  msgid ""
2163
2167
  "Automatic domain/mailbox creation is disabled which means IMAP "
@@ -2263,10 +2267,11 @@ msgstr "Alias del dominio"
2263
2267
 
2264
2268
  #: limits/app_settings.py:52
2265
2269
  #, fuzzy
2266
- #| msgid "Maximum number of allowed domain aliases for a new administrator"
2270
+ #| msgid ""
2271
+ #| "Maximum number of allowed domain aliases for a new administrator"
2267
2272
  msgid ""
2268
- "Maximum number of allowed domain aliases for a new administrator. (0 to deny "
2269
- "any creation, -1 to allow unlimited creations)"
2273
+ "Maximum number of allowed domain aliases for a new administrator. (0 to deny"
2274
+ " any creation, -1 to allow unlimited creations)"
2270
2275
  msgstr ""
2271
2276
  "Número máximo permitido de alias de dominio para un nuevo administrador"
2272
2277
 
@@ -2320,15 +2325,16 @@ msgstr ""
2320
2325
  #| msgid ""
2321
2326
  #| "Maximum number of allowed domain administrators for a new administrator"
2322
2327
  msgid ""
2323
- "Maximum number of allowed domain administrators for a new domain. (0 to deny "
2324
- "any creation, -1 to allow unlimited creations)"
2328
+ "Maximum number of allowed domain administrators for a new domain. (0 to deny"
2329
+ " any creation, -1 to allow unlimited creations)"
2325
2330
  msgstr ""
2326
2331
  "Número máximo de dominios permitido de administradores para un nuevo "
2327
2332
  "administrador"
2328
2333
 
2329
2334
  #: limits/app_settings.py:126
2330
2335
  #, fuzzy
2331
- #| msgid "Maximum number of allowed domain aliases for a new administrator"
2336
+ #| msgid ""
2337
+ #| "Maximum number of allowed domain aliases for a new administrator"
2332
2338
  msgid ""
2333
2339
  "Maximum number of allowed domain aliases for a new domain. (0 to deny any "
2334
2340
  "creation, -1 to allow unlimited creations)"
@@ -2347,8 +2353,8 @@ msgstr "Número máximo de mailboxes permitidas para un nuevo administrador"
2347
2353
  #, fuzzy
2348
2354
  #| msgid "Maximum number of allowed aliases for a new administrator"
2349
2355
  msgid ""
2350
- "Maximum number of allowed aliases for a new domain. (0 to deny any creation, "
2351
- "-1 to allow unlimited creations)"
2356
+ "Maximum number of allowed aliases for a new domain. (0 to deny any creation,"
2357
+ " -1 to allow unlimited creations)"
2352
2358
  msgstr "Número máxido de alias permitidos para un nuevo administrador"
2353
2359
 
2354
2360
  #: limits/apps.py:16
@@ -2524,13 +2530,13 @@ msgstr "Cuentas"
2524
2530
  msgid "Personal account information"
2525
2531
  msgstr "Actualizar su información personal"
2526
2532
 
2527
- #: pdfcredentials/api/v2/serializers.py:81
2533
+ #: pdfcredentials/api/v2/serializers.py:86
2528
2534
  #, fuzzy
2529
2535
  #| msgid "Domain not found."
2530
2536
  msgid "Directory is not writable"
2531
2537
  msgstr "Dominio no encontrado."
2532
2538
 
2533
- #: pdfcredentials/api/v2/serializers.py:102
2539
+ #: pdfcredentials/api/v2/serializers.py:114
2534
2540
  #, fuzzy
2535
2541
  #| msgid "No information available for this domain."
2536
2542
  msgid "No document available for this user"
@@ -2821,8 +2827,8 @@ msgstr ""
2821
2827
 
2822
2828
  #: rspamd/app_settings.py:21
2823
2829
  msgid ""
2824
- "Absolute path of the file which contains paths to DKIM private keys. Must be "
2825
- "readable by _rspamd group or user."
2830
+ "Absolute path of the file which contains paths to DKIM private keys. Must be"
2831
+ " readable by _rspamd group or user."
2826
2832
  msgstr ""
2827
2833
 
2828
2834
  #: rspamd/app_settings.py:30
@@ -2841,8 +2847,8 @@ msgstr ""
2841
2847
 
2842
2848
  #: rspamd/app_settings.py:53
2843
2849
  msgid ""
2844
- "Location of the rspamd dashboard. Can either be a relative URL (eg. '/"
2845
- "rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2850
+ "Location of the rspamd dashboard. Can either be a relative URL (eg. "
2851
+ "'/rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2846
2852
  "guidance on the Super-Admin dashboard."
2847
2853
  msgstr ""
2848
2854
 
@@ -2992,7 +2998,8 @@ msgstr "Detener procesamiento"
2992
2998
 
2993
2999
  #: sievefilters/lib.py:49
2994
3000
  msgid "Connection to MANAGESIEVE server failed, check your configuration"
2995
- msgstr "La conexión al servidor MANAGESIEVE falló, verifique su configuración."
3001
+ msgstr ""
3002
+ "La conexión al servidor MANAGESIEVE falló, verifique su configuración."
2996
3003
 
2997
3004
  #: sievefilters/lib.py:76
2998
3005
  #, fuzzy
@@ -3093,10 +3100,10 @@ msgid ""
3093
3100
  "primary address, and check your spam folder.</p>"
3094
3101
  msgstr ""
3095
3102
  "<p>Si existe una cuenta con el correo electrónico introducido, recibirá en "
3096
- "breves instantes instrucciones via email para cambiar su contraseña.</"
3097
- "p><p>Si no recibe el correo, por favor compruebe que la dirección de correo "
3098
- "electrónico introducida es su dirección principal y revise su directorio de "
3099
- "correo basura.</p>"
3103
+ "breves instantes instrucciones via email para cambiar su "
3104
+ "contraseña.</p><p>Si no recibe el correo, por favor compruebe que la "
3105
+ "dirección de correo electrónico introducida es su dirección principal y "
3106
+ "revise su directorio de correo basura.</p>"
3100
3107
 
3101
3108
  #: templates/registration/password_reset_email.html:4
3102
3109
  #: templates/registration/password_reset_email_v2.html:4
@@ -3148,8 +3155,8 @@ msgstr "Contraseña anterior"
3148
3155
 
3149
3156
  #: templates/registration/twofactor_code_verify.html:35
3150
3157
  msgid ""
3151
- "Enter the code from the two-factor app on your mobile device. If you've lost "
3152
- "your device, you may enter one of your recovery codes."
3158
+ "Enter the code from the two-factor app on your mobile device. If you've lost"
3159
+ " your device, you may enter one of your recovery codes."
3153
3160
  msgstr ""
3154
3161
 
3155
3162
  #: templates/registration/twofactor_code_verify.html:42
@@ -3354,16 +3361,32 @@ msgstr "Texto de la firma"
3354
3361
  msgid "User defined email signature"
3355
3362
  msgstr "Firma de correo definida por el usuario"
3356
3363
 
3364
+ #: webmail/exceptions.py:18
3365
+ #, fuzzy
3366
+ #| msgid "Server address"
3367
+ msgid "Server response"
3368
+ msgstr "Dirección del servidor"
3369
+
3357
3370
  #: webmail/lib/attachments.py:112
3358
3371
  #, fuzzy
3359
3372
  #| msgid "Failed to remove filter"
3360
3373
  msgid "Failed to remove attachment: "
3361
3374
  msgstr "Fallo al eliminar el adjunto:"
3362
3375
 
3376
+ #: webmail/lib/imapemail.py:272
3377
+ msgid "wrote:"
3378
+ msgstr ""
3379
+
3363
3380
  #: webmail/lib/imapemail.py:306
3364
3381
  msgid "Date"
3365
3382
  msgstr "Fecha"
3366
3383
 
3384
+ #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3385
+ #, fuzzy
3386
+ #| msgid "sent messages"
3387
+ msgid "Original message"
3388
+ msgstr "Todos los mensajes"
3389
+
3367
3390
  #: webmail/lib/imaputils.py:221
3368
3391
  msgid "Failed to retrieve hierarchy delimiter"
3369
3392
  msgstr "Fallo al recuperar el delimitador jerárquico"
@@ -3394,3 +3417,7 @@ msgstr ""
3394
3417
  #, python-format
3395
3418
  msgid "Attachment is too big (limit: %s)"
3396
3419
  msgstr "EL adjunto es demasiado grande (límite: %s)"
3420
+
3421
+ #, fuzzy, python-brace-format
3422
+ #~ msgid "Connection to IMAP server failed: {error}"
3423
+ #~ msgstr "Falló la conexión con el servidor IMAP: %s"