2017-04-07 185 views
4

我試圖使用java發送每封電子郵件的日曆邀請。收件人獲取電子郵件,但不會顯示接受或拒絕的邀請,該活動會自動添加到他的日曆中。使用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附件。

我錯過了什麼?

回答

0

您正在創建新日曆,這就是爲什麼日曆會自動添加。請參閱文檔https://github.com/ical4j/ical4j/wiki/Examples#Creating_a_new_calendar嘗試「創建四小時的會議」並查看是否仍有問題。

+0

現在我只創建一個事件並通過電子郵件發送,但結果相同,事件會自動添加到我的日曆中。事實證明,你可以在gmail中改變這種行爲,所以我將它設置爲只添加我接受的內容,但我仍然可以看到該邀請,只有當我點擊「顯示原創」時,我才能看到邀請的代碼。電子郵件中仍然沒有顯示彈出式窗口或邀請。 – diminuta

+0

@diminuta你設法解決與Gmail的問題? 我懷疑Google鼓勵使用他們的App Engine SDK進行電子郵件標記(不是免費的)。 https://developers.google.com/gmail/markup/reference/event-reservation – zkvarz

相關問題