检查已启用的Outlook帐户

时间:2016-05-05 14:28:22

标签: c# outlook

我刚开始涉足使用Microsoft.Office.Interop.Outlook。我能够使用下面的代码成功发送电子邮件。

public void Send()
{
    try
    {
        Outlook._Application _app = new Outlook.ApplicationClass();
        var test = _app.CreateItem(Outlook.OlItemType.olMailItem);
        Outlook.MailItem mail = (Outlook.MailItem) _app.CreateItem(Outlook.OlItemType.olMailItem);
        mail.To = "testemail@fakeaddress.com";
        mail.Subject = "Test Outlook Subject";
        mail.Body = "Test Outlook Body";
        mail.Importance = Outlook.OlImportance.olImportanceNormal;
        ((Outlook.MailItem) mail).Send();
    }
    catch
    {
        Notification.Notice("Error");
    }
}

我希望在try / catch之前有一个Validate()函数,以便它检查是否启用了有效的Outlook帐户。请问有谁知道如何设置任何Outlook账户?

我试过这个

public bool validate()
{
    Outlook._Application _app = new Outlook.ApplicationClass();
    Outlook.Accounts accounts = _app.Session.Accounts;
    return accounts.Count > 0;
}

但是,即使我删除了我的Outlook帐户,accounts.Count也返回1。

1 个答案:

答案 0 :(得分:1)

总会有至少一个帐户 - 商店。否则Outlook不会运行。但即使有邮件帐户,您如何知道它们是否配置正确?除非您接管邮件提交,否则您无法提前知道。

更新:遍历Namespace.Accounts集合,查找Account.AccountType == olExchange,olImap,olPop3,olHttp的帐户。如果您使用的是扩展MAPI(C ++或Delphi),则可以使用IOlkAccountManager::EnumerateAccounts(CLSID_OlkMail, ...)(您可以在OutlookSpy中使用该界面 - 单击IOlkAccountManager按钮)。如果扩展MAPI不是一个选项,Redemption会公开RDOAccounts对象;其GetOrder(acMail)方法将返回所有邮件帐户。您只需要检查返回的集合是否包含任何元素。