gpt4 book ai didi

java - 是否有任何解决方案可以通过使用 POP 在 Java 中传递特定电子邮件消息 ID 来下载电子邮件附件?

转载 作者:行者123 更新时间:2023-12-02 10:15:43 25 4
gpt4 key购买 nike

目前正在使用 JavaMail API 开发 wso2 esb。我在这里想要做的是将未读电子邮件(Gmail)附件下载到某个本地文件夹。 在 ESB 端,读取未读电子邮件并获取未读电子邮件的消息 id 任务已结束,并将该消息 id 从 esb 传递到 java 也已完成。从 java 端,需要将电子邮件附件下载到该特定消息 id这是来自 ESB 端的。 我不知道如何在 java 中下载该特定消息 ID 的电子邮件附件。

您能帮我找到解决方案吗? 提前致谢,

以下代码,将所有电子邮件附件下载到某个本地文件夹。需要仅下载该特定邮件 ID 的附件

public void downloadEmailAttachments(String host, String port,
String userName, String password) {

Properties properties = new Properties();


properties.put("mail.pop3.host", host);
properties.put("mail.pop3.port", port);


properties.setProperty("mail.pop3.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.pop3.socketFactory.fallback", "false");
properties.setProperty("mail.pop3.socketFactory.port",
String.valueOf(port));
Session session = Session.getDefaultInstance(properties);
try {
Store store = session.getStore("pop3");
store.connect(userName, password);
Folder folderInbox = store.getFolder("INBOX");
folderInbox.open(Folder.READ_ONLY);
Message[] arrayMessages = folderInbox.getMessages();


for (int i = 0; i < arrayMessages.length; i++) {
Message message = arrayMessages[i];
Address[] fromAddress = message.getFrom();
String from = fromAddress[0].toString();
String subject = message.getSubject();
String sentDate = message.getSentDate().toString();

String contentType = message.getContentType();


String messageContent = "";

// store attachment file name, separated by comma
String attachFiles = "";

if (contentType.contains("multipart")) {

Multipart multiPart = (Multipart) message.getContent();
int numberOfParts = multiPart.getCount();
for (int partCount = 0; partCount < numberOfParts; partCount++) {
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
// this part is attachment
String fileName = part.getFileName();
attachFiles += fileName + ", ";
part.saveFile(saveDirectory + File.separator + fileName);
} else {
// this part may be the message content
messageContent = part.getContent().toString();
}
}

if (attachFiles.length() > 1) {
attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
}
} else if (contentType.contains("text/plain")
|| contentType.contains("text/html")) {
Object content = message.getContent();
if (content != null) {
messageContent = content.toString();
}
}

// print out details of each message
System.out.println("Message #" + (i + 1) + ":");
System.out.println("\t From: " + from);
System.out.println("\t Subject: " + subject);
System.out.println("\t Sent Date: " + sentDate);
System.out.println("\t Message: " + messageContent);
System.out.println("\t Attachments: " + attachFiles);
}

// disconnect
folderInbox.close(false);
store.close();
} catch (NoSuchProviderException ex) {
System.out.println("No provider for pop3.");
ex.printStackTrace();
} catch (MessagingException ex) {
System.out.println("Could not connect to the message store");
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}

}

最佳答案

没有使用 POP3 执行此操作的有效方法。 POP3将要求客户端至少读取每条消息的所有 header ,以便找到与messageId匹配的消息。 IMAP 可以更有效地完成此操作。

使用任一协议(protocol),您都可以使用 Folder.search方法 MessageIDTerm找到正确的消息。

另请注意,您需要修复这些 common JavaMail mistakes在您的代码中。

关于java - 是否有任何解决方案可以通过使用 POP 在 Java 中传递特定电子邮件消息 ID 来下载电子邮件附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54702720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com