2017-04-07 6 views
4

java로 이메일마다 캘린더 초대장을 보내려고합니다. 수신자는 전자 메일을 받지만 동의 또는 거부하라는 초대장이 표시되는 대신 일정이 자동으로 자신의 일정에 추가됩니다.자바로 캘린더를 이메일로 보내기

내가

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; 

} 

ical4j.jar

로 초대/이벤트를 짓고 있어요 그리고 이것이 내가 이메일 보내는 방법입니다

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을 참조하십시오 "4 시간 지속 시간 회의 만들기"를 시도해보고 문제가 계속 발생하는지 확인하십시오.

+0

이제 이벤트를 만들고 이메일로 보내지만 결과는 동일합니다. 이벤트는 자동으로 내 캘린더에 추가됩니다. Gmail에서이 동작을 변경할 수 있음을 알았으므로 내가 수락 한 메일을 추가하도록 설정했지만 초대장을 볼 수 있습니다. 초대장을 볼 때만 "원본보기"를 누릅니다. 이메일에 아직 팝업이나 초대장이 표시되지 않았습니다. – diminuta

+0

@diminuta gmail에서 문제를 해결할 수 있었습니까? Google에서 App Engine SDK를 사용하여 전자 메일 마크 업 (무료가 아닌)을 사용하도록 장려하고 있습니다. https://developers.google.com/gmail/markup/reference/event-reservation – zkvarz