有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaJavaMail每两周gmail日历邀请作为ICS文件发布

我正试图向gmail地址发送日历邀请。我正在使用Spring、双周刊和javamail库。邀请函已发送,但在gmail中它并没有作为日历发送,但我收到一封主题为“你被邀请参加会议”的电子邮件。它有一个附件ICS,上面有我编写的邀请的详细信息

请帮助我了解如何在谷歌上收到一封真正的邀请,而不是一封附有ICS文件的电子邮件。如果我发送到Outlook,邀请工作正常

@Service
public class CalendarEvent {

private JavaMailSender javaMailSender;

@Autowired
public CalendarEvent(JavaMailSender javaMailSender) {
    this.javaMailSender = javaMailSender;
}

public void createCal() throws MessagingException, ParseException, IOException {

    ICalendar ical = new ICalendar();
    EmailInvite invite =new EmailInvite();
    VEvent event = new VEvent();

    Attendee attendee = new Attendee("xx", "xx.xx@gmail.com");
    attendee.setRsvp(true);
    attendee.setRole(Role.ATTENDEE);
    attendee.setParticipationStatus(ParticipationStatus.NEEDS_ACTION);
    attendee.setParticipationLevel(ParticipationLevel.REQUIRED);

    event.addAttendee(attendee);

    event.setSummary(invite.getSubject());

    SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd HH:MM:SS"); 

    Date starts = new Date();
    Date ends  = new Date();
    try {
        starts=ft.parse(invite.getDateStart());
        ends=ft.parse(invite.getDateEnd());

    } catch (java.text.ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


    DateStart thisStart = new DateStart(starts, true);
    DateEnd dateEnd = new DateEnd(ends, true);

    event.setDateStart(thisStart);
    event.setDateEnd(dateEnd);

    Duration reminder = new Duration.Builder().minutes(15).build();
    Trigger trigger = new Trigger(reminder, Related.START);
    Action action = new Action("DISPLAY");
    VAlarm valarm = new VAlarm(action, trigger);
    event.addAlarm(valarm);

    Duration duration = new Duration.Builder().hours(1).build();
    event.setDuration(duration);

    event.setUid(invite.getUID());
    event.setOrganizer(invite.getUserID());
    event.setLocation("Small");

    ical.addEvent(event);
    ical.setMethod("REQUEST");

    String str = Biweekly.write(ical).go();

    MimeMessage message = javaMailSender.createMimeMessage();
    message.addHeaderLine("charset=UTF-8");
    message.addHeaderLine("component=VEVENT");
    message.addHeaderLine("method=REQUEST");

    message.setFrom("abc@lxyz.com");
    message.addRecipient(Message.RecipientType.TO, new InternetAddress("xx.xx@gmail.com"));
    message.setSubject("You're Invited to a Meeting");

    // Create the message part
    BodyPart messageBodyPart = new MimeBodyPart();

    // Fill the message
    messageBodyPart.setHeader("Content-Class", "urn:content-classes:calendarmessage");
    messageBodyPart.setHeader("Content-ID", "calendar_message");
    messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(str, "text/calendar")));// very important


    Multipart multipart = new MimeMultipart();


    multipart.addBodyPart(messageBodyPart);


    message.setContent(multipart);

    javaMailSender.send(message);

}
}

以下是ICS文件,它是作为gmail附件生成和发送的

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Michael Angstadt//biweekly 0.6.2//EN
METHOD:REQUEST
BEGIN:VEVENT
DTSTAMP:20180601T193055Z
ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=Gaurav:mailto:xx.xx@gmail.com
SUMMARY:some summary
DTSTART:20200602T130000Z
DTEND:20200602T140000Z
DURATION:PT1H
UID:2fb68918-c50e-4da2-ae97-ddcdc2d79b06
ORGANIZER:mailto:abc@lxyz.com
LOCATION:Small
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=START:PT15M
END:VALARM
END:VEVENT
END:VCALENDAR

共 (1) 个答案