Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Microsoft .NET

  Все выпуски  

RFpro.ru: Microsoft .NET


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Micren
Статус: Специалист
Рейтинг: 1403
∙ повысить рейтинг »
Ashotn
Статус: Студент
Рейтинг: 949
∙ повысить рейтинг »
Evgenijm
Статус: 10-й класс
Рейтинг: 332
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Microsoft .NET : C#

Номер выпуска:178
Дата выхода:31.12.2009, 13:30
Администратор рассылки:Alexey G. Gladenyuk, Управляющий
Подписчиков / экспертов:319 / 62
Вопросов / ответов:1 / 1

Вопрос № 175622: Здравствуйте. Есть некая функция которая возвращает Bitmap. Вопрос - как включить этот Bitmap в электронное письмо не сохраняя его предварительно на ЖД ? Пытался делать вот так: MemoryStream ms = new MemoryStream(); bit...



Вопрос № 175622:

Здравствуйте.

Есть некая функция которая возвращает Bitmap.

Вопрос - как включить этот Bitmap в электронное письмо не сохраняя его предварительно на ЖД ?

Пытался делать вот так:

MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Jpeg);
LinkedResource lr = new LinkedResource(ms, "image/jpeg");

Но Bitmap таким образом вставляться в письмо не захотел (письмо пришло без него).

Если же сохраняю на ЖД его и в new LinkedResource() передаю его URL, то всё замечательно работает.

Проблема в том, что писем этих в день может быть до нескольких сотен, а в перспективе и тысяч.

Хотелось бы избежать лишней нагрузки на ЖД, да и сэкономить время необходимое на запись/чтение на/с ЖД.

Спасибо всем заранее.

Отправлен: 26.12.2009, 12:12
Вопрос задал: Иоффе Мэир Вэлевич, Студент
Всего ответов: 1
Страница вопроса »


Отвечает Micren, Специалист :
Здравствуйте, Иоффе Мэир Вэлевич.
Не совсем ясно как Вы отправляли сообщение. Я использовал SmtpClient.
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Net.Mail;
using System.IO;
using System.Drawing.Imaging;
using System.Net.Mime;
using System.Net;


namespace Test_CS
{
class Program
{
static void Main(string[] args)
{
using(Bitmap bm = (Bitmap)Bitmap.FromFile(@"e:\intel_002.png"))
using (MemoryStream ms = new MemoryStream())
{
bm.Save(ms, ImageFormat.Jpeg);

// Если закомментировать эту строку то придет письмо с битым изображением.
ms.Seek(0, SeekOrigin.Begin);

SmtpClient smtpClient = new SmtpClient("smtp.mail.ru", 25);
smtpClient.Credentials = new NetworkCredential("login", "password");

// Создаем сообщение
MailMessage message = new MailMessage();
message.From = new MailAddress("micren@mail.ru");
message.To.Add(new MailAddress("micren@mail.ru"));
message.Subject = "Test Photo";
message.Body = "<b>Test Photo</b>";
message.Priority = MailPriority.Normal;
message.IsBodyHtml = true;

// Наше вложение
using (Attachment attach = new Attachment(ms, new ContentType(MediaTypeNames.Image.Jpeg)))
{
// Если м ы хотим задать имя файла для нашего вложения
ContentDisposition disposition = attach.ContentDisposition;
disposition.FileName = "image.jpg";
message.Attachments.Add(attach);

smtpClient.Send(message);
}
}
}
}
}

После нескольких неудачных экспериментов пришел к выводу, что проблема в том, что после записи в MemoryStream указатель потока остается в конце. Т.е. за Вашим изображением. Решил принудительно перед тем как прикрепить аттач к письму установить этот указатель на начало. Сработало. Письмо пришло с картинкой.

Ответ отправил: Micren, Специалист
Ответ отправлен: 26.12.2009, 15:25

Оценка ответа: 5
Комментарий к оценке:
Вы немного не поняли. Я не прикрепляю изображение в качестве Attachment, я встариваю её в само письмо (не зря же я указал строку LinkedResource lr = new LinkedResource(ms, "image/jpeg");

Но идея с переносом указателя сработало и письма начали приходить с изображениями, а не красными иксами. Я видел, что указатель находится в конце stream, но мне и в голову не пришло, что это может как-то повлеять. Хотя, сейчас это кажется абсолютно логичным и правильны - невозможно считать данные из потока, если указатель находится в конце его.

За это и оценка 5.

Огромное спасибо.

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258142 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.13 от 28.12.2009

    В избранное