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
@@ -26,18 +26,15 @@ msgid ""
26
26
  msgstr ""
27
27
  "Project-Id-Version: Modoboa\n"
28
28
  "Report-Msgid-Bugs-To: \n"
29
- "POT-Creation-Date: 2025-07-27 10:50+0200\n"
29
+ "POT-Creation-Date: 2025-08-28 09:41+0200\n"
30
30
  "PO-Revision-Date: 2011-07-01 08:15+0000\n"
31
- "Last-Translator: Rafael Barretto Alves <ch3yd@hotmail.com>, "
32
- "2013,2015-2017,2025\n"
33
- "Language-Team: Portuguese (Brazil) (http://app.transifex.com/tonio/modoboa/"
34
- "language/pt_BR/)\n"
31
+ "Last-Translator: Rafael Barretto Alves <ch3yd@hotmail.com>, 2013,2015-2017,2025\n"
32
+ "Language-Team: Portuguese (Brazil) (http://app.transifex.com/tonio/modoboa/language/pt_BR/)\n"
35
33
  "Language: pt_BR\n"
36
34
  "MIME-Version: 1.0\n"
37
35
  "Content-Type: text/plain; charset=UTF-8\n"
38
36
  "Content-Transfer-Encoding: 8bit\n"
39
- "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % "
40
- "1000000 == 0 ? 1 : 2;\n"
37
+ "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
41
38
 
42
39
  #: admin/api/v1/serializers.py:39
43
40
  msgid ""
@@ -53,69 +50,70 @@ msgstr ""
53
50
  "Cota padrão em MB aplicada para caixas de correio. Um valor 0 significa que "
54
51
  "não há cota."
55
52
 
56
- #: admin/api/v1/serializers.py:88
53
+ #: admin/api/v1/serializers.py:94
57
54
  #, fuzzy
58
55
  #| msgid "Alias with this name already exists"
59
56
  msgid "domain alias with this name already exists"
60
57
  msgstr "Já existe um apelido com este nome"
61
58
 
62
- #: admin/api/v1/serializers.py:98
59
+ #: admin/api/v1/serializers.py:104
63
60
  msgid "No authorized MX record found for this domain"
64
61
  msgstr "Nenhum registro MX autorizado encontrado para este domínio"
65
62
 
66
- #: admin/api/v1/serializers.py:116
63
+ #: admin/api/v1/serializers.py:122
67
64
  msgid "Cannot be greater than domain quota"
68
65
  msgstr "Não pode ser maior que a cota de domínio"
69
66
 
70
- #: admin/api/v1/serializers.py:162 admin/api/v1/serializers.py:357
71
- #: admin/api/v2/serializers.py:548 admin/models/alias.py:44
67
+ #: admin/api/v1/serializers.py:168 admin/api/v1/serializers.py:364
68
+ #: admin/api/v2/serializers.py:564 admin/models/alias.py:44
72
69
  msgid "Permission denied."
73
70
  msgstr "Permissão negada."
74
71
 
75
- #: admin/api/v1/serializers.py:224 admin/api/v2/serializers.py:88
76
- #: admin/api/v2/serializers.py:470 core/api/v2/serializers.py:235
77
- #: core/api/v2/serializers.py:237 core/api/v2/serializers.py:246
72
+ #: admin/api/v1/serializers.py:231 admin/api/v2/serializers.py:90
73
+ #: admin/api/v2/serializers.py:486 core/api/v2/serializers.py:255
74
+ #: core/api/v2/serializers.py:257 core/api/v2/serializers.py:266
78
75
  #: transport/backends.py:40
79
76
  msgid "This field is required"
80
77
  msgstr "Este campo é obrigatório"
81
78
 
82
- #: admin/api/v1/serializers.py:236
79
+ #: admin/api/v1/serializers.py:243
83
80
  msgid ""
84
81
  "List of administered domains (resellers and domain administrators only)."
85
82
  msgstr ""
86
83
  "Lista de domínios administrados (somente revendedores e administradores de "
87
84
  "domínio)."
88
85
 
89
- #: admin/api/v1/serializers.py:330 admin/api/v2/serializers.py:530
86
+ #: admin/api/v1/serializers.py:337 admin/api/v2/serializers.py:546
90
87
  msgid "Not allowed for this role."
91
88
  msgstr "Não é permitido para esta função."
92
89
 
93
- #: admin/api/v1/serializers.py:348
90
+ #: admin/api/v1/serializers.py:355
94
91
  msgid "Must be equal to mailbox full_address"
95
92
  msgstr "Deve ser igual a full_address de caixa de correio"
96
93
 
97
- #: admin/api/v1/serializers.py:390 admin/api/v2/serializers.py:582
94
+ #: admin/api/v1/serializers.py:397 admin/api/v2/serializers.py:598
98
95
  #: calendars/serializers.py:175 calendars/serializers.py:177
96
+ #: pdfcredentials/api/v2/serializers.py:91
99
97
  msgid "This field is required."
100
98
  msgstr "Este campo é obrigatório."
101
99
 
102
- #: admin/api/v1/serializers.py:402 admin/api/v2/serializers.py:599
100
+ #: admin/api/v1/serializers.py:409 admin/api/v2/serializers.py:615
103
101
  msgid "Local domain {} does not exist"
104
102
  msgstr "Domínio local {} não existe"
105
103
 
