(edit by king)最近要搞个提醒系统,也就是能够设置个时间,在那个时间发封邮件提醒的系统。为了能够更好的起到提醒的效果,暂定的方案是发送会议邀请。

以前知道outlook的会议邀请格式不能仅仅发送ics附件,这样和outlook发送的会议邀请不太一样,不能默认自动加入到本地日历中,需要直接将ics格式当作正文发送。

在网上找了下基于java的ical格式库,ical4j,用这个来创建ics格式文件。这个库的文档还算比较全,也有简单的例子,照着例子(http://wiki.modularity.net.au/ical4j/index.php?title=Examples#Creating_a_meeting_of_four_hour_duration )抄了一段代码,结果在outlook中显示不支持的ics格式。通过比对outlook发送的会议邀请邮件源代码,添加了icsCalendar.getProperties().add(Method.REQUEST);这个属性之后,终于能够在outlook中正常使用了。

但是这样的会议邀请在我的kmail中,却总是提示不需要应答。在设置参与者的时候,明明已经把我自己的邮箱作为必选者了,但是还是不能对会议邀请进行响应。还是继续对比原来的会议邀请,发现在添加Attendee对象的时候,还可以增加好几个属性,如PARTSTAT,RSVP,经过多次尝试(哈哈,给别人发了n多垃圾邮件)后,终于在设置了RSVP属性(值为TRUE)的时候,kmail终于能够提示“您的应答已被请求”,可以应答这个邀请了。

现在的代码:

public static void sendEventEmail(List> reqs,

List> opts, Date startTime, Date endTime,

String location, String name, String content)

throws IOException, ValidationException, IllegalArgumentException {

if (reqs == null || reqs.isEmpty()) {

throw new IllegalArgumentException(

"Required participant should not be empty!");

}

List tos = new ArrayList();

DateTime start = new DateTime(startTime);

DateTime end = new DateTime(endTime);

VEvent meeting = new VEvent(start, end, name);

TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance()

.createRegistry();

// 设置时区

TimeZone timezone = registry.getTimeZone("Asia/Shanghai");

VTimeZone tz = timezone.getVTimeZone();

meeting.getProperties().add(tz.getTimeZoneId());

meeting.getProperties().add(new Location(location));

meeting.getProperties().add(new Summary(name));

meeting.getProperties().add(new Description(content));

// 设置uid

UidGenerator ug;

Uid uid;

ug = new UidGenerator("uidGen");

uid = ug.generateUid();

meeting.getProperties().add(uid);

for (Pair participant : reqs) {

Attendee attendee = new Attendee(URI.create("mailto:"

+ participant.first()));

attendee.getParameters().add(Role.REQ_PARTICIPANT);

attendee.getParameters().add(PartStat.NEEDS_ACTION);

attendee.getParameters().add(Rsvp.TRUE);

attendee.getParameters().add(new Cn(participant.second()));

meeting.getProperties().add(attendee);

tos.add(participant.first());

}

if (opts != null && !opts.isEmpty()) {

for (Pair participant : opts) {

Attendee attendee = new Attendee(URI.create("mailto:"

+ participant.first()));

attendee.getParameters().add(Role.OPT_PARTICIPANT);

attendee.getParameters().add(new Cn(participant.second()));

meeting.getProperties().add(attendee);

tos.add(participant.first());

}

}

Calendar icsCalendar = new Calendar();

icsCalendar.getProperties().add(

new ProdId("-//Events Calendar//iCal4j 1.0//EN"));

icsCalendar.getProperties().add(Version.VERSION_2_0);

icsCalendar.getProperties().add(Method.REQUEST);

icsCalendar.getComponents().add(meeting);

CalendarOutputter co = new CalendarOutputter(false);

Writer wtr = new StringWriter();

co.output(icsCalendar, wtr);

String mailContent = wtr.toString();

sendEmail(tos, name, mailContent);

}

其中sendEmail方法就是通过javamail发送邮件:

public static void sendEmail(List tos, String subject, String content) {

Properties properties = new Properties();

properties.put("mail.transport.protocol", "smtp");

properties.put("mail.smtp.user", "xxx");

properties.put("mail.smtp.host", "xxx");

properties.put("mail.smtp.port", "xxx");

properties.put("mail.smtp.auth", "true");

final String username = "xxx";

final String password = "xxx";

Authenticator authenticator = new Authenticator() {

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(username, password);

}

};

Transport transport = null;

try {

Session session = Session.getDefaultInstance(properties,

authenticator);

MimeMessage mimeMessage = new MimeMessage(session);

mimeMessage.setSubject(subject);

for(String to : tos) {

mimeMessage.addRecipient(Message.RecipientType.TO,

new InternetAddress(to));

}

mimeMessage.setFrom(new InternetAddress(

"xxx@xxx.com"));

mimeMessage.setContent(content,

"text/calendar;method=REQUEST;charset=UTF-8");

transport = session.getTransport();

transport.connect(username, password);

transport.sendMessage(mimeMessage, mimeMessage

.getRecipients(javax.mail.Message.RecipientType.TO));

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally {

if (transport != null)

try {

transport.close();

} catch (MessagingException logOrIgnore) {

}

}

}

现在还发现的问题是:

没有设置组织者,不过这个修改起来还是比较方便的

没有增加提醒,这个需要在calendar对象中添加VAlarm,增加提醒

还不支持html格式,这个再说了,作为一个提醒,应该不需要很绚的内容

java邮件会议邀请_javamail+ical4j发送会议邀请相关推荐

  1. 利用javamail、ical4j发送会议邀请(日历)邮件、注意ical4j需要修改

    一.pom添加依赖         <dependency>             <groupId>org.mnode.ical4j</groupId>    ...

  2. java 发送会议邮件模板_使用javamail发送会议邀请

    网上找了很多关于javamail发送会议请求的文章,终于成功了,没有使用ical4j,发送的outlook直接打开就是一个会议请求,而不是以附件的形式存在.具体的注意点在代码中以注释的形式标明. DE ...

  3. ical4j发送会议日历时差问题

    在公司开发和维护邮件发送相关api及web,有客户反映通过我们平台发送出去的会议日历部分邮件客户端如outlook打开的时候存在时区差的问题,有的存在8个小时是去查的问题,有的存在1个小时(也就是所谓 ...

  4. java 邮件 附件_java中javamail发送带附件的邮件实现方法

    本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理em ...

  5. Java发送会议邮件 时区_【上海校区】基于JavaMail的日历(会议)邮件发送实现

    [Java] 纯文本查看 复制代码/** * 发送会议邀请邮件 * * @param toMailAddress 收件人(邀约人),支持多个 * @param mailSubject 邮件主题 * @ ...

  6. 视频专辑:张孝祥Java邮件开发

    为什么80%的码农都做不了架构师?>>>    专辑:张孝祥Java邮件开发 简介: 这是市面上无出其右的Java邮件培训视频,由于这套视频是结合了张孝祥老师对邮件系统的深刻理解.丰 ...

  7. java 邮件提醒功能_利用ical4j和javamail发送会议邀请实现邮件发送提醒功能

    /*** *@paramsenderAccount 发件人账号 *@paramsenderPassword 发件人密码 *@paramtoAddress 收件人邮箱地址 *@paramccAddres ...

  8. java发送会议邀请邮件模板_java mail text/calendar格式会议邀请邮件,网页版邮箱接收到的邮件内容无法换行...

    java中用mail进行会议邀请邮件(text/calendar格式)的发送,客户端邮箱正常显示,网页版邮箱正文部分无法换行如何解决buffer.append("BEGIN:VCALENDA ...

  9. Java 发送会议邀请到 Outlook

    Java 发送会议邀请到 Outlook Java 发送会议邀请到 Outlook 1.发件服务器配置 2.发送邮件代码 3.测试代码 Java 发送会议邀请到 Outlook 系统:Win10 ID ...

最新文章

  1. HTTP Response中的Chunked编码
  2. 剑指offer 算法 (位运算)
  3. Hyperledger Fabric 1.2 --- Chaincode Operator 解读和测试(一)
  4. 原生态纯JavaScript 100大技巧大收集---你值得拥有
  5. leetcode- Single Number
  6. Java RMI(2):项目中使用RMI
  7. java多态的理解(运行时多态)_Java多态的理解
  8. Java中的推断异常
  9. class checklist
  10. excel自定义函数添加和使用方法
  11. java中this关键字的基本使用
  12. mysql导入超大sql文件时mysql服务重启
  13. 论文中的一些数学符号表示
  14. python3 中的Json序列化、反序列化 和 字符编码的问题解决
  15. OpenCV-图像处理(03、Mat对象)
  16. 【STM32 基础实验蜂鸣器发声】
  17. 《21天学通C语言(第7版)》一2.4 小 结
  18. 中秋海报设计素材|中秋节海报文案
  19. LogMeIn Pro 试用简介!
  20. 针对爬取豆瓣top250电影失败的问题

热门文章

  1. endnote文献管理
  2. 百万用户级游戏服务器架构设计
  3. 训练千亿参数大模型,离不开四种GPU并行策略
  4. 全球及中国汽车租赁行业投资规模及未来发展布局研究报告2021-2027年
  5. 出现ERROR: While executing gem ... (Gem::FilePermissionError)这种错误的解决办法
  6. python实现12306验证和登录
  7. Android SDK安装教程
  8. 展锐推出线上平台坦克邦打造新生态
  9. 3D建模零基础需要达到什么样的水平,才能被应聘?
  10. 钓鱼网站也在使用https加密,如何识别钓鱼网站?