【发布时间】:2020-10-06 02:10:57
【问题描述】:
在我的 SMTP 服务器代码中,我有一个 MimeMessage 实例,我想用它来提取传入的邮件正文(邮件文本)和邮件附件。为此,我在客户端和服务器端使用以下实现。但是,我只能检索邮件附件。该代码以某种方式检测到 CustomerEngineer.ahmet 两次,但它们都不包含邮件正文:“这是邮件正文”。我可以检索图像。
在我的 java 邮件客户端中,我创建了一个具有以下架构的邮件:
try {
// Create a default MimeMessage object
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
// Set Subject
message.setSubject("Hi JAXenter");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("This is a message body");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
DataSource source = new FileDataSource(new File(System.getProperty("user.dir").concat("\\src\\main\\java\\emailrelayserver\\CustomerEngineer.png")));
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("CustomerEngineer.ahmet");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
在我的服务器端,我使用以下逻辑:
MimeMessage message = new MimeMessage(session, data);
public void seperateBodyAndAttachments(MimeMessage message) throws MessagingException, IOException {
String mimeType = message.getContentType();
Date dt = new Date();
if (message.isMimeType("text/*")) {
System.out.println("this containst a text file");
} else if (message.isMimeType("multipart/*")) {
Multipart mp = (Multipart) message.getContent();
int idx = 0;
int count = mp.getCount();
for (int i = 0; i < count; i++) {
BodyPart part = mp.getBodyPart(i);
String name = part.getDataHandler().getName();
if (part.isMimeType("text/*")) {
if (name == null) {
name = "text-" + (++idx) + ".txt";
}
System.out.println(name);
} else {
if (name == null) {
name = "attachment-" + (++idx);
}
FileOutputStream fos = new FileOutputStream(System.getProperty("user.dir").concat("\\src\\main\\resources\\DevEnvironmentConfigFile\\" + name));
BufferedOutputStream bos = new BufferedOutputStream(fos);
part.getDataHandler().writeTo(bos);
bos.close();
}
}
} else if (message.isMimeType("message/rfc822")) {
// Not implemented
} else {
Object o = message.getContent();
if (o instanceof String) {
FileWriter fw = new FileWriter(System.getProperty("user.dir").concat("\\src\\main\\java\\emailrelayserver\\downloads\\" + "text.txt"));
BufferedWriter bw = new BufferedWriter(fw);
bw.write((String)o);
bw.close();
} else if (o instanceof InputStream) {
FileOutputStream fos = new FileOutputStream(System.getProperty("user.dir").concat("\\src\\main\\java\\emailrelayserver\\downloads\\" +"message.dat"));
BufferedOutputStream bos = new BufferedOutputStream(fos);
message.getDataHandler().writeTo(bos);
bos.close();
} else {
FileWriter fw = new FileWriter(System.getProperty("user.dir").concat("\\src\\main\\java\\emailrelayserver\\downloads\\" +"unknown.txt"));
BufferedWriter bw = new BufferedWriter(fw);
bw.write((String)o);
bw.close();
}
}
}
【问题讨论】:
标签: java jakarta-mail mime mime-message