106
- #: admin/api/v1/serializers.py:492
104
+ #: admin/api/v1/serializers.py:499
107
105
  msgid "A list of recipient"
108
106
  msgstr "Uma lista de destinatários"
109
107
 
110
- #: admin/api/v1/serializers.py:508 admin/api/v2/viewsets.py:286
108
+ #: admin/api/v1/serializers.py:515 admin/api/v2/viewsets.py:286
111
109
  msgid "This alias already exists"
112
110
  msgstr "Este apelido já existe"
113
111
 
114
- #: admin/api/v1/serializers.py:544
112
+ #: admin/api/v1/serializers.py:551
115
113
  msgid "You don't have access to this domain."
116
114
  msgstr "Você não tem acesso a este domínio."
117
115
 
118
- #: admin/api/v1/serializers.py:553
116
+ #: admin/api/v1/serializers.py:560
119
117
  msgid "You don't have access to this mailbox."
120
118
  msgstr "Você não tem acesso a esta caixa de correio."
121
119
 
@@ -123,58 +121,58 @@ msgstr "Você não tem acesso a esta caixa de correio."
123
121
  msgid "Here is your new Modoboa password: {}"
124
122
  msgstr "Aqui está sua nova senha do Modoboa: {}"
125
123
 
126
- #: admin/api/v2/serializers.py:80
124
+ #: admin/api/v2/serializers.py:82
127
125
  msgid "DKIM keys storage directory not configured"
128
126
  msgstr "Diretório de armazenamento de chaves DKIM não configurado"
129
127
 
130
- #: admin/api/v2/serializers.py:92
128
+ #: admin/api/v2/serializers.py:94
131
129
  msgid "This field is valid when type is relaydomain"
132
130
  msgstr ""
133
131
 
134
- #: admin/api/v2/serializers.py:99
132
+ #: admin/api/v2/serializers.py:101
135
133
  msgid "You can't define an unlimited quota."
136
134
  msgstr "Você não pode definir uma cota ilimitada."
137
135
 
138
- #: admin/api/v2/serializers.py:133
136
+ #: admin/api/v2/serializers.py:135
139
137
  #, python-format
140
138
  msgid "User '%s' already exists"
141
139
  msgstr "O usuário '%s' já existe"
142
140
 
143
- #: admin/api/v2/serializers.py:248 admin/api/v2/serializers.py:254
141
+ #: admin/api/v2/serializers.py:250 admin/api/v2/serializers.py:256
144
142
  msgid "Must be a positive integer"
145
143
  msgstr "Deve ser um inteiro positivo"
146
144
 
147
- #: admin/api/v2/serializers.py:263
145
+ #: admin/api/v2/serializers.py:265
148
146
  msgid "openssl not found, please make sure it is installed."
149
147
  msgstr "openssl não encontrado, certifique-se que está instalado."
150
148
 
151
- #: admin/api/v2/serializers.py:266 pdfcredentials/api/v2/serializers.py:79
149
+ #: admin/api/v2/serializers.py:268 pdfcredentials/api/v2/serializers.py:84
152
150
  msgid "Directory not found."
153
151
  msgstr "Diretório não encontrado."
154
152
 
155
- #: admin/api/v2/serializers.py:277
153
+ #: admin/api/v2/serializers.py:279
156
154
  msgid "This field only allows valid IP addresses (or networks)"
157
155
  msgstr "Este campo permite apenas endereços IP válidos (ou redes)"
158
156
 
159
- #: admin/api/v2/serializers.py:290
157
+ #: admin/api/v2/serializers.py:292
160
158
  msgid "Please disable imap migration before disabling this option."
161
159
  msgstr "Desative a migração imap antes de desativar esta opção."
162
160
 
163
- #: admin/api/v2/serializers.py:303
161
+ #: admin/api/v2/serializers.py:305
164
162
  msgid "Define at least one authorized network / address"
165
163
  msgstr "Defina pelo menos uma rede/endereço autorizado"
166
164
 
167
- #: admin/api/v2/serializers.py:565
165
+ #: admin/api/v2/serializers.py:581
168
166
  msgid "The left part of an email address can't be more than 64 characters."
169
167
  msgstr ""
170
168
  "A parte à esquerda de um endereço de e-mail não pode ter mais de 64 "
171
169
  "caracteres."
172
170
 
173
- #: admin/api/v2/serializers.py:587
171
+ #: admin/api/v2/serializers.py:603
174
172
  msgid "A mailbox is required to create aliases."
175
173
  msgstr "Uma caixa de correio é necessária para criar apelidos."
176
174
 
177
- #: admin/api/v2/serializers.py:751
175
+ #: admin/api/v2/serializers.py:772
178
176
  msgid "Unknown status"
179
177
  msgstr "Status desconhecido"
180
178
 
@@ -186,14 +184,6 @@ msgstr "Você não tem acesso a este domínio"
186
184
  msgid "You can't delete your own domain"
187
185
  msgstr "Você não pode excluir seu próprio domínio"
188
186
 
189
- #: admin/api/v2/viewsets.py:407
190
- msgid "No alarm ID provided"
191
- msgstr "Nenhum ID de alarme fornecido"
192
-
193
- #: admin/api/v2/viewsets.py:411
194
- msgid "Received invalid alarm id(s)"
195
- msgstr "IDs de alarme inválidos recebidos"
196
-
197
187
  #: admin/app_settings.py:19 limits/app_settings.py:38 limits/constants.py:13
