【问题标题】:Send calendar invite per email with java使用 java 每封电子邮件发送日历邀请
【发布时间】:2017-09-02 21:00:12
【问题描述】:

我正在尝试使用 java 发送每封电子邮件的日历邀请。收件人会收到电子邮件,但不会显示接受或拒绝的邀请,而是会自动将事件添加到他的日历中。

我正在使用 ical4j.jar 构建活动/邀请

private Calendar getInvite(Session session) {
    Calendar calendar = new Calendar();
    calendar.getProperties().add(Version.VERSION_2_0);
    calendar.getProperties().add(Method.REQUEST);

    VEvent event = new VEvent(
        new DateTime(sesion.getStartDate()), 
        new DateTime(sesion.getEndDate()), 
        session.getName());

    event.getProperties().add(Priority.MEDIUM);
    event.getProperties().add(Clazz.PUBLIC);

    try {
        UidGenerator ug = new UidGenerator("uidGen");
        Uid uid = ug.generateUid();
        event.getProperties().add(uid);
    } catch (SocketException e) {
        // Log things
    }

    for (Participant participant : session.getParticipants()) {
        Attendee attendee = new Attendee(URI.create("mailto:" + participant.getEmail()));
        attendee.getParameters().add(Role.OPT_PARTICIPANT);
        attendee.getParameters().add(new Cn(participant.getName()));
        attendee.getParameters().add(PartStat.NEEDS_ACTION);
        event.getProperties().add(attendee);
    }

    calendar.getComponents().add(event);

    return calendar;

}

这就是我发送电子邮件的方式:

public void sendEmail(String fromMail, String toMail, String subject, String text, net.fortuna.ical4j.model.Calendar calendar) {
    try {
        Session session = Session.getInstance(getMailProperties(), new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(getUser(), getPassword());
            }
        });

        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setHeader("Content-Transfer-Encoding:", "7bit");

        Address address = new InternetAddress(fromMail);
        mimeMessage.setFrom(address);

        mimeMessage.setSentDate(Calendar.getInstance().getTime());
        mimeMessage.setRecipients(Message.RecipientType.TO, toMail);

        mimeMessage.setSubject(subject);
        Calendar cal = Calendar.getInstance();
        mimeMessage.setSentDate(cal.getTime());

        Multipart multipart = new MimeMultipart("alternative");

        // First part - HTML readable text  
        MimeBodyPart msgHtml = new MimeBodyPart();
        msgHtml.setContent(text, "text/html; charset=UTF-8");

        multipart.addBodyPart(msgHtml);

        if (calendar != null) {
            // Another part for the calendar invite
            MimeBodyPart invite = new MimeBodyPart();
            invite.setHeader("Content-Class", "urn:content-  classes:calendarmessage");
            invite.setHeader("Content-ID", "calendar_message");
            invite.setHeader("Content-Disposition", "inline");
            invite.setContent(calendar.toString(), "text/calendar");
            multipart.addBodyPart(invite);
        }

        mimeMessage.setContent(multipart);

        Transport.send(mimeMessage);

    } catch (Exception e) {
        // Log things
    }

}

但是当我收到电子邮件(在 gmail 中)时,我看不到任何邀请,该活动会自动添加到我的日历中。我只能通过点击日历中的事件来接受或拒绝。

我尝试只发送邀请,然后我收到一封带有 ics 附件的电子邮件。

我错过了什么?

【问题讨论】:

    标签: java email calendar jakarta-mail ical4j


    【解决方案1】:

    您正在创建一个新日历,这就是自动添加日历的原因。请参阅文档https://github.com/ical4j/ical4j/wiki/Examples#Creating_a_new_calendar 尝试“创建持续四小时的会议”,看看您是否仍有问题。

    【讨论】:

    • 现在我只创建一个事件并通过电子邮件发送,但结果是一样的,该事件会自动添加到我的日历中。事实证明,您可以在 gmail 中更改此行为,因此我将其设置为仅添加我已接受的内容,但我仍然可以看到邀请,只有当我点击“显示原始”时,我才能看到邀请的代码。电子邮件中仍然没有显示弹出窗口或邀请。
    • @diminuta 您是否设法解决了 gmail 的问题?我怀疑谷歌鼓励使用他们的 App Engine SDK 进行电子邮件标记(不是免费的)。 developers.google.com/gmail/markup/reference/event-reservation
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多