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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值