Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с отправкой файла по почте 
V
    Опции темы
Afrodiziac
  Дата 25.4.2008, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Имеется 

Код

byte[] bytes


олицетворяющий некий файл
можно переделать в MemoryStream.
И есть стандартная функция подключения файла к отправляемому письму

Код

          MemoryStream stream = new MemoryStream();
          stream.Write(bytes, 0, bytes.Length);

          Attachment file = new Attachment(stream, string.Empty);
          ContentDisposition disposition = file.ContentDisposition;

          //Тут я якобы имя файла указываю и заодно формат
          disposition.FileName = string.Format("Картинка{0}.bmp", numberFile); (*)

          message.Attachments.Add(file);


Если строку (*) закоментировать, то на почту приходят письма с файлами, у которых имена "Файл без названия <номер>", зато размеры нормальные (7Кб, как и надо). Но открыть их как рисунок все равно нельзя (если даже меняешь расширение).
Если оставить строку как есть (*), то файлы приходят, имена у них "Картинка1.bmp", "Картинка2.bmp",... и т.д. но весят они 0 Кб.

В принципе у меня не обязательно файлы должны быть картинками, они могут быть любыми и любых форматов. Как правильно отправить файл имея byte[] или stream? И как предусмотреть, что файлы могут быть различного формата?

PM MAIL   Вверх
Afrodiziac
Дата 26.4.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



И еще вопрос, открываю MemoryStream

Код

        foreach (byte[] bytes in messInfo.Files.ToArray())
        {
          MemoryStream stream = new MemoryStream();
          stream.Write(bytes, 0, bytes.Length);
          
          Attachment data = new Attachment(stream, string.Empty);
          ContentDisposition disposition = data.ContentDisposition;
          data.ContentType.MediaType = MediaTypeNames.Image.Jpeg;

          //Эта строка отвечает как за формат файла, так и за название
          string str = string.Format("Image{0}.bmp", countFiles--);
          disposition.FileName = str;

          _message.Attachments.Add(data);

          //stream.Close(); (**)
        }

        //Отправка письма


Если раскоментарить (**), то письмо не отправится. Выскочит ошибка "нет доступа к закрытому потоку"
Я вроде решил эту проблему, таким способом:

Код

        for (int i = 0; i < _message.Attachments.Count; i++)
          if (_message.Attachments[i].ContentStream != null)
            _message.Attachments[i].ContentStream.Close();


А вообще, после отправки письма (вызова функции Send(_message)) потоки (stream) закрываются автоматически?
PM MAIL   Вверх
Afrodiziac
  Дата 27.4.2008, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 13.5.2007

Репутация: нет
Всего: нет



Ребята все ОК. Отправляется и приходит на почту в здоровом виде smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.