From e3b7240b975d0ad5948c6443204cf19bd95baa76 Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 20 Jan 2025 13:59:11 +0100 Subject: [PATCH 1/2] 1865: send pre verified application mail to contact person --- .../EakApplicationMutationService.kt | 1 + .../webservice/utils/ApplicationHandler.kt | 24 ++++++++++++++ .../app/ehrenamtskarte/backend/mail/Mailer.kt | 32 ++++++++++++++++++- 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/EakApplicationMutationService.kt b/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/EakApplicationMutationService.kt index af8715869..d8fecf9d7 100644 --- a/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/EakApplicationMutationService.kt +++ b/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/EakApplicationMutationService.kt @@ -41,6 +41,7 @@ class EakApplicationMutationService { if (isPreVerified) { applicationHandler.setApplicationVerificationToPreVerifiedNow(verificationEntities) + applicationHandler.sendPreVerifiedApplicationMails(applicationEntity, verificationEntities, dataFetcherResultBuilder) } else { applicationHandler.sendApplicationMails(applicationEntity, verificationEntities, dataFetcherResultBuilder) } diff --git a/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/utils/ApplicationHandler.kt b/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/utils/ApplicationHandler.kt index 00de6c7e5..c17b18918 100644 --- a/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/utils/ApplicationHandler.kt +++ b/backend/src/main/kotlin/app/ehrenamtskarte/backend/application/webservice/utils/ApplicationHandler.kt @@ -62,6 +62,30 @@ class ApplicationHandler( Mailer.sendNotificationForApplicationMails(project, backendConfig, projectConfig, regionId) } + fun sendPreVerifiedApplicationMails( + applicationEntity: ApplicationEntity, + verificationEntities: List, + dataFetcherResultBuilder: DataFetcherResult.Builder + ) { + val backendConfig = context.backendConfiguration + val projectConfig = backendConfig.projects.first { it.id == project } + + for (applicationVerification in verificationEntities) { + try { + Mailer.sendApplicationMailToContactPerson( + backendConfig, + projectConfig, + applicationVerification.contactName, + application.personalData, + applicationEntity.accessKey + ) + } catch (exception: MailNotSentException) { + dataFetcherResultBuilder.error(exception.toError()) + } + } + Mailer.sendNotificationForApplicationMails(project, backendConfig, projectConfig, regionId) + } + fun validateAttachmentTypes() { val allowedContentTypes = setOf("application/pdf", "image/png", "image/jpeg") val maxFileSizeBytes = 5 * 1000 * 1000 diff --git a/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt b/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt index 49c325c88..e4f6948c2 100644 --- a/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt +++ b/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt @@ -19,7 +19,7 @@ import java.nio.charset.StandardCharsets object Mailer { private const val DO_NOT_ANSWER_MESSAGE = - "Dies ist eine automatisierte Nachricht. Bitte antworten Sie nicht auf diese Email." + "Bitte beachten Sie, dass dies eine automatisierte Nachricht ist. Antworten auf diese E-Mail werden nicht gelesen." private fun EmailBody.adjustNotificationsParagraph(projectConfig: ProjectConfig) { p { @@ -212,6 +212,36 @@ object Mailer { ) } + fun sendApplicationMailToContactPerson( + backendConfig: BackendConfiguration, + projectConfig: ProjectConfig, + contactPerson: String, + personalData: PersonalData, + accessKey: String + ) { + val subject = "Antrag erfolgreich eingereicht" + val message = emailBody { + p { +"Sehr geehrte/r $contactPerson," } + p { +"Ihr Antrag auf die Bayerische Ehrenamtskarte für ${personalData.forenames.shortText} ${personalData.surname.shortText} wurde erfolgreich eingereicht." } + p { + +"Den aktuellen Status Ihres Antrags können sie jederzeit unter folgendem Link einsehen. Dort haben Sie auch die Möglichkeit, Ihren Antrag bei Bedarf zurückzuziehen:" + br() + link(URL("${projectConfig.administrationBaseUrl}/antrag-einsehen/${urlEncode(accessKey)}")) + } + p { +"Bei Rückfragen wenden Sie sich bitte direkt an Ihr zuständiges Landratsamt oder die Verwaltung Ihrer kreisfreien Stadt." } + p { +DO_NOT_ANSWER_MESSAGE } + p { +"- ${projectConfig.administrationName}" } + } + sendMail( + backendConfig, + projectConfig.smtp, + projectConfig.administrationName, + personalData.emailAddress.email, + subject, + message + ) + } + fun sendResetPasswordMail( backendConfig: BackendConfiguration, projectConfig: ProjectConfig, From aa4621fc103184ea8a9d81d2611dd45af111efba Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 22 Jan 2025 16:12:36 +0100 Subject: [PATCH 2/2] 1660: final information section --- .../app/ehrenamtskarte/backend/mail/Mailer.kt | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt b/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt index e4f6948c2..5e8832f52 100644 --- a/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt +++ b/backend/src/main/kotlin/app/ehrenamtskarte/backend/mail/Mailer.kt @@ -18,8 +18,16 @@ import java.net.URLEncoder import java.nio.charset.StandardCharsets object Mailer { - private const val DO_NOT_ANSWER_MESSAGE = - "Bitte beachten Sie, dass dies eine automatisierte Nachricht ist. Antworten auf diese E-Mail werden nicht gelesen." + private fun EmailBody.finalInformationParagraph(projectConfig: ProjectConfig) { + p { + +"Bitte beachten Sie, dass dies eine automatisierte Nachricht ist. Antworten auf diese E-Mail werden nicht gelesen." + br() + br() + +"Mit freundlichen Grüßen" + br() + +"- ${projectConfig.administrationName}" + } + } private fun EmailBody.adjustNotificationsParagraph(projectConfig: ProjectConfig) { p { @@ -98,8 +106,7 @@ object Mailer { p { +"ein neuer Antrag liegt in ${projectConfig.administrationName} vor." } viewApplicationsParagraph(projectConfig) adjustNotificationsParagraph(projectConfig) - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } for (recipient: AdministratorEntity in recipients) { @@ -129,8 +136,7 @@ object Mailer { p { +"ein Antrag wurde verifiziert." } viewApplicationsParagraph(projectConfig) adjustNotificationsParagraph(projectConfig) - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } for (recipient: AdministratorEntity in recipients) { @@ -169,8 +175,7 @@ object Mailer { br() link(verificationLink) } - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } sendMail( @@ -199,8 +204,7 @@ object Mailer { link(URL("${projectConfig.administrationBaseUrl}/antrag-einsehen/${urlEncode(accessKey)}")) } p { +"Bei Rückfragen zum Bearbeitungsstand wenden Sie sich bitte an Ihr örtliches Landratsamt bzw. die Verwaltung Ihrer kreisfreien Stadt." } - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } sendMail( backendConfig, @@ -229,8 +233,7 @@ object Mailer { link(URL("${projectConfig.administrationBaseUrl}/antrag-einsehen/${urlEncode(accessKey)}")) } p { +"Bei Rückfragen wenden Sie sich bitte direkt an Ihr zuständiges Landratsamt oder die Verwaltung Ihrer kreisfreien Stadt." } - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } sendMail( backendConfig, @@ -260,8 +263,7 @@ object Mailer { link(URL("${projectConfig.administrationBaseUrl}/reset-password?email=$encodedRecipient&token=$encodedResetKey")) } p { +"Dieser Link ist 24 Stunden gültig." } - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } sendMail( @@ -296,8 +298,7 @@ object Mailer { link(URL(passwordResetLink)) } p { +"Dieser Link ist 24 Stunden gültig." } - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } sendMail( @@ -334,8 +335,7 @@ object Mailer { +"Hinweis: Die Vorab-Aktivierung wird nicht von allen Endgeräten unterstützt. " +"Falls der Vorgang fehlschlägt, warten Sie bitte auf das offizielle Schreiben." } - p { +DO_NOT_ANSWER_MESSAGE } - p { +"- ${projectConfig.administrationName}" } + finalInformationParagraph(projectConfig) } sendMail(