2008-11-19 10 views
9

Ów co używam do czytania wiadomości e-mail przy użyciu C#:czytania e-mail bez Outlook aplikacji otwartej

outLookApp.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(outLookApp_NewMailEx); 
      Outlook.NameSpace olNameSpace = outLookApp.GetNamespace("mapi"); 

olNameSpace.Logon("xxxx", "xxxxx", false, true); 
Outlook.MAPIFolder oInbox = olNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 
Outlook.Items oItems = oInbox.Items; 
MessageBox.Show("Total : " + oItems.Count); //Total Itemin inbox 
oItems = oItems.Restrict("[Unread] = true"); 
MessageBox.Show("Total Unread : " + oItems.Count); //Unread Items 
Outlook.MailItem oMsg; 


Outlook.Attachment mailAttachement; 
for (int i = 0; i < oItems.Count; i++) 
{ 
    oMsg = (Outlook.MailItem)oItems.GetFirst(); 

    MessageBox.Show(i.ToString()); 

    MessageBox.Show(oMsg.SenderName); 
    MessageBox.Show(oMsg.Subject); 
    MessageBox.Show(oMsg.ReceivedTime.ToString()); 
    MessageBox.Show(oMsg.Body); 

Problem, że jestem stoi to ta aplikacja działa tylko wtedy, gdy program Outlook jest otwarty na maszynie . Jeśli program Outlook jest zamknięty, zgłasza wyjątek:

Serwer jest niedostępny. Skontaktuj się z administratorem, jeśli ten stan będzie się utrzymywał.

Czy mimo to mogę czytać wiadomości e-mail z Outlookiem?

Odpowiedz

2

Prawdopodobnie napotkasz this, gdy program Outlook jest zamknięty.

Również po wykonaniu this tutorial upewnisz się, że robisz wszystkie właściwe kroki, część i paczka.

Powodzenia!

0

Czy na pewno chcesz używać programu Outlook jako serwera proxy?

peopleseems do czynienia z niskim poziomem takiego zadania w C# (zaskakujące, nie ma żadnego wbudowanego komponentu w ramach ...)

chodzi o odpowiedź Mat, w Redemption jest rzeczywiście dobrym produktem (używał go do analizowania maili po nadejściu perspektywy), ale wątpię, by działało bez działającego programu outlook.

0

Osobiście nie będę używać programu Outlook jako serwera proxy. Jeśli próbujesz ostatecznie monitorować sklep Exchange, używałbym WebDav. Twój serwer Exchange musi go obsługiwać - ale jeśli tak, to jest to prosty interfejs API XML. Cóż, bit API jest prosty, ale XML jest dość zawiły. Ale gdy już zamkniesz to w trochę kodu, jest to dość użyteczne.

+0

Myślę, że to nie ma znaczenia dla pytania. – Samuel

+0

Samuel, moja odpowiedź jest rozwinięciem "Nie, nie możesz". Myślałem, że byłoby to bardziej pomocne! –

1

Jest to rodzaj starej pytanie, ale mam zamiar odpowiedzieć, ponieważ miałem problemy z tej samej kwestii przez długi czas i poprzednie odpowiedzi na tej stronie nie naprawdę mi nie pomoże.

Musiałem napisać program i użyć programu Outlook, aby wysłać wiadomość e-mail na różnych komputerach o różnych poziomach UAC i to właśnie wymyśliłem po długim czasie.

using Outlook = Microsoft.Office.Interop.Outlook; 

// Create the Outlook application. 
Outlook.Application oApp = null; 

// Check whether there is an Outlook process running. 
int outlookRunning = Process.GetProcessesByName("OUTLOOK").Length; 
if (outlookRunning > 0) 
{ 
    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object. 
    try 
    { 
     oApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; 
    } 
    catch (Exception) 
    { 
     oApp = Activator.CreateInstance(Type.GetTypeFromProgID("Outlook.Application")) as Outlook.Application; 
    } 
    finally 
    { 
     // At this point we must kill Outlook (since outlook was started by user on a higher prio level than this current application) 
     // kill Outlook (otherwise it will only work if UAC is disabled) 
     // this is really a kind of last resort 
     Process[] workers = Process.GetProcessesByName("OUTLOOk"); 
     foreach (Process worker in workers) 
     { 
      worker.Kill(); 
      worker.WaitForExit(); 
      worker.Dispose(); 
     } 
    } 
} 
else 
{ 
    // If not, create a new instance of Outlook and log on to the default profile. 
    oApp = new Outlook.Application(); 
    Outlook.NameSpace nameSpace = oApp.GetNamespace("MAPI"); 
    try 
    { 
     // use default profile and DO NOT pop up a window 
     // on some pc bill gates fails to login without the popup, then we must pop up and lets use choose profile and allow access 
     nameSpace.Logon("", "", false, Missing.Value); 
    } 
    catch (Exception) 
    { 
     // use default profile and DO pop up a window 
     nameSpace.Logon("", "", true, true); 
    } 
    nameSpace = null; 
} 

// Done, now you can do what ever you want with the oApp, like creating a message and send it 
// Create a new mail item. 
Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);