Dưới đây là mã samle & instuctions để gửi tệp đính kèm email bằng cách chuyển đổi InputStream thành mảng byte sau đó chuyển đổi mảng byte thành Base64.
Dữ liệu atachment CSV
Cho phép dữ liệu ban đầu cho csv atachment
1 2 3 4 5 6 7 8 | List<String[]> data = new ArrayList<>(); data.add(new String[] {"Id", "Content", "Score"}); data.add(new String[] {"1", "Alpha", "10"}); data.add(new String[] {"2", "Beta", "20"}); |
Tải dữ liệu tệp csv vào StringWriter
1 2 3 4 5 6 | StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); CSVData.stream() .map(this::convertStringToCSV) .forEach(printWriter::println); |
1 2 3 4 5 6 | private String convertStringToCSV(String[] data) { return Stream.of(data) .map(s -> escapeSpecialCharacters(s)) .collect(Collectors.joining(",")); } |
Gửi email đính kèm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | // setup SMTP Properties props = new Properties(); props.put("mail.smtp.host", "smtp host"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "port"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("smtp account", "smtp password"); } }); Message message = new MimeMessage(session); addListRecipient(sendToEmails, message, Message.RecipientType.TO); message.setFrom(new InternetAddress("sender email")); message.setSubject(subject); // StringWriter to InputStream InputStream inputStream = new ByteArrayInputStream(stringWriter.toString().getBytes()); // Convert to byte array byte[] byteArray = IOUtils.toByteArray(inputStream); // Convert to Base64 byte[] base64ByteArray = java.util.Base64.getEncoder().encode(byteArray); InternetHeaders fileHeaders = new InternetHeaders(); fileHeaders.setHeader(StringConst.CONTENT_TRANSFER_ENCODING, StringConst.BASE64); // Body content MimeBodyPart mimeContent = new MimeBodyPart(); mimeContent.setContent("Email content here", "text/html;charset="utf-8""); // Attachment MimeBodyPart mimeAttachment = new MimeBodyPart(fileHeaders, base64ByteArray); mimeAttachment.setFileName("filename.csv"); Multipart multipart = new MimeMultipart(); multipart.addBodyPart(mimeContent); multipart.addBodyPart(mimeAttachment); message.setContent(multipart); Transport.send(message); |