Add test mail account

This commit is contained in:
shamoon
2023-03-24 01:17:20 -07:00
parent e0d5fd9290
commit 698208fcd5
9 changed files with 184 additions and 46 deletions

View File

@@ -29,6 +29,7 @@ from paperless.consumers import StatusConsumer
from paperless.views import FaviconView
from paperless.views import GroupViewSet
from paperless.views import UserViewSet
from paperless_mail.views import MailAccountTestView
from paperless_mail.views import MailAccountViewSet
from paperless_mail.views import MailRuleViewSet
from rest_framework.authtoken import views
@@ -102,6 +103,11 @@ urlpatterns = [
AcknowledgeTasksView.as_view(),
name="acknowledge_tasks",
),
re_path(
r"^mail_accounts/test/",
MailAccountTestView.as_view(),
name="mail_accounts_test",
),
path("token/", views.obtain_auth_token),
]
+ api_router.urls,

View File

@@ -1,10 +1,19 @@
import datetime
import logging
from django.http import HttpResponseBadRequest
from documents.views import PassUserMixin
from paperless.views import StandardPagination
from paperless_mail.mail import get_mailbox
from paperless_mail.mail import mailbox_login
from paperless_mail.mail import MailError
from paperless_mail.models import MailAccount
from paperless_mail.models import MailRule
from paperless_mail.serialisers import MailAccountSerializer
from paperless_mail.serialisers import MailRuleSerializer
from rest_framework.generics import GenericAPIView
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
@@ -24,3 +33,41 @@ class MailRuleViewSet(ModelViewSet, PassUserMixin):
serializer_class = MailRuleSerializer
pagination_class = StandardPagination
permission_classes = (IsAuthenticated,)
class MailAccountTestView(GenericAPIView):
permission_classes = (IsAuthenticated,)
serializer_class = MailAccountSerializer
def post(self, request, *args, **kwargs):
logger = logging.getLogger("paperless_mail")
request.data["name"] = datetime.datetime.now().isoformat()
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
# account exists, use the password from there instead of ***
if (
len(serializer.validated_data.get("password").replace("*", "")) == 0
and request.data["id"] is not None
):
serializer.validated_data["password"] = MailAccount.objects.get(
pk=request.data["id"],
).password
account = MailAccount(**serializer.validated_data)
with get_mailbox(
account.imap_server,
account.imap_port,
account.imap_security,
) as M:
try:
mailbox_login(M, account)
return Response({"success": True})
except MailError as e:
logger.error(
f"Mail account {account} test failed: {e}",
exc_info=False,
)
return HttpResponseBadRequest("Unable to connect to server")