使用MAPI登录Exchange

时间:2012-11-29 23:27:54

标签: c# email mapi

我正在编写一个使用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正在登录配置文件。但是,我仍然想知道是否有人知道如何压制访问警告消息,并让简单MAPI登录到用户登录的帐户以外的帐户。我需要这样做,因为来自任何电台的所有电子邮件都将从一个专用帐户发送。

如果我能找到有关如何使用它的更多详细信息,我将很乐意使用扩展MAPI。我找到了一些信息,甚至是一个示例程序,但它给我一个错误,说“没有默认邮件客户端或当前邮件客户端无法满足消息传递请求”。我尝试更改构建应用程序的处理器,但消息仍然存在。由于我的简单MAPI应用程序没有此错误,我知道我有一个默认的电子邮件客户端。

再次感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

MAPILogon采用现有配置文件的名称,而不是用户名。 您是否尝试使用Outlook对象模型?为什么要尝试使用简单MAPI? 对于所有与Outlook相关的问题,您很想发布在http://social.msdn.microsoft.com/Forums/en/outlookdev/threads

答案 1 :(得分:0)

我不得不切换到使用扩展MAPI,并且能够解决这两个问题。

感谢Dimitry,感谢您在本网站和here上提供的帮助。