Java中获取当前系统时间与发送带附件email
近来因为公司要做一些功能是给供应商发送短信和邮件的,因为是新手,以前没有做过,所以特意去学习了一下,并且整理出来一些相关的东西以方便以后遇到类似的情况更好的处理。
attachment.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart
attachment.setFileName(MimeUtility.encodeText(fds.getName())); // 得到文件名同样至入BodyPart,并且进行文件名编码处理
mp.addBodyPart(attachment); //将附件装载进MimeMultipart组件中
先来说一下如何获取当前系统时间。
Date nowTime = new Date(System.currentTimeMillis());//获取当前系统时间
SimpleDateFormat sdFormatter = new SimpleDateFormat("yyyy-MM-dd");//定义时间格式
String retStrFormatNowDate = sdFormatter.format(nowTime);//设置时间格式
接着是发送带附件的邮件,在做着个功能的时候,遇到了不少的问题,比如说附件文件名乱码,与附件路径问题。
/**
* 发送邮件
*
*/
public static boolean sendEMail()
{
String host = SendPropUtil.getValue(""); //发件人使用发邮件的电子信箱服务器
String from = SendPropUtil.getValue(""); //发邮件的出发地(发件人的信箱)
Properties props = System.getProperties();// 得到系统properties
props.put("", );// 设置邮件服务器
props.put("", ""); // 取得session//这样才能通过验证
Session session = Session.getDefaultInstance(props, myauth);
// 定义message
MimeMessage message = new MimeMessage(session);
String nick="";
try {
nick=javax.mail.internet.MimeUtility.encodeText(""); //设置邮件发送方
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try
{
message.setFrom(new InternetAddress(nick+" <"+from+">"));
message.addRecipient();// 设定接受邮件的地址
message.setSubject(subject);// 设定邮件主题
if("xxx".equals(subject.substring(20,26))){
MimeMultipart mp = new MimeMultipart();//创建一个MimeMultipart 组件,用来装载附件
MimeBodyPart contentMbp = new MimeBodyPart();//邮件内容
MimeBodyPart attachment = new MimeBodyPart();//邮件附件
contentMbp.setText(content);//设定邮件内容
String path = Thread.currentThread().getContextClassLoader().getResource(".").getPath();//获取当前路径
String newPath = path.substring(1).replace("lib", "webapps");
System.out.println("打印:"+"\t"+path);
file.addElement( newPath + "");//邮件中附件1的路径
file.addElement( newPath + "");//邮件中附件2的路径
if(!file.isEmpty()){//有附件
Enumeration efile = file.elements();
while(efile.hasMoreElements()){
attachment = new MimeBodyPart();
filename=efile.nextElement().toString(); //得到附件路径
FileDataSource fds = new FileDataSource(filename); //得到数据源
attachment.setDataHandler(new DataHandler(fds)); //得到附件本身并装载进BodyPart
attachment.setFileName(MimeUtility.encodeText(fds.getName())); //得到文件名同样至入BodyPart,并且进行文件名编码处理
mp.addBodyPart(attachment);
}
file.removeAllElements();
}
mp.addBodyPart(contentMbp);//装载邮件内容
mp.addBodyPart(contentMbp);//装载邮件附件装载到MimeMultipart中
message.setContent(mp);//add wgs 设定邮件内容,带附件装载到MimeMessage中
}else{
message.setText(content);// 设定邮件内容
}
message.saveChanges();
Transport.send(message);
return true;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
1、附件名称乱码问题:MimeUtility.encodeText(FileDataSource.getName());
attachment.setFileName();//注意是在设置附件名称的时候处理乱码问题,即参数是MimeUtility.encodeText(FileDataSource.getName())
2、Thread.currentThread().getContextClassLoader().getResource(".").getPath();获取到当前的路径,return String 返回的是一个当前工作空间的路径,具体的路径请自己运行代码查看
3、FileDataSource fds = new FileDataSource(filename); //得到数据源 FileDataSource 本来就是一个流对象。
通过其构造方法
FileDataSource(String name) 根据指定的路径名创建 FileDataSource。
即可得到数据源,而不需要再使用其他的IO流来读取文件 。 String name参数是文件的具体路径,比如file:/F:/WORK/FDC_PR/test/bin/这样子的一个路径,根据这个路径就可以通过拼接String得到绝对路径4
4、如果存在需要发送多个附件的情况下,而已像上面一样,通过Vector file = new Vector()来装载,然后循环遍历vector,每得到一个附件就装载进MimeMultipart组件中
MimeMultipart mp = new MimeMultipart()
MimeBodyPart contentMbp = new MimeBodyPart();//邮件内容
MimeBodyPart attachment = new MimeBodyPart();//邮件附件
MimeBodyPart attachment = new MimeBodyPart();//邮件附件
contentMbp.setText(content);//设定邮件内容
attachment = new MimeBodyPart();
FileDataSource fds = new FileDataSource(filename); //得到数据源
attachment.setDataHandler(new DataHandler(fds)); //得到附件本身并至入BodyPart
attachment.setFileName(MimeUtility.encodeText(fds.getName())); // 得到文件名同样至入BodyPart,并且进行文件名编码处理
mp.addBodyPart(attachment); //将附件装载进MimeMultipart组件中