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 将不再打开,最终我重新启动了计算机。Outlook 是否必须打开才能使用 MAPI 控件?

最后,当消息发送时,我收到“程序正试图代表您发送电子邮件消息”的确认信息。由于这个应用程序可能每天发送多条消息,我不希望用户必须一直按允许。有没有办法以编程方式或作为 Outlook 或 Exchange Server 配置来抑制此消息?

我的开发环境是 Windows 7 和 Outlook 2010,但这需要在所有环境中工作。很抱歉有这么多问题;我很欣赏人们可能有的任何见解。

=== 修订 ---

我的问题的第一部分已经回答。MAPI 正在登录配置文件。但是,我仍然想知道是否有人知道如何抑制访问警告消息,并让 Simple MAPI 登录到用户登录之外的帐户。我需要这样做,因为来自任何站点的所有电子邮件都将从一个专用帐户发送。

如果我能找到有关如何使用它的更多详细信息,我会很乐意使用扩展 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 回答