java exchange发邮件_java发送exchange邮件问题
/**
* 发送邀请
* @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邮件问题相关推荐
- java 定时任务每月1号发送excel邮件
java 定时任务每月1号发送excel邮件 1.生成excel 数据流 public ByteArrayInputStream exportxls(){String preDate = " ...
- java exchange发邮件_Java通过exchange协议发送邮件
本文实例为大家分享了Java通过exchange协议发送邮件的具体代码,供大家参考,具体内容如下 pom.xml 导入包 com.microsoft.ews-java-api ews-java-api ...
- java 发邮件 qq有些_Java 发送QQ邮件
1. 开启SMTP服务 1.1 在QQ邮箱的 设置->账户 里开启 SMTP 服务 1.2 QQ邮箱不能直接用QQ密码,而是使用 授权码 ,点击 生成授权码 2. 编写代码 2.1 添加依赖的j ...
- java实现通过QQ邮箱发送激活邮件 springBoot
用户邮件激活 通过QQ邮箱发送激活邮件 soringBoot 本文主要介绍了使用java 调用邮箱发送邮件的功能 首先新建一个springboot项目 pom依赖如下 <parent>&l ...
- java spring 开启SMTP服务发送QQ邮件
首先进入自己的QQ邮箱,在设置中修改账户信息 然后来至底部 点击开启,再用手机发送对应信息到指定号码,然后点击我已发送 获取授权码 注意提示: 到这里,相信你已经开通了SMTP服务,这样就可以在jav ...
- php空间自动发邮件,PHP 发送QQ邮件【实例】
利用 PHPMailer 发送邮箱 composer require phpmailer/phpmailer 命名空间如下 namespace app\api\controller\v1; use P ...
- python发html邮件_python 发送html邮件
简单的python发送html邮件代码,如下:#!/usr/bin/env python #-*- coding:utf-8 -*- import smtplib from email.header ...
- php html邮件,php发送HTML邮件
PHP 发送HTML邮件 需要实现php自动发邮件,原本希望调用Jmail组件实现的,但是发送中文内容的时候,在邮件正文后面总是多出一串乱码,另我很纠结,在网上找了半天也没有能找到原因,无奈之下找了一 ...
- python 收发邮件_python发送各类邮件的主要基本方法
利用python实现基本的邮件发送. 感谢以下博客的整理,本人在学习的同时也做了一些整理 一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: ...
最新文章
- POJ2308连连看dfs+bfs+优化
- centos环境下使用percona-xtrabackup对mysql5.6数据库innodb和myisam进行快速备份及恢复...
- mysql auto position_MHA-Failover(GTID,Auto_Position=0)
- addView的误区
- rest开发_REST 101开发人员专用
- 【71】力科PCIe 协议分析仪常见操作
- AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(一)
- 矩阵Jordan标准型过渡矩阵的求解
- LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array
- 把sql中的image数据在网页中显示成图片
- matlab的三维绘图函数,MATLAB中的三维绘图函数总结
- larval 使用redis做缓存
- response.getWriter().write()和 response.getWriter().print()的区别 以及 PrintWriter对象 和 out对象 的区别
- 美国大学计算机科学专业排名2019,2019年美国大学计算机专业排名
- 算法设计与分析之最大流问题
- [解疑]图像、矩阵的二维空间变换
- Linux上下文切换[转]
- 大数据技术用哪些语言?
- int(11)是什么意思
- 【职场】反思如何做好技术分分享
热门文章
- JButton类,简单应用
- windows下给定多个openNi的Uri,匹配与uri对应的Uvc RGB设备
- LeetCode 25. K 个一组翻转链表
- RDKit | 基于RDKit和化学信息学探索化学空间
- Nat. Genet. | 基于遗传学主导的方法定义免疫相关性状的药物靶标
- 一个公众号可以绑定几个小程序_如何实现微信小程序和公众号的绑定
- 如何在游标里控制条件_热处理精密渗碳里的碳势如何控制
- RStuido Server 选择不同的 R 版本(conda 中的不同 R 版本)
- Nature综述:如何获得理想的微生物组
- QIIME 2用户文档. 15样品分类和回归q2-sample-classifier(2019.7)