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
@@ -13,11 +13,10 @@ msgid ""
13
13
  msgstr ""
14
14
  "Project-Id-Version: Modoboa\n"
15
15
  "Report-Msgid-Bugs-To: \n"
16
- "POT-Creation-Date: 2025-07-27 10:50+0200\n"
16
+ "POT-Creation-Date: 2025-08-28 09:41+0200\n"
17
17
  "PO-Revision-Date: 2024-07-17 11:45+0200\n"
18
18
  "Last-Translator: Mike C. <miguelmclara@gmail.com>\n"
19
- "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/"
20
- "modoboa/language/pt_PT/)\n"
19
+ "Language-Team: Portuguese (Portugal) (http://www.transifex.com/projects/p/modoboa/language/pt_PT/)\n"
21
20
  "Language: pt_PT\n"
22
21
  "MIME-Version: 1.0\n"
23
22
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -46,76 +45,77 @@ msgstr ""
46
45
  "Quota (em MB) a aplicar a domínios recentemente criados sem valor "
47
46
  "especificado. Um valor de 0 implica sem quota."
48
47
 
49
- #: admin/api/v1/serializers.py:88
48
+ #: admin/api/v1/serializers.py:94
50
49
  #, fuzzy
51
50
  msgid "domain alias with this name already exists"
52
51
  msgstr "Já existe um 'alias' com este nome"
53
52
 
54
- #: admin/api/v1/serializers.py:98
53
+ #: admin/api/v1/serializers.py:104
55
54
  msgid "No authorized MX record found for this domain"
56
55
  msgstr ""
57
56
 
58
- #: admin/api/v1/serializers.py:116
57
+ #: admin/api/v1/serializers.py:122
59
58
  msgid "Cannot be greater than domain quota"
60
59
  msgstr ""
61
60
 
62
- #: admin/api/v1/serializers.py:162 admin/api/v1/serializers.py:357
63
- #: admin/api/v2/serializers.py:548 admin/models/alias.py:44
61
+ #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
62
+ #: admin/api/v2/serializers.py:564 admin/models/alias.py:44
64
63
  #, fuzzy
65
64
  #| msgid "Permissions"
66
65
  msgid "Permission denied."
67
66
  msgstr "Permissões"
68
67
 
69
- #: admin/api/v1/serializers.py:224 admin/api/v2/serializers.py:88
70
- #: admin/api/v2/serializers.py:470 core/api/v2/serializers.py:235
71
- #: core/api/v2/serializers.py:237 core/api/v2/serializers.py:246
68
+ #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
69
+ #: admin/api/v2/serializers.py:486 core/api/v2/serializers.py:255
70
+ #: core/api/v2/serializers.py:257 core/api/v2/serializers.py:266
72
71
  #: transport/backends.py:40
73
72
  msgid "This field is required"
74
73
  msgstr "Este campo é obrigatório"
75
74
 
76
- #: admin/api/v1/serializers.py:236
75
+ #: admin/api/v1/serializers.py:243
77
76
  msgid ""
78
77
  "List of administered domains (resellers and domain administrators only)."
79
78
  msgstr ""
80
79
 
81
- #: admin/api/v1/serializers.py:330 admin/api/v2/serializers.py:530
80
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:546
82
81
  msgid "Not allowed for this role."
83
82
  msgstr ""
84
83
 
85
- #: admin/api/v1/serializers.py:348
84
+ #: admin/api/v1/serializers.py:355
86
85
  msgid "Must be equal to mailbox full_address"
87
86
  msgstr ""
88
87
 
89
- #: admin/api/v1/serializers.py:390 admin/api/v2/serializers.py:582
88
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:598
90
89
  #: calendars/serializers.py:175 calendars/serializers.py:177
90
+ #: pdfcredentials/api/v2/serializers.py:91
91
91
  #, fuzzy
92
92
  #| msgid "A mailbox is required"
93
93
  msgid "This field is required."
94
94
  msgstr "É necessária uma caixa de correio"
95
95
 
