Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
129 / 121 / 58
Регистрация: 07.04.2011
Сообщений: 746
1

Вложения и кодировка.ЯваМаил

15.06.2016, 21:58. Просмотров 1313. Ответов 2


Дергаю с почты вложения.Пока не встретится название вложения на русском языке все нормально.Когда попытаюсь сохранить его вылетает java.io.FileNotFoundException: C:\Users\USER\download_mail\=?UTF-8?Q?=D0=B0=D0=BF=D1=80=D0=BE.txt?= (Синтаксическая ошибка в имени файла, имени папки или метке тома)
При сохранении имя файла передается так:?UTF-8?Q?=D0=B0=D0=BF=D1=80=D0=BE.txt?=
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for (int i = 0, count = messages.length; i < count; i++) {
 
Message message = messages[i];
 
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())) {
 
String fileName = part.getFileName();
 
part.saveFile(saveDir + "\\download_mail" +"" + fileName); 
}
}
}
Вопрос:Собственно не совсем понятна ошибка.Имя должно быть в ЮТФ 8?Как с этим бороться?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2016, 21:58
Ответы с готовыми решениями:

PHP форма обратной связи с вложением - вместо вложения кодировка
Здравствуйте! Помогите, пожалуйста, решить вопрос. В PHP не сильна. Есть форма обратной связи с...

Добавить вложения Access во вложения задачи Outlook
Всем привет. Помогите кто может плиз. Дано: форма Access -- Задачи с полем...

Кодировка программы и кодировка базы данных
В общем в архиве стандартный пример и одна из программ по редактированию sqlite. Проблема...

Rt + Вложения
Есть вот какая проблема... В RT-поле отображаются не все вложения. В чем может быть проблема?

2
50 / 49 / 25
Регистрация: 05.02.2016
Сообщений: 146
15.06.2016, 22:54 2
Хм... Может надо это имя еще MimeUtility.decodeText сделать?
1
129 / 121 / 58
Регистрация: 07.04.2011
Сообщений: 746
16.06.2016, 20:27  [ТС] 3
Цитата Сообщение от Max_Sys Посмотреть сообщение
Может надо это имя еще MimeUtility.decodeText сделать?
Действительно,помогло.Может тут все дело в IMAP и кодировках.Для русских букв возвращает непонятно что.Надо почитать на досуге.
Если кому-то будет интересно,выкладываю свой код для маил.ру. Хотя для всех остальных почтовиков принцип не сильно отличается:
Java
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package download_attachment_mail;
 
import javax.mail.search.FlagTerm;
import java.io.File;
import java.nio.file.AccessDeniedException;
import java.util.Properties;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeUtility;
 
public class EmailAttachment {
 
public static void checkConnect(String host, String storeType, String user,String password){
try {
//create properties
Properties properties = new Properties();
properties.put("mail.imap.host", host);
properties.put("mail.imap.port", "993");
properties.put("mail.imap.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);  
Store store = emailSession.getStore("imaps");
store.connect(host, user, password);
Folder emailFolder = store.getFolder("INBOX");
emailFolder.open(Folder.READ_WRITE);
Flags seen = new Flags(Flags.Flag.SEEN);
FlagTerm unseenFlag = new FlagTerm(seen, false);
 
//find unread messages
Message messages[] = emailFolder.search(unseenFlag); 
 
if (messages.length == 0) {
System.out.println("UNREAD MESSAGES NOT FOUND");
System.in.read();
System.exit(0);
}
 
System.out.println("UNREAD MESSAGES : " + emailFolder.getUnreadMessageCount());
String saveDir = System.getProperty("user.home");
File isDir = new File(saveDir + "\\download_mail");
 
if(isDir.exists() && (isDir.isDirectory())){
//dir write?
if (!isDir.canWrite()) {
System.out.println("Access to the directory denied");
System.in.read();
System.exit(0);
}
}
 
else {
//create dir
boolean makeDir =  isDir.mkdir();
if (!makeDir){
System.out.println("Error creating directory");
System.in.read();
System.exit(0);
} 
}
 
for (int i = 0, n = messages.length; i < n; i++) {
 
Message message = messages[i];
Object content = message.getContent();
//no content
if (!(content instanceof Multipart)){message.setFlag(Flags.Flag.SEEN, false); continue;}
 
Multipart multiPart = (Multipart) content;
int numberOfParts = multiPart.getCount();
 
for (int partCount = 0; partCount < numberOfParts; partCount++) {
 
MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
//message.setFlag(Flags.Flag.DELETED, true);
String fileName = part.getFileName();
String saveFileName = MimeUtility.decodeText(fileName);
 
try{
part.saveFile(saveDir + "\\download_mail" +"" + saveFileName); 
}
 
catch(AccessDeniedException exc){System.out.println("Access denied to file");
System.exit(1);}
}
}
}
//close store,folder
emailFolder.close(false);
store.close();
 
} catch (NoSuchProviderException exc) {
exc.printStackTrace();
} catch (MessagingException exc) {
exc.printStackTrace();
} catch (Exception exc) {
exc.printStackTrace();
}
} 
 
 
public static void main(String[] args) {
 
String host = "imap.mail.ru";// 
String mailStoreType = "imap";
String username = "yourmail@mail.ru";// 
String password = "yourpassword";//
 
checkConnect(host, mailStoreType, username, password);
}
}
Идет коннект на почту, и в папке входящих идет поиск только не прочтенных сообщений.Письма не содержащие вложений остаются непрочитанными(имеются ввиду именно файлы в вложениях).Создается каталог и в него сохраняются вложения.Идентичные вложения заменяются(видимо стандартный функционал javamail.Нет запроса на замену файла или переименования.При желании можно дописать проверку уже существующего файла в каталоге)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2016, 20:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Вложения
Вопрос следующий можно ли используя язык формул определить, вложен ли файл в конкретное rtf поле...

Вложения
Добрый день! Ситуация. Есть база документов, у всех документов есть по одному или несколько...

Вложения в БАЗУ
Здравствуйте ! Столкнулся с такой проблемой : сделал вложения в базе, туда закрепил несколько...

Вложения в хэше
#!/usr/bin/perl -w use strict; use XML::Simple; use Data::Dumper; my $simple =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.