0

MAPI を利用する C# プログラムを作成しています。これには別の言語を使用する必要があることはわかっていますが、.NET を使用するように言われました。アプリケーションを実行していますが、ログインにいくつか問題があります。

現在のユーザー アカウントを使用して問題なくログインできますが、専用アカウントにログインしようとすると、現在のユーザー アカウントからメールが送信されます。私のログインコードは次のとおりです。

    private bool Logon()
    {
        if (String.IsNullOrEmpty(username) || String.IsNullOrEmpty(password))
        {
            error = MAPILogon(WinHandle, null, null, 0, 0, ref session);
            Logging.Log("Logged in using credentials for the current user.");
        }
        else
            error = MAPILogon(WinHandle, username, password, 0, 0, ref session);

        if (error != 0)
            error = MAPILogon(WinHandle, null, null, MapiLogonUI, 0, ref session);

        return error == 0;
    }

    [DllImport("MAPI32.DLL", CharSet = CharSet.Ansi)]
    private static extern int MAPILogon(IntPtr hwnd, string profileName, string password, 
        int flag, int rsv, ref IntPtr session);

    [DllImport("MAPI32.DLL")]
    private static extern int MAPISendMail(IntPtr session, IntPtr hwnd, MapiMessage message, int flag, int rsv);

ユーザー名とパスワード ("\0") にヌル ターミネータを追加したので、別のユーザーとしてログインできるはずです。

Outlook を閉じてアプリケーションを実行しようとしたところ、メッセージは正しく送信されましたが、閉じるとフリーズしました。Outlook が開かなくなり、最終的にコンピューターを再起動しました。MAPI コントロールを使用するには、Outlook を開く必要がありますか?

最後に、メッセージが送信されると、「プログラムがあなたに代わって電子メール メッセージを送信しようとしています」という確認メッセージが表示されます。このアプリは 1 日に複数のメッセージを送信する可能性があるため、ユーザーが [許可] を押し続ける必要はありません。このメッセージをプログラムで、または Outlook または Exchange Server の構成として抑制する方法はありますか?

私の開発環境は Windows 7 と Outlook 2010 ですが、これはすべての環境で動作する必要があります。質問が多くて申し訳ありません。人々が持つかもしれない洞察に感謝します。

=== 改訂 ---

私の質問の最初の部分は答えられました。MAPI はプロファイルにログインしています。ただし、アクセス警告メッセージを抑止する方法と、Simple MAPI をユーザーがログインしているアカウント以外のアカウントにログインさせる方法を誰かが知っているかどうかはまだ疑問です。どのステーションからのメールもすべて 1 つの専用アカウントから送信されるため、これを行う必要があります。

拡張 MAPI の使用方法について、より詳細な情報を見つけることができれば、喜んで使用します。いくつかの情報とサンプル プログラムを見つけましたが、「既定のメール クライアントがないか、現在のメール クライアントではメッセージング要求を実行できません」というエラーが表示されます。アプリケーションが構築されているプロセッサを変更しようとしましたが、メッセージが持続しました。私の単純な MAPI アプリケーションにはこのエラーがないので、既定の電子メール クライアントがあることがわかります。

繰り返しますが、ご協力いただきありがとうございます。

4

2 に答える 2

1

MAPILogon は、ユーザー名ではなく、既存のプロファイルの名前を取ります。Outlook オブジェクト モデルを使用しようとしましたか? Simple MAPI を使用しようとしている理由を教えてください。すべての Outlook 関連の質問については、 http: //social.msdn.microsoft.com/Forums/en/outlookdev/threads に投稿してください。

于 2012-11-29T23:52:08.760 に答える
0

拡張MAPIの使用に切り替える必要があり、これらの問題の両方を解決することができました。

Dimitry、このサイトとここの両方であなたの助けをありがとう。

于 2012-12-19T20:38:39.003 に答える