2016-12-20 9 views
0

私は約15人のユーザーを持つアプリケーションを開発しています。各ユーザーは、ボタンをクリックして共有機能メールボックス(メディア処理と呼ばれます)の電子メールをプログラムで読み込むことができるようになります。サーバー上のアプリケーションでASP.NETの機能メールボックスを読む方法

コードをローカルでテストすると、すべて正常に動作します。しかし、今、私はそれをサーバーに公開していること、それはもう働いていない(それはおそらく、サーバー上の代わりに、ユーザーのメールボックスにメールボックスに探しているので、私のweb.configファイルで

:。

<add key="asFuncMailboxInbox" value="Media Processing" /> 
<add key="asFuncMailboxOutbox" value="902. Outbox" /> 

これは、電子メールを処理するための私の方法です:

string inboxName = WebConfigurationManager.AppSettings["asFuncMailboxInbox"]; 
string outboxName = WebConfigurationManager.AppSettings["asFuncMailboxOutbox"]; 

try 
{ 
    OutlookApp myApp = new OutlookApp(); 
    OutlookNameSpace mapiNameSpace = myApp.GetNamespace("MAPI"); 
    MapiFolder myInbox = mapiNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); 
    MapiFolder mySubFolder = myInbox.Folders[inboxName]; 
    MapiFolder destinationFolder = myInbox.Folders[outboxName]; 

    var myItems = mySubFolder.Items; 
    myItems.Sort("[ReceivedTime]", true); 

    count = 0; 

    if (myItems.Count > 0) 
    { 
     totalCount = myItems.Count; 
     for (var i = myItems.Count; i > 0; i--) 
     { 
      var itemObject = myItems[i] as MailItem; 
      if (itemObject != null) 
      { 
       var isOk = NewBankFactoryHelper.IsMessageCorrectlyConstructed(itemObject.Body); 

       if (isOk) 
       { 
        StoreNewBankRequestEmailData(itemObject); 
        itemObject.Move(destinationFolder); 
        count++; 
       } 
      } 
     } 
    } 
} 
catch (System.Exception e) 
{ 
    hasError = true; 
    errorMessage = e.ToString(); 
} 
finally 
{ 
    template = string.Format(CommonResources.Label_RequestsDownloadSuccess, count, totalCount); 

    if (count < totalCount) 
    { 
     template += CommonResources.Label_EmailIncorrectFormat; 
    } 
    if (hasError) 
    { 
     template += string.Format(CommonResources.Label_RequestDownloadFailed, errorMessage); 
    } 
} 
+0

あなた自身の質問に答えました。サーバー上でローカルに見ています。 Interopをサーバー上で使用することは悪い考えですが、マイクロソフトはこれを行わないことをお勧めします。代わりに、Exchange Web Services(EWS)のようなものを使用する必要があります。 – Equalsk

+0

@Equalskあなたは自分のコンピュータ上で直接ユーザーのメールボックスにアクセスすることは可能ですか、Outlookをサーバーにインストールして機能するメールボックスにアクセスする必要があると思いますか? –

+0

私は最初のものがうまくいくのではないかと疑いますが、2番目のものはうまくいくはずですが、お勧めの方法ではありません。それは "簡単な"修正ですが、 "正しい"修正はありません。 – Equalsk

答えて

0

Microsoftは現在、お勧めしません。また、(ASP、ASPを含む任意の無人、非対話型クライアントアプリケーションまたはコンポーネントから、Microsoft Officeアプリケーションのオートメーションをサポートしていません。 NET、DCOM、およびNTサービス)、Officeがこの環境で実行されると不安定な動作やデッドロックが発生する可能性があるためです。

サーバー側のコンテキストで実行されるソリューションを構築する場合は、無人で実行するために安全にされたコンポーネントを使用するようにしてください。または、コードの少なくとも一部がクライアント側で実行できるようにする代替手段を見つけようとする必要があります。サーバー側のソリューションからOfficeアプリケーションを使用する場合、アプリケーションには正常に実行するために必要な機能が不足しています。さらに、全体的なソリューションの安定性でリスクを冒すことになります。詳細については、Considerations for server-side Automation of Officeの記事をご覧ください。

Exchangeメールボックスを扱う場合は、EWSの使用を検討してください。詳細については、EWS Managed API, EWS, and web services in Exchangeを参照してください。また、Outlookがマシンにインストールされていないサードパーティのコンポーネントを使用することを検討することもできます。または、低レベルのAPI - 拡張MAPIを使用するだけです。

関連する問題