我試圖使用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