/**

* 发送邀请

* @param cycleModel*/

protected voidsendEmail(CycleMailModel cycleModel) {

Properties properties= newProperties();

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

properties.put("mail.smtp.user", "smtp.XXX.com");

properties.put("mail.smtp.host", cycleModel.getEmailHost());

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

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

final String username=cycleModel.getEmailAddress();

final String password=cycleModel.getEmailPass();

Authenticator authenticator= newAuthenticator() {protectedPasswordAuthentication getPasswordAuthentication() {return newPasswordAuthentication(username, password);

}

};

Transport transport= null;try{

Session session=Session.getDefaultInstance(properties,

authenticator);

MimeMessage mimeMessage= newMimeMessage(session);

mimeMessage.setSubject(cycleModel.getSubject());if(null != attendee && attendee.size() > 0){for (int i = 0; i < attendee.size(); i++) {

JSONObject mail=attendee.getJSONObject(i);if(mail.containsKey("address")){

mimeMessage.addRecipient(javax.mail.Message.RecipientType.TO,new InternetAddress(mail.getString("address")));

}

}

}

mimeMessage.setFrom(newInternetAddress(username));//method=REQUEST;

mimeMessage.setSentDate(newDate());

mimeMessage.setContent(getContentText(cycleModel));/*if(cycleModel.getMethodType() == 1){

}else{

mimeMessage.setContent(cancelVEvent(cycleModel));

}*/mimeMessage.saveChanges();

transport= session.getTransport("smtp");

transport.connect("mail.sfsctech.com",username, password);

transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());

}catch(MessagingException e) {//TODO Auto-generated catch block

JSONObject exception =JSONObject.fromObject(e);//异常邮箱

if(exception.containsKey("invalidAddresses")){

JSONArray invalidAddresses= exception.getJSONArray("invalidAddresses");if(null != invalidAddresses && invalidAddresses.size() > 0){for (int i = 0; i < invalidAddresses.size(); i++) {//修改发送失败状态

JSONObject mailObject =invalidAddresses.getJSONObject(i);this.dao.updateInvalidAddressesState(cycleModel.getPrimaryKey(), mailObject.getString("address"),2,2);

}

logger.error("异常邮箱:"+invalidAddresses.toString());

}

}//被退回邮箱

if(exception.containsKey("validUnsentAddresses")){

JSONArray validUnsentAddresses= exception.getJSONArray("validUnsentAddresses");if(validUnsentAddresses.size() > 0){this.attendee=validUnsentAddresses;

sendEmail(cycleModel);

System.out.println("会议邮件 发送失败,再次发送");

}

}

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}finally{if (transport != null)try{

transport.close();

}catch(MessagingException logOrIgnore) {

}

}

}/**

* 邀请内容

* @param cycleModel

* @return

* @throws Exception*/