96
- #: admin/api/v1/serializers.py:402 admin/api/v2/serializers.py:599
96
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:615
97
97
  #, fuzzy
98
98
  #| msgid "Domain does not exist"
99
99
  msgid "Local domain {} does not exist"
100
100
  msgstr "O domínio não existe"
101
101
 
102
- #: admin/api/v1/serializers.py:492
102
+ #: admin/api/v1/serializers.py:499
103
103
  msgid "A list of recipient"
104
104
  msgstr ""
105
105
 
106
- #: admin/api/v1/serializers.py:508 admin/api/v2/viewsets.py:286
106
+ #: admin/api/v1/serializers.py:515 admin/api/v2/viewsets.py:286
107
107
  #, fuzzy
108
108
  #| msgid "User '%s' already exists"
109
109
  msgid "This alias already exists"
110
110
  msgstr "O utilizador '%s' já existe"
111
111
 
112
- #: admin/api/v1/serializers.py:544
112
+ #: admin/api/v1/serializers.py:551
113
113
  #, fuzzy
114
114
  #| msgid "You don't have access to this domain"
115
115
  msgid "You don't have access to this domain."
116
116
  msgstr "Não tem acesso a este domínio"
117
117
 
118
- #: admin/api/v1/serializers.py:553
118
+ #: admin/api/v1/serializers.py:560
119
119
  #, fuzzy
120
120
  #| msgid "You don't have access to this domain"
121
121
  msgid "You don't have access to this mailbox."
@@ -125,60 +125,60 @@ msgstr "Não tem acesso a este domínio"
125
125
  msgid "Here is your new Modoboa password: {}"
126
126
  msgstr ""
127
127
 
128
- #: admin/api/v2/serializers.py:80
128
+ #: admin/api/v2/serializers.py:82
129
129
  msgid "DKIM keys storage directory not configured"
130
130
  msgstr ""
131
131
 
132
- #: admin/api/v2/serializers.py:92
132
+ #: admin/api/v2/serializers.py:94
133
133
  msgid "This field is valid when type is relaydomain"
134
134
  msgstr ""
135
135
 
136
- #: admin/api/v2/serializers.py:99
136
+ #: admin/api/v2/serializers.py:101
137
137
  msgid "You can't define an unlimited quota."
138
138
  msgstr ""
139
139
 
140
- #: admin/api/v2/serializers.py:133
140
+ #: admin/api/v2/serializers.py:135
141
141
  #, python-format
142
142
  msgid "User '%s' already exists"
143
143
  msgstr "O utilizador '%s' já existe"
144
144
 
145
- #: admin/api/v2/serializers.py:248 admin/api/v2/serializers.py:254
145
+ #: admin/api/v2/serializers.py:250 admin/api/v2/serializers.py:256
146
146
  msgid "Must be a positive integer"
147
147
  msgstr "Tem de ser um inteiro, positivo"
148
148
 
149
- #: admin/api/v2/serializers.py:263
149
+ #: admin/api/v2/serializers.py:265
150
150
  msgid "openssl not found, please make sure it is installed."
151
151
  msgstr ""
152
152
 
153
- #: admin/api/v2/serializers.py:266 pdfcredentials/api/v2/serializers.py:79
153
+ #: admin/api/v2/serializers.py:268 pdfcredentials/api/v2/serializers.py:84
154
154
  #, fuzzy
155
155
  #| msgid "Domain modified"
156
156
  msgid "Directory not found."
157
157
  msgstr "Domínio alterado"
158
158
 
159
- #: admin/api/v2/serializers.py:277
159
+ #: admin/api/v2/serializers.py:279
160
160
  msgid "This field only allows valid IP addresses (or networks)"
161
161
  msgstr ""
162
162
 
163
- #: admin/api/v2/serializers.py:290
163
+ #: admin/api/v2/serializers.py:292
164
164
  msgid "Please disable imap migration before disabling this option."
165
165
  msgstr ""
166
166
 
