Initial commit: mail-server with WebFlux backend and Angular v22 Synthwave frontend
Co-authored-by: Junie <junie@jetbrains.com>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
spring.application.name=mail-server
|
||||
|
||||
server.port=8080
|
||||
|
||||
# R2DBC — реактивный доступ к PostgreSQL
|
||||
spring.r2dbc.url=r2dbc:postgresql://localhost:5432/mailserver
|
||||
spring.r2dbc.username=mail
|
||||
spring.r2dbc.password=secret
|
||||
|
||||
# Flyway — миграции базы данных
|
||||
spring.flyway.enabled=true
|
||||
spring.flyway.url=jdbc:postgresql://localhost:5432/mailserver
|
||||
spring.flyway.user=mail
|
||||
spring.flyway.password=secret
|
||||
spring.flyway.locations=classpath:db/migration
|
||||
spring.flyway.baseline-on-migrate=true
|
||||
|
||||
# Вложения
|
||||
mailserver.attachments.dir=./attachments
|
||||
spring.webflux.multipart.max-file-size=10MB
|
||||
spring.webflux.multipart.max-request-size=10MB
|
||||
|
||||
# SMTP-сервер для приёма входящих писем
|
||||
mailserver.smtp.port=3025
|
||||
mailserver.smtp.hostname=your-domain.com
|
||||
|
||||
# IMAP-сервер (отключён)
|
||||
mailserver.imap.enabled=false
|
||||
mailserver.imap.port=1143
|
||||
mailserver.imap.hostname=localhost
|
||||
|
||||
# DKIM — криптографическая подпись писем
|
||||
mailserver.dkim.enabled=false
|
||||
mailserver.dkim.domain=your-domain.com
|
||||
mailserver.dkim.keys-dir=./dkim-keys
|
||||
|
||||
# SPF — проверка отправителей через DNS
|
||||
mailserver.spf.enabled=false
|
||||
mailserver.spf.local-bypass=true
|
||||
|
||||
# DMARC — политика обработки писем, не прошедших SPF/DKIM
|
||||
mailserver.dmarc.enabled=false
|
||||
mailserver.dmarc.local-bypass=true
|
||||
|
||||
# SMTP релей — доставка писем на внешнюю почту
|
||||
# Порт 25 — стандартный SMTP relay между серверами (VPS)
|
||||
mailserver.relay.enabled=true
|
||||
mailserver.relay.port=25
|
||||
mailserver.relay.starttls=false
|
||||
mailserver.relay.auth-enabled=false
|
||||
mailserver.relay.username=
|
||||
mailserver.relay.password=
|
||||
|
||||
logging.level.com.mailserver=INFO
|
||||
@@ -0,0 +1,54 @@
|
||||
spring.application.name=mail-server
|
||||
|
||||
server.port=8080
|
||||
|
||||
# R2DBC — реактивный доступ к PostgreSQL
|
||||
spring.r2dbc.url=r2dbc:postgresql://localhost:5432/mailserver
|
||||
spring.r2dbc.username=mail
|
||||
spring.r2dbc.password=secret
|
||||
|
||||
# Flyway — миграции базы данных
|
||||
spring.flyway.enabled=true
|
||||
spring.flyway.url=jdbc:postgresql://localhost:5432/mailserver
|
||||
spring.flyway.user=mail
|
||||
spring.flyway.password=secret
|
||||
spring.flyway.locations=classpath:db/migration
|
||||
spring.flyway.baseline-on-migrate=true
|
||||
|
||||
# Вложения
|
||||
mailserver.attachments.dir=./attachments
|
||||
spring.webflux.multipart.max-file-size=10MB
|
||||
spring.webflux.multipart.max-request-size=10MB
|
||||
|
||||
# SMTP-сервер для приёма входящих писем
|
||||
mailserver.smtp.port=3025
|
||||
mailserver.smtp.hostname=localhost
|
||||
|
||||
# IMAP-сервер для доступа к письмам
|
||||
mailserver.imap.enabled=false
|
||||
mailserver.imap.port=1143
|
||||
mailserver.imap.hostname=localhost
|
||||
|
||||
# DKIM — криптографическая подпись писем
|
||||
mailserver.dkim.enabled=false
|
||||
mailserver.dkim.domain=localhost
|
||||
mailserver.dkim.keys-dir=./dkim-keys
|
||||
|
||||
# SPF — проверка отправителей через DNS
|
||||
mailserver.spf.enabled=false
|
||||
mailserver.spf.local-bypass=true
|
||||
|
||||
# DMARC — политика обработки писем, не прошедших SPF/DKIM
|
||||
mailserver.dmarc.enabled=false
|
||||
mailserver.dmarc.local-bypass=true
|
||||
|
||||
# SMTP релей — доставка писем на внешнюю почту
|
||||
# Порт 587 — submission с STARTTLS (для отправки через SMTP-сервер)
|
||||
mailserver.relay.enabled=true
|
||||
mailserver.relay.port=587
|
||||
mailserver.relay.starttls=true
|
||||
mailserver.relay.auth-enabled=false
|
||||
mailserver.relay.username=
|
||||
mailserver.relay.password=
|
||||
|
||||
logging.level.com.mailserver=DEBUG
|
||||
@@ -0,0 +1,73 @@
|
||||
-- Таблица пользователей
|
||||
CREATE TABLE users (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255) NOT NULL,
|
||||
display_name VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Таблица папок
|
||||
CREATE TABLE folders (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name VARCHAR(50) NOT NULL,
|
||||
type VARCHAR(20) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Таблица писем
|
||||
CREATE TABLE messages (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
folder_id BIGINT NOT NULL REFERENCES folders(id) ON DELETE CASCADE,
|
||||
sender_email VARCHAR(255) NOT NULL,
|
||||
sender_name VARCHAR(255),
|
||||
recipient_email VARCHAR(255) NOT NULL,
|
||||
subject VARCHAR(1000),
|
||||
body TEXT,
|
||||
is_read BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
is_spam BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
message_size BIGINT,
|
||||
received_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Таблица вложений
|
||||
CREATE TABLE attachments (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
message_id BIGINT NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
||||
filename VARCHAR(255) NOT NULL,
|
||||
content_type VARCHAR(255),
|
||||
size_bytes BIGINT,
|
||||
file_path VARCHAR(500) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- Таблица чёрного списка
|
||||
CREATE TABLE blacklist (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
sender_email VARCHAR(255) NOT NULL,
|
||||
reason VARCHAR(255),
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (user_id, sender_email)
|
||||
);
|
||||
|
||||
-- Таблица контактов
|
||||
CREATE TABLE contacts (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
name VARCHAR(255) NOT NULL,
|
||||
email VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (user_id, email)
|
||||
);
|
||||
|
||||
-- Индексы для ускорения поиска
|
||||
CREATE INDEX idx_messages_folder_id ON messages(folder_id);
|
||||
CREATE INDEX idx_messages_received_at ON messages(received_at DESC);
|
||||
CREATE INDEX idx_messages_is_read ON messages(is_read);
|
||||
CREATE INDEX idx_messages_is_spam ON messages(is_spam);
|
||||
CREATE INDEX idx_folders_user_id ON folders(user_id);
|
||||
CREATE INDEX idx_attachments_message_id ON attachments(message_id);
|
||||
CREATE INDEX idx_blacklist_user_id ON blacklist(user_id);
|
||||
CREATE INDEX idx_contacts_user_id ON contacts(user_id);
|
||||
Reference in New Issue
Block a user