1.Maven依赖

<!--邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--ical4j-->
<dependency>
<groupId>org.mnode.ical4j</groupId>
<artifactId>ical4j</artifactId>
<version>1.0.7</version>
</dependency>

2.认证

/**
* 邮箱认证
* @return
*/
private static JavaMailSenderImpl authEmail(){
JavaMailSenderImpl javaMailSender=new JavaMailSenderImpl();
javaMailSender.setHost(host);
javaMailSender.setPort(port);
javaMailSender.setUsername(email);
javaMailSender.setPassword(pwd);
//认证机制
Properties properties=new Properties();
//连接超时
properties.setProperty("mail.smtp.connectiontimeout","10000");
//开启认证
properties.setProperty("mail.smtp.auth","true");
//启动调试
properties.setProperty("mail.debug","true");
//设置端口
properties.setProperty("mail.smtp.port",Integer.toString(465));
//加密方式
System.out.println("启用加密方式");
properties.setProperty("mail.smtp.starttls.enable","true");
properties.setProperty("mail.smtp.starttls.required","true");
//是否设置ssl端口
System.out.println("启用ssl");
properties.setProperty("mail.smtp.socketFactory.port",prot);
properties.setProperty("mail.smtp.socketFactory.fallback","false");
properties.setProperty("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.smtp.socketFactory.enable","true");
javaMailSender.setJavaMailProperties(properties);
return javaMailSender;
}
/**
* 测试连接
* @param args
*/
public static void main(String[] args) {
JavaMailSenderImpl javaMailSender = authEmail();
try {
javaMailSender.testConnection();
} catch (MessagingException e) {
e.printStackTrace();
}
System.out.println("成功");
}

3.发送

private void sendEmail() throws MessagingException, IOException, ValidationException, URISyntaxException {
JavaMailSenderImpl javaMailSender = authEmail();
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8");
//发送人邮箱
messageHelper.setFrom("sendEmail");
//接收者邮箱
String[] tos={"invit2","invit2"};
messageHelper.setTo(tos);
//标题
messageHelper.setSubject("信息通知:");
//内容
String content = content();
MimeMultipart multipart=new MimeMultipart();
MimeBodyPart bodyPart=new MimeBodyPart();
bodyPart.setContent(content,"text/html;charset=UTF-8");
//bodyPart.setText("会议在15分钟后");
multipart.addBodyPart(bodyPart);
//是否加入日历
if (true){
String calendar = getCalendar();
BodyPart bodyPartCal=new MimeBodyPart();
bodyPartCal.setDataHandler(new DataHandler(
new ByteArrayDataSource(calendar,"text/calendar;method=REQUEST;charset=\"UTF-8\"")));
multipart.addBodyPart(bodyPartCal);
}
message.setContent(multipart);
message.setSentDate(new Date());
//保存
message.saveChanges();
//发送
javaMailSender.send(message);
}

3.日历-创建日程

/**
* 邮箱添加到日历
* @return
*/
private String getCalendar() throws SocketException, ValidationException, URISyntaxException {
//设置时区
TimeZoneRegistry zoneRegistry = TimeZoneRegistryFactory.getInstance().createRegistry();
net.fortuna.ical4j.model.TimeZone timeZone = zoneRegistry.getTimeZone("Asia/Shanghai");
VTimeZone tz = timeZone.getVTimeZone();
//创建日历
net.fortuna.ical4j.model.Calendar calendar=new net.fortuna.ical4j.model.Calendar();
calendar.getProperties().add(Version.VERSION_2_0);
// -//Events Calendar//iCal4j 1.0//EN
calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));
calendar.getProperties().add(CalScale.GREGORIAN);
calendar.getProperties().add(Method.REQUEST);
//开始时间 接收时间
LocalDateTime currDate = LocalDateTime.now().plusDays(1L).with(LocalTime.MIN);
LocalDateTime start = currDate.with(LocalTime.parse("11:00"));
LocalDateTime end = currDate.with(LocalTime.parse("12:15"));
DateTime startTime =new DateTime(start.toInstant(ZonedDateTime.now().getOffset()).toEpochMilli());
startTime.setTimeZone(timeZone);
DateTime endTime =new DateTime(end.toInstant(ZonedDateTime.now().getOffset()).toEpochMilli());
endTime.setTimeZone(timeZone);
//创建事件
VEvent vEvent=new VEvent(startTime,endTime,"信息通知");
//地址
vEvent.getProperties().add(new Location("测试园区-F4"));
//唯一标识
vEvent.getProperties().add(new Uid(new UidGenerator("iCal4j").generateUid().getValue()));
//时区
vEvent.getProperties().add(tz.getTimeZoneId());
//组织者
Organizer organizer=new Organizer("mailto:email");
organizer.getParameters().add(new Cn("Booked or person"));
vEvent.getProperties().add(organizer);
//邀请者
String[] tos={};
for (int i = 0; i < tos.length; i++) {
Attendee dev = new Attendee(URI.create("mailto:"+tos[i]));
dev.getParameters().add(Role.REQ_PARTICIPANT);
dev.getParameters().add(new Cn("Developer"+i));
vEvent.getProperties().add(dev);
}
// 重复事件
// Recur recur = new Recur(Recur.WEEKLY, Integer.MAX_VALUE);
// recur.getDayList().add(WeekDay.MO);
// recur.getDayList().add(WeekDay.TU);
// recur.getDayList().add(WeekDay.WE);
// recur.getDayList().add(WeekDay.TH);
// recur.getDayList().add(WeekDay.FR);
// RRule rule = new RRule(recur);
// vEvent.getProperties().add(rule);
// 提醒,提前10分钟
VAlarm valarm = new VAlarm(new Dur(0, 0, -10, 0));
valarm.getProperties().add(new Summary("预订信息"));
valarm.getProperties().add(Action.DISPLAY);
valarm.getProperties().add(new Description("会议信息预订一个计划"));
// 将VAlarm加入VEvent
vEvent.getAlarms().add(valarm);
// 添加事件
calendar.getComponents().add(vEvent);
// 验证
calendar.validate();
return calendar.toString();
}