167
- #: admin/api/v2/serializers.py:303
167
+ #: admin/api/v2/serializers.py:305
168
168
  msgid "Define at least one authorized network / address"
169
169
  msgstr ""
170
170
 
171
- #: admin/api/v2/serializers.py:565
171
+ #: admin/api/v2/serializers.py:581
172
172
  msgid "The left part of an email address can't be more than 64 characters."
173
173
  msgstr ""
174
174
 
175
- #: admin/api/v2/serializers.py:587
175
+ #: admin/api/v2/serializers.py:603
176
176
  #, fuzzy
177
177
  #| msgid "A mailbox is required"
178
178
  msgid "A mailbox is required to create aliases."
179
179
  msgstr "É necessária uma caixa de correio"
180
180
 
181
- #: admin/api/v2/serializers.py:751
181
+ #: admin/api/v2/serializers.py:772
182
182
  #, fuzzy
183
183
  #| msgid "Unknown domain %s"
184
184
  msgid "Unknown status"
@@ -192,14 +192,6 @@ msgstr "Não tem acesso a este domínio"
192
192
  msgid "You can't delete your own domain"
193
193
  msgstr "Não é possível eliminar o seu próprio domínio"
194
194
 
195
- #: admin/api/v2/viewsets.py:407
196
- msgid "No alarm ID provided"
197
- msgstr ""
198
-
199
- #: admin/api/v2/viewsets.py:411
200
- msgid "Received invalid alarm id(s)"
201
- msgstr ""
202
-
203
195
  #: admin/app_settings.py:19 limits/app_settings.py:38 limits/constants.py:13
204
196
  msgid "Domains"
205
197
  msgstr "Domínios"
@@ -218,8 +210,8 @@ msgstr ""
218
210
 
219
211
  #: admin/app_settings.py:37
220
212
  msgid ""
221
- "A list of IP or network address every MX record should match. A warning will "
222
- "be sent if a record does not respect it."
213
+ "A list of IP or network address every MX record should match. A warning will"
214
+ " be sent if a record does not respect it."
223
215
  msgstr ""
224
216
 
225
217
  #: admin/app_settings.py:47
@@ -392,7 +384,8 @@ msgid "Automatic domain/mailbox creation"
392
384
  msgstr "Criação automatica de domino/caixa de correio"
393
385
 
394
386
  #: admin/app_settings.py:221
395
- msgid "Create a domain and a mailbox when an account is automatically created."
387
+ msgid ""
388
+ "Create a domain and a mailbox when an account is automatically created."
396
389
  msgstr ""
397
390
  "Criar um dominio e uma caixa de correio quando uma conta é criada "
398
391
  "automátiamente."
@@ -405,7 +398,7 @@ msgstr ""
405
398
  msgid "Create an alias using the old address when a mailbox is renamed."
406
399
  msgstr ""
407
400
 
408
- #: admin/app_settings.py:287 core/api/v2/viewsets.py:162
401
+ #: admin/app_settings.py:287 core/api/v2/viewsets.py:174
409
402
  msgid "Administration"
410
403
  msgstr "Administração"
411
404
 
@@ -436,7 +429,7 @@ msgstr "'Alias' de domínio"
436
429
  msgid "Account import failed (%s): domain does not exist"
437
430
  msgstr "Importação da conta falhou (%s): domínio não existe"
438
431
 
439
- #: admin/handlers.py:242 admin/models/mailbox.py:340
432
+ #: admin/handlers.py:242 admin/models/mailbox.py:342
440
433
  #, fuzzy
441
434
  #| msgid "Mailbox %s already exists"
442
435
  msgid "Mailbox {} already exists"
@@ -721,7 +714,7 @@ msgstr "É necessário uma quota"
721
714
  msgid "{}: domain quota exceeded"
722
715
  msgstr "Domínio criado"
723
716
 
724
- #: admin/models/mailbox.py:308
717
+ #: admin/models/mailbox.py:310
725
718
  msgid "Domain does not exist"
726
719
  msgstr "O domínio não existe"
727
720
 
