0

同じボックスの SMTP サーバー (IIS) で配信する電子メールを作成するアプリケーションがあります (OS は 2003 サーバー 32 ビットです)。これを「cdSendUsingPickup」メソッドを使用して送信します。

IMessage インターフェイスを使用して、メッセージをサーバーのピックアップ ディレクトリにコピーします。メッセージが 150 MB 未満であれば、すべて問題なく動作します。サイズは、メールへの添付ファイルによって説明されます。しかし、この制限を超える添付ファイルを含めると、IMessage::GetStream() は 0x8007000e で失敗します。この操作を完了するのに十分な記憶域がありません。サーバーには十分な HD スペースがあります。私はある種のスペース制限に直面しています.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 に答える