2016-05-05 9 views
0

Ich habe gerade angefangen, Microsoft.Office.Interop.Outlook zu verwenden. Ich konnte erfolgreich eine E-Mail mit dem folgenden Code schreiben.Nach einem aktivierten Outlook-Konto suchen

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 = "[email protected]"; 
     mail.Subject = "Test Outlook Subject"; 
     mail.Body = "Test Outlook Body"; 
     mail.Importance = Outlook.OlImportance.olImportanceNormal; 
     ((Outlook.MailItem) mail).Send(); 
    } 
    catch 
    { 
     Notification.Notice("Error"); 
    } 
} 

Ich möchte eine Validate() Funktion vor dem try/catch haben, so dass sie prüfen, werden sehen, ob es gibt ein gültiges Outlook-Konto aktiviert. Darf ich fragen, weiß jemand, wie ich prüfen kann, ob Outlook-Accounts eingerichtet sind?

ich versuchte, diesen

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

Aber accounts.Count ergab 1, auch nachdem ich mein Outlook-Konto entfernt.

Antwort

1

Es wird immer mindestens ein Konto geben - das Geschäft. Andernfalls wird Outlook nicht ausgeführt. Aber selbst wenn es Mailkonten gibt, wie würden Sie wissen, ob sie richtig konfiguriert sind? Wenn Sie die Nachrichtenübermittlung nicht übernehmen, haben Sie keine Möglichkeit, dies im Voraus zu wissen.

UPDATE: Loop durch die Namespace.Accounts Sammlung und suchen Sie nach Konten mit Account.AccountType == olExchange, olImap, olPop3, olHttp. Wenn Sie Extended MAPI (C++ oder Delphi) verwenden, können Sie IOlkAccountManager::EnumerateAccounts(CLSID_OlkMail, ...) verwenden (Sie können mit dieser Schnittstelle unter OutlookSpy - klicken Sie auf IOlkAccountManager-Schaltfläche). Wenn Extended MAPI keine Option ist, stellt Redemption das Objekt RDOAccounts dar; Die Methode GetOrder(acMail) gibt alle E-Mail-Konten zurück. Sie müssen nur überprüfen, ob die zurückgegebene Sammlung Elemente enthält.

+0

Ich möchte nur wissen, ob es da ist oder nicht. Es ist nicht Sache des aktuellen Programms zu wissen, ob es richtig konfiguriert wurde oder nicht. Das ist für den Versuch/Fang. – Master

+0

Ihr Versuch/Fang wird keine Fehler erfassen - Nachrichten Einreichung ist asynchron, Sie erhalten einen NDR, wenn Sie Glück haben. Siehe auch die aktualisierte Antwort oben. –