@@ -782,7 +775,8 @@ msgstr "Geral"
782
775
 
783
776
  #: autoreply/app_settings.py:18
784
777
  #, fuzzy
785
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
778
+ #| msgid ""
779
+ #| "Timeout in seconds between two auto-replies to the same recipient"
786
780
  msgid "Period between two auto-replies"
787
781
  msgstr ""
788
782
  "Tempo limite em segundos entre duas respostas automáticas para o mesmo "
@@ -790,7 +784,8 @@ msgstr ""
790
784
 
791
785
  #: autoreply/app_settings.py:20
792
786
  #, fuzzy
793
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
787
+ #| msgid ""
788
+ #| "Timeout in seconds between two auto-replies to the same recipient"
794
789
  msgid ""
795
790
  "Number of days to wait before sending a new auto-reply to the same recipient"
796
791
  msgstr ""
@@ -897,7 +892,7 @@ msgid ""
897
892
  "Maximum size in bytes of imported ICS files (or KB, MB, GB if specified)"
898
893
  msgstr ""
899
894
 
900
- #: calendars/app_settings.py:89 core/api/v2/viewsets.py:172
895
+ #: calendars/app_settings.py:89 core/api/v2/viewsets.py:195
901
896
  msgid "Calendars"
902
897
  msgstr ""
903
898
 
@@ -935,7 +930,7 @@ msgstr "Definições do serviço de directório"
935
930
  msgid "Interval in seconds between 2 synchronization requests"
936
931
  msgstr ""
937
932
 
938
- #: contacts/app_settings.py:51 core/api/v2/viewsets.py:179
933
+ #: contacts/app_settings.py:51 core/api/v2/viewsets.py:185
939
934
  #, fuzzy
940
935
  #| msgid "Domains"
941
936
  msgid "Contacts"
@@ -989,12 +984,12 @@ msgstr "Linha inválida"
989
984
  msgid "2FA is already enabled"
990
985
  msgstr ""
991
986
 
992
- #: core/api/v1/serializers.py:87
987
+ #: core/api/v1/serializers.py:86
993
988
  #, python-format
994
- msgid "Failed TFA settings editing attempt from '%s' as user '%s'"
989
+ msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
995
990
  msgstr ""
996
991
 
997
- #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:425
992
+ #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:445
998
993
  #, fuzzy
999
994
  #| msgid "Old password"
1000
995
  msgid "Invalid password"
@@ -1008,46 +1003,47 @@ msgstr ""
1008
1003
  msgid "Local"
1009
1004
  msgstr "Local"
1010
1005
 
1011
- #: core/api/v2/serializers.py:175 core/app_settings.py:17
1006
+ #: core/api/v2/serializers.py:194 core/app_settings.py:17
1012
1007
  #, fuzzy
1013
1008
  #| msgid "Profile"
1014
1009
  msgid "User profile"
1015
1010
  msgstr "Perfil"
1016
1011
 
1017
- #: core/api/v2/serializers.py:194 core/api/v2/serializers.py:201
1018
- #: core/api/v2/serializers.py:208
1012
+ #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
1013
+ #: core/api/v2/serializers.py:228
1019
1014
  msgid "Invalid syntax"
1020
1015
  msgstr "Sintax inválida"
1021
1016
 
1022
- #: core/api/v2/serializers.py:213
1017
+ #: core/api/v2/serializers.py:233
1023
1018
  msgid "Invalid rounds number"
1024
1019
  msgstr "Número de linhas inválido"
1025
1020
 
1026
- #: core/api/v2/serializers.py:413 core/forms.py:81
1021
+ #: core/api/v2/serializers.py:433 core/forms.py:81
1027
1022
  msgid "This code is invalid"
1028
1023
  msgstr ""
1029
1024
 
1030
- #: core/api/v2/serializers.py:483 core/views/auth.py:194 core/views/auth.py:247
1025
+ #: core/api/v2/serializers.py:503 core/views/auth.py:194
1026
+ #: core/views/auth.py:247
1031
1027
  msgid "Please use the following code to recover your Modoboa password: {}"
