ical4j
http://sourceforge.net/projects/ical4j/files/
iCal4j is a Java library used to read and write iCalendar data streams as defined in RFC2445. The iCalendar standard provides a common data format used to store information about calendar-specific data such as events, appointments, to-do lists, etc. All of the popular calendaring tools, such as Lotus Notes, Outlook and Apple's iCal also support the iCalendar standard.
javamail
在使用javamail的时候,需要jaf的支持。javamail与jaf都可以直接登录oracle的网站下载得到
在通过ical4j与javamail实现会议邀请的时候,过程如下
1、通过ical4j创建一个Calendar,这个Calendar中可以包括VEvent、VAlarm、TODO等多项内容。而会议邀请则必须要包含VEvent,如果需要提醒,则可以包含VAlarm
2.、获取到Calendar后,将Calendar放入Message中通过javamail进行发送。在发送成功后,可能会碰到的问题有
(1)乱码。问题解决方法很简单。可以将Calendar按照某种编码格式例如UTF-8转换byte后,通过byte[]构建Message所用到的InputStream进行发送(这个只是解决问题的思路)
(2)通过foxmail接收到的会议邀请不能进行应答。。。QQ~~~这个问题偶没有耐心看了
(3)通过outlook接收到的会议邀请是附件,而非outlook所支持的日历项(这个问题还需要区分outlook的版本,如果版本较低的话有可能接收到的不是附件,而是calendar的报文---outlook express 6.0就有这个问题)。对于附件的问题,翻译http://squirrelsewer.blogspot.com/2008/03/ical4j-javamail-exchange-and-outlook.html中的资料了,找到了解决方法。以下是关键代码
public MimeMessage createMimeMessage(Session session) throws Exception {
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setSubject(getSubject());
mimeMessage.addFrom(from);
mimeMessage.addRecipients(Message.RecipientType.TO, to);
//以下两步骤的处理很重要,可以避免outlook将生成的日历项当做附件处理
Multipart multipart = new MimeMultipart();
MimeBodyPart iCalAttachment = new MimeBodyPart();
byte[] invite = createICalInvitation(getMeetingID(), getSubject(), getContent(), getMeetingStart(), getMeetingEnd(), getMeetingTimeZone());
/*setDataHandler的处理方式也是非常关键
如果直接按照处理
mimeMessage.setContent(iCalAttachment , "text/calendar");
则在邮件发送的时候会抛出如下异常
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type text/calendar
这样发送能否成功目前没有找到解决方案
*/
iCalAttachment.setDataHandler(new DataHandler(new ByteArrayDataSource(new ByteArrayInputStream(invite), "text/calendar;method=REQUEST;charset=\"UTF-8\"")));
multipart.addBodyPart(iCalAttachment);
mimeMessage.setContent(multipart);
return mimeMessage;
}
private byte[] createICalInvitation(String _meetingID, String _subject, String _content, Date _start, Date _end, TimeZone _tz) throws Exception {
/**
以下两步骤的处理也是为了防止outlook或者是notes将日历当做附件使用增加的*/
CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_OUTLOOK_COMPATIBILITY, true);
CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_NOTES_COMPATIBILITY, true);
VEvent vEvent = new VEvent();
vEvent.getProperties().add(new Uid(_meetingID));
vEvent.getProperties().add(new Summary(_subject));
vEvent.getProperties().add(new Description(_content));
vEvent.getProperties().add(new DtStart(new DateTime(_start)));
vEvent.getProperties().add(new DtEnd(new DateTime(_end)));
Calendar cal = new Calendar();
cal.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
cal.getProperties().add(Version.VERSION_2_0);
cal.getProperties().add(CalScale.GREGORIAN);
cal.getProperties().add(Method.REQUEST);
TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
VTimeZone tz = registry.getTimeZone(_tz.getID()).getVTimeZone();
cal.getComponents().add(tz);
cal.getComponents().add(vEvent);
//如果邮件得到的日历内容时乱码,可以考虑通过将日历内容按照某种编码转换成bytes后,在生成stream
ByteArrayOutputStream bout = new ByteArrayOutputStream();
CalendarOutputter outputter = new CalendarOutputter();
outputter.output(cal, bout);
return bout.toByteArray();
}
分享到:
相关推荐
ical4j-1.0.3-src,ical4j的源代码和jar文件
ical4j,用于解析和构建ICANDEAR数据模型的Java库.zip
ical4j-1.0.jar java 发送邮件日历提醒功能所需jar包
ical4j用户指南 iCal4j用户文档
azure-sdk-for-java.zip,这是微软azure sdk的核心模块。
目录
建立系统要求3.x版-Java 8或更高版本2.x版-Java 7或更高版本依存关系为了可移植性和与尽可能多的环境的兼容性,iCal4j的依赖库数量应保持最少。 下面介绍了必需的(和可选的)依赖项及其提供的功能。 slf4j-api ...
Laravel开发-laravel-ical 用于eLuceo/iCal包的Laravel 5包装
一个用于读写iCalendar(* .ics)文件的Java库。
iCal个人日程管理软件可以帮助你合理安排每天、每周、每月的日程,实现时间管理的概念。iCal_1.0.45 ·在自用软件iCal_1.0的基础上进行了以下修改后作为免费共享版推出 1、更换下拉式日历控件 2、更新“日”...
ical4j-1.0.jar java 发送邮件日历提醒功能所需jar包
iCal.NET是用于.NET的iCalendar(RFC 5545)类库,旨在提供RFC 5545合规性,同时与流行的日历应用程序和库完全兼容。 获取iCal.NET iCal.NET是作为。 从dday.ical迁移到ical.net 有一个为您提供的指南: 例子 Wiki...
ical.js (以前是节点的) javascript / node( )的容忍的,最小的icalendar解析器安装-Node.js ical.js在npm上可用: npm install ical原料药ical.parseICS(str) 用ICS文件解析字符串var data = ical.parseFile&#...
漂亮的日程显示,如果大家觉得好用,我可以后续上传JAVA后台和前台的实现
我们将ICAL与基于GEANT4的模拟通过ICAL合作获得的现实分辨率和效率应用于重构中微子的能量和μ子方向。 我们的研究表明,使用中微子能量和μ方向表示χ2分析,ICAL检测器可以测量sin2α23和| m322 |。 具有1%...
《 iCal风格的漂亮日历》一文的源代码。详情请见:http://blog.csdn.net/jQueryPlugins/archive/2010/02/17/5310392.aspx
Laravel开发-ical 为eLuceo/iCal包提供外观。