198
188
  msgid "Domains"
199
189
  msgstr "Domínios"
@@ -212,11 +202,11 @@ msgstr "MXs válidos"
212
202
 
213
203
  #: admin/app_settings.py:37
214
204
  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."
205
+ "A list of IP or network address every MX record should match. A warning will"
206
+ " be sent if a record does not respect it."
217
207
  msgstr ""
218
- "Uma lista de endereços IP ou de rede que cada registro MX deve corresponder. "
219
- "Um aviso será enviado se um registro não for respeitado."
208
+ "Uma lista de endereços IP ou de rede que cada registro MX deve corresponder."
209
+ " Um aviso será enviado se um registro não for respeitado."
220
210
 
221
211
  #: admin/app_settings.py:47
222
212
  msgid "New domains must use authorized MX(s)"
@@ -253,8 +243,8 @@ msgstr "Ativar verificações DKIM"
253
243
  #: admin/app_settings.py:80
254
244
  msgid "Check if every domain with DKIM signin enabled has a valid DNS record"
255
245
  msgstr ""
256
- "Verifique se todos os domínios com login DKIM habilitado têm um registro DNS "
257
- "válido"
246
+ "Verifique se todos os domínios com login DKIM habilitado têm um registro DNS"
247
+ " válido"
258
248
 
259
249
  #: admin/app_settings.py:88
260
250
  msgid "Enable DMARC checks"
@@ -302,8 +292,8 @@ msgid ""
302
292
  "world."
303
293
  msgstr ""
304
294
  "Caminho absoluto do diretório onde as chaves privadas DKIM serão "
305
- "armazenadas. Certifique-se que este diretório pertença ao usuário root e não "
306
- "seja legível pelo mundo exterior."
295
+ "armazenadas. Certifique-se que este diretório pertença ao usuário root e não"
296
+ " seja legível pelo mundo exterior."
307
297
 
308
298
  #: admin/app_settings.py:137
309
299
  msgid "Default DKIM key length"
@@ -363,8 +353,8 @@ msgid ""
363
353
  "Default mailbox quota (in MB) applied to freshly created domains with no "
364
354
  "value specified. A value of 0 means no quota."
365
355
  msgstr ""
366
- "Cota de caixa de correio padrão (em MB) aplicada para domínios recém-criados "
367
- "sem nenhum valor especificado. Um valor 0 significa que não há cota."
356
+ "Cota de caixa de correio padrão (em MB) aplicada para domínios recém-criados"
357
+ " sem nenhum valor especificado. Um valor 0 significa que não há cota."
368
358
 
369
359
  #: admin/app_settings.py:197
370
360
  msgid "Default mailbox sending limit"
@@ -392,7 +382,8 @@ msgid "Automatic domain/mailbox creation"
392
382
  msgstr "Criação automática de domínio/caixa de correio"
393
383
 
394
384
  #: admin/app_settings.py:221
395
- msgid "Create a domain and a mailbox when an account is automatically created."
385
+ msgid ""
386
+ "Create a domain and a mailbox when an account is automatically created."
396
387
  msgstr ""
397
388
  "Crie um domínio e uma caixa de correio quando uma conta for criada "
398
389
  "automaticamente."
@@ -407,7 +398,7 @@ msgstr ""
407
398
  "Crie um apelido usando o endereço antigo quando uma caixa de correio for "
408
399
  "renomeada."
409
400
 
410
- #: admin/app_settings.py:287 core/api/v2/viewsets.py:162
401
+ #: admin/app_settings.py:287 core/api/v2/viewsets.py:174
411
402
  msgid "Administration"
412
403
  msgstr "Administração"
413
404
 
@@ -436,7 +427,7 @@ msgstr "apelido de domínio"
436
427
  msgid "Account import failed (%s): domain does not exist"
437
428
  msgstr "Falha na importação da conta (%s): o domínio não existe"
438
429
 
439
- #: admin/handlers.py:242 admin/models/mailbox.py:340
430
+ #: admin/handlers.py:242 admin/models/mailbox.py:342
440
431
  msgid "Mailbox {} already exists"
441
432
  msgstr "A caixa de correio {} já existe"
442
433
 
@@ -702,7 +693,7 @@ msgstr "É necessária uma cota"
702
693
  msgid "{}: domain quota exceeded"
703
694
  msgstr "{}: cota de domínio excedida"
704
695
 
705
- #: admin/models/mailbox.py:308
696
+ #: admin/models/mailbox.py:310
706
697
  msgid "Domain does not exist"
707
698
  msgstr "O domínio não existe"
708
699
 
@@ -723,7 +714,8 @@ msgid ""
723
714
  msgstr ""
724
715
  "A reputação do domínio será afetada e há uma chance de que os e-mails "
725
716
  "provenientes dele sejam considerados spam. Você deve entrar em contato com "
726
- "esses provedores e pedir que eles retirem a lista de endereços IP detectados."
717
+ "esses provedores e pedir que eles retirem a lista de endereços IP "
718
+ "detectados."
727
719
 
728
720
  #: admin/templates/admin/notifications/domain_invalid_mx.html:3
729
721
  #, python-format
@@ -766,7 +758,8 @@ msgstr "Geral"
766
758
 
767
759
  #: autoreply/app_settings.py:18
768
760
  #, fuzzy
769
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
761
+ #| msgid ""
762
+ #| "Timeout in seconds between two auto-replies to the same recipient"
770
763
  msgid "Period between two auto-replies"