1032
1028
  msgstr ""
1033
1029
 
1034
- #: core/api/v2/viewsets.py:164
1030
+ #: core/api/v2/viewsets.py:176
1035
1031
  #, fuzzy
1036
1032
  #| msgid "Administration"
1037
1033
  msgid "Administration console"
1038
1034
  msgstr "Administração"
1039
1035
 
1040
- #: core/api/v2/viewsets.py:174
1041
- msgid "Calendar"
1042
- msgstr ""
1043
-
1044
- #: core/api/v2/viewsets.py:181
1036
+ #: core/api/v2/viewsets.py:187
1045
1037
  #, fuzzy
1046
1038
  #| msgid "Address"
1047
1039
  msgid "Address book"
1048
1040
  msgstr "Endereço"
1049
1041
 
1050
- #: core/api/v2/viewsets.py:186 core/api/v2/viewsets.py:188
1042
+ #: core/api/v2/viewsets.py:197
1043
+ msgid "Calendar"
1044
+ msgstr ""
1045
+
1046
+ #: core/api/v2/viewsets.py:205 core/api/v2/viewsets.py:207
1051
1047
  #: webmail/app_settings.py:258 webmail/app_settings.py:265
1052
1048
  #, fuzzy
1053
1049
  #| msgid "E-mail"
@@ -1241,8 +1237,8 @@ msgstr "Grupos de Administrador"
1241
1237
 
1242
1238
  #: core/app_settings.py:239
1243
1239
  msgid ""
1244
- "Members of those LDAP Posix groups will be created as domain administrators. "
1245
- "Use ';' characters to separate groups."
1240
+ "Members of those LDAP Posix groups will be created as domain administrators."
1241
+ " Use ';' characters to separate groups."
1246
1242
  msgstr ""
1247
1243
  "Os membros destes grupos \"LDAP Posix\" serão criados como administradores "
1248
1244
  "de domínio. Use ';' para separar os grupos."
@@ -1305,8 +1301,7 @@ msgstr "Password para bind"
1305
1301
 
1306
1302
  #: core/app_settings.py:307 core/app_settings.py:369
1307
1303
  msgid "The password to use when binding to the LDAP server (with 'Bind DN')"
1308
- msgstr ""
1309
- "A password usada para fazer o \"bind\" ao servidor LDAP (com 'Bind DN')"
1304
+ msgstr "A password usada para fazer o \"bind\" ao servidor LDAP (com 'Bind DN')"
1310
1305
 
1311
1306
  #: core/app_settings.py:317 core/app_settings.py:422
1312
1307
  msgid "Users search base"
@@ -1565,8 +1560,8 @@ msgstr ""
1565
1560
 
1566
1561
  #: core/app_settings.py:686
1567
1562
  msgid ""
1568
- "Allow the administrator to set a threshold (in days) beyond which an account "
1569
- "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"
1570
1565
  msgstr ""
1571
1566
 
1572
1567
  #: core/app_settings.py:695
@@ -1575,8 +1570,8 @@ msgstr ""
1575
1570
 
1576
1571
  #: core/app_settings.py:698
1577
1572
  msgid ""
1578
- "An account with a last login date greater than this threshold (in days) will "
1579
- "be considered as inactive"
1573
+ "An account with a last login date greater than this threshold (in days) will"
1574
+ " be considered as inactive"
1580
1575
  msgstr ""
1581
1576
 
1582
1577
  #: core/app_settings.py:707
@@ -1597,19 +1592,27 @@ msgstr "Idade máxima do registo no log"
1597
1592
  msgid "The maximum age in days of a log record"
1598
1593
  msgstr "A idade maxima do registo de um log, em dias, e de"
1599
1594
 
1600
- #: 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
1601
1604
  msgid "Items per page"
1602
1605
  msgstr "Itens por página"
1603
1606
 
1604
- #: core/app_settings.py:728
1607
+ #: core/app_settings.py:739
1605
1608
  msgid "Number of displayed items per page"
