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

如何使用Java Mail发送iCal会议请求并接收响应,java,email,outlook,Java,Email,Outlook,我正在尝试使用Java邮件库将iCal发送到outlook,我已经阅读了,并且已经有了一些示例代码 public class SendMeetingRequest { String host = "" ; String port = "" ; String sender = "" ; public static SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyyMMdd'T'HHmm'00'" ) ; public static

我正在尝试使用Java邮件库将iCal发送到outlook,我已经阅读了,并且已经有了一些示例代码

public class SendMeetingRequest {

String host = "" ;
String port = "" ;
String sender = "" ;

public static SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyyMMdd'T'HHmm'00'" ) ;
public static SimpleDateFormat dateParser = new SimpleDateFormat( "dd-MM-yyyy HH:mm" ) ;

public static void main(String[] args) throws Exception {
    SendMeetingRequest sender = new SendMeetingRequest() ;

    sender.sendInvitation( “LogicaCMG Inschrijf Site”
                         , new String[] { “robert<dot>willems<dot>of<dot>brilman<at>logicacmg<dot>com”
                                        }
                         , “Outlook Meeting Request Using JavaMail”
                         , dateParser.parse( “28-08-2006 18:00″ )
                         , dateParser.parse( “28-08-2006 21:00″ )
                         , “LIS-42″
                         , “Bar op scheveningen”
                         , “<font color=\”Red\”>Aanwezigheid verplicht!</font><br>We gaan lekker een biertje drinken met z’n allen.”
                         ) ;
}


void sendInvitation( String organizer
                   , String[] to
                   , String subject
                   , Date start
                   , Date end
                   , String invitationId
                   , String location
                   , String description
                   ) throws Exception {

    try {
        Properties prop = new Properties();
        prop.put(”mail.smtp.port”, port );
        prop.put(”mail.smtp.host”, host );

        Session session = Session.getDefaultInstance(prop);
        session.setDebug(true);

        // Define message
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(sender));

        // Set TO
        if( to != null && ( to.length > 0 ) ) {
            InternetAddress[] address = new InternetAddress[ to.length ] ;

            for( int i = 0; i < to.length; i++ ) {
                address[ i ] = new InternetAddress( to[ i ] ) ;
            }

            message.setRecipients( Message.RecipientType.TO, address ) ;
        }

        // Set subject
        message.setSubject(subject);

        // Create iCalendar message
        StringBuffer messageText = new StringBuffer();
        messageText.append("BEGIN:VCALENDAR\n" +
                           "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n" +
                           "VERSION:2.0\n" +
                           "METHOD:REQUEST\n" +
                               "BEGIN:VEVENT\n" +
                               "ORGANIZER:MAILTO:" ) ;
        messageText.append( organizer ) ;
        messageText.append( "\n" +
                            "DTSTART:");
        messageText.append( dateFormat.format( start ) ) ;
        messageText.append( "\n" +
                            "DTEND:" ) ;
        messageText.append( dateFormat.format( end ) ) ;
        messageText.append( "\n" +
                            "LOCATION:" ) ;
        messageText.append( location ) ;
        messageText.append( "\n" +
                             "UID:" ) ;
        messageText.append( invitationId ) ;
        messageText.append( "\n" +
                            "DTSTAMP:" ) ;
        messageText.append( dateFormat.format( new java.util.Date() ) ) ;
        messageText.append( "\n" +
                            "DESCRIPTION;ALTREP=\"CID:<eventDescriptionHTML>\”" ) ;
        messageText.append( “\n” +
                                    ”BEGIN:VALARM\n” +
                                    ”TRIGGER:-PT15M\n” +
                                    ”ACTION:DISPLAY\n” +
                                    ”DESCRIPTION:Reminder\n” +
                                    ”END:VALARM\n” +
                               ”END:VEVENT\n” +
                           ”END:VCALENDAR”
                           ) ;

        Multipart mp = new MimeMultipart();

        MimeBodyPart meetingPart = new MimeBodyPart() ;
        meetingPart.setDataHandler( new DataHandler( new StringDataSource( messageText.toString(), “text/calendar”, “meetingRequest” ) ) ) ;
        mp.addBodyPart( meetingPart ) ;

        MimeBodyPart descriptionPart = new MimeBodyPart() ;
        descriptionPart.setDataHandler( new DataHandler( new StringDataSource( description, “text/html”, “eventDescription” ) ) ) ;
        descriptionPart.setContentID( “<eventDescriptionHTML>” ) ;
        mp.addBodyPart( descriptionPart ) ;

        message.setContent( mp ) ;

        // send message
        Transport.send(message);

    } catch (MessagingException me) {
        me.printStackTrace();

    } catch (Exception ex) {
        ex.printStackTrace();

    }
}

private static class StringDataSource implements DataSource {
    private String contents ;
    private String mimetype ;
    private String name ;


    public StringDataSource( String contents
                           , String mimetype
                           , String name
                           ) {
        this.contents = contents ;
        this.mimetype = mimetype ;
        this.name = name ;
    }

    public String getContentType() {
        return( mimetype ) ;
    }

    public String getName() {
        return( name ) ;
    }

    public InputStream getInputStream() {
        return( new StringBufferInputStream( contents ) ) ;
    }

    public OutputStream getOutputStream() {
        throw new IllegalAccessError( “This datasource cannot be written to” ) ;
    }
} }
公共类SendMeetingRequest{
字符串host=“”;
字符串端口=”;
字符串发送者=”;
公共静态SimpleDataFormat dateFormat=新SimpleDataFormat(“yyyyymmdd'T'HHmm'00'”;
公共静态SimpleDataFormat dateParser=新SimpleDataFormat(“dd-MM-yyy-HH:MM”);
公共静态void main(字符串[]args)引发异常{
SendMeetingRequest发件人=新的SendMeetingRequest();
sender.Send邀请函(“LogicaCMG Inschrijf站点”
,新字符串[]{“robertwillemsofbrilmanlogicacmgcom”
}
,“使用JavaMail的Outlook会议请求”
,dateParser.parse(“28-08-2006 18:00”)
,dateParser.parse(“28-08-2006 21:00”)
“LIS-42”
,“斯切维宁酒吧”
“安维齐赫德·维普利希特!
我们是莱克尔·比尔杰·德林肯认识的z'n allen。” ) ; } 无效发送邀请(字符串管理器) ,字符串[]到 ,字符串主题 ,开始日期 ,日期结束 ,字符串邀请ID ,字符串位置 ,字符串说明 )抛出异常{ 试一试{ Properties prop=新属性(); prop.put(“mail.smtp.port”,port); prop.put(“mail.smtp.host”,主机); Session Session=Session.getDefaultInstance(prop); session.setDebug(true); //定义消息 MimeMessage message=新MimeMessage(会话); message.setFrom(新的Internet地址(发件人)); //着手 如果(to!=null&(to.length>0)){ InternetAddress[]地址=新的InternetAddress[to.length]; for(int i=0;i
但它是作为outlook 2007和outlook 2003的附件发送的,即使我单击附件查看并接受,我也不会收到答复,这是应用程序具有类似outlook的功能的目的

有什么程序我需要知道吗,或者是mak需要的邀请ID
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\n" +
                    "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n" +
                    "VERSION:2.0\n" +
                    "METHOD:REQUEST\n" +
                    "BEGIN:VEVENT\n" +
                    "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:xx@xx.com\n" +
                    "ORGANIZER:MAILTO:xx@xx.com\n" +
                    "DTSTART:20051208T053000Z\n" +
                    "DTEND:20051208T060000Z\n" +
                    "LOCATION:Conference room\n" +
                    "TRANSP:OPAQUE\n" +
                    "SEQUENCE:0\n" +
                    "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100\n" +
                    " 000004377FE5C37984842BF9440448399EB02\n" +
                    "DTSTAMP:20051206T120102Z\n" +
                    "CATEGORIES:Meeting\n" +
                    "DESCRIPTION:This the description of the meeting.\n\n" +
                    "SUMMARY:Test meeting request\n" +
                    "PRIORITY:5\n" +
                    "CLASS:PUBLIC\n" +
                    "BEGIN:VALARM\n" +
                    "TRIGGER:PT1440M\n" +
                    "ACTION:DISPLAY\n" +
                    "DESCRIPTION:Reminder\n" +
                    "END:VALARM\n" +
                    "END:VEVENT\n" +
                    "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();
        }
    }
}
Calendar calendar = new Calendar();
PropertyList calendarProperties = calendar.getProperties();
calendarProperties.add(Version.VERSION_2_0);
calendarProperties.add(Method.REQUEST);
// other properties ...

VEvent vEvent = new VEvent(/*startDate, endDate*/);
PropertyList vEventProperties = vEvent.getProperties();
vEventProperties.add(Priority.MEDIUM);
vEventProperties.add(Clazz.PUBLIC);
// other properties ...

calendar.getComponents().add(vEvent);

messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(calendar.toString(), "text/calendar")));
import java.util.Properties;
import javax.activation.DataHandler;
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() {
 }

 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 = "FromExample@gmail.com";
        String to = "ToExample@gmail.do";
        Properties prop = new Properties();

        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.starttls.enable", "true");
        prop.put("mail.smtp.host", "smtp.gmail.com");
        prop.put("mail.smtp.port", "587");

        final String username = "FromExample@gmail.com";
        final String password = "123456789";

        Session session = Session.getInstance(prop,
                  new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                  });

        // 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\n" +
                "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n" +
                "VERSION:2.0\n" +
                "METHOD:REQUEST\n" +
                "BEGIN:VEVENT\n" +
                "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:xxx@xx.com\n" +
                "ORGANIZER:MAILTO:xx@xx.com\n" +
                "DTSTART:20180922T053000Z\n" +
                "DTEND:20180927T060000Z\n" +
                "LOCATION:Conference room\n" +
                "TRANSP:OPAQUE\n" +
                "SEQUENCE:0\n" +
                "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100\n" +
                " 000004377FE5C37984842BF9440448399EB02\n" +
                "DTSTAMP:20180922T120102Z\n" +
                "CATEGORIES:Meeting\n" +
                "DESCRIPTION:This the description of the meeting.\n\n" +
                "SUMMARY:Test meeting request\n" +
                "PRIORITY:5\n" +
                "CLASS:PUBLIC\n" +
                "BEGIN:VALARM\n" +
                "TRIGGER:PT1440M\n" +
                "ACTION:DISPLAY\n" +
                "DESCRIPTION:Reminder\n" +
                "END:VALARM\n" +
                "END:VEVENT\n" +
                "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);

        System.out.println("Success");

    } catch (MessagingException me) {
        me.printStackTrace();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
 }
}
import java.util.Properties;
import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;

