java 邮件提醒功能_利用ical4j和javamail发送会议邀请实现邮件发送提醒功能

该代码实现了一个用于发送邮件的功能,包括设置发件人、收件人、抄送人、邮件主题、内容、重要性等级,并且能够添加附件。邮件内容还包含了iCalendar格式的日历事件,用于提醒功能。同时,邮件发送后会删除本地的临时附件文件。
摘要由CSDN通过智能技术生成

/***

*@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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值