1606
1609
  msgstr "Número de itens apresentados por página"
1607
1610
 
1608
- #: core/app_settings.py:735
1611
+ #: core/app_settings.py:746
1609
1612
  msgid "Default top redirection"
1610
1613
  msgstr "Redirecionamento pré-definido"
1611
1614
 
1612
- #: core/app_settings.py:737
1615
+ #: core/app_settings.py:748
1613
1616
  msgid "The default redirection used when no application is specified"
1614
1617
  msgstr ""
1615
1618
  "O redirecionamento padrão usado quando nenhuma aplicação se encontra "
@@ -1644,8 +1647,9 @@ msgstr ""
1644
1647
 
1645
1648
  #: core/checks.py:34
1646
1649
  msgid ""
1647
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot."
1648
- "html#dovecot-oauth2"
1650
+ "Visit : "
1651
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot.html#dovecot-"
1652
+ "oauth2"
1649
1653
  msgstr ""
1650
1654
 
1651
1655
  #: core/checks.py:41
@@ -1656,8 +1660,9 @@ msgstr ""
1656
1660
 
1657
1661
  #: core/checks.py:45
1658
1662
  msgid ""
1659
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/"
1660
- "radicale.html#radicale-oauth2"
1663
+ "Visit : "
1664
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/radicale.html#radicale-"
1665
+ "oauth2"
1661
1666
  msgstr ""
1662
1667
 
1663
1668
  #: core/constants.py:6
@@ -1825,8 +1830,8 @@ msgstr "O simple utilizador '%s' deve ter endereço de e-mail válido"
1825
1830
  #| msgid "username and email fields must not differ for '%s'"
1826
1831
  msgid "username and email fields must not differ for '{}'"
1827
1832
  msgstr ""
1828
- "Os campos nome de utilizador e endereço de email não deve ser diferente para "
1829
- "'%s'"
1833
+ "Os campos nome de utilizador e endereço de email não deve ser diferente para"
1834
+ " '%s'"
1830
1835
 
1831
1836
  #: core/password_validation.py:25
1832
1837
  msgid "Password must contain at least {} digit."
@@ -1982,7 +1987,7 @@ msgstr "Nenhum"
1982
1987
  #, fuzzy
1983
1988
  #| msgid "Quantity"
1984
1989
  msgid "Quarantine"
1985
- msgstr "Quantidade"
1990
+ msgstr "Quarentena"
1986
1991
 
1987
1992
  #: dmarc/models.py:12
1988
1993
  #, fuzzy
@@ -2171,20 +2176,14 @@ msgstr ""
2171
2176
  #: imap_migration/app_settings.py:76
2172
2177
  msgid ""
2173
2178
  "A comma seperated list of folders to explicitly include in sync even if "
2174
- "filtered by the Folder Filter Exclusions. Example: debian.user, debian."
2175
- "personal "
2179
+ "filtered by the Folder Filter Exclusions. Example: debian.user, "
2180
+ "debian.personal "
2176
2181
  msgstr ""
2177
2182
 
2178
2183
  #: imap_migration/apps.py:20
2179
2184
  msgid "IMAP Migration"
2180
2185
  msgstr ""
2181
2186
 
2182
- #: imap_migration/auth_backends.py:49 webmail/lib/imaputils.py:240
2183
- #, fuzzy, python-brace-format
2184
- #| msgid "Connection to IMAP server failed: %s"
2185
- msgid "Connection to IMAP server failed: {error}"
2186
- msgstr "Ligação ao servidor IMAP falhou : %s"
2187
-
2188
2187
  #: imap_migration/checks.py:12
2189
2188
  msgid ""
2190
2189
  "Automatic domain/mailbox creation is disabled which means IMAP "
@@ -2293,10 +2292,11 @@ msgstr "Aliases de domínio"
2293
2292
 
2294
2293
  #: limits/app_settings.py:52
2295
2294
  #, fuzzy