771
764
  msgstr ""
772
765
  "Tempo limite, em segundos, entre duas respostas automáticas para o mesmo "
@@ -774,7 +767,8 @@ msgstr ""
774
767
 
775
768
  #: autoreply/app_settings.py:20
776
769
  #, fuzzy
777
- #| msgid "Timeout in seconds between two auto-replies to the same recipient"
770
+ #| msgid ""
771
+ #| "Timeout in seconds between two auto-replies to the same recipient"
778
772
  msgid ""
779
773
  "Number of days to wait before sending a new auto-reply to the same recipient"
780
774
  msgstr ""
@@ -879,7 +873,7 @@ msgstr ""
879
873
  "Tamanho máximo em bytes dos arquivos ICS importados (ou KB, MB, GB se "
880
874
  "especificado)"
881
875
 
882
- #: calendars/app_settings.py:89 core/api/v2/viewsets.py:172
876
+ #: calendars/app_settings.py:89 core/api/v2/viewsets.py:195
883
877
  msgid "Calendars"
884
878
  msgstr "Calendários"
885
879
 
@@ -915,7 +909,7 @@ msgstr "Frequência de sincronização"
915
909
  msgid "Interval in seconds between 2 synchronization requests"
916
910
  msgstr "Intervalo, em segundos, entre 2 pedidos de sincronização"
917
911
 
918
- #: contacts/app_settings.py:51 core/api/v2/viewsets.py:179
912
+ #: contacts/app_settings.py:51 core/api/v2/viewsets.py:185
919
913
  msgid "Contacts"
920
914
  msgstr "Contatos"
921
915
 
@@ -963,14 +957,15 @@ msgstr "Código PIN inválido"
963
957
  msgid "2FA is already enabled"
964
958
  msgstr "2FA já está habilitado"
965
959
 
966
- #: core/api/v1/serializers.py:87
967
- #, python-format
968
- msgid "Failed TFA settings editing attempt from '%s' as user '%s'"
960
+ #: core/api/v1/serializers.py:86
961
+ #, fuzzy, python-format
962
+ #| msgid "Failed TFA settings editing attempt from '%s' as user '%s'"
963
+ msgid "Failed TFA settings editing attempt from '%(addr)s' as user '%(user)s'"
969
964
  msgstr ""
970
965
  "Falha na tentativa de edição de configurações do TFA de '%s' como usuário "
971
966
  "'%s'"
972
967
 
973
- #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:425
968
+ #: core/api/v1/serializers.py:91 core/api/v2/serializers.py:445
974
969
  msgid "Invalid password"
975
970
  msgstr "Senha inválida"
976
971
 
@@ -982,41 +977,42 @@ msgstr "2FA não está habilitado"
982
977
  msgid "Local"
983
978
  msgstr "Local"
984
979
 
985
- #: core/api/v2/serializers.py:175 core/app_settings.py:17
980
+ #: core/api/v2/serializers.py:194 core/app_settings.py:17
986
981
  msgid "User profile"
987
982
  msgstr "Perfil do usuário"
988
983
 
989
- #: core/api/v2/serializers.py:194 core/api/v2/serializers.py:201
990
- #: core/api/v2/serializers.py:208
984
+ #: core/api/v2/serializers.py:213 core/api/v2/serializers.py:221
985
+ #: core/api/v2/serializers.py:228
991
986
  msgid "Invalid syntax"
992
987
  msgstr "Sintaxe inválida"
993
988
 
994
- #: core/api/v2/serializers.py:213
989
+ #: core/api/v2/serializers.py:233
995
990
  msgid "Invalid rounds number"
996
991
  msgstr "Número de ciclos inválido"
997
992
 
998
- #: core/api/v2/serializers.py:413 core/forms.py:81
993
+ #: core/api/v2/serializers.py:433 core/forms.py:81
999
994
  msgid "This code is invalid"
1000
995
  msgstr "Este código é inválido"
1001
996
 
1002
- #: core/api/v2/serializers.py:483 core/views/auth.py:194 core/views/auth.py:247
997
+ #: core/api/v2/serializers.py:503 core/views/auth.py:194
998
+ #: core/views/auth.py:247
1003
999
  msgid "Please use the following code to recover your Modoboa password: {}"
1004
1000
  msgstr ""
1005
1001
  "Por favor, use o seguinte código para recuperar sua senha do Modoboa: {}"
1006
1002
 
1007
- #: core/api/v2/viewsets.py:164
1003
+ #: core/api/v2/viewsets.py:176
1008
1004
  msgid "Administration console"
1009
1005
  msgstr "Console de administração"
1010
1006
 
1011
- #: core/api/v2/viewsets.py:174
1012
- msgid "Calendar"
1013
- msgstr "Calendário"
1014
-
1015
- #: core/api/v2/viewsets.py:181
1007
+ #: core/api/v2/viewsets.py:187
1016
1008
  msgid "Address book"
1017
1009
  msgstr "Catálogo de endereço"
1018
1010
 
1019
- #: core/api/v2/viewsets.py:186 core/api/v2/viewsets.py:188
1011
+ #: core/api/v2/viewsets.py:197
1012
+ msgid "Calendar"
1013
+ msgstr "Calendário"
1014
+
1015
+ #: core/api/v2/viewsets.py:205 core/api/v2/viewsets.py:207
1020
1016
  #: webmail/app_settings.py:258 webmail/app_settings.py:265
1021
1017
  #, fuzzy
1022
1018
  #| msgid "E-mail"
@@ -1204,8 +1200,8 @@ msgstr "Grupos de administradores"
1204
1200
 
1205
1201
  #: core/app_settings.py:239
1206
1202
  msgid ""
1207
- "Members of those LDAP Posix groups will be created as domain administrators. "
1208
- "Use ';' characters to separate groups."
1203
+ "Members of those LDAP Posix groups will be created as domain administrators."
1204
+ " Use ';' characters to separate groups."
1209
1205
  msgstr ""
1210
1206
  "Membros dos grupos do LDAP Posix serão criados como administradores de "
1211
1207
  "domínio. Use o caractere ';' para separar grupos."
@@ -1255,8 +1251,8 @@ msgid ""
1255
1251
  "The distinguished name to use when binding to the LDAP server. Leave empty "
1256
1252
  "for an anonymous bind"
1257
1253
  msgstr ""
1258
- "O nome distinto para usar quando vincular ao servidor LDAP. Deixe vazio para "
1259
- "vincular anonimamente"
1254
+ "O nome distinto para usar quando vincular ao servidor LDAP. Deixe vazio para"
1255
+ " vincular anonimamente"
1260
1256
 
1261
1257
  #: core/app_settings.py:305 core/app_settings.py:367
1262
1258
  msgid "Bind password"
@@ -1296,8 +1292,8 @@ msgid ""
1296
1292
  "The template used to construct a user's DN. It should contain one "
1297
1293
  "placeholder (ie. %(user)s)"
1298
1294
  msgstr ""
1299
- "A template usada para construir um DN de usuário. Deve conter um placeholder "
1300
- "(por ex: %(user)s)"
1295
+ "A template usada para construir um DN de usuário. Deve conter um placeholder"
1296
+ " (por ex: %(user)s)"
1301
1297
 
1302
1298
  #: core/app_settings.py:350
1303
1299
  msgid "LDAP synchronization settings"
@@ -1311,8 +1307,8 @@ msgstr "Habilitar exportação para LDAP"
1311
1307
  msgid ""
1312
1308
  "Enable automatic synchronization between local database and LDAP directory"
1313
1309
  msgstr ""
1314
- "Ativar a sincronização automática entre o banco de dados local e o diretório "
1315
- "LDAP"
1310
+ "Ativar a sincronização automática entre o banco de dados local e o diretório"
1311
+ " LDAP"
1316
1312
 
1317
1313
  #: core/app_settings.py:389
1318
1314
  msgid "Delete remote LDAP account when local account is deleted"
@@ -1408,7 +1404,8 @@ msgstr ""
1408
1404
 
1409
1405
  #: core/app_settings.py:506
1410
1406
  #, fuzzy
1411
- #| msgid "Display custom RSS feed to resellers and domain administrators"
1407
+ #| msgid ""
1408
+ #| "Display custom RSS feed to resellers and domain administrators"
1412
1409
  msgid "Display custom RSS feed to super admins"
1413
1410
  msgstr ""
1414
1411
  "Mostrar um feed RSS personalizado para revendedores e administradores de "
@@ -1416,7 +1413,8 @@ msgstr ""
1416
1413
 
1417
1414
  #: core/app_settings.py:509
1418
1415
  #, fuzzy
1419
- #| msgid "Display custom RSS feed to resellers and domain administrators"
1416
+ #| msgid ""
1417
+ #| "Display custom RSS feed to resellers and domain administrators"
1420
1418
  msgid "Display custom RSS feed also to super administrators"
1421
1419
  msgstr ""
1422
1420
  "Mostrar um feed RSS personalizado para revendedores e administradores de "
@@ -1537,8 +1535,8 @@ msgstr "Ativar rastreamento de conta inativa"
1537
1535
 
1538
1536
  #: core/app_settings.py:686
1539
1537
  msgid ""
1540
- "Allow the administrator to set a threshold (in days) beyond which an account "
1541
- "is considered inactive if the user hasn't logged in"
1538
+ "Allow the administrator to set a threshold (in days) beyond which an account"
1539
+ " is considered inactive if the user hasn't logged in"
1542
1540
  msgstr ""
1543
1541
  "Permitir que o administrador defina um limite (em dias) além do qual uma "
1544
1542
  "conta é considerada inativa se o usuário não tiver feito login"
@@ -1549,8 +1547,8 @@ msgstr "Limite de conta inativa"
1549
1547
 
1550
1548
  #: core/app_settings.py:698
1551
1549
  msgid ""
1552
- "An account with a last login date greater than this threshold (in days) will "
1553
- "be considered as inactive"
1550
+ "An account with a last login date greater than this threshold (in days) will"
1551
+ " be considered as inactive"
1554
1552
  msgstr ""
1555
1553
  "Uma conta com uma data de login maior que este limite (em dias) será "
1556
1554
  "considerada como inativa"
@@ -1571,19 +1569,27 @@ msgstr "Idade máxima do registro de log"
1571
1569
  msgid "The maximum age in days of a log record"
1572
1570
  msgstr "A idade máxima em dias de um registro de log"
1573
1571
 
