java邮件会议邀请_javamail+ical4j发送会议邀请
(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发送会议邀请相关推荐
- 利用javamail、ical4j发送会议邀请(日历)邮件、注意ical4j需要修改
一.pom添加依赖 <dependency> <groupId>org.mnode.ical4j</groupId> ...
- java 发送会议邮件模板_使用javamail发送会议邀请
网上找了很多关于javamail发送会议请求的文章,终于成功了,没有使用ical4j,发送的outlook直接打开就是一个会议请求,而不是以附件的形式存在.具体的注意点在代码中以注释的形式标明. DE ...
- ical4j发送会议日历时差问题
在公司开发和维护邮件发送相关api及web,有客户反映通过我们平台发送出去的会议日历部分邮件客户端如outlook打开的时候存在时区差的问题,有的存在8个小时是去查的问题,有的存在1个小时(也就是所谓 ...
- java 邮件 附件_java中javamail发送带附件的邮件实现方法
本文实例讲述了java中javamail发送带附件的邮件实现方法.分享给大家供大家参考.具体分析如下: JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理em ...
- Java发送会议邮件 时区_【上海校区】基于JavaMail的日历(会议)邮件发送实现
[Java] 纯文本查看 复制代码/** * 发送会议邀请邮件 * * @param toMailAddress 收件人(邀约人),支持多个 * @param mailSubject 邮件主题 * @ ...
- 视频专辑:张孝祥Java邮件开发
为什么80%的码农都做不了架构师?>>> 专辑:张孝祥Java邮件开发 简介: 这是市面上无出其右的Java邮件培训视频,由于这套视频是结合了张孝祥老师对邮件系统的深刻理解.丰 ...
- java 邮件提醒功能_利用ical4j和javamail发送会议邀请实现邮件发送提醒功能
/*** *@paramsenderAccount 发件人账号 *@paramsenderPassword 发件人密码 *@paramtoAddress 收件人邮箱地址 *@paramccAddres ...
- java发送会议邀请邮件模板_java mail text/calendar格式会议邀请邮件,网页版邮箱接收到的邮件内容无法换行...
java中用mail进行会议邀请邮件(text/calendar格式)的发送,客户端邮箱正常显示,网页版邮箱正文部分无法换行如何解决buffer.append("BEGIN:VCALENDA ...
- Java 发送会议邀请到 Outlook
Java 发送会议邀请到 Outlook Java 发送会议邀请到 Outlook 1.发件服务器配置 2.发送邮件代码 3.测试代码 Java 发送会议邀请到 Outlook 系统:Win10 ID ...
最新文章
- HTTP Response中的Chunked编码
- 剑指offer 算法 (位运算)
- Hyperledger Fabric 1.2 --- Chaincode Operator 解读和测试(一)
- 原生态纯JavaScript 100大技巧大收集---你值得拥有
- leetcode- Single Number
- Java RMI(2):项目中使用RMI
- java多态的理解(运行时多态)_Java多态的理解
- Java中的推断异常
- class checklist
- excel自定义函数添加和使用方法
- java中this关键字的基本使用
- mysql导入超大sql文件时mysql服务重启
- 论文中的一些数学符号表示
- python3 中的Json序列化、反序列化 和 字符编码的问题解决
- OpenCV-图像处理(03、Mat对象)
- 【STM32 基础实验蜂鸣器发声】
- 《21天学通C语言(第7版)》一2.4 小 结
- 中秋海报设计素材|中秋节海报文案
- LogMeIn Pro 试用简介!
- 针对爬取豆瓣top250电影失败的问题
热门文章
- endnote文献管理
- 百万用户级游戏服务器架构设计
- 训练千亿参数大模型,离不开四种GPU并行策略
- 全球及中国汽车租赁行业投资规模及未来发展布局研究报告2021-2027年
- 出现ERROR: While executing gem ... (Gem::FilePermissionError)这种错误的解决办法
- python实现12306验证和登录
- Android SDK安装教程
- 展锐推出线上平台坦克邦打造新生态
- 3D建模零基础需要达到什么样的水平,才能被应聘?
- 钓鱼网站也在使用https加密,如何识别钓鱼网站?