Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpMlAtt 297 of 322 menu
◀ ▶

Вложение в Java

Письмо с текстом и файлом собирают как MimeMultipart: первая MimeBodyPart - обычный текст, вторая - вложение с именем файла и данными из ByteArrayDataSource.

Байты создают в программе, без чтения с диска. После отправки проверяют, что принято одно составное сообщение:

import com.icegreen.greenmail.util.GreenMail; import com.icegreen.greenmail.util.ServerSetupTest; import jakarta.activation.DataHandler; import jakarta.mail.Message; import jakarta.mail.Session; import jakarta.mail.Transport; import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeBodyPart; import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMultipart; import jakarta.mail.util.ByteArrayDataSource; import java.nio.charset.StandardCharsets; import java.util.Properties; public class Main { public static void main(String[] args) throws Exception { GreenMail server = new GreenMail(ServerSetupTest.SMTP); server.start(); server.setUser("reader@local.test", "reader", "pass"); Properties props = new Properties(); props.put("mail.smtp.host", "127.0.0.1"); props.put( "mail.smtp.port", String.valueOf(server.getSmtp().getPort()), ); props.put("mail.smtp.auth", "false"); Session session = Session.getInstance(props); MimeBodyPart textPart = new MimeBodyPart(); textPart.setText("See the attached note."); byte[] fileBytes = "price=19".getBytes(StandardCharsets.UTF_8); MimeBodyPart filePart = new MimeBodyPart(); filePart.setFileName("quote.txt"); filePart.setDataHandler( new DataHandler( new ByteArrayDataSource(fileBytes, "text/plain"), ), ); MimeMultipart parts = new MimeMultipart(); parts.addBodyPart(textPart); parts.addBodyPart(filePart); MimeMessage letter = new MimeMessage(session); letter.setFrom(new InternetAddress("writer@local.test")); letter.setRecipient( Message.RecipientType.TO, new InternetAddress("reader@local.test"), ); letter.setSubject("With attachment"); letter.setContent(parts); Transport.send(letter); MimeMessage saved = server.getReceivedMessages()[0]; MimeMultipart multipart = (MimeMultipart) saved.getContent(); System.out.println(multipart.getCount()); server.stop(); } }

Число 2 означает две части: текст и вложение. Имя quote.txt попадает в заголовок части с файлом.

Добавьте вложение data.bin из четырех байт 1, 2, 3 и 4. Выведите число частей принятого письма.

Оставьте текстовую часть с фразой "Attached." и вторую часть с байтами строки "ok". Имя файла задайте "flag.txt". Выведите getCount у MimeMultipart из ящика.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить