From 1cdd8d9ba8900dcd54bc7b6595f1ee8f25f12579 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 21 Sep 2025 16:32:21 -0700 Subject: [PATCH 1/4] Clarify repo maintenance rules --- .github/workflows/repo-maintenance.yml | 1 + CONTRIBUTING.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/repo-maintenance.yml b/.github/workflows/repo-maintenance.yml index 0cfc57938..ae473da37 100644 --- a/.github/workflows/repo-maintenance.yml +++ b/.github/workflows/repo-maintenance.yml @@ -241,6 +241,7 @@ jobs: ) { nodes { id, + createdAt, number, updatedAt, upvoteCount, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 24f563c7a..20d7bfd36 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -135,7 +135,7 @@ community members. That said, in an effort to keep the repository organized and - Issues, pull requests and discussions that are closed will be locked after 30 days of inactivity. - Discussions with a marked answer will be automatically closed. - Discussions in the 'General' or 'Support' categories will be closed after 180 days of inactivity. -- Feature requests that do not meet the following thresholds will be closed: 180 days of inactivity, < 5 "up-votes" after 180 days, < 20 "up-votes" after 1 year or < 80 "up-votes" at 2 years. +- Feature requests that do not meet the following thresholds will be closed: 180 days of inactivity with less than 80 "up-votes", < 5 "up-votes" after 180 days, < 20 "up-votes" after 1 year or < 40 "up-votes" at 2 years. In all cases, threads can be re-opened by project maintainers and, of course, users can always create a new discussion for related concerns. Finally, remember that all information remains searchable and 'closed' feature requests can still serve as inspiration for new features. From 19a54b3b23d3e7a8e00f322562a0b50f6b99d056 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Mon, 22 Sep 2025 11:17:42 -0700 Subject: [PATCH 2/4] Feature: processed mail UI (#10866) --- docs/usage.md | 4 + .../manage/mail/mail.component.html | 22 +- .../manage/mail/mail.component.spec.ts | 9 + .../components/manage/mail/mail.component.ts | 9 + .../processed-mail-dialog.component.html | 107 +++++++ .../processed-mail-dialog.component.scss | 8 + .../processed-mail-dialog.component.spec.ts | 150 +++++++++ .../processed-mail-dialog.component.ts | 96 ++++++ src-ui/src/app/data/processed-mail.ts | 12 + .../src/app/services/permissions.service.ts | 1 + .../rest/processed-mail.service.spec.ts | 39 +++ .../services/rest/processed-mail.service.ts | 19 ++ src-ui/src/main.ts | 4 + src/paperless/urls.py | 2 + src/paperless_mail/filters.py | 12 + src/paperless_mail/serialisers.py | 18 ++ src/paperless_mail/tests/test_api.py | 284 ++++++++++++++++++ src/paperless_mail/views.py | 36 +++ 18 files changed, 824 insertions(+), 8 deletions(-) create mode 100644 src-ui/src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.html create mode 100644 src-ui/src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.scss create mode 100644 src-ui/src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.spec.ts create mode 100644 src-ui/src/app/components/manage/mail/processed-mail-dialog/processed-mail-dialog.component.ts create mode 100644 src-ui/src/app/data/processed-mail.ts create mode 100644 src-ui/src/app/services/rest/processed-mail.service.spec.ts create mode 100644 src-ui/src/app/services/rest/processed-mail.service.ts create mode 100644 src/paperless_mail/filters.py diff --git a/docs/usage.md b/docs/usage.md index 94ef5ae1b..32441862d 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -261,6 +261,10 @@ different means. These are as follows: Paperless is set up to check your mails every 10 minutes. This can be configured via [`PAPERLESS_EMAIL_TASK_CRON`](configuration.md#PAPERLESS_EMAIL_TASK_CRON) +#### Processed Mail + +Paperless keeps track of emails it has processed in order to avoid processing the same mail multiple times. This uses the message `UID` provided by the mail server, which should be unique for each message. You can view and manage processed mails from the web UI under Mail > Processed Mails. If you need to re-process a message, you can delete the corresponding processed mail entry, which will allow Paperless-ngx to process the email again the next time the mail fetch task runs. + #### OAuth Email Setup Paperless-ngx supports OAuth2 authentication for Gmail and Outlook email accounts. To set up an email account with OAuth2, you will need to create a 'developer' app with the respective provider and obtain the client ID and client secret and set the appropriate [configuration variables](configuration.md#email_oauth). You will also need to set either [`PAPERLESS_OAUTH_CALLBACK_BASE_URL`](configuration.md#PAPERLESS_OAUTH_CALLBACK_BASE_URL) or [`PAPERLESS_URL`](configuration.md#PAPERLESS_URL) to the correct value for the OAuth2 flow to work correctly. diff --git a/src-ui/src/app/components/manage/mail/mail.component.html b/src-ui/src/app/components/manage/mail/mail.component.html index 16e8e88fb..97b2bf507 100644 --- a/src-ui/src/app/components/manage/mail/mail.component.html +++ b/src-ui/src/app/components/manage/mail/mail.component.html @@ -109,10 +109,11 @@