java 邮件提醒功能_利用ical4j和javamail发送会议邀请实现邮件发送提醒功能
/***
*@paramsenderAccount 发件人账号
*@paramsenderPassword 发件人密码
*@paramtoAddress 收件人邮箱地址
*@paramccAddress 抄送人地址
*@paramnoticeTitle subject的标题
*@paramnoticeContent subject的内容
*@paramcriticalityClass 邮件重要性等级
*@paramworkShop 车间
*@paramline 线体
*@paramattachmentPath 附件路径
*@return
*/
privateString sendEmailUtil(String senderAccount, String senderPassword,
String toAddress, String ccAddress, String noticeTitle,String noticeContent,String criticalityClass,String workShop,String line,String attachmentPath) {
String from=senderAccount+"@sunwoda.com";
String to=toAddress;
String location="车间:"+workShop+" 线体:"+line;final String sendAccount=senderAccount;final String sendPwd=senderPassword;//链接邮件服务器
Properties props = newProperties();
props.put("mail.transport.protocol", "smtp"); //邮件协议
props.put("mail.smtp.host", "smtp.sunwoda.com"); //服务器域名
props.put("mail.smtp.auth", "true"); //设置用户的认证方式
Authenticator auth= newAuthenticator() {
@OverrideprotectedPasswordAuthentication getPasswordAuthentication() {
String username= sendAccount; //大多数是你邮件@前面的部分
String pwd =sendPwd;return newPasswordAuthentication(username, pwd);
}
};
Session mailSession=Session.getInstance(props, auth);//获取Message对象
Message msg = newMimeMessage(mailSession);try{//设置邮件基本信息
msg.setFrom(newInternetAddress(from));
msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(toAddress));/*if (toAddress != null && !toAddress.isEmpty()){
InternetAddress[] cc = new InternetAddress().parse(toAddress);
msg.setRecipients(Message.RecipientType.TO,cc);
}*/
if (ccAddress != null && !ccAddress.isEmpty()){
InternetAddress[] cc= newInternetAddress().parse(ccAddress);
msg.setRecipients(Message.RecipientType.CC,cc);
}
msg.setSentDate(newjava.util.Date());
msg.setSubject(noticeTitle);
msg.addHeader("ReturnReceipt", "1");if(criticalityClass.equals("高")){
msg.addHeader("X-Priority", "1");
}else if(criticalityClass.equals("中")){
msg.addHeader("X-Priority", "3");
}else{
msg.addHeader("X-Priority", "5");
}//获取不同类型的邮件的邮件内容
Multipart mp =getContentText(from,to,location,noticeTitle,noticeContent,criticalityClass,attachmentPath);
msg.setContent(mp);
msg.saveChanges();
Transport.send(msg);//发送完后删除临时文件
int index=attachmentPath.indexOf('/');
String savePath= StringUtils.getStr(new String[] { this.importFilePath});
String fileName=attachmentPath.substring(index+1);
File file= new File(savePath+File.separator+fileName);
file.delete();return "OK";
}catch(Exception ex) {
ex.printStackTrace();
String errorInfo= ex.getMessage().substring(0,3);if(errorInfo.equals("535")){return "发件人邮箱账号或密码错误!";
}else{return "收件人或抄送人邮箱地址错误!";
}
}
}privateMultipart getContentText(String from,String to,String location1,String noticeTitle,String noticeContent,
String criticalityClass,String attachmentPath)throwsException {
String subject=noticeTitle+"-"+noticeContent;//主题里带内容
String content=noticeContent;//取附件路径和名称
int index=attachmentPath.indexOf('/');
String filePath="/"+attachmentPath.substring(0, index);
String fileName=attachmentPath.substring(index+1);//时区
TimeZoneRegistry registry =TimeZoneRegistryFactory.getInstance().createRegistry();
TimeZone timezone= registry.getTimeZone("Asia/Shanghai");//会议地点
String location =location1;//会议时间
java.util.Calendar cal =java.util.Calendar.getInstance();int year=cal.get(java.util.Calendar.YEAR);int month=cal.get(java.util.Calendar.MONTH) + 1;int day=cal.get(java.util.Calendar.DAY_OF_MONTH);int hour=cal.get(java.util.Calendar.HOUR_OF_DAY);int minute=cal.get(java.util.Calendar.MINUTE)+5;
cal.setTimeZone(timezone);
cal.set(year, month- 1, day, hour, minute); //月份是要早一个月
DateTime start = newDateTime(cal.getTime());
cal.set(year, month- 1, day, hour+8, minute);
DateTime end= newDateTime(cal.getTime());
VEvent vevent= newVEvent(start, end, subject);
vevent.getProperties().add(timezone.getVTimeZone().getTimeZoneId());//时区
vevent.getProperties().add(new Location(location));//会议地点
vevent.getProperties().add(new Description("公告内容:"+"\n"+content));//邮件内容
vevent.getProperties().add(new UidGenerator("uidGen").generateUid());//设置uid//组织者
vevent.getProperties().add(new Organizer(URI.create("mailto:" +from)));//与会人
Set emailSet = new HashSet();
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----------//提醒,提前5分钟
VAlarm valarm = new VAlarm(new Dur(0, 0, -5, 0));
valarm.getProperties().add(new Repeat(10));
valarm.getProperties().add(new Duration(new Dur(0, 0, 5, 0)));//提醒窗口显示的文字信息
valarm.getProperties().add(new Summary("Event Alarm"));
valarm.getProperties().add(Action.DISPLAY);
valarm.getProperties().add(new Description("会议提醒描述,待定,不确定使用方式"));
vevent.getAlarms().add(valarm);//将VAlarm加入VEvent//--------VAlarm Over-------------//--------日历对象 Start---------------
Calendar icsCalendar = newCalendar();
icsCalendar.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
icsCalendar.getProperties().add(Version.VERSION_2_0);
icsCalendar.getProperties().add(CalScale.GREGORIAN);
icsCalendar.getProperties().add(timezone.getVTimeZone().getTimeZoneId());
icsCalendar.getComponents().add(vevent);//将VEvent加入Calendar//将日历对象转换为二进制流
CalendarOutputter co = new CalendarOutputter(false);
ByteArrayOutputStream os= newByteArrayOutputStream();
co.output(icsCalendar, os);byte[] mailbytes =os.toByteArray();//9. 创建附件"节点"
MimeBodyPart attachment = newMimeBodyPart();//从FTP上下载文件到本地
String savePath = StringUtils.getStr(new String[] { this.importFilePath});
downFileFroFTP("192.168.x.xxx", 21, "xxxxxx", "xxxxx", filePath,fileName, savePath);//读取本地文件
DataHandler dh2 = new DataHandler(new FileDataSource(savePath+File.separator+fileName));//将附件数据添加到"节点"
attachment.setDataHandler(dh2);//设置附件的文件名(需要编码)
attachment.setFileName(MimeUtility.encodeText(dh2.getName()));//--------日历对象 Over------------------
MimeMultipart mm = newMimeMultipart();
MimeBodyPart iCalAttachment= newMimeBodyPart();
iCalAttachment.setDataHandler(new DataHandler(new ByteArrayDataSource(newByteArrayInputStream(mailbytes),"text/calendar;method=REQUEST;charset=UTF-8")));
mm.addBodyPart(iCalAttachment);
mm.addBodyPart(attachment);//添加附件
mm.setSubType("related");returnmm;
}
java 邮件提醒功能_利用ical4j和javamail发送会议邀请实现邮件发送提醒功能相关推荐
- 利用javamail、ical4j发送会议邀请(日历)邮件、注意ical4j需要修改
一.pom添加依赖 <dependency> <groupId>org.mnode.ical4j</groupId> ...
- java邮件会议邀请_javamail+ical4j发送会议邀请
(edit by king)最近要搞个提醒系统,也就是能够设置个时间,在那个时间发封邮件提醒的系统.为了能够更好的起到提醒的效果,暂定的方案是发送会议邀请. 以前知道outlook的会议邀请格式不能仅 ...
- Java 发送会议邀请到 Outlook
Java 发送会议邀请到 Outlook Java 发送会议邀请到 Outlook 1.发件服务器配置 2.发送邮件代码 3.测试代码 Java 发送会议邀请到 Outlook 系统:Win10 ID ...
- 使用数据库邮件发送会议邀请
http://social.microsoft.com/Forums/it-IT/3ba417d6-6548-48ed-9e9f-1a6549edc569 大家好, 在此提供一个示例展示如何使用数据库 ...
- Qt利用avilib实现录屏功能_利用“别名”实现Sendmail的邮件群发和邮件备份功能...
前序 Sendmail服务器是一款经典的邮件发送软件,利用SMTP协议,实现邮件的发送,在CentOS7 邮件服务器部署(sendmail)中,我们学习了sendmail的基础配置,今天我们通过Lin ...
- java 发送会议邮件模板_使用ical4j和javamail发送会议邀请
/** *将会议邀请信息生成标准格式的字符串 * @param startTime 开始时间 * @param endTime 结束时间 * @param title 会议名称 * @param or ...
- java 用于xcopy复制_利用xcopy命令实现本地文件复制到远程服务器的方法
利用xcopy命令实现本地文件复制到远程服务器的方法 更新时间:2013年05月08日 10:52:36 作者: 把本地文件复制到远程服务器:用Xcopy命令可以做到,具体实现如下,感兴趣的朋友可 ...
- vm虚拟机安装lede旁路由_利用VMM虚拟机 安装LEDE旁路由 实现软路由超强功能
我的GEN8从ESXi虚拟机又重新转移到了群晖实体机.实体机功能便捷.易操作,不像虚拟机那样繁琐. 在ESXi中体会了下LEDE软路由,酷软功能十分丰富,软件琳琅满目,我只想使用其中的"签到 ...
- java 发送会议邮件模板_使用javamail发送会议邀请
网上找了很多关于javamail发送会议请求的文章,终于成功了,没有使用ical4j,发送的outlook直接打开就是一个会议请求,而不是以附件的形式存在.具体的注意点在代码中以注释的形式标明. DE ...
最新文章
- Microsoft 数据访问组件 (MDAC) 的版本历史记录
- python合并pdf 加书签_使用Python批量合并PDF文件(带书签功能)
- 原生微信小程序父组件调用子组件中的方法
- 【动态规划】01背包问题
- 前端学习(2779):项目功能介绍
- 为什么要使用class.forname在DriverManager.getConnection之前
- 微信自动选择浏览器打开方式
- 管理学大师彼得 德鲁克
- 哈夫曼编码c语言例题,关于哈夫曼编码试题的计算
- 2022华为杯研究生数学建模解题思路和代码思路
- phpnow php升级,phpnow如何升级php版本
- 手机上的环境光传感器
- linux 合并视频文件,Linux下转换视频格式与合并视频
- 星火计划 | Apache InLong一站式大数据接入平台沙龙火热报名中
- CentOS 安装meld
- PhoneGap Cordova 安装白皮书
- 2021年危险化学品经营单位安全管理人员考试报名及危险化学品经营单位安全管理人员证考试
- 【Python画樱花源码】
- oracle open_cursors参数配置
- Web GIS 地图投影与坐标系的研究与总结