Mogę wysyłać załączniki, które mają nazwy plików spoza ASCII w JavaMail, ale nie mogę ich pobrać. Dostaję java.io.FileNotFoundException specjalnie dla tych załączników, których nazwy plików zawierają znaki spoza ASCII.Znaki JavaMail i inne niż ASCII w nazwach plików
FYI: Używam coś podobnego messageBodyPart.setFileName(MimeUtility.encodeText(filename[i]))
zakodować tekst i MimeUtility.decodeText(bodyPart.getFileName())
do dekodowania spoza ASCII nazwy plików
Czy istnieje obejście tego?
EDYTOWANIE @Bill, tutaj jest częścią mojego kodu, który czyta załączniki. W moim kodzie dodałem również właściwości .setProperty ("mail.mime.decodeparameters", "true") i properties. PropertiesProperty ("mail.mime.decodefilename", "true") właściwości.
if (message[a].getContent() instanceof MimeMultipart) {
Multipart multipart = (Multipart) message[a].getContent();
for (int i = 0; i < multipart.getCount(); i++) {
bodyPart = multipart.getBodyPart(i);
disposition = bodyPart.getDisposition();
if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT) || (disposition.equals(BodyPart.INLINE)))) {
DataHandler handler = bodyPart.getDataHandler();
String path = bodyPart.getFileName();
String[] str = path.split("/");
String fileName = str[str.length - 1];
String filePath = ReadConfigPropertiesFile.getPropertyValue("server.buildpath");
System.out.println(fileName);
File tempDir = new File(filePath + user);
if (!tempDir.exists()) {
tempDir.mkdir();
}
File saveFile = new File(tempDir + "/" + fileName);
int count = 0;
while (saveFile.exists()) {
count++;
saveFile = new File(tempDir + "/" + count + "_" + fileName);
}
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(saveFile));
byte[] buff = new byte[2048];
InputStream is = bodyPart.getInputStream();
int ret = 0;
while ((ret = is.read(buff)) > 0) {
bos.write(buff, 0, ret);
}
bos.close();
is.close();
//System.out.println(bodyPart.getContentType());
}else {
//display body (message) of the attachment;
//System.out.println(bodyPart.getContent().toString());
}
}
}
Powyższy kod podnosi wyjątek FileNotFoundException na BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(saveFile))
linii i to jest coraz podniesiony załączników, których nazwy są znaki spoza ASCII (coś jak ሰላም. Pdf). Wszystko inne działa dobrze.
nadal borykam się z problemem. Jakieś aktualizacje? – semytech
W tym momencie nie jest to problem JavaMail, więc nie mogę zapewnić dużej pomocy. Prawdopodobnie zależy to od tego, jak system operacyjny radzi sobie z nazwami plików ze znakami spoza ASCII. Można napisać trywialny, autonomiczny program Java, aby odtworzyć problem. Podczas tworzenia pliku może być konieczne zakodowanie nazwy pliku, jeśli system operacyjny nie obsługuje go w niezmienionym stanie. –
Ok, dziękuję. Sprawdzę to, tworząc prosty program w języku Java i powiadomię Cię. – semytech