Отправка события календаря с HTML-телом в Outlook

Я создаю почтовый сервис, в котором я хочу отправлять электронные письма с файлом .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);
        }
    }
Константин
Вопрос задан20 мая 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.