2008-11-19 21 views
9

То, что я использую, чтобы читать сообщения электронной почты с помощью C#:Чтение электронной почты без приложения Outlook, открытого

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

Проблема, с которой я столкнулся это приложение работает только если прогноз открыт на машине , Если Outlook закрыт, он выдает исключение:

Сервер недоступен. Если это условие сохраняется, обратитесь к администратору.

Есть ли в любом случае я могу читать электронную почту с открытым Outlook?

ответ

2

Когда Outlook закрыт, вы столкнетесь с this.

Также после this tutorial вы убедитесь, что выполняете все правильные шаги и партию.

Удачи!

0

Вы уверены, что хотите использовать Outlook в качестве прокси-сервера?

peopleseems дело низкого уровня с такой задачей в C# (удивительно не существует каких-либо встроенных компонентов в рамках ...)

Относительно ответа Мэта, Выкуп действительно прекрасный продукт (использовал его для разбора писем по прибытии в Outlook), но я сомневаюсь, что он может работать без перспективы.

0

Я бы лично не использовал Outlook в качестве прокси. Если вы пытаетесь в конечном счете контролировать хранилище Exchange, я бы использовал WebDav. Ваш сервер Exchange должен его поддерживать, но если это так, это простой XML API. Ну, бит API прост, но XML довольно запутан. Но после того, как вы инкапсулировали это в немного кода, это будет использовать doddle.

+0

Я думаю, что это не относится к вопросу. – Samuel 2011-11-19 16:27:26

1

Это своего рода старый вопрос, но я собираюсь ответить на него, так как я боролся с той же проблемой в течение длительного времени и предыдущие ответы на этой странице, сделал не очень мне помочь.

Мне пришлось написать программу и использовать Outlook для отправки электронной почты на разных машинах с различными уровнями UAC, и это то, что я придумал после долгого времени.

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); 
Смежные вопросы