1574
- #: core/app_settings.py:726
1572
+ #: core/app_settings.py:727
1573
+ msgid "Retention time in message history"
1574
+ msgstr ""
1575
+
1576
+ #: core/app_settings.py:730
1577
+ msgid "Retention time (in days) of a message in the message history section"
1578
+ msgstr ""
1579
+
1580
+ #: core/app_settings.py:737
1575
1581
  msgid "Items per page"
1576
1582
  msgstr "Itens por página"
1577
1583
 
1578
- #: core/app_settings.py:728
1584
+ #: core/app_settings.py:739
1579
1585
  msgid "Number of displayed items per page"
1580
1586
  msgstr "Número de itens exibidos por página"
1581
1587
 
1582
- #: core/app_settings.py:735
1588
+ #: core/app_settings.py:746
1583
1589
  msgid "Default top redirection"
1584
1590
  msgstr "Redirecionamento de topo padrão"
1585
1591
 
1586
- #: core/app_settings.py:737
1592
+ #: core/app_settings.py:748
1587
1593
  msgid "The default redirection used when no application is specified"
1588
1594
  msgstr ""
1589
1595
  "O redirecionamento padrão usado quando nenhuma aplicação é especificada"
@@ -1618,8 +1624,9 @@ msgstr ""
1618
1624
 
1619
1625
  #: core/checks.py:34
1620
1626
  msgid ""
1621
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot."
1622
- "html#dovecot-oauth2"
1627
+ "Visit : "
1628
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/dovecot.html#dovecot-"
1629
+ "oauth2"
1623
1630
  msgstr ""
1624
1631
 
1625
1632
  #: core/checks.py:41
@@ -1630,8 +1637,9 @@ msgstr ""
1630
1637
 
1631
1638
  #: core/checks.py:45
1632
1639
  msgid ""
1633
- "Visit : https://modoboa.readthedocs.io/en/latest/manual_installation/"
1634
- "radicale.html#radicale-oauth2"
1640
+ "Visit : "
1641
+ "https://modoboa.readthedocs.io/en/latest/manual_installation/radicale.html#radicale-"
1642
+ "oauth2"
1635
1643
  msgstr ""
1636
1644
 
1637
1645
  #: core/constants.py:6
@@ -2119,8 +2127,8 @@ msgstr "Inclusões de Filtro de Pasta"
2119
2127
  #: imap_migration/app_settings.py:76
2120
2128
  msgid ""
2121
2129
  "A comma seperated list of folders to explicitly include in sync even if "
2122
- "filtered by the Folder Filter Exclusions. Example: debian.user, debian."
2123
- "personal "
2130
+ "filtered by the Folder Filter Exclusions. Example: debian.user, "
2131
+ "debian.personal "
2124
2132
  msgstr ""
2125
2133
  "Uma lista separada por vírgulas de pastas a serem incluídas explicitamente "
2126
2134
  "na sincronização, mesmo se filtradas pelas Exclusões de Filtro de Pasta. "
@@ -2130,12 +2138,6 @@ msgstr ""
2130
2138
  msgid "IMAP Migration"
2131
2139
  msgstr "Migração IMAP"
2132
2140
 
2133
- #: imap_migration/auth_backends.py:49 webmail/lib/imaputils.py:240
2134
- #, fuzzy, python-brace-format
2135
- #| msgid "Connection to IMAP server failed: %s"
2136
- msgid "Connection to IMAP server failed: {error}"
2137
- msgstr "Falha na conexão com o servidor IMAP: %s"
2138
-
2139
2141
  #: imap_migration/checks.py:12
2140
2142
  msgid ""
2141
2143
  "Automatic domain/mailbox creation is disabled which means IMAP "
@@ -2239,8 +2241,8 @@ msgstr "Apelidos de domínios"
2239
2241
 
2240
2242
  #: limits/app_settings.py:52
2241
2243
  msgid ""
2242
- "Maximum number of allowed domain aliases for a new administrator. (0 to deny "
2243
- "any creation, -1 to allow unlimited creations)"
2244
+ "Maximum number of allowed domain aliases for a new administrator. (0 to deny"
2245
+ " any creation, -1 to allow unlimited creations)"
2244
2246
  msgstr ""
2245
2247
  "Número máximo de apelidos de domínio permitidos para um novo administrador. "
2246
2248
  "(0 para negar qualquer criação, -1 para permitir criações ilimitadas)"
@@ -2250,8 +2252,8 @@ msgid ""
2250
2252
  "Maximum number of allowed mailboxes for a new administrator. (0 to deny any "
2251
2253
  "creation, -1 to allow unlimited creations)"
2252
2254
  msgstr ""
2253
- "Número máximo de caixas de correio permitidas para um novo administrador. (0 "
2254
- "para negar qualquer criação, -1 para permitir criações ilimitadas)"
2255
+ "Número máximo de caixas de correio permitidas para um novo administrador. (0"
2256
+ " para negar qualquer criação, -1 para permitir criações ilimitadas)"
2255
2257
 
2256
2258
  #: limits/app_settings.py:73 limits/app_settings.py:146 limits/constants.py:39
2257
2259
  #: limits/constants.py:92
@@ -2292,11 +2294,11 @@ msgstr "Habilitar ou desabilitar limites por domínio"
2292
2294
 
2293
2295
  #: limits/app_settings.py:114
2294
2296
  msgid ""
2295
- "Maximum number of allowed domain administrators for a new domain. (0 to deny "
2296
- "any creation, -1 to allow unlimited creations)"
2297
+ "Maximum number of allowed domain administrators for a new domain. (0 to deny"
2298
+ " any creation, -1 to allow unlimited creations)"
2297
2299
  msgstr ""
