且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何使用 Java Mail 发送 iCal 会议请求并接收响应

更新时间:2022-12-04 07:53:43

所以我解决了这个问题,这是我的发现:

So I solved the problem, and here is what I found:

1 - 您必须更新到 Java Mail API 1.4.2 才能使一切正常

1 - You have to update to Java Mail API 1.4.2 to make everything works fine

2 - 像下面这样编写消息的文本/日历部分:

2 - Write the text/calendar part of your message like the following:

package com.xx.xx;

import java.util.Properties;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;

public class Email {

    public Email() {
    }

    /*
     * @param args
     */
    public static void main(String[] args) {
        try {
            Email email = new Email();
            email.send();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void send() throws Exception {

        try {
            String from = "xx@xx.com";
            String to = "xx@xx.com";
            Properties prop = new Properties();
            prop.put("mail.smtp.host", "mailhost");

            Session session = Session.getDefaultInstance(prop, null);
            // Define message
            MimeMessage message = new MimeMessage(session);
            message.addHeaderLine("method=REQUEST");
            message.addHeaderLine("charset=UTF-8");
            message.addHeaderLine("component=VEVENT");

            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("Outlook Meeting Request Using JavaMail");

            StringBuffer sb = new StringBuffer();

            StringBuffer buffer = sb.append("BEGIN:VCALENDAR
" +
                    "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN
" +
                    "VERSION:2.0
" +
                    "METHOD:REQUEST
" +
                    "BEGIN:VEVENT
" +
                    "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:xx@xx.com
" +
                    "ORGANIZER:MAILTO:xx@xx.com
" +
                    "DTSTART:20051208T053000Z
" +
                    "DTEND:20051208T060000Z
" +
                    "LOCATION:Conference room
" +
                    "TRANSP:OPAQUE
" +
                    "SEQUENCE:0
" +
                    "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100
" +
                    " 000004377FE5C37984842BF9440448399EB02
" +
                    "DTSTAMP:20051206T120102Z
" +
                    "CATEGORIES:Meeting
" +
                    "DESCRIPTION:This the description of the meeting.

" +
                    "SUMMARY:Test meeting request
" +
                    "PRIORITY:5
" +
                    "CLASS:PUBLIC
" +
                    "BEGIN:VALARM
" +
                    "TRIGGER:PT1440M
" +
                    "ACTION:DISPLAY
" +
                    "DESCRIPTION:Reminder
" +
                    "END:VALARM
" +
                    "END:VEVENT
" +
                    "END:VCALENDAR");

            // 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(buffer.toString(), "text/calendar")));// very important

            // Create a Multipart
            Multipart multipart = new MimeMultipart();

            // Add part one
            multipart.addBodyPart(messageBodyPart);

            // Put parts in message
            message.setContent(multipart);

            // send message
            Transport.send(message);
        } catch (MessagingException me) {
            me.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

3 - 替换变量,一切顺利!

3 - Replace your variable, and you are good to go!