Я создаю почтовый сервис, в котором я хочу отправлять электронные письма с файлом .ics и в то же время с телом в html и отображать оба файла одновременно (.ics мне не нужен в качестве вложения). В тот момент, когда я отправляю электронное письмо с календарем и в нем методом Cancel. Все будет отображаться нормально. Но если я сделаю REQUEST, календарь будет отображаться, но тело html не будет. Мне нужно перезапустить весь Outlook, и тогда оно появится. Есть ли способ решить эту проблему? Спасибо
Вот мой code для создания события календаря:
А вот как я его отправил:
А вот что я хочу иметь в теле письма: Правильная почта
И вот что я получил: Что я получил
Когда я открываю письмо, содержимое мигает и исчезает. После перезапуска Outlook все работает как надо.
private Calendar createCalendarEvent(MailRequestDTO mailRequestDTO) throws ParseException {
Calendar calendar = new Calendar();
PropertyList properties = calendar.getProperties();
Version version = new Version();
version.setValue("2.0");
properties.add(version);
properties.add(new ProdId("-//Microsoft Corporation//Outlook 15.0 MIMEDIR//EN"));
properties.add(new XProperty("X-WR-CALNAME", "Flexioffice"));
properties.add(new Method(mailRequestDTO.getMethod().getValue()));
ParameterList tzParams = new ParameterList();
tzParams.add(new TzId("UTC"));
VEvent event = new VEvent();
event.getProperties().add(new Uid(mailRequestDTO.getReservation().getId()));
event.getProperties().add(new Sequence(mailRequestDTO.getMethod().ordinal()));
DateTime from = convertToICal4jDateTime(getTime(mailRequestDTO.getReservation().getReservationFrom(), true, mailRequestDTO.getTimezoneOffset()));
DateTime to = convertToICal4jDateTime(getTime(mailRequestDTO.getReservation().getReservationTo(), false, mailRequestDTO.getTimezoneOffset()));
String attendeeEmail = getMails(mailRequestDTO.getRecipient()).get(0);// Replace with actual attendee email
Attendee attendee = new Attendee(URI.create("mailto:" + attendeeEmail));
attendee.getParameters().add(new CuType("INDIVIDUAL"));
attendee.getParameters().add(new Rsvp(false));
event.getProperties().add(attendee);
DtStart dtStart = new DtStart(tzParams, from);
DtEnd dtEnd = new DtEnd(tzParams, to);
event.getProperties().add(dtStart);
event.getProperties().add(dtEnd);
event.getProperties().add(new Summary("Flexioffice reservation"));
String roomNumber = mailRequestDTO.getReservation().getRoomHeader().getNumber();
String buildingName = mailRequestDTO.getReservation().getRoomHeader().getBuilding().getName();
event.getProperties().add(new Location(roomNumber + ", " + buildingName));
// Add ORGANIZER property
Organizer organizer = new Organizer(URI.create("mailto:" + FROMMAIL));
organizer.getParameters().add(new CuType("INDIVIDUAL"));
event.getProperties().add(organizer);
// Set description with HTML content
ParameterList pl = new ParameterList();
pl.add(new net.fortuna.ical4j.model.parameter.Value("TEXT"));
pl.add(new net.fortuna.ical4j.model.parameter.FmtType("text/html"));
pl.add(new net.fortuna.ical4j.model.parameter.Encoding("utf-8"));
// ADD X-ALT-DESC
event.getProperties().add(new Description(pl, createDescription(mailRequestDTO)));
event.getProperties().add(new XProperty("X-ALT-DESC", pl, createDescription(mailRequestDTO)));
calendar.getComponents().add(event);
saveCalendarIntoFile(calendar);
return calendar;
}
rivate void sendMailToUser(MailRequestDTO mailRequestDTO) {
try {
// Send the message
Calendar c = createCalendarEvent(mailRequestDTO);
Session session = getSession();
MimeMessage message = new MimeMessage(session);
message.setFrom(FROMMAIL);
message.addRecipient(Message.RecipientType.TO, new InternetAddress(getMails(mailRequestDTO.getRecipient()).get(0)));
message.setSubject("Flexioffice reservation");
message.setContent(convertCalendarToString(c), "text/calendar; charset=\"utf-8\"; method=REQUEST");
// Send the email
Transport.send(message);
} catch (MessagingException | ParseException e) {
log.error("Error sending mail", e);
}
}