2298
- "Número máximo de administradores de domínio permitidos para um novo domínio. "
2299
- "(0 para negar qualquer criação, -1 para permitir criações ilimitadas)"
2300
+ "Número máximo de administradores de domínio permitidos para um novo domínio."
2301
+ " (0 para negar qualquer criação, -1 para permitir criações ilimitadas)"
2300
2302
 
2301
2303
  #: limits/app_settings.py:126
2302
2304
  msgid ""
@@ -2316,8 +2318,8 @@ msgstr ""
2316
2318
 
2317
2319
  #: limits/app_settings.py:149
2318
2320
  msgid ""
2319
- "Maximum number of allowed aliases for a new domain. (0 to deny any creation, "
2320
- "-1 to allow unlimited creations)"
2321
+ "Maximum number of allowed aliases for a new domain. (0 to deny any creation,"
2322
+ " -1 to allow unlimited creations)"
2321
2323
  msgstr ""
2322
2324
  "Número máximo de apelidos permitidos para um novo domínio. (0 para negar "
2323
2325
  "qualquer criação, -1 para permitir criações ilimitadas)"
@@ -2489,11 +2491,11 @@ msgstr "Contas"
2489
2491
  msgid "Personal account information"
2490
2492
  msgstr "Informações pessoais da conta"
2491
2493
 
2492
- #: pdfcredentials/api/v2/serializers.py:81
2494
+ #: pdfcredentials/api/v2/serializers.py:86
2493
2495
  msgid "Directory is not writable"
2494
2496
  msgstr "O diretório não é gravável"
2495
2497
 
2496
- #: pdfcredentials/api/v2/serializers.py:102
2498
+ #: pdfcredentials/api/v2/serializers.py:114
2497
2499
  msgid "No document available for this user"
2498
2500
  msgstr "Nenhum documento disponível para este usuário"
2499
2501
 
@@ -2543,8 +2545,9 @@ msgid ""
2543
2545
  "Generate a new document only when a new account is created. If set to no, a "
2544
2546
  "new document will be created each time a password is updated."
2545
2547
  msgstr ""
2546
- "Gere um novo documento somente quando uma nova conta for criada. Se definido "
2547
- "como não, um novo documento será criado sempre que uma senha for atualizada."
2548
+ "Gere um novo documento somente quando uma nova conta for criada. Se definido"
2549
+ " como não, um novo documento será criado sempre que uma senha for "
2550
+ "atualizada."
2548
2551
 
2549
2552
  #: pdfcredentials/app_settings.py:84
2550
2553
  msgid "Customization options"
@@ -2583,8 +2586,8 @@ msgid ""
2583
2586
  "Include required SMTP and IMAP connection information to configure a mail "
2584
2587
  "client, a tablet or a phone"
2585
2588
  msgstr ""
2586
- "Incluir as informações de conexão SMTP e IMAP necessárias para configurar um "
2587
- "cliente de e-mail, um tablet ou um telefone"
2589
+ "Incluir as informações de conexão SMTP e IMAP necessárias para configurar um"
2590
+ " cliente de e-mail, um tablet ou um telefone"
2588
2591
 
2589
2592
  #: pdfcredentials/app_settings.py:123 pdfcredentials/documents.py:133
2590
2593
  msgid "SMTP server address"
@@ -2670,8 +2673,7 @@ msgid ""
2670
2673
  "your contacts.\n"
2671
2674
  msgstr ""
2672
2675
  "\n"
2673
- "Aqui você pode visualizar online seus e-mails a qualquer momento, criar "
2674
- "filtros ou gerenciar\n"
2676
+ "Aqui você pode visualizar online seus e-mails a qualquer momento, criar filtros ou gerenciar\n"
2675
2677
  "seus contatos.\n"
2676
2678
 
2677
2679
  #: pdfcredentials/documents.py:126
@@ -2691,8 +2693,8 @@ msgid ""
2691
2693
  "Failed to create PDF_credentials directory. Please check the permissions or "
2692
2694
  "the path."
2693
2695
  msgstr ""
2694
- "Falha ao criar diretório PDF_credentials. Por favor, verifique as permissões "
2695
- "ou o caminho."
2696
+ "Falha ao criar diretório PDF_credentials. Por favor, verifique as permissões"
2697
+ " ou o caminho."
2696
2698
 
2697
2699
  #: pdfcredentials/handlers.py:64
2698
2700
  msgid "Download PDF credentials"
@@ -2775,8 +2777,8 @@ msgstr ""
2775
2777
 
2776
2778
  #: rspamd/app_settings.py:21
2777
2779
  msgid ""
2778
- "Absolute path of the file which contains paths to DKIM private keys. Must be "
2779
- "readable by _rspamd group or user."
2780
+ "Absolute path of the file which contains paths to DKIM private keys. Must be"
2781
+ " readable by _rspamd group or user."
2780
2782
  msgstr ""
2781
2783
 
2782
2784
  #: rspamd/app_settings.py:30
@@ -2795,8 +2797,8 @@ msgstr ""
2795
2797
 
2796
2798
  #: rspamd/app_settings.py:53
2797
2799
  msgid ""
