При работе с компонентом Indy для Delphi 2009 и отправке файлов через API ElasticEmail, пользователи могут столкнуться с ошибкой "One of files has invalid characters in file name". Эта ошибка возникает из-за неправильного формата передачи файлов в составе многочастичного запроса TIdMultiPartFormDataStream.
Вот основные шаги для исправления этой ошибки:
Убедитесь, что пути к файлам не содержат лишних обратных слешей, которые могут быть неявно добавлены при работе с некоторыми языками программирования, но не требуются в Delphi.
При добавлении файлов в TIdMultiPartFormDataStream, используйте корректные имена полей, как это показано в примерах ElasticEmail. Вместо полного пути к файлу, используйте уникальные имена, например, file0, file1 и так далее.
Если вы пытались использовать AddFormField для добавления файлов, убедитесь, что вы передаете данные файла в параметр AFieldValue, а не в AFieldName.
Используйте метод AddFile для добавления файлов, который автоматически определит MIME-тип файла, если вы не передадите его явно.
Если filenames содержат не-ASCII символы, убедитесь, что они корректно закодированы для передачи по HTTP. TIdMultiPartFormDataStream по умолчанию использует RFC 2047 для кодировки, но если это не поддерживается вашим сервисом, вы можете отключить эту функцию и использовать свою собственную функцию кодирования.
Ниже приведен пример исправленной функции Upload, которая отправляет файлы вместе с другими параметрами:
function TForm1.Upload(url: string; params, filenames: TStrings): string;
var
FormData : TIdMultiPartFormDataStream;
ResponseText : string;
i : integer;
begin
FormData := TIdMultiPartFormDataStream.Create;
try
for i := 0 to params.Count - 1 do
FormData.AddFormField(params.Names[i], params.ValueFromIndex[i]);
for i := 0 to filenames.Count - 1 do
FormData.AddFile('file' + IntToStr(i), filenames[i]);
ResponseText := IdHTTP1.Post(url, FormData);
Memo1.Text := ResponseText; //debug
finally
FormData.Free;
end;
end;
Исправленный код для кнопки отправки электронной почты:
Не забудьте, что использование очень старой версии Indy (например, 10.2.5) может привести к проблемам. Рекомендуется обновиться до последней версии Indy для устранения возможных ошибок и улучшения совместимости со стандартами.
При работе с компонентом Indy в Delphi 2009 для отправки файлов через ElasticEmail возникла ошибка из-за недопустимых символов в названии файла, которую нужно исправить, корректно обрабатывая пути к файлам и используя правильные метод
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.