2016-05-05 7 views
0

Microsoft.Office.Interop.Outlookを使い始めたばかりです。以下のコードを使用してメールを送信できました。有効な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 = "[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"); 
    } 
} 

私はそれが有効になって有効な見通しのアカウントがあるかどうかを確認しましょうということなのtry/catch前Validate()機能を持っていると思います。 Outlookアカウントがセットアップされているかどうかをどのように確認できるか誰にでも聞かせてもらえますか?

私はこの

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

を試みたが、accounts.Countは、私は私の見通しアカウントを削除した後でも1を返しました。

答えて

1

少なくとも1つのアカウント、つまりストアが常に存在します。それ以外の場合、Outlookは実行されません。しかし、メールアカウントがあっても、適切に設定されているかどうかはどのように分かりますか?メッセージ提出を引き継いでいない限り、事前に知る方法はありません。

UPDATE:ループNamespace.AccountsコレクションをしてAccount.AccountType == olExchangeを持つアカウントを探し、olImap、olPop3、olHttp。拡張MAPI(C++またはDelphi)を使用している場合はIOlkAccountManager::EnumerateAccounts(CLSID_OlkMail, ...)を使用できます(OutlookSpyでそのインターフェイスで再生できます - IOlkAccountManagerボタンをクリックしてください)。拡張MAPIがオプションでない場合、RedemptionRDOAccountsオブジェクトを公開します。そのGetOrder(acMail)メソッドはすべてのメールアカウントを返します。返されたコレクションに要素があるかどうかを確認するだけです。

+0

私はちょうどそこにあるかどうか知りたいです。それが適切に設定されているかどうかを知ることは、現在のプログラムに依存しません。それはtry/catchのためのものです。 – Master

+0

あなたのtry/catchはエラーをキャッチしません - メッセージの送信は非同期です。運が良ければNDRを取得します。上記の更新された答えもご覧ください。 –

関連する問題