Я ищу, чтобы отслеживать все новые письма из Outlook 2013 и получать тему электронной почты. Прочитав несколько блогов, я понял, что лучший/простой способ - использовать Microsoft.Office.Interop.Outlook с MAPI и ApplicationEvents_11_NewMailExEventHandler.
Я пробовал эту базу в блоге, и я немного изменил:
using System;
using System.Windows.Forms;
using Microsoft.Office.Interop.Outlook;
class EmailMonitoring
{
static void Main(string[] args)
{
// Create an Outlook application object.
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
try
{
//Email
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
ns.Logon(null, null, false, false);
// Ring up the new message event.
app.NewMailEx += new ApplicationEvents_11_NewMailExEventHandler(outLookApp_NewMailEx);
Console.WriteLine("Please wait for new messages...");
Console.ReadLine();
}
catch (System.Exception e)
{
Console.WriteLine("Exception in Main "+e);
}
finally
{
ns = null;
app = null;
}
}
private static void outLookApp_NewMailEx(string EntryIDCollection)
{
Console.WriteLine("You've got a new mail whose EntryIDCollection is \n" + EntryIDCollection);
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem item = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = app.GetNamespace("MAPI");
try
{
ns.Logon(null, null, false, false);
item = ns.GetItemFromID(EntryIDCollection);
Console.WriteLine("test" + item.Subject);
}
catch(System.Exception e)
{
Console.WriteLine("Exception in event Handler "+e);
}
finally
{
ns = null;
app = null;
}
}
}
Однако, когда у меня есть новое электронное письмо в Outlook, консоль отображает EntryID и тему, но Outlook замораживается для некоторых конкретных писем и выдает это сообщение об ошибке: "Электронная почта перестала работать".
Попробуйте это, это не заблокирует ваш файл Outlook в папке, а новые электронные письма будут в очереди
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Outlook = Microsoft.Office.Interop.Outlook;
namespace Sample
{
public partial class frmSample : Form
{
Outlook.NameSpace outlookNameSpace;
Outlook.MAPIFolder inbox;
Outlook.Items items;
public frmSample()
{
InitializeComponent();
}
private void frmSample_Load(object sender, EventArgs e)
{
Outlook.Application app = new Outlook.Application();
outlookNameSpace = app.GetNamespace("MAPI");
inbox = outlookNameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
items = inbox.Items;
items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(items_ItemAdd);
}
void items_ItemAdd(object Item)
{
Outlook.MailItem mail = (Outlook.MailItem)Item;
if (Item != null)
{
string tempvariable = mail.To;
tempvariable = mail.Subject;
tempvariable = mail.Body;
tempvariable = mail.SenderEmailAddress;
tempvariable = mail.SenderName.ToString();
}
}
}
}
}