Вложение приходит при отправке приглашения на собрание в заметках лотоса

Я пытаюсь отправить приглашение на собрание в заметках Lotus, используя 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
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);

}
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);

}

person tusharagrawa    schedule 17.08.2013    source источник


Ответы (1)


Вы отправляете составное сообщение только с одной частью тела. Большинство читателей почты считают, что первое текстовое тело (обычный или html) является основным, а остальные являются вложениями. В вашем сообщении нет основной части текста, поэтому программа чтения почты, скорее всего, предположит, что часть тела, которую вы отправили, является вложением.

person Bill Shannon    schedule 19.08.2013
comment
Да, но, поскольку я искал в Интернете, чтобы прикрепить вложение icalendar по почте (для совместимости с Lotus Notes), я должен отправить составной тип. Есть ли что-то, что мне не хватает? - person tusharagrawa; 19.08.2013
comment
Попробуйте добавить основную текстовую часть, а затем посмотрите, правильно ли обрабатывается вложение icalendar. - person Bill Shannon; 19.08.2013