Ограничение размера сообщения с CDO?

У меня есть приложение, в котором я создаю электронное письмо, которое я хочу, чтобы SMTP-сервер (IIS) в том же ящике доставлял (ОС - 32-разрядная версия сервера 2003). Я отправляю это с помощью метода "cdSendUsingPickup".

Используя свой интерфейс IMessage, я копирую сообщение в каталог раскладки серверов. Все отлично работает, пока мое сообщение меньше ~ 150 МБ. Размер учитывается вложениями к почте. Но если я включу вложения сверх этого предела, IMessage::GetStream() завершится с ошибкой 0x8007000e — для завершения этой операции недостаточно места для хранения. На сервере достаточно HD-пространства. Я столкнулся с каким-то ограничением пространства, и я думаю, что это скорее ограничение памяти, а не проблема с пространством на жестком диске, но я не нахожу подсказок относительно того, что происходит. Псевдокод ниже — вызов GetStream завершается ошибкой с сообщением размером более 150 МБ или около того. Отлично работает с небольшими сообщениями.

DlvrMsg(IMessage piMsg)
{
     _StreamPtr pStream = NULL;
     HRESULT hr = piMsg->GetStream(&pStream);
     pStream->put_type(adTypeBinary);

    //.. then use pStream->Read() to read the bytes of the message
    // and copy to an .eml file in the pickup directory.

    ...

  }

person Dan G    schedule 08.08.2011    source источник
comment
Я сомневаюсь, что вы ожидаете, что пользователь откроет электронное письмо размером более 150 МБ? Вы пытаетесь использовать электронную почту в качестве автоматизированного транспорта?   -  person user692942    schedule 30.04.2014
comment
Чувак, это то, что хотел клиент.   -  person Dan G    schedule 02.05.2014


Ответы (1)


Да, очевидно, есть предел, хотя MS не дает жестких и быстрых правил для определения этого предела. Они только говорят, что вызов GetStream() терпит неудачу при вызове realloc. Все больше и больше памяти перераспределяется, пока не достигнет некоторого искусственного предела.

Это происходит на сервере 2003, а также на 32- и 64-битном сервере 2008 года. Единственным обходным решением является использование чего-то другого, кроме CDO, для отправки почты.

person Dan G    schedule 30.08.2011
comment
Ты проповедуешь хору, чувак. Я знаю, что это нелепо, вы знаете, что это нелепо — клиент не согласен. И какой-то идиот пообещал им это. - person Dan G; 02.05.2014
comment
Идиот был не я. Кстати, для решения этой проблемы использовалось другое решение электронной почты. - person Dan G; 02.05.2014
comment
Понятно, просто хотел дать понять всем, кто рассматривает это как потенциальное решение, что это не очень хорошая идея. Хотя я понимаю твою боль. - person user692942; 02.05.2014