0

我有一个应用程序,我在其中创建了一封电子邮件,我希望同一个盒子上的 SMTP 服务器 (IIS) 传送(操作系统是 2003 Server 32 位)。我使用“cdSendUsingPickup”方法发送这个。

使用我的 IMessage 界面,我将消息复制到服务器拾取目录。只要我的消息低于~150MB,一切都很好。大小由邮件的附件决定。但是,如果我包含超过此限制的附件,IMessage::GetStream() 将失败并显示 0x8007000e - 没有足够的存储空间来完成此操作。服务器有足够的高清空间。我遇到了某种空间限制,我认为这更多是内存限制,而不是 HD 空间问题,但我没有找到关于发生了什么的线索。下面的伪代码 - 对 GetStream 的调用失败,消息大于 150MB 左右。适用于较小的消息。

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.

    ...

  }
4

1 回答 1

0

是的,显然有一个限制,尽管 MS 不会就该限制给出硬性规定。他们只说对 GetStream() 的调用在对 realloc 的调用中失败。越来越多的内存被重新分配,直到达到一些人为的限制。

这发生在 2003 服务器以及 2008 32 位和 64 位服务器中。唯一的变通办法是使用 CDO 以外的东西来发送您的邮件。

于 2011-08-30T19:41:18.683 回答