2296
- #| msgid "Maximum number of allowed domain aliases for a new administrator"
2295
+ #| msgid ""
2296
+ #| "Maximum number of allowed domain aliases for a new administrator"
2297
2297
  msgid ""
2298
- "Maximum number of allowed domain aliases for a new administrator. (0 to deny "
2299
- "any creation, -1 to allow unlimited creations)"
2298
+ "Maximum number of allowed domain aliases for a new administrator. (0 to deny"
2299
+ " any creation, -1 to allow unlimited creations)"
2300
2300
  msgstr ""
2301
2301
  "Número máximo permitido de aliases de domínio para um novo administrador"
2302
2302
 
@@ -2350,15 +2350,16 @@ msgstr ""
2350
2350
  #| msgid ""
2351
2351
  #| "Maximum number of allowed domain administrators for a new administrator"
2352
2352
  msgid ""
2353
- "Maximum number of allowed domain administrators for a new domain. (0 to deny "
2354
- "any creation, -1 to allow unlimited creations)"
2353
+ "Maximum number of allowed domain administrators for a new domain. (0 to deny"
2354
+ " any creation, -1 to allow unlimited creations)"
2355
2355
  msgstr ""
2356
2356
  "Número máximo permitido de administradores de domínio para um novo "
2357
2357
  "administrador"
2358
2358
 
2359
2359
  #: limits/app_settings.py:126
2360
2360
  #, fuzzy
2361
- #| msgid "Maximum number of allowed domain aliases for a new administrator"
2361
+ #| msgid ""
2362
+ #| "Maximum number of allowed domain aliases for a new administrator"
2362
2363
  msgid ""
2363
2364
  "Maximum number of allowed domain aliases for a new domain. (0 to deny any "
2364
2365
  "creation, -1 to allow unlimited creations)"
@@ -2377,8 +2378,8 @@ msgstr "Número máximo permitido de caixas de correio para novo administrador"
2377
2378
  #, fuzzy
2378
2379
  #| msgid "Maximum number of allowed aliases for a new administrator"
2379
2380
  msgid ""
2380
- "Maximum number of allowed aliases for a new domain. (0 to deny any creation, "
2381
- "-1 to allow unlimited creations)"
2381
+ "Maximum number of allowed aliases for a new domain. (0 to deny any creation,"
2382
+ " -1 to allow unlimited creations)"
2382
2383
  msgstr "Número máximo de aliases permitidas para um novo administrador"
2383
2384
 
2384
2385
  #: limits/apps.py:16
@@ -2400,7 +2401,8 @@ msgstr "Número máximo de caixas de correio que este utilizador por criar"
2400
2401
  #: limits/constants.py:40
2401
2402
  msgid "Maximum number of mailbox aliases this user can create"
2402
2403
  msgstr ""
2403
- "Número máximo de aliases para caixas de correio que este utilizador por criar"
2404
+ "Número máximo de aliases para caixas de correio que este utilizador por "
2405
+ "criar"
2404
2406
 
2405
2407
  #: limits/constants.py:49
2406
2408
  msgid "Maximum number of domain administrators this user can create"
@@ -2428,7 +2430,8 @@ msgstr "Número máximo de caixas de correio que este utilizador por criar"
2428
2430
  #| msgid "Maximum number of mailbox aliases this user can create"
2429
2431
  msgid "Maximum number of mailbox aliases allowed for this domain."
2430
2432
  msgstr ""
2431
- "Número máximo de aliases para caixas de correio que este utilizador por criar"
2433
+ "Número máximo de aliases para caixas de correio que este utilizador por "
2434
+ "criar"
2432
2435
 
2433
2436
  #: limits/constants.py:102
2434
2437
  #, fuzzy
@@ -2562,13 +2565,13 @@ msgstr ""
2562
2565
  msgid "Personal account information"
2563
2566
  msgstr ""
2564
2567
 
2565
- #: pdfcredentials/api/v2/serializers.py:81
2568
+ #: pdfcredentials/api/v2/serializers.py:86
2566
2569
  #, fuzzy