Email发送邮件使用ical4j将时间同步日历中的更多相关文章

  1. Android开发中怎样调用系统Email发送邮件(多种调用方式)

    在Android中调用其他程序进行相关处理,几乎都是使用的Intent,所以,Email也不例外,所谓的调用Email,只是说Email可以接收Intent并做这些事情 我们都知道,在Android中 ...

  2. grails email 发送邮件插件

    1.配置email插件,在Config.groovy文件中配置: plugins { compile ":mail:1.0.5" } 2.配置Config.groovy文件: gr ...

  3. ci框架(codeigniter)Email发送邮件、收件人、附件、Email调试工具

        ci框架(codeigniter)Email发送邮件.收件人.附件.Email调试工具 Email 类         CodeIgniter 拥有强大的 Email 类来提供如下的功能: 多 ...

  4. Android 向系统日历中添加事件

    查了一天半,总算有点大概了.以下是自己的理解,有错误的地方望指正. android系统有日历功能,应用程序可以根据一些接口开发自己的功能,即使是日历app也是根据这些接口开发的,所以我们可以利用程序向 ...

  5. Android向系统日历中添加日程事件

    转自Android向系统日历中添加日程事件 总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: ...

  6. 「Django」Django内置email发送邮件

    Django内置email发送邮件 1.首先在settings.py文件设置相关参数 STATIC_URL = '/static/' # 设置邮件域名 EMAIL_HOST = 'smtp.163.c ...

  7. Django内置email发送邮件

    ###Django内置email发送邮件 ####1.首先在settings.py文件设置相关参数 ```python STATIC_URL = '/static/' # 设置邮件域名 EMAIL_H ...

  8. 利用Python的smtplib和email发送邮件

    原理 网上已经有了很多的教程讲解相关的发送邮件的原理,在这里还是推荐一下廖雪峰老师的Python教程,讲解通俗易懂.简要来说,SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本 ...

  9. iOS日历中给一个事件加入多个提醒

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 假设认为写的不好请多提意见,假设认为不错请多多支持点赞.谢谢! hopy ;) iOS自带的日历应用中,我们最多仅仅能给一个事件设置2个提醒, ...

  10. iOS日历中给一个事件添加多个提醒

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) iOS自带的日历应用中,我们最多只能给一个事件设置2个提醒,但 ...

随机推荐

  1. CGAL5.0.2 CMake过程记录

    Zlib的INCLUDE_DIR 找到了,但是release_LIBRARY没有找到.不过没有影响generate. 打开build文件夹的CGAL.sln 文件,ALL_BUILD 生成,成功. 最 ...

  2. python补全用法,windows环境和linux环境

    一.windows中python tab具体如下: 1.python3环境装好后,初始环境是没有装readline模块的,先装它. pip install pyreadline 2.在在python的 ...

  3. python学习记录(五)-文件操作

    open()参数说明 ''' 参数1:路径 ./当前目录 ../上一级目录 参数2: 基础模式:w r x a w:写入,不存在则创建,存在则打开,清空文件内容,光标指向最前面 r:只读,不存在则报错 ...

  4. jmeter-脚本制作

    HTTP请求 默认端口号 HTTP默认端口号:80 HTTPS默认端口:443 数据来源 通过网络抓包软件(Fiddler.Charles等).接口文档数据 脚本制作+结果 录制脚本 badbod 录 ...

  5. [.Net]Framwork WebAPI添加接口请求监控

    思路: 通过重写 ActionFilterAttribute 拦截Action的请求及返回信息,实现对接口请求的监听. 最终效果如下: 全局启用需配置如下: 局部启用需配置如下: 源码如下: 1 // ...

  6. 通过Dnsmasq自建干净的DNS服务

    不晓得为撒,用网上的一些公共DNS服务的时候,总是莫名其妙的有些网站无法解析,有时候114能解析,阿里DNS不行或者腾讯DNS不行,导致总是来回切换DNS,很是烦心. 于是就想着自己搭建一个DNS服务 ...

  7. jar包与war包的部署

    前言 Spring Boot支持传统部署和更现代的部署形式.jar跟war都支持,这里参考springboot参考手册学习记录 传统部署:https://docs.spring.io/spring-b ...

  8. flask orm 操作方法

    数据库操作 常用的查询过滤器 过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit() 使用指定的值限 ...

  9. U-Boot 常用命令介绍

    U-Boot简介 U-Boot常用命令 帮助类 - help/?:该命令输出u-boot支持的所有命令及命令的功能 - help/? cmd:可以查看相应cmd的详细介绍及使用方法 查询类 - bdi ...

  10. java生态下的后端开发都有哪些技术栈?

    前言 我08年毕业,那时(2003-2010)C#还比较时髦的,大学跟着老师进修的,毕业后就从事winform窗体应用程序开发.慢慢的web网站兴起,就转到aps.net开发,再到后来就上了另一艘船( ...