protectedMultipart getContentText(CycleMailModel cycleModel) throws Exception {//时区

/** TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance()

* .createRegistry(); TimeZone timezone =

* registry.getTimeZone("Asia/Shanghai"); // 会议地点 // 会议时间

* java.util.Calendar cal = java.util.Calendar.getInstance();

*

* cal.setTimeZone(timezone); cal.set(2015, 6, 2, 14, 0); // 月份是要早一个月

* DateTime start = new DateTime(cal.getTime()); cal.set(2015, 6, 2, 14,

* 30); DateTime end = new DateTime(cal.getTime());*/Calendar calendar= newCalendar();

calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN"));

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

calendar.getProperties().add(CalScale.GREGORIAN);

DateTime start= new DateTime(format.parse(cycleModel.getBeginTime().substring(0, 16)).getTime());

DateTime end= new DateTime(format.parse(cycleModel.getEndTime().substring(0, 16)).getTime());

VEvent vevent= newVEvent(start, end, cycleModel.getSubject());

vevent.getProperties().add(new Location(cycleModel.getLocation()));//会议地点

vevent.getProperties().add(newUid(cycleModel.getEventUid()));

Organizer org= new Organizer(URI.create("mailto:" +cycleModel.getEmailAddress()));

vevent.getProperties().add(org);//主键

Sequence sequence = newSequence(cycleModel.getSequenceId());

vevent.getProperties().add(sequence);if(cycleModel.getEventType() == 2){

String endTime= cycleModel.getBeginTime().substring(0, 10) + " " + cycleModel.getEndTime().substring(11, 16);

vevent.getEndDate().setDate(newDateTime(format.parse(endTime)));//添加事件规则 天、周

vevent.getProperties().add(getRRule(cycleModel));

}//与会人

int i = 1;for (int j = 0; j < this.attendee.size(); j++) {

JSONObject emailObject= this.attendee.getJSONObject(j);if(emailObject.containsKey("address")){

Attendee attendee= new Attendee(URI.create("mailto:" + emailObject.getString("address")));

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"));//--------VAlarm Over-------------//--------日历对象 Start---------------

Calendar icsCalendar = newCalendar();

icsCalendar.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN"));

icsCalendar.getProperties().add(CalScale.GREGORIAN);

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

String method= "REQUEST";//新增或者编辑

if(cycleModel.getMethodType().equals(1)){

vevent.getAlarms().add(valarm);//将VAlarm加入VEvent

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

}else{

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

method= "CANCEL";

}

icsCalendar.getComponents().add(vevent);//将VEvent加入Calendar

icsCalendar.validate();//将日历对象转换为二进制流

CalendarOutputter co = new CalendarOutputter(false);

ByteArrayOutputStream os= newByteArrayOutputStream();

co.output(icsCalendar, os);byte[] mailbytes =os.toByteArray();//--------日历对象 Over------------------

BodyPart mbp = newMimeBodyPart();

mbp.setContent(mailbytes,"text/calendar;method="+method+";charset=UTF-8");

System.out.println("会议邮件 method ="+method);

BodyPart content= newMimeBodyPart();

content.setContent(cycleModel.getBody(),"text/html;charset=UTF-8");

System.out.println("会议邮件 Body ="+cycleModel.getBody());

MailcapCommandMap mc=(MailcapCommandMap) CommandMap

.getDefaultCommandMap();

mc

.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");

mc

.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");

mc

.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");

mc

.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");

mc

.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");

CommandMap.setDefaultCommandMap(mc);

MimeMultipart mm= newMimeMultipart();

mm.setSubType("related");

mm.addBodyPart(mbp);

mm.addBodyPart(content);returnmm;

}

java exchange发邮件_java发送exchange邮件问题相关推荐

  1. java 定时任务每月1号发送excel邮件

    java 定时任务每月1号发送excel邮件 1.生成excel 数据流 public ByteArrayInputStream exportxls(){String preDate = " ...

  2. java exchange发邮件_Java通过exchange协议发送邮件

    本文实例为大家分享了Java通过exchange协议发送邮件的具体代码,供大家参考,具体内容如下 pom.xml 导入包 com.microsoft.ews-java-api ews-java-api ...

  3. java 发邮件 qq有些_Java 发送QQ邮件

    1. 开启SMTP服务 1.1 在QQ邮箱的 设置->账户 里开启 SMTP 服务 1.2 QQ邮箱不能直接用QQ密码,而是使用 授权码 ,点击 生成授权码 2. 编写代码 2.1 添加依赖的j ...

  4. java实现通过QQ邮箱发送激活邮件 springBoot

    用户邮件激活 通过QQ邮箱发送激活邮件 soringBoot 本文主要介绍了使用java 调用邮箱发送邮件的功能 首先新建一个springboot项目 pom依赖如下 <parent>&l ...

  5. java spring 开启SMTP服务发送QQ邮件

    首先进入自己的QQ邮箱,在设置中修改账户信息 然后来至底部 点击开启,再用手机发送对应信息到指定号码,然后点击我已发送 获取授权码 注意提示: 到这里,相信你已经开通了SMTP服务,这样就可以在jav ...

  6. php空间自动发邮件,PHP 发送QQ邮件【实例】

    利用 PHPMailer 发送邮箱 composer require phpmailer/phpmailer 命名空间如下 namespace app\api\controller\v1; use P ...

  7. python发html邮件_python 发送html邮件

    简单的python发送html邮件代码,如下:#!/usr/bin/env python #-*- coding:utf-8 -*- import smtplib from email.header ...

  8. php html邮件,php发送HTML邮件

    PHP 发送HTML邮件 需要实现php自动发邮件,原本希望调用Jmail组件实现的,但是发送中文内容的时候,在邮件正文后面总是多出一串乱码,另我很纠结,在网上找了半天也没有能找到原因,无奈之下找了一 ...

  9. python 收发邮件_python发送各类邮件的主要基本方法

    利用python实现基本的邮件发送. 感谢以下博客的整理,本人在学习的同时也做了一些整理 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: ...

最新文章

  1. POJ2308连连看dfs+bfs+优化
  2. centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...
  3. mysql auto position_MHA-Failover(GTID,Auto_Position=0)
  4. addView的误区
  5. rest开发_REST 101开发人员专用
  6. 【71】力科PCIe 协议分析仪常见操作
  7. AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(一)
  8. 矩阵Jordan标准型过渡矩阵的求解
  9. LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array
  10. 把sql中的image数据在网页中显示成图片
  11. matlab的三维绘图函数,MATLAB中的三维绘图函数总结
  12. larval 使用redis做缓存
  13. response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别
  14. 美国大学计算机科学专业排名2019,2019年美国大学计算机专业排名
  15. 算法设计与分析之最大流问题
  16. [解疑]图像、矩阵的二维空间变换
  17. Linux上下文切换[转]
  18. 大数据技术用哪些语言?
  19. int(11)是什么意思
  20. 【职场】反思如何做好技术分分享

热门文章

  1. JButton类,简单应用
  2. windows下给定多个openNi的Uri,匹配与uri对应的Uvc RGB设备
  3. LeetCode 25. K 个一组翻转链表
  4. RDKit | 基于RDKit和化学信息学探索化学空间
  5. Nat. Genet. | 基于遗传学主导的方法定义免疫相关性状的药物靶标
  6. 一个公众号可以绑定几个小程序_如何实现微信小程序和公众号的绑定
  7. 如何在游标里控制条件_热处理精密渗碳里的碳势如何控制
  8. RStuido Server 选择不同的 R 版本(conda 中的不同 R 版本)
  9. Nature综述:如何获得理想的微生物组
  10. QIIME 2用户文档. 15样品分类和回归q2-sample-classifier(2019.7)