2567
2570
  #| msgid "Domain modified"
2568
2571
  msgid "Directory is not writable"
2569
2572
  msgstr "Domínio alterado"
2570
2573
 
2571
- #: pdfcredentials/api/v2/serializers.py:102
2574
+ #: pdfcredentials/api/v2/serializers.py:114
2572
2575
  msgid "No document available for this user"
2573
2576
  msgstr ""
2574
2577
 
@@ -2838,8 +2841,8 @@ msgstr ""
2838
2841
 
2839
2842
  #: rspamd/app_settings.py:21
2840
2843
  msgid ""
2841
- "Absolute path of the file which contains paths to DKIM private keys. Must be "
2842
- "readable by _rspamd group or user."
2844
+ "Absolute path of the file which contains paths to DKIM private keys. Must be"
2845
+ " readable by _rspamd group or user."
2843
2846
  msgstr ""
2844
2847
 
2845
2848
  #: rspamd/app_settings.py:30
@@ -2858,8 +2861,8 @@ msgstr ""
2858
2861
 
2859
2862
  #: rspamd/app_settings.py:53
2860
2863
  msgid ""
2861
- "Location of the rspamd dashboard. Can either be a relative URL (eg. '/"
2862
- "rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2864
+ "Location of the rspamd dashboard. Can either be a relative URL (eg. "
2865
+ "'/rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2863
2866
  "guidance on the Super-Admin dashboard."
2864
2867
  msgstr ""
2865
2868
 
@@ -3154,8 +3157,8 @@ msgstr "Password antiga"
3154
3157
 
3155
3158
  #: templates/registration/twofactor_code_verify.html:35
3156
3159
  msgid ""
3157
- "Enter the code from the two-factor app on your mobile device. If you've lost "
3158
- "your device, you may enter one of your recovery codes."
3160
+ "Enter the code from the two-factor app on your mobile device. If you've lost"
3161
+ " your device, you may enter one of your recovery codes."
3159
3162
  msgstr ""
3160
3163
 
3161
3164
  #: templates/registration/twofactor_code_verify.html:42
@@ -3350,16 +3353,32 @@ msgstr "Assinatura"
3350
3353
  msgid "User defined email signature"
3351
3354
  msgstr "Assinatura de email definida pelo utilizador"
3352
3355
 
3356
+ #: webmail/exceptions.py:18
3357
+ #, fuzzy
3358
+ #| msgid "Server address"
3359
+ msgid "Server response"
3360
+ msgstr "Endereço do Servidor"
3361
+
3353
3362
  #: webmail/lib/attachments.py:112
3354
3363
  #, fuzzy
3355
3364
  #| msgid "Failed to remove filter"
3356
3365
  msgid "Failed to remove attachment: "
3357
3366
  msgstr "Falha ao remover os anexos:"
3358
3367
 
3368
+ #: webmail/lib/imapemail.py:272
3369
+ msgid "wrote:"
3370
+ msgstr ""
3371
+
3359
3372
  #: webmail/lib/imapemail.py:306
3360
3373
  msgid "Date"
3361
3374
  msgstr "Data"
3362
3375
 
3376
+ #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3377
+ #, fuzzy
3378
+ #| msgid "sent messages"
3379
+ msgid "Original message"
3380
+ msgstr "Todas as mensagens"
3381
+
3363
3382
  #: webmail/lib/imaputils.py:221
3364
3383
  msgid "Failed to retrieve hierarchy delimiter"
3365
3384
  msgstr "Falha ao recuperar hierarquia delimitador"
@@ -3388,3 +3407,7 @@ msgstr ""
3388
3407
  #, python-format
3389
3408
  msgid "Attachment is too big (limit: %s)"
3390
3409
  msgstr "Anexo demasiado grande (limite %s)"
3410
+
3411
+ #, fuzzy, python-brace-format
3412
+ #~ msgid "Connection to IMAP server failed: {error}"
3413
+ #~ msgstr "Ligação ao servidor IMAP falhou : %s"