feat: add configurable sender name and allow users to choose between system and personal SMTP accounts when sending emails
Build and Push Multi-Platform Images / build-and-push (push) Successful in 34s

This commit is contained in:
2026-05-06 20:49:09 +02:00
parent 8212f733ab
commit d19fd266c7
10 changed files with 72 additions and 5 deletions
@@ -1,6 +1,6 @@
import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { Button, Dropdown, Empty, Form, Input, Modal, Popconfirm, Space, Spin, Steps, Tag, Tooltip, Typography, message } from 'antd';
import { Button, Dropdown, Empty, Form, Input, Modal, Popconfirm, Select, Space, Spin, Steps, Tag, Tooltip, Typography, message } from 'antd';
import type { MenuProps } from 'antd';
import {
ArrowLeftOutlined,
@@ -26,7 +26,7 @@ import StarterKit from '@tiptap/starter-kit';
import Underline from '@tiptap/extension-underline';
import { inboxApi, type InboxBarcode, type InboxFile, type PostprocessActionResult } from '../api/inbox';
import { paperlessApi } from '../api/paperless';
import { userSettingsApi } from '../api/userSettings';
import { userSettingsApi, type SenderOption } from '../api/userSettings';
const ZOOM_MIN = 0.5;
const ZOOM_MAX = 3;
@@ -670,6 +670,8 @@ function SendEmailDialog({ open, fileId, fileName, documents, onClose }: SendEma
const [form] = Form.useForm();
const [submitting, setSubmitting] = useState(false);
const [filenames, setFilenames] = useState<string[]>([]);
const [senders, setSenders] = useState<SenderOption[]>([]);
const [selectedSender, setSelectedSender] = useState<string>('default');
const editor = useEditor({
extensions: [StarterKit, Underline],
@@ -690,6 +692,10 @@ function SendEmailDialog({ open, fileId, fileName, documents, onClose }: SendEma
}).catch(() => {
editor?.commands.clearContent();
});
userSettingsApi.getSenders().then((s) => {
setSenders(s);
setSelectedSender(s.length > 1 ? 'user' : 'default');
}).catch(() => setSenders([]));
}, [open, documents, fileName, form, editor]);
const handleOk = async () => {
@@ -705,6 +711,7 @@ function SendEmailDialog({ open, fileId, fileName, documents, onClose }: SendEma
pages: doc.pages,
filename: filenames[i] || fileName,
})),
sender: senders.length > 1 ? selectedSender : undefined,
});
message.success('E-Mail wurde gesendet');
onClose();
@@ -729,6 +736,15 @@ function SendEmailDialog({ open, fileId, fileName, documents, onClose }: SendEma
width={580}
>
<Form form={form} layout="vertical" style={{ marginTop: 16 }}>
{senders.length > 1 && (
<Form.Item label="Absender">
<Select
value={selectedSender}
onChange={setSelectedSender}
options={senders.map((s) => ({ value: s.id, label: s.label }))}
/>
</Form.Item>
)}
<Form.Item name="to" label="Empfänger" rules={[{ required: true, message: 'Bitte Empfänger angeben' }, { type: 'email', message: 'Ungültige E-Mail-Adresse' }]}>
<Input placeholder="empfaenger@beispiel.de" />
</Form.Item>