Пользователь
Логин:
Пароль:
Забыли свой пароль?

Поиск по сайту
 

 Расширенный поиск
Реклама

 

Опрос


Погода

Проблема с вложениями. Некорректное названия файла, директории

Форумы
Обновления
Поиск
Пользователи 
Правила
Помощь
Войти

Страницы: 1
Проблема с вложениями. Некорректное названия файла, директории
Добрый день.
Периодически (довольно редко, но случается) не регистрируются письма с вложениями. Проблема явно находится в названии аттачей, но не могу понять, как она возникает и что является причиной. Проблема была замечена в случае, когда в названии присутствует символ "_". Такое ощущение, что он как-то криво распознается.
На скрине видно, что вложенный файл в письме имеет название ДОГОВОР_0007802.doc, но в то же время в теле письма видим это "(See attached file: ДОГОВОР ?0007802.doc)".
Сервис деск такое вложение не принимает, пишет следующее:
The following error(s) occurred:
---------------------------------------------------
Error when put file C:\Program Files\Hewlett-Packard\OpenView\service desk 4.5\server\tmp\3099-ДОГОВОР ?0007802.doc!#! to attachment server: java.io.FileNotFoundException: C:\Program Files\Hewlett-Packard\OpenView\service desk 4.5\server\tmp\3099-ДОГОВОР ?0007802.doc!#! (The filename, directory name, or volume label syntax is incorrect)
---------------------------------------------------

Поскольку письма, отсылаемые пользователями в сервис деск, отправляются на адрес рассылки, есть возможность их посомтреть. При попытке переслать письмо, с которым были проблемы, все проходит нормально, т.е. проблема не в сервис деске и не на нашем почтовом сервере.
Есть ли мысли, как такое получается? Почтовые клиенты пользователей, почтовые сервера сторонних организаций или еще что?
Если есть мысли, как разрешить эту ситуацию, буду очень признательна.
Рисунок
.bmp (1.16 МБ) [ Скачать ]
На текущий момент это только java mail server. Поможет максимум на 50% мне так кажется какой SP?
У меня та же ситуация, но с символом № в формате doc. Но с этим еще хуже почта начинает зависать на сервере отправки до тех пор пока ее ну убить.
Вот еще мысль.
Для 2007 Exchange почта разбирается на куски в классе за это насколько я сейчас понял отвечает getAttachmentOutputStream похоже…
У меня есть мысль обойти это путем записи в базу файлов не разбирая на куски а отдельным файлов например msg, пытаюсь сейчас разобраться какой же тип html присваивает этому типу файлов.
Да, у меня зависание писем в таких случаях тоже присутствует smile:( Они ломятся в сервис деск с увеличивающимся интервалом времени.
У меня стоит 24 SP.
Ранее проблема с названиями вложенных файлов возникла при переходе на 2007 Exchange, решилась установкой хотфикса. И сейчас возникает исключительно при получении писем от сторонних организаций.
На сколько я понимаю это формирует имя

private void handleContentDisposition(String s)
{
int i = s.indexOf("filename=");
if (i < 0)
return;
String s1 = s.substring(20, i).trim();
StringTokenizer stringtokenizer = null;
stringtokenizer = new StringTokenizer(s1, ";");
putContentDisposition(stringtokenizer);

String s3 = s.substring(i + 9).trim();
if (s3.startsWith("\""))
{
int j = s3.indexOf("\"", 1);
String s2 = s3.substring(1, j);
int k = s3.indexOf(";", j);
if (k < 0)
{
this.disposition = toCanonical(s3);
this.theDispositions.put("filename", toCanonical(s3));
return;
}
String s5 = s3.substring(k + 1).trim();
this.theDispositions.put("filename", toCanonical(s2));
StringTokenizer stringtokenizer1 = new StringTokenizer(s5, ";");
putContentDisposition(stringtokenizer1);
this.disposition = toCanonical(s2);
}
else {
StringTokenizer stringtokenizer2 = new StringTokenizer(s.substring(i), ";");
putContentDisposition(stringtokenizer2);
String s4 = (String)this.theDispositions.get("filename");
if (s4 != null)
this.disposition = s4; } }


А если посмотреть на ошибку, то он символ заменяет на "?"

Строчки

26

return this.type + "/" + this.subtype + (this.paramAttribute != null ? ";" + this.paramAttribute + "=" + this.paramValue : "");

123

return i != -1 ? AppMIMEInputStream.this.clipboard.toString() : null;

716

int j = s.indexOf("=?", i);
if (j == -1)

731
int k = s.indexOf('?', j + 3);
if (k == -1)

748
char c = s.charAt(k + 1);
int l = s.indexOf("?=", k + 3);
if ((l == -1) || (s.charAt(k + 2) != '?'))


toCanonical - за что отвечает?


this.disposition = toCanonical(s3);
this.theDispositions.put("filename", toCanonical(s3));
return;
}
String s5 = s3.substring(k + 1).trim();
this.theDispositions.put("filename", toCanonical(s2));
StringTokenizer stringtokenizer1 = new StringTokenizer(s5, ";");
putContentDisposition(stringtokenizer1);
this.disposition = toCanonical(s2);
Григорий, а откуда эта функция?
из фикса
Страницы: 1

Сегодня были (гостей: 3, пользователей: 0, из них скрытых: 0)