- 最近遇到个小问题,要把前台传过来的字符串包装成txt格式并作为邮件的附件发送到指定邮箱。平时的解决思路是把字符串写入到本地文件,再读取文件作为邮件附件发送,但是发现文件没有必要在本地进行存储,最终采用流的方式附件上传成功。
public static boolean sendErrorLog(String emailBody,String fileName,String errorComment) throws Exception{
String errorLogForm = emailBody.replaceAll("\n","<br>").replaceAll("\t"," ");
String Subject = "ErrorLog";
String from = RegistryHelper.getFromRegistry("EmailFrom");
String targetAddress = RegistryHelper.getFromRegistry("SendErrorLogAddress");
String commentForm = "<b>COMMENT:</b> "+errorComment+"<br /><br /><br />";
Properties props = new Properties();
String host = RegistryHelper.getSMTPServerName();
props.setProperty("mail.smtp.host", host);
Session session = Session.getInstance(props);
try{
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(targetAddress));
msg.setSubject(Subject);
MimeBodyPart context = new MimeBodyPart();
context.setContent(commentForm + errorLogForm,"text/html;charset=UTF-8");
MimeBodyPart attachment = new MimeBodyPart();
ByteArrayDataSource rawData = new ByteArrayDataSource(emailBody.getBytes(), "text/txt");
DataHandler dh = new DataHandler(rawData);
attachment.setDataHandler(dh);
attachment.setFileName(fileName);
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(context);
mm.addBodyPart(attachment);
mm.setSubType("mixed");
msg.setContent(mm);
msg.setSentDate(new Date());
Transport.send(msg);
log.info(Constants.Trace_in_the_log);
log.info(" error log sent successfully...");
return true;
}catch (Exception ex){
log.error(Constants.Trace_in_the_log);
log.error("error log sent failed...");
log.error( ex.getMessage( ), ex );
return false;
}
}