我正在编写一个使用 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 应用程序没有这个错误,我知道我有一个默认的电子邮件客户端。
再次感谢您的任何帮助。