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. C#中静态字段声明时赋值与构造函数中赋值

    C#中静态字段是属于类的,访问的时候:用类名点成员名的方式. 赋值初始化的时候,可以在声明的时候赋值,也可以在静态构造函数中赋值. 如果在声明中.静态构造函数中都赋值,那么最终该成员的值,是取自哪一个 ...

  2. Weblogic禁用不安全的http请求

    参考链接: https://blog.csdn.net/linfanhehe/article/details/78470733

  3. 手写 Java HashMap 核心源码

    手写 Java HashMap 核心源码 手写 Java HashMap 核心源码 上一章手写 LinkedList 核心源码,本章我们来手写 Java HashMap 的核心源码. 我们来先了解一下 ...

  4. Windows Oracle 启动OracleDBConsoleorcl 服务时报 Window不能在 本地计算机启动 OracleDBConsoleorcl 。有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码 2 。

    一.报错信息如图 二.原因分析: 计算机主机名或IP地址有变化 三.解决方法 依次输入命令: Microsoft Windows [版本 10.0.22000.795](c) Microsoft Co ...

  5. unidbgrid按回车键切换到右侧CELL

    打开UniDBGrid的ClientEvents->ExtEvents属性,编辑Ext.grid.Panel的reconfig函数,输入如下代码就可以实现当UniDBGrid表格的ReadOnl ...

  6. 实验十 团队作业7:团队项目用户验收&Beta冲刺

    项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验十 团队名称 零基础619 团队成员分工描述 任务1:亚楠,桂婷任务2:团队合作任务3:团队合作任务4:荣娟,鑫 团队的课程学习目 ...

  7. Python基础教程:赋值的多个方式

    一.序列解包/可迭代对象解包 释义:将一个序列(或任何可迭代的对象)解包,并将得到的值存储到一系列变量中. 1.并行赋值 >>> x,y,z = 1,2,3 >>> ...

  8. SqlServer 高并发的情况下,如何利用锁保证数据的稳定性

    sql的锁机制,是时刻贯彻在每一次的sql事务中的,为了理解更透彻,介绍锁之前,我们得先了解,锁是为了干什么!! 1.数据库异常情况 1.1 先来聊聊数据可能发生个异常状况 1)脏读:读未提交,顾名思 ...

  9. 给宝宝的AC自动机启蒙指南(宝宝的第一本)

    AC自动机 根据已有经验,学完虚数会变虚,然后写出的代码就不是人能看的了 所以我们来学实树罢(喜) 以上为废话博客背景 有限状态自动机 首先我们来了解一下自动机是啥. 说的通俗一点,我们可以把自动机看 ...

  10. opencv-python 2 图像基本操作

    图像的基本操作 获取并修改图像的像素值 可以通过行和列的坐标值获取该像素点的像素值.对于BGR图像,它返回一个蓝色,绿色,红色值的数组.对于灰度图像,仅返回相应的强度值. 可以用同样的方法修改像素点的 ...