Java发送邮件,本地不生成文件,用流的方式添加txt附件,

  • 最近遇到个小问题,要把前台传过来的字符串包装成txt格式并作为邮件的附件发送到指定邮箱。平时的解决思路是把字符串写入到本地文件,再读取文件作为邮件附件发送,但是发现文件没有必要在本地进行存储,最终采用流的方式附件上传成功。
public static boolean sendErrorLog(String emailBody,String fileName,String errorComment) throws Exception{

		 String errorLogForm = emailBody.replaceAll("\n","<br>").replaceAll("\t","&nbsp;");
         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();
		 //host地址
		 String host = RegistryHelper.getSMTPServerName();
		 //SMTP地址
		 props.setProperty("mail.smtp.host", host);
		 //环境信息的 Session 对象
		 Session session = Session.getInstance(props);
		 try{
			//创建默认的 MimeMessage 对象
			 MimeMessage msg = new MimeMessage(session);
			 //Set From: 头部头字段
			 msg.setFrom(new InternetAddress(from));
			 //Set To: 头部头字段
			 msg.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(targetAddress));
			 // Set Subject: 主题文字
			 msg.setSubject(Subject);

			 //errorLog部分
			 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;
		 }

	 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
您好!要在Java后台以附件方式发送Excel邮件而不生成实体文件,您可以使用Apache POI库来生成Excel文件,并使用JavaMail库发送邮件。以下是一个示例代码: ```java import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class ExcelEmailSender { public static void sendExcelEmail(Session session, String from, String to, String subject, Workbook workbook) throws MessagingException, IOException { Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); message.setSubject(subject); Multipart multipart = new MimeMultipart(); // 创建Excel文件的字节数组输出 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); workbook.write(outputStream); // 创建BodyPart并将Excel文件字节数组添加到BodyPart中 BodyPart bodyPart = new MimeBodyPart(); DataSource dataSource = new ByteArrayDataSource(outputStream.toByteArray(), "application/vnd.ms-excel"); bodyPart.setDataHandler(new DataHandler(dataSource)); bodyPart.setFileName("excel.xlsx"); // 将BodyPart添加到Multipart中 multipart.addBodyPart(bodyPart); // 设置邮件内容 message.setContent(multipart); // 发送邮件 Transport.send(message); } public static void main(String[] args) { String from = "your_email@example.com"; String to = "recipient_email@example.com"; String subject = "Excel Email"; // 使用Apache POI库创建Excel文件 Workbook workbook = WorkbookFactory.create(); // 在这里进行Excel文件的操作,例如创建工作表、添加数据等 // 设置JavaMail会话 Session session = Session.getInstance(System.getProperties()); try { sendExcelEmail(session, from, to, subject, workbook); System.out.println("Excel email sent successfully."); } catch (MessagingException | IOException e) { e.printStackTrace(); } finally { // 关闭工作簿 workbook.close(); } } } ``` 请确保您已将正确的发件人和收件人电子邮件地址替换到代码中的 `from` 和 `to` 变量中。此外,确保已添加Apache POI和JavaMail库到您的项目依赖中。 此代码将在Java后台创建一个Excel文件,并将其作为附件添加到电子邮件中,而不会生成实体文件。然后,使用JavaMail库发送邮件。 希望对您有所帮助!如有任何疑问,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值