我试图使用Java邮件库发送iCal到Outlook,我已经阅读了Question,并且我已经有一些示例代码如何使用Java Mail发送iCal会议请求并接收回复
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”) ;
}
} }
但它被作为附件发送到Outlook 2007和Outlook 2003,甚至如果我点击附件查看并接受,我没有收到应答,这是应用程序的目的具有类似于Outlook的功能。
是否有任何我需要知道的程序,还是邀请ID使事情变得粗糙?
实际上我的生产代码从和回复到指定 – 2009-07-13 20:30:59
除了message.setFrom(新网际地址(发件人));指定From,只有它在这个例子中是空的! – 2009-07-13 20:33:14