2013-08-17 3 views
0

Lotus Notes에서 iCalendar 및 Java Mail API를 사용하여 회의 초대를 보내려고합니다. 메일 내용에 첨부 파일이 들어오지 않는다는 사실 외, 심지어 열어. 내 코드를 확인한 결과 코드 끝에 포함 된 첨부 파일이 없음을 확인할 수 있습니다. 누군가 왜 이런 일이 일어 났는지 설명 할 수 있습니까? 다음은첨부 파일 로터스 메모에 모임 초대 보내기 중입니다.

public void postMail(String meetingId, List<String> ToList, 
     List<String> existingAttendeeList, String subject, String message, 
     Date startDate, Date endDate, String from, boolean isMeetingInvite) 
     throws UtilException { 
    String[] recipients = null; 
    if ((ToList == null || ToList.size() == 0)) { 

     log.error("Both recipients and recipientCC are null"); 

     throw new UtilException("Both recipients and recipientCC are null"); 
    } else { 
     recipients = new String[ToList.size()]; 
     recipients = (String[]) ToList.toArray(recipients); 
    } 

    boolean debug = false; 


     Properties props = new Properties(); 
     props.put("mail.smtp.host", SMTP_HOST_NAME); 
     props.put("mail.smtp.auth", "false"); 
     Authenticator auth = new SMTPAuthenticator(); 
     Session session = Session.getInstance(props, auth); 
     session.setDebug(debug); 
     MimeMessage mimeMessage = new MimeMessage(session); 
     InternetAddress addressFrom = new InternetAddress(from); 
     mimeMessage.setFrom(addressFrom); 
     if (!(recipients == null)) { 
      InternetAddress[] addressTo = new InternetAddress[recipients.length]; 
      for (int i = 0; i < recipients.length; i++) { 
       addressTo[i] = new InternetAddress(recipients[i]); 

      } 
      mimeMessage.setRecipients(Message.RecipientType.TO, addressTo); 
     } 
     Multipart multipart = new MimeMultipart(); 
     MimeBodyPart iCalAttachment = new MimeBodyPart(); 
     TimeZone tz = TimeZone.getDefault(); 
     byte[] invite = createICalInvitation(meetingId, subject, message, 
       startDate, endDate, tz, from, isMeetingInvite, 
       existingAttendeeList); 
     iCalAttachment.setDataHandler(new DataHandler(
       new ByteArrayDataSource(new ByteArrayInputStream(invite), 
         "text/calendar;method=REQUEST;charset=\"UTF-8\""))); 
     multipart.addBodyPart(iCalAttachment); 
     mimeMessage.setContent(multipart); 
     Transport.send(mimeMessage); 
    } throw new UtilException(e.toString()); 
    } 

} 

private byte[] createICalInvitation(String _meetingID, String _subject, 
     String _content, Date _start, Date _end, TimeZone _tz, 
     String mailToAddress, boolean isMeetingInvite, 
     List<String> existingAttendeeList) throws Exception { 
    CompatibilityHints.setHintEnabled(
      CompatibilityHints.KEY_OUTLOOK_COMPATIBILITY, true); 
    DateTime start = new DateTime(_start); 
    DateTime end = new DateTime(_end); 
    VEvent vEvent = new VEvent(start, end, _subject); 
    vEvent.getProperties().add(new Uid(_meetingID)); 
    vEvent.getProperties().add(new Description(_content)); 
    vEvent.getProperties().add(new XProperty("X-LOTUS-BROADCAST", "false")); 
    Attendee dev = new Attendee(URI.create("mailto:" + mailToAddress)); 
    vEvent.getProperties().add(dev); 
    Organizer organizer = new Organizer(URI.create(mailToAddress)); 
    vEvent.getProperties().add(organizer); 
    if (existingAttendeeList != null && existingAttendeeList.size() != 0) { 
     for (String index : existingAttendeeList) { 
      Attendee existingAttendee = new Attendee(index); 
      vEvent.getProperties().add(existingAttendee); 
     } 
    } 
    net.fortuna.ical4j.model.Calendar cal = new net.fortuna.ical4j.model.Calendar(); 
    cal.getProperties() 
      .add(new ProdId(
        "//Lotus Development Corporation//NONSGML Notes 8.5.2//EN_C")); 
    cal.getProperties().add(
      net.fortuna.ical4j.model.property.Version.VERSION_2_0); 
    cal.getProperties().add(CalScale.GREGORIAN); 
    if (isMeetingInvite) { 
     cal.getProperties().add(
       net.fortuna.ical4j.model.property.Method.REQUEST); 
    } else { 
     cal.getProperties().add(
       net.fortuna.ical4j.model.property.Method.CANCEL); 
    } 
    TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance() 
      .createRegistry(); 
    VTimeZone tz = registry.getTimeZone(_tz.getID()).getVTimeZone(); 
    cal.getComponents().add(tz); 
    cal.getComponents().add(vEvent); 
    ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
    CalendarOutputter outputter = new CalendarOutputter(); 
    outputter.output(cal, bout); 
    return bout.toByteArray(); 
} 

있는이 코드를 실행하고있는 주요 방법입니다 :

public static void main(String[] args) { 
    List a = new ArrayList(); 
    a.add("[email protected]"); 
    Calendar c = Calendar.getInstance(); 
    c.roll(Calendar.DATE, 5); 
    Date d1 = c.getTime(); 
    c.add(Calendar.HOUR, 1); 
    Date d2 = c.getTime(); 
    SendMail s = new SendMail(); 
    String id = "" + System.currentTimeMillis(); 
    try { 
     s.postMail("212", a, null, "Hel22lo", "hel22lo", d1, d2, 
       "[email protected]", true); 

} 

답변

1

당신은 하나의 신체 일부와 다중 메시지를 보내는 여기에 코드의 내 작품이다. 대부분의 메일 독자는 첫 번째 텍스트 (일반 또는 html) 본문이 본문이고 나머지는 첨부 파일이라고 가정합니다. 귀하의 메시지에는 본문 본문 부분이 없기 때문에 귀하가 보낸 본문 부분이 첨부 파일 일 것이라고 가정합니다.

+0

그래,하지만 웹에서 icalendar 첨부 파일을 첨부하기 위해 (Lotus Notes와 호환되도록) 멀티 파트 유형을 보내야합니다. 누락 된 것이 있습니까? – Tushar

+0

본문 텍스트 부분 adn을 추가 한 다음 icalendar 첨부 파일이 제대로 처리되는지 확인하십시오. –

관련 문제