public class Index {

public static void main(String[] args) {

     try {
            final String username = "sender@mail.com";
            final String password = "xxxxx";
            
            String from = "sender@mail.com";
            String to = "attendee@mail.com";
            String subject = "Meeting Subject";
            String startDate = "20201208"; // Date Formate: YYYYMMDD
            String endDate = "20201208"; // Date Formate: YYYYMMDD
            String startTime = "0400"; // Time Formate: HHMM
            String endTime = "0600"; // Time Formate: HHMM
            String emailBody = "Hi Team, This is meeting description. Thanks"; 
            
            Properties prop = new Properties();
            prop.put("mail.smtp.auth", "true");
            prop.put("mail.smtp.starttls.enable", "true");
            prop.put("mail.smtp.host", "smtp.gmail.com");
            prop.put("mail.smtp.port", "25");

            Session session = Session.getDefaultInstance(prop,  new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username, password);
                }
              });
            
            MimeMessage message = new MimeMessage(session);
            message.addHeaderLine("method=REQUEST");
            message.addHeaderLine("charset=UTF-8");
            message.addHeaderLine("component=VEVENT");

            message.setFrom(new InternetAddress(from, "New Outlook Event"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject(subject);

            StringBuffer sb = new StringBuffer();

            StringBuffer buffer = sb.append("BEGIN:VCALENDAR\n" +
                    "PRODID:-//Microsoft Corporation//Outlook 9.0 MIMEDIR//EN\n" +
                    "VERSION:2.0\n" +
                    "METHOD:REQUEST\n" +
                    "BEGIN:VEVENT\n" +
                    "ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE:MAILTO:"+ to +"\n" +
                    "DTSTART:"+ startDate +"T"+ startTime +"00Z\n" +
                    "DTEND:"+ endDate +"T"+ endTime +"00Z\n" +
                    "LOCATION:Conference room\n" +
                    "TRANSP:OPAQUE\n" +
                    "SEQUENCE:0\n" +
                    "UID:040000008200E00074C5B7101A82E00800000000002FF466CE3AC5010000000000000000100\n" +
                    " 000004377FE5C37984842BF9440448399EB02\n" +
                    "CATEGORIES:Meeting\n" +
                    "DESCRIPTION:"+ emailBody +"\n\n" +
                    "SUMMARY:Test meeting request\n" +
                    "PRIORITY:5\n" +
                    "CLASS:PUBLIC\n" +
                    "BEGIN:VALARM\n" +
                    "TRIGGER:PT1440M\n" +
                    "ACTION:DISPLAY\n" +
                    "DESCRIPTION:Reminder\n" +
                    "END:VALARM\n" +
                    "END:VEVENT\n" +
                    "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);
            
            System.out.println("Email sent!");
        } catch (MessagingException me) {
            me.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
}
}