feat(mail-service): Port-Konflikt behoben, SMTP-Konfig optimiert und dynamisches Plus-Addressing eingefügt
Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
This commit is contained in:
parent
d0b756694b
commit
a5f5e7a24b
76
.env.example
76
.env.example
|
|
@ -159,6 +159,82 @@ PING_DEBUG=true
|
|||
PING_SERVICE_NAME=ping-service
|
||||
PING_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- MAIL-SERVICE ---
|
||||
MAIL_PORT=8083:8085
|
||||
MAIL_DEBUG_PORT=5014:5014
|
||||
MAIL_SERVER_PORT=8085
|
||||
MAIL_SPRING_PROFILES_ACTIVE=docker
|
||||
MAIL_DEBUG=true
|
||||
MAIL_SERVICE_NAME=mail-service
|
||||
MAIL_CONSUL_PREFER_IP=true
|
||||
MAIL_SMTP_HOST=smtp.world4you.com
|
||||
MAIL_SMTP_PORT=587
|
||||
MAIL_SMTP_USER=online-nennen@mo-code.at
|
||||
MAIL_SMTP_PASSWORD=<DEIN_WORLD4YOU_PASSWORT>
|
||||
MAIL_SMTP_AUTH=true
|
||||
MAIL_SMTP_STARTTLS=true
|
||||
|
||||
# --- MASTERDATA-SERVICE ---
|
||||
MASTERDATA_PORT=8086:8086
|
||||
MASTERDATA_DEBUG_PORT=5007:5007
|
||||
MASTERDATA_SERVER_PORT=8086
|
||||
MASTERDATA_SPRING_PROFILES_ACTIVE=docker
|
||||
MASTERDATA_DEBUG=true
|
||||
MASTERDATA_SERVICE_NAME=masterdata-service
|
||||
MASTERDATA_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- EVENTS-SERVICE ---
|
||||
EVENTS_PORT=8085:8085
|
||||
EVENTS_DEBUG_PORT=5008:5008
|
||||
EVENTS_SERVER_PORT=8085
|
||||
EVENTS_SPRING_PROFILES_ACTIVE=docker
|
||||
EVENTS_DEBUG=true
|
||||
EVENTS_SERVICE_NAME=events-service
|
||||
EVENTS_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- ZNS-IMPORT-SERVICE ---
|
||||
ZNS_IMPORT_PORT=8095:8095
|
||||
ZNS_IMPORT_DEBUG_PORT=5009:5009
|
||||
ZNS_IMPORT_SERVER_PORT=8095
|
||||
ZNS_IMPORT_SPRING_PROFILES_ACTIVE=docker
|
||||
ZNS_IMPORT_DEBUG=true
|
||||
ZNS_IMPORT_SERVICE_NAME=zns-import-service
|
||||
ZNS_IMPORT_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- RESULTS-SERVICE ---
|
||||
RESULTS_PORT=8088:8088
|
||||
RESULTS_DEBUG_PORT=5010:5010
|
||||
RESULTS_SERVER_PORT=8088
|
||||
RESULTS_SPRING_PROFILES_ACTIVE=docker
|
||||
RESULTS_DEBUG=true
|
||||
RESULTS_SERVICE_NAME=results-service
|
||||
RESULTS_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- BILLING-SERVICE ---
|
||||
BILLING_PORT=8087:8087
|
||||
BILLING_DEBUG_PORT=5012:5012
|
||||
BILLING_SERVER_PORT=8087
|
||||
BILLING_SPRING_PROFILES_ACTIVE=docker
|
||||
BILLING_DEBUG=true
|
||||
BILLING_SERVICE_NAME=billing-service
|
||||
BILLING_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- SCHEDULING-SERVICE ---
|
||||
SCHEDULING_PORT=8084:8084
|
||||
SCHEDULING_DEBUG_PORT=5013:5013
|
||||
SCHEDULING_SERVER_PORT=8084
|
||||
SCHEDULING_SPRING_PROFILES_ACTIVE=docker
|
||||
SCHEDULING_DEBUG=true
|
||||
SCHEDULING_SERVICE_NAME=scheduling-service
|
||||
SCHEDULING_CONSUL_PREFER_IP=true
|
||||
|
||||
# --- SERIES-SERVICE ---
|
||||
SERIES_PORT=8089:8089
|
||||
SERIES_DEBUG_PORT=5011:5011
|
||||
SERIES_SERVER_PORT=8089
|
||||
SERIES_SPRING_PROFILES_ACTIVE=docker
|
||||
SERIES_DEBUG=true
|
||||
|
||||
# --- WEB-APP ---
|
||||
WEB_APP_PORT=4000:4000
|
||||
# URL für API-Zugriffe vom Browser (Public URL via Pangolin)
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import jakarta.validation.Valid
|
|||
import jakarta.validation.constraints.Email
|
||||
import jakarta.validation.constraints.NotBlank
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.mail.SimpleMailMessage
|
||||
import org.springframework.mail.javamail.JavaMailSender
|
||||
import org.springframework.web.bind.annotation.*
|
||||
|
|
@ -45,6 +46,9 @@ class MailController(
|
|||
) {
|
||||
private val logger = LoggerFactory.getLogger(MailController::class.java)
|
||||
|
||||
@Value("\${spring.mail.username}")
|
||||
private lateinit var baseMailAddress: String
|
||||
|
||||
@PostMapping("/nennung")
|
||||
fun receiveNennung(@Valid @RequestBody request: NennungRequest) {
|
||||
logger.info("Nennung via API erhalten: ${request.vorname} ${request.nachname} für Turnier ${request.turnierNr}")
|
||||
|
|
@ -70,7 +74,16 @@ class MailController(
|
|||
// Bestätigung an Reiter senden
|
||||
try {
|
||||
val message = SimpleMailMessage()
|
||||
message.from = "online-nennen@mo-code.at"
|
||||
|
||||
// Dynamische Absenderadresse mit Plus-Addressing (z.B. online-nennen+26128@mo-code.at)
|
||||
val dynamicFrom = try {
|
||||
val (user, domain) = baseMailAddress.split("@")
|
||||
"$user+${request.turnierNr}@$domain"
|
||||
} catch (e: Exception) {
|
||||
baseMailAddress
|
||||
}
|
||||
|
||||
message.from = dynamicFrom
|
||||
message.setTo(request.email)
|
||||
message.subject = "Bestätigung: Ihre Online-Nennung für Turnier ${request.turnierNr}"
|
||||
message.text = """
|
||||
|
|
|
|||
|
|
@ -11,19 +11,12 @@ spring:
|
|||
ddl-auto: update
|
||||
show-sql: true
|
||||
mail:
|
||||
host: ${SPRING_MAIL_HOST:imap.world4you.com}
|
||||
port: ${SPRING_MAIL_PORT:993}
|
||||
host: ${SPRING_MAIL_HOST:smtp.world4you.com}
|
||||
port: ${SPRING_MAIL_PORT:587}
|
||||
username: ${SPRING_MAIL_USERNAME:online-nennen@mo-code.at}
|
||||
password: ${SPRING_MAIL_PASSWORD:}
|
||||
properties:
|
||||
mail:
|
||||
store:
|
||||
protocol: imaps
|
||||
imaps:
|
||||
host: ${SPRING_MAIL_HOST:imap.world4you.com}
|
||||
port: ${SPRING_MAIL_PORT:993}
|
||||
ssl:
|
||||
enable: true
|
||||
smtp:
|
||||
auth: ${SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH:true}
|
||||
starttls:
|
||||
|
|
|
|||
|
|
@ -559,7 +559,7 @@ services:
|
|||
container_name: "${PROJECT_NAME:-meldestelle}-mail-service"
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${MAIL_PORT:-8085:8085}"
|
||||
- "${MAIL_PORT:-8083:8085}"
|
||||
- "${MAIL_DEBUG_PORT:-5014:5014}"
|
||||
environment:
|
||||
SPRING_PROFILES_ACTIVE: "${MAIL_SPRING_PROFILES_ACTIVE:-docker}"
|
||||
|
|
@ -710,7 +710,7 @@ services:
|
|||
SPRING_PROFILES_ACTIVE: "${SERIES_SPRING_PROFILES_ACTIVE:-docker}"
|
||||
DEBUG: "${SERIES_DEBUG:-true}"
|
||||
SERVER_PORT: "${SERIES_SERVER_PORT:-8089}"
|
||||
SPRING_APPLICATION_NAME: "series-service"
|
||||
SPRING_APPLICATION_NAME: "${SERIES_SERVICE_NAME:-series-service}"
|
||||
|
||||
# --- KEYCLOAK ---
|
||||
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI: "${KC_ISSUER_URI:-http://keycloak:8080/realms/meldestelle}"
|
||||
|
|
|
|||
|
|
@ -8,10 +8,14 @@
|
|||
|
||||
## 👷 Durchgeführte Arbeiten (DevOps & Frontend)
|
||||
|
||||
1. **Infrastruktur (Docker):**
|
||||
1. **Infrastruktur (Docker & Mail):**
|
||||
- Dockerfile für `mail-service` erstellt.
|
||||
- `dc-backend.yaml` um den `mail-service` erweitert (inkl. Postgres-Link, Consul-Discovery und SMTP-Konfiguration).
|
||||
- `application.yaml` im `mail-service` für dynamische Konfiguration via Environment-Variablen fit gemacht.
|
||||
- Port-Kollision zwischen `events-service` und `mail-service` behoben (`mail-service` Host-Port auf 8083).
|
||||
- `.env` und `.env.example` (SSoT) umfassend für alle Microservices (Standard-Ports, Debug, SMTP) vervollständigt.
|
||||
- `application.yaml` im `mail-service` auf SMTP-Versand (World4You Standard) optimiert und IMAP-Reste entfernt.
|
||||
- **Plus-Addressing:** Backend-Logik im `MailController` implementiert, um Mails dynamisch als
|
||||
`online-nennen+[TurnierNr]@mo-code.at` zu versenden.
|
||||
2. **Frontend (Konfigurierbarkeit):**
|
||||
- Common `PlatformConfig` erweitert um `resolveMailServiceUrl`.
|
||||
- Implementierung für Wasm, JS und JVM hinzugefügt, um Backend-URLs zur Laufzeit steuern zu können (Wasm: via global
|
||||
|
|
|
|||
BIN
docs/ScreenShots/Cloudflare_Konfig_2026-04-15_12-07.png
Normal file
BIN
docs/ScreenShots/Cloudflare_Konfig_2026-04-15_12-07.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 78 KiB |
BIN
docs/ScreenShots/World4You-E-Mail-Konfig_2026-04-15_12-08.png
Normal file
BIN
docs/ScreenShots/World4You-E-Mail-Konfig_2026-04-15_12-08.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 59 KiB |
|
|
@ -28,7 +28,7 @@ actual object PlatformConfig {
|
|||
// 2) Try window location origin (same origin gateway/proxy setup)
|
||||
val origin = try {
|
||||
getOrigin()
|
||||
} catch (e: Throwable) {
|
||||
} catch (_: Throwable) {
|
||||
null
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user