2008-11-19 22 views
9

Eso es lo que estoy utilizando para leer el correo electrónico usando C#:de lectura de correo electrónico sin Perspectiva aplicación abierta

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); 

El problema que estoy enfrentando es esta aplicación sólo funciona si el Outlook está abierto en la máquina . Si Outlook está cerrado arroja una excepción:

El servidor no está disponible. Póngase en contacto con su administrador si esta condición persiste.

¿De todos modos puedo leer el correo electrónico con Outlook abierto?

Respuesta

2

Es probable que se encuentre con this cuando se cierra Outlook.

También siguiendo this tutorial se asegurará de que está haciendo todos los pasos correctos.

¡La mejor de las suertes!

0

¿Estás seguro de que deseas utilizar Outlook como proxy?

peopleseems para hacer frente bajo nivel con una tarea tan en C# (sorprendente que no hay ningún componente integrado en el marco ...)

En cuanto a la respuesta de la estera, La redención es de hecho un producto fino (lo usé para analizar correos a la llegada a outlook), pero dudo que pueda funcionar sin perspectiva ejecutándose.

0

Personalmente, no utilizaría Outlook como proxy. Si intentas monitorear en última instancia un almacén de Exchange, entonces usaría WebDav. Su servidor de Exchange debe admitirlo, pero si lo hace, es una API XML simple. Bueno, el bit API es simple, pero el XML es bastante intrincado. Pero una vez que hayas encapsulado esto en un poco de código, es difícil de usar.

+0

Creo que no es relevante para la pregunta. – Samuel

+0

Samuel, mi respuesta es una explicación sobre "No, no puedes". ¡Pensé que sería más útil! –

1

Esta es una especie de una vieja pregunta, pero voy a responder a ella ya tuve problemas con el mismo problema desde hace mucho tiempo y las respuestas anteriores en esta página hice realmente no me ayudas

Tuve que escribir un programa y usar Outlook para enviar un correo electrónico en diferentes máquinas con diferentes niveles de UAC y esto es lo que surgió después de mucho tiempo.

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); 
Cuestiones relacionadas