`
lynen
  • 浏览: 128516 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

通过ical4j与javamail实现会议邀请总结

阅读更多

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();   
}  

  

 

 

0
0
分享到:
评论
1 楼 cfyme 2012-03-05  
请问一下,我成功发送了一个会议邀请,怎么取消会议邀请,怎么更改会议邀请

相关推荐

    ical4j-1.0.3-src

    5. 事件触发器和规则:ical4j可以处理复杂的重复规则(如每周一的会议),以及基于日期或时间的触发器。 6. 支持附件和URL:ical4j支持在事件中添加附件和链接,增强了日历项的丰富性。 7. 时区处理:ical4j处理...

    ical4j,用于解析和构建iCalendar数据模型的Java库.zip

    5. **兼容性与标准遵循**:ical4j库严格遵循RFC 5545标准,确保处理的iCalendar数据符合规范,保证与其他系统和应用的互操作性。 6. **版本管理**:ical4j有多个版本,每个版本都可能针对标准的更新或社区反馈进行...

    ical4j-1.0.jar

    6. **邮件集成**:在Java应用程序中,ical4j可以与JavaMail API结合,生成包含iCalendar附件的邮件,这样收件人就可以直接在邮件客户端中添加日历事件。 7. **灵活性**:ical4j库的设计允许开发者根据需要自定义...

    ical4j,用于解析和构建ICANDEAR数据模型的Java库.zip

    ical4j是一个强大的Java库,专门用于解析和构建iCalendar(ICalendar)数据模型。iCalendar是一种标准的数据格式,常用于在不同的...通过深入学习和使用ical4j,开发者可以轻松地在Java应用中实现复杂的日历管理功能。

    ical4j-2.0-beta1.zip

    ical4j-2.0-beta1.zip 是一个与日历和事件管理相关的开源库,它主要为Java开发者提供了处理iCalendar格式数据的能力。iCalendar是一种标准格式,常用于创建、共享和管理电子日历和事件数据。ical4j库允许程序读取、...

    javamail邮件提醒

    总之,JavaMail和ical4j结合使用,可以实现功能强大的会议提醒系统,不仅能在Outlook等邮件客户端中正常显示,还能在KMail等其他客户端中触发预期的提醒和回复机制。通过仔细调整和测试邮件内容的各个部分,可以确保...

    ical4j-用户指南:iCal4j用户文档

    无论是阅读现有的日历数据,还是创建新的事件,甚至是实现复杂的时区转换和事件订阅,ical4j都能提供高效、稳定的解决方案。通过深入学习和实践,开发者可以充分利用ical4j的强大功能,为他们的日历应用带来更多的...

    ical4j:用于解析和构建iCalendar数据模型的Java库

    建立系统要求3.x版-Java 8或更高版本2.x版-Java 7或更高版本依存关系为了可移植性和与尽可能多的环境的兼容性,iCal4j的依赖库数量应保持最少。 下面介绍了必需的(和可选的)依赖项及其提供的功能。 slf4j-api ...

    iCal4j-开源

    6. **兼容性**:作为开源项目,iCal4j持续维护并更新,以保持与最新版本的iCalendar标准的兼容性,确保在不同系统间的数据交换顺畅。 7. **API易用性**:iCal4j提供了一个直观且易于使用的API,使得开发者可以快速...

    Laravel开发-laravel-ical

    **Laravel 开发与 iCal 整合** 在 Laravel 框架中,开发者经常需要处理日历事件的导入和导出,例如从外部源(如Google Calendar或Outlook)同步事件,或者允许用户导出他们的事件到iCalendar (iCal) 文件。`laravel...

    iCal-like+Calendars

    这个项目可能是为了在其他平台上(如Windows、Linux或者Web)实现类似的功能,或者是为了在非苹果设备上提供与iCal兼容的日历体验。 描述中的“漂亮的日程显示”暗示了该应用或组件重视用户体验和视觉设计,它可能...

    java发送OutLook会议邮件

    `MimeBodyPart`用于创建iCalendar内容,可以使用iCal4j库来生成这个内容。 ```java MimeBodyPart textPart = new MimeBodyPart(); textPart.setText("会议详情..."); MimeBodyPart icalPart = new MimeBodyPart();...

    前端项目-ical.js.zip

    开发者可以克隆或下载这个仓库,然后通过阅读源码、示例和文档来学习如何在自己的项目中集成和使用`ical.js`。 总结来说,`ical.js`是前端开发的一个实用工具,它使得JavaScript环境下的ICS和VCARD数据处理变得更加...

    jQuery+CSS实现iCal风格的漂亮日历

    通过恰当的CSS选择器和属性,开发者可以实现日历的分层、背景、日期高亮和鼠标悬停效果,使其看起来与苹果iCal应用程序相似。 日历的实现通常包含以下几个主要部分: 1. **结构**:HTML用于构建日历的基本框架,...

    exp4j.jar包下载

    ical4j-1.0.jar java 发送邮件日历提醒功能所需jar包

    iCal个人日程管理软件V1.6.421绿色中文免费版

    iCal个人日程管理软件可以帮助你合理安排每天、每周、每月的日程,实现时间管理的概念。iCal_1.0.45 ·在自用软件iCal_1.0的基础上进行了以下修改后作为免费共享版推出  1、更换下拉式日历控件  2、更新“日”...

    ical.net:ical.NET-.NET的开源iCal库

    iCal.NET是用于.NET的iCalendar(RFC 5545)类库,旨在提供RFC 5545合规性,同时与流行的日历应用程序和库完全兼容。 获取iCal.NET iCal.NET是作为。 从dday.ical迁移到ical.net 有一个为您提供的指南: 例子 Wiki...

Global site tag (gtag.js) - Google Analytics