2798
- "Location of the rspamd dashboard. Can either be a relative URL (eg. '/"
2799
- "rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2800
+ "Location of the rspamd dashboard. Can either be a relative URL (eg. "
2801
+ "'/rspamd') or a full URL (eg. 'https://rspamd.domain.tld/').Only use for "
2800
2802
  "guidance on the Super-Admin dashboard."
2801
2803
  msgstr ""
2802
2804
 
@@ -2859,7 +2861,7 @@ msgstr "Qualquer um dos seguintes"
2859
2861
 
2860
2862
  #: sievefilters/constants.py:12
2861
2863
  msgid "All messages"
2862
- msgstr "Todas as mensagens"
2864
+ msgstr "Todas mensagens"
2863
2865
 
2864
2866
  #: sievefilters/constants.py:16
2865
2867
  msgid "contains"
@@ -3021,8 +3023,8 @@ msgid ""
3021
3023
  "primary address, and check your spam folder.</p>"
3022
3024
  msgstr ""
3023
3025
  "<p>Enviamos instruções por e-mail para definir sua senha, se houver uma "
3024
- "conta com o e-mail que você digitou. Você deve recebê-lo em breve.</p> <p>Se "
3025
- "você não receber um e-mail, certifique-se de ter digitado seu endereço "
3026
+ "conta com o e-mail que você digitou. Você deve recebê-lo em breve.</p> <p>Se"
3027
+ " você não receber um e-mail, certifique-se de ter digitado seu endereço "
3026
3028
  "principal e verifique sua pasta de spam.</p>"
3027
3029
 
3028
3030
  #: templates/registration/password_reset_email.html:4
@@ -3041,8 +3043,8 @@ msgid ""
3041
3043
  "If clicking the link above doesn't work, please copy and paste the URL in a "
3042
3044
  "new browser window instead."
3043
3045
  msgstr ""
3044
- "Se clicar no link acima não funcionar, copie e cole a URL em uma nova janela "
3045
- "do navegador."
3046
+ "Se clicar no link acima não funcionar, copie e cole a URL em uma nova janela"
3047
+ " do navegador."
3046
3048
 
3047
3049
  #: templates/registration/password_reset_email.html:14
3048
3050
  #: templates/registration/password_reset_email_v2.html:14
@@ -3071,11 +3073,11 @@ msgstr "Senha de uso único"
3071
3073
 
3072
3074
  #: templates/registration/twofactor_code_verify.html:35
3073
3075
  msgid ""
3074
- "Enter the code from the two-factor app on your mobile device. If you've lost "
3075
- "your device, you may enter one of your recovery codes."
3076
+ "Enter the code from the two-factor app on your mobile device. If you've lost"
3077
+ " your device, you may enter one of your recovery codes."
3076
3078
  msgstr ""
3077
- "Digite o código do aplicativo de dois fatores em seu celular. Se você perdeu "
3078
- "seu dispositivo, pode digitar um de seus códigos de recuperação."
3079
+ "Digite o código do aplicativo de dois fatores em seu celular. Se você perdeu"
3080
+ " seu dispositivo, pode digitar um de seus códigos de recuperação."
3079
3081
 
3080
3082
  #: templates/registration/twofactor_code_verify.html:42
3081
3083
  msgid "Verify code"
@@ -3275,16 +3277,32 @@ msgstr "Texto da assinatura"
3275
3277
  msgid "User defined email signature"
3276
3278
  msgstr "Assinatura de e-mail definida pelo usuário"
3277
3279
 
3280
+ #: webmail/exceptions.py:18
3281
+ #, fuzzy
3282
+ #| msgid "Server address"
3283
+ msgid "Server response"
3284
+ msgstr "Endereço do servidor"
3285
+
3278
3286
  #: webmail/lib/attachments.py:112
3279
3287
  #, fuzzy
3280
3288
  #| msgid "Failed to create LDAP account: {}"
3281
3289
  msgid "Failed to remove attachment: "
3282
3290
  msgstr "Falha ao remover anexo:"
3283
3291
 
3292
+ #: webmail/lib/imapemail.py:272
3293
+ msgid "wrote:"
3294
+ msgstr ""
3295
+
3284
3296
  #: webmail/lib/imapemail.py:306
3285
3297
  msgid "Date"
3286
3298
  msgstr "Data"
3287
3299
 
3300
+ #: webmail/lib/imapemail.py:322 webmail/lib/imapemail.py:325
3301
+ #, fuzzy
3302
+ #| msgid "All messages"
3303
+ msgid "Original message"
3304
+ msgstr "Todas as mensagens"
3305
+
3288
3306
  #: webmail/lib/imaputils.py:221
3289
3307
  msgid "Failed to retrieve hierarchy delimiter"
3290
3308
  msgstr "Falha ao recuperar o delimitador de hierarquia"
@@ -3315,3 +3333,13 @@ msgstr ""
3315
3333
  #, python-format
3316
3334
  msgid "Attachment is too big (limit: %s)"
3317
3335
  msgstr "Anexo muito grande (limite: %s)"
3336
+
3337
+ #~ msgid "No alarm ID provided"
3338
+ #~ msgstr "Nenhum ID de alarme fornecido"
3339
+
3340
+ #~ msgid "Received invalid alarm id(s)"
3341
+ #~ msgstr "IDs de alarme inválidos recebidos"
3342
+
3343
+ #, fuzzy, python-brace-format
3344
+ #~ msgid "Connection to IMAP server failed: {error}"
3345
+ #~ msgstr "Falha na conexão com o servidor IMAP: %s"