Skip to content

Commit 018d063

Browse files
authored
Bug/fix html mail (#146)
Set mail to html and include only articles of type web and note
1 parent 8c189c7 commit 018d063

File tree

4 files changed

+58
-16
lines changed

4 files changed

+58
-16
lines changed

ticketing-eventing/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,35 @@ flowchart LR
1212
## Components
1313

1414
- [eventing-service]: Takes Zammad webhook event via REST and forwards it to Apache Kafka
15+
16+
## Local development
17+
18+
For local testing:
19+
20+
- Run DbsTicketingEventingService
21+
- Run DbsTicketingEventingMailHandlerService
22+
23+
Open **Event-Service** via Swagger (http://localhost:8080/swagger-ui/index.html):
24+
- User: zammad
25+
- Password: password
26+
- Method: POST `/api/event`
27+
- X-Zammad-Trigger: `Trigger Name`
28+
- X-Zammad-Delivery: `myID`
29+
- Request Body:
30+
```json
31+
{
32+
"ticket": "3702",
33+
"status": "closed",
34+
"status_id": "1",
35+
"anliegenart": "technischer Bürgersupport",
36+
"lhmExtId": "33caabe6-317c-4c2d-8bf7-6c36230599db"
37+
}
38+
```
39+
40+
Open **Kafka** (http://localhost:8089/):\
41+
- Inspect: `Topics --> dbs-ticketing-event --> Messages`
42+
- Should see a new corresponding event
43+
44+
45+
Open **Mailpit** (http://localhost:8025/):
46+
- Should see a mail with the public articles of the ticket

ticketing-eventing/eventing-service/src/main/resources/application-local.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,4 @@ dbs:
3838
eventing:
3939
trigger-mapping:
4040
- trigger-name: "Trigger Name"
41-
action: "ticket_create"
41+
action: "state_changed"
Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package de.muenchen.oss.dbs.ticketing.eventing.mailhandler.adapter.out.mail;
22

33
import de.muenchen.oss.dbs.ticketing.eventing.mailhandler.application.port.out.SendMailOutPort;
4+
import jakarta.mail.MessagingException;
5+
import jakarta.mail.internet.MimeMessage;
46
import lombok.RequiredArgsConstructor;
5-
import org.springframework.mail.SimpleMailMessage;
67
import org.springframework.mail.javamail.JavaMailSender;
8+
import org.springframework.mail.javamail.MimeMessageHelper;
79
import org.springframework.stereotype.Service;
810

911
@Service
@@ -14,11 +16,16 @@ public class MailAdapter implements SendMailOutPort {
1416

1517
@Override
1618
public void sendMail(final String recipient, final String subject, final String body) {
17-
final SimpleMailMessage mail = new SimpleMailMessage();
18-
mail.setFrom(mailProperties.getFromAddress());
19-
mail.setTo(recipient);
20-
mail.setSubject(subject);
21-
mail.setText(body);
22-
mailSender.send(mail);
19+
final MimeMessage mimeMessage = mailSender.createMimeMessage();
20+
final MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, "utf-8");
21+
try {
22+
helper.setFrom(mailProperties.getFromAddress());
23+
helper.setTo(recipient);
24+
helper.setSubject(subject);
25+
helper.setText(body, true);
26+
mailSender.send(mimeMessage);
27+
} catch (MessagingException e) {
28+
throw new RuntimeException(e);
29+
}
2330
}
2431
}

ticketing-eventing/mail-handler-service/src/main/java/de/muenchen/oss/dbs/ticketing/eventing/mailhandler/application/usecase/EventHandlingUseCase.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,21 +49,23 @@ public void handleEvent(final Event event) {
4949
}
5050

5151
private boolean isRelevantEvent(final Event event) {
52+
log.debug("checking event: " + event);
5253
return
5354
// state was changed
5455
mailHandlerProperties.getStateChangeAction().equals(event.action()) &&
5556
// new state is closed
5657
mailHandlerProperties.getClosedState().equals(event.status()) &&
5758
// is relevant anliegen
58-
mailHandlerProperties.getRelevantTicketTypes().contains(event.anliegenart());
59+
mailHandlerProperties.getRelevantTicketTypes().contains(event.anliegenart()) &&
60+
// user does have an lhmExtId (i.e. BayernID or BundID user)
61+
event.lhmExtId() != null && !event.lhmExtId().isEmpty();
5962
}
6063

6164
private String buildSubject(final TicketInternal ticket, final Map<String, Object> form) {
6265
return "[%s;%s;%s;%s] Ihr Anliegen '%s' wurde abschließend bearbeitet"
6366
.formatted(
64-
// TODO
65-
"",
66-
"",
67+
form.get("legacyPostkorbHandle"),
68+
form.get("accountSource"),
6769
form.get("ticketingVertrauensniveau"),
6870
"Dummy",
6971
ticket.getTitle());
@@ -72,12 +74,13 @@ private String buildSubject(final TicketInternal ticket, final Map<String, Objec
7274
private String buildBody(final TicketInternal ticket) {
7375
assert ticket.getArticles() != null;
7476
return ticket.getArticles().stream()
75-
// only public articles
76-
.filter(i -> Boolean.FALSE.equals(i.getInternal()))
77+
// only public articles of type "web" or "note"
78+
.filter(i -> Boolean.FALSE.equals(i.getInternal()) &&
79+
(ArticleInternal.TypeEnum.WEB.equals(i.getType()) || ArticleInternal.TypeEnum.NOTE.equals(i.getType())))
7780
// format single article
78-
.map(i -> "Titel: %s%nBody: %s".formatted(i.getSubject(), i.getBody()))
81+
.map(i -> "Titel: %s<br>Body: %s".formatted(i.getSubject(), i.getBody()))
7982
// build body
80-
.collect(Collectors.joining("\n\n"));
83+
.collect(Collectors.joining("<hr>"));
8184

8285
}
8386

0 commit comments

Comments
 (0)