初学者可以先了解下ical4j的基本信息:

iCalender编程基础,了解与使用ical4j:https://www.ibm.com/developerworks/cn/java/j-lo-ical4j/index.html

废话不多说直接进入题

maven

<!-- 导入ical4j库 -->
<dependency><groupId>org.mnode.ical4j</groupId><artifactId>ical4j</artifactId><version>1.0.2</version>
</dependency><!-- 邮件start -->
<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version>
</dependency>

在通过ical4j与javamail实现会议邀请的时候,过程如下

1、通过ical4j创建一个Calendar(日历),这个Calendar中可以包括VEvent(事件)、VAlarm(提醒)、TODO(待办事项)等多项内容。而会议邀请则必须要包含VEvent,如果需要提醒,则可以包含VAlarm。

public static Multipart getContentText() throws Exception {// 时区TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();TimeZone timezone = registry.getTimeZone("Asia/Shanghai");// 会议地点String location = "安徽省合肥市";// 会议时间java.util.Calendar cal = java.util.Calendar.getInstance();cal.setTimeZone(timezone);//会议启动时间cal.set(2018, 2 - 1, 13, 13, 45); // 月份是要早一个月DateTime start = new DateTime(cal.getTime());//会议结束时间cal.set(2018, 2 - 1, 13, 18, 55);DateTime end = new DateTime(cal.getTime());// --------事件(VEvent start)----------VEvent vevent = new VEvent(start, end, subject);vevent.getProperties().add(timezone.getVTimeZone().getTimeZoneId());// 时区vevent.getProperties().add(new Location(location));// 会议地点vevent.getProperties().add(new Summary(subject));// 邮件主题vevent.getProperties().add(new Description(content));// 邮件内容vevent.getProperties().add(new UidGenerator("meeting invite").generateUid());// 设置uidvevent.getProperties().add(new Organizer(URI.create("mailto:" + from)));// 与会人Set<String> emailSet = new HashSet<String>();emailSet.add(from);emailSet.add(to);int i = 1;for (String email : emailSet) {Attendee attendee = new Attendee(URI.create("mailto:" + email));if (1 == i) {attendee.getParameters().add(Role.REQ_PARTICIPANT);} else {attendee.getParameters().add(Role.OPT_PARTICIPANT);}attendee.getParameters().add(new Cn("Developer" + i));vevent.getProperties().add(attendee);i++;}// --------VEvent Over----------// --------提醒(VAlarm Start)----------// 提前10分钟提醒VAlarm valarm = new VAlarm(new Dur(0, 0, -10, 0));// 重复一次valarm.getProperties().add(new Repeat(1));// 持续十分钟valarm.getProperties().add(new Duration(new Dur(0, 0, 10, 0)));// 提醒窗口显示的文字信息valarm.getProperties().add(new Summary("Event Alarm"));valarm.getProperties().add(Action.DISPLAY);valarm.getProperties().add(new Description("Progress Meeting at 9:30am"));vevent.getAlarms().add(valarm);// 将VAlarm加入VEvent// --------VAlarm Over-------------// --------日历对象 Start---------------Calendar icsCalendar = new Calendar();icsCalendar.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN"));icsCalendar.getProperties().add(CalScale.GREGORIAN);icsCalendar.getProperties().add(Version.VERSION_2_0);icsCalendar.getProperties().add(Method.REQUEST);icsCalendar.getComponents().add(vevent);// 将VEvent加入Calendar// 将日历对象转换为二进制流CalendarOutputter co = new CalendarOutputter(false);ByteArrayOutputStream os = new ByteArrayOutputStream();co.output(icsCalendar, os);byte[] mailbytes = os.toByteArray();// --------日历对象 Over------------------BodyPart mbp = new MimeBodyPart();mbp.setContent(mailbytes, "text/calendar;method=REQUEST;charset=UTF-8");MimeMultipart mm = new MimeMultipart();mm.setSubType("related");mm.addBodyPart(mbp);return mm;}

  2、事件创建之后,通过javamail发送邮件

private static String from = "***@126.com";private static String to = "***@126.com";//收件人private static String subject = "test";//标题private static String content = "青空报告总结会议";//邮件内容 public static void main(String[] args) {// 链接邮件服务器Properties props = new Properties();props.put("mail.transport.protocol", "smtp"); // 邮件协议props.put("mail.smtp.host", "smtp.126.com"); // 服务器域名props.put("mail.smtp.auth", "true");//账号密码认证Authenticator auth = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {String username = "***@126.com"; // 大多数是你邮件@前面的部分String pwd = "******";return new PasswordAuthentication(username, pwd);}};Session mailSession = Session.getInstance(props, auth);// 获取Message对象Message msg = new MimeMessage(mailSession);try {// 设置邮件基本信息msg.setFrom(new InternetAddress(from));//发件人msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));//收件人msg.setSentDate(new java.util.Date());//发送时间msg.setSubject(subject);//发送标题Multipart mp = getContentText();// 获取不同类型的邮件的邮件内容msg.setContent(mp);msg.saveChanges();} catch (Exception ex) {}System.out.println(sendEmail(msg));}public static Boolean sendEmail(Message msg) {// 发送邮件try {Transport.send(msg);return true;} catch (SendFailedException e) {// 邮件地址无效System.out.println(e);return false;} catch (Exception e) {Timer timer = new Timer();System.out.println(e);return false;}}

使用javamail发送邮件时,需要连接邮件服务器,根据不同的邮箱填写不同的邮箱服务器域名及协议,具体可百度搜索相关邮箱网站即可查询

例:

 网易126免费邮箱相关服务器服务器信息:

 邮件服务器名称 服务器地址  端口号
  POP3服务器 pop.126.com  110
  SMTP服务器 smtp.126.com  25
  IMAP服务器 imap.126.com  143

 qq免费邮箱相关服务器服务器信息:

邮件服务器名称 服务器地址  端口号
  POP3服务器 pop.qq.com 465
  SMTP服务器 smtp.qq.com 587

在账号密码认证时,需要开通对应邮箱的授权码使用授权码代替邮箱密码

qq开通授权码流程:https://jingyan.baidu.com/article/fedf0737af2b4035ac8977ea.html

网易开通授权码流程:https://jingyan.baidu.com/article/9faa72318b76bf473c28cbf7.html

最后附加几条可能遇到的错误信息:

1、553 Mail from must equal authorized user:这个错误网上搜都说是System Admin e-main Address 没有设置,不过我后来解决是因为设置该属性的时候没有配置正确

    mimeMessage.setFrom(new InternetAddress("***@126.com"));

2、535 Error: authentication failed:这个问题就是上面所说的授权码的问题了,如果你的pwssword 使用的是邮箱的登录密码就会报这个错误,需要获取邮箱的授权码才可以

3、javax.mail.NoSuchProviderException: No provider for pop:邮件协议与服务器域名冲突了,smtp => smtp.126.com,pop => pop.126.com

4、javax.mail.AuthenticationFailedException: 550 Óû§ÎÞȨµÇ½:用户名密码错误

5、com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp1:如果出现改错误,那么可能是标题或内容中出现了test或helloword等,被网易认为邮件内容不合法。

把各项内容按正常的内容填写之后发送就正常使用了

具体可参考:http://blog.csdn.net/yiyihuazi/article/details/53671791

企业退信的常见问题:http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

备注:本博客内容仅用于学习,如有侵犯到您的权益,请立即联系我修改或删除,谢谢

javamail+iCal4j实现发送邮件会议相关推荐

  1. flask-mail异步发送邮件_SpringBoot 2.0 集成 JavaMail ,实现异步发送邮件

    一.JavaMail的核心API 1.API功能图解 2.API说明 (1).Message 类: javax.mail.Message 类是创建和解析邮件的一个抽象类子类javax.mail.int ...

  2. SpringBoot 2.0 集成 JavaMail ,实现异步发送邮件

    一.JavaMail的核心API 1.API功能图解 2.API说明 (1).Message 类: javax.mail.Message 类是创建和解析邮件的一个抽象类 子类javax.mail.in ...

  3. 【java】javamail简介以及发送邮件

    一.前言 最近和聚哥一起研究了javamail,因为在开发的系统中需要使用一个发送邮件的功能,所以就想到了javamail.当然在以前做的项目中也用到过发送邮件的功能,但是没有这么深入的研究过.所以就 ...

  4. javamail通过代理发送邮件

    我们是没办法使用javamail通过一般的代理服务器发送邮件的,比如下面的代码是没有效果的: Properties props = System.getProperties();props.setPr ...

  5. java发送QQ群邮件,Java使用腾讯企业邮箱 、javamail 、 SSL 发送邮件/群发

    引入相关依赖: javax.mail mail 1.4.7 commons-io commons-io 2.4 如果使用spring的发邮件,还需要添加依赖: org.springframework ...

  6. 编写更少量的代码:使用apache commons工具类库

    Commons-configuration Commons-FileUploadCommons DbUtilsCommons BeanUtils Commons CLI Commons CodecCo ...

  7. JavaWeb黑马旅游网-学习笔记01【准备工作】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  8. SpringBoot2 整合Ehcache组件,轻量级缓存管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Ehcache缓存简介 1.基础简介 EhCache是一个纯Java的进程内缓存框架,具有快速.上手简单等特点,是Hibernate中默认 ...

  9. SpringBoot2 整合MinIO中间件,实现文件便捷管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.MinIO简介 1.基础描述 MinIO是一个开源的对象存储服务.适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

最新文章

  1. rlwrap 让Linux下的sqlplus变得好用
  2. 逆转线性单链表 c语言,单链表的逆转,不会做啊
  3. 学习STM32很简单?
  4. 笔记整理——linux程序设计
  5. python o创建文件_Python 文件I/O
  6. 关于BCT,你需要知道的是...
  7. 07-03 pipenv-Python虚拟环境工具
  8. 拓端tecdat|R语言估计获胜概率:模拟分析学生多项选择考试通过概率可视化
  9. 点聚-weboffice 6.0 (一)
  10. JavaWeb学习笔记——Mac os下在idea中创建Web项目以及部署Tomcat
  11. matlab时域采样理论得验证,基于matlab时域采样和频域采样验证毕业设计
  12. 冰点还原8.53破解版
  13. Boomzap一个虚拟游戏开发工作室的成功经验
  14. 怎样提取电影片段做gif?仅需三步在线截取gif动图
  15. 全面了解风控指标体系
  16. 我们肯定需要开发自己的BOL和GENIL
  17. Linux nohup用法
  18. python混合整数非线性规划_什么是混合整数非线性规划问题
  19. PYTHON 画一支圆珠笔
  20. M1卡 不能使用KeyB进行读写的问题

热门文章

  1. java 设置年轻代堆大小,[JVM学习之路]五堆(一)堆的内存结构参数设置分代思想内存分配...
  2. python 出事Re 模块
  3. CDR 论文阅读 1
  4. 05-初识并发问题(抢火车票)
  5. 阿里云推出网盘App,开放申请!非会员下载 10MB/s! 没想到还有更牛逼的:60M/s...
  6. 从入门到实战,Netty多线程篇案例集锦
  7. 线性代数与数据学习:MIT教授Gilbert Strang帮你打下坚实的数学基础
  8. 基于LPWAN技术的低成本 IoT 物联网企业资产管理解决方案
  9. 计算机普通话测试教程说话,普通话水平测试说话题答题技巧
  10. c语言编程知识分享uc头条,资深程序员分享的C语言编程中的一些误用及知识总结...