C# 在属于其他帐户的收件箱中解析Outlook电子邮件
我正在尝试创建一个服务,它将作为服务器上的后台服务运行。此服务将在电子邮件进入收件箱后立即解析电子邮件 我们有一个电子邮件帐户abc@organization.com. 我们正在使用Outlook检查电子邮件。它是一项服务,因此Outlook不会一直在服务器上运行。我想自动解析此帐户的电子邮件。此帐户不是我的电子邮件帐户。我正在C#程序中使用Microsoft.Office.Interop.outlook 此程序正在运行,但正在解析我的电子邮件收件箱中的电子邮件。我不知道如何指定特定的电子邮件来解析收件箱。需要知道新邮件到达时触发的事件。我的程序解析了收件箱中一半的电子邮件,但之后它抛出了对象空引用错误C# 在属于其他帐户的收件箱中解析Outlook电子邮件,c#,outlook,office-interop,C#,Outlook,Office Interop,我正在尝试创建一个服务,它将作为服务器上的后台服务运行。此服务将在电子邮件进入收件箱后立即解析电子邮件 我们有一个电子邮件帐户abc@organization.com. 我们正在使用Outlook检查电子邮件。它是一项服务,因此Outlook不会一直在服务器上运行。我想自动解析此帐户的电子邮件。此帐户不是我的电子邮件帐户。我正在C#程序中使用Microsoft.Office.Interop.outlook 此程序正在运行,但正在解析我的电子邮件收件箱中的电子邮件。我不知道如何指定特定的电子邮件来
static void Main(string[] args)
{
Microsoft.Office.Interop.Outlook.Application myApp=new Microsoft.Office.Interop.Outlook.Application();
try
{
String Subject, Body, Createdate, Sender = null;
Microsoft.Office.Interop.Outlook.NameSpace mapinamespace = myApp.GetNamespace("MAPI");
mapinamespace.Logon(null, null,true,true);
Microsoft.Office.Interop.Outlook.MAPIFolder myInbox = mapinamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
Microsoft.Office.Interop.Outlook.Accounts accounts = myApp.Session.Accounts;
try
{
foreach (Microsoft.Office.Interop.Outlook.Account account in accounts)
{
if (account.SmtpAddress == "abc@organization.com")
{
Console.Write(account);
}
else
{
Console.Write("Not found ---");
}
}
}
catch{
throw new System.Exception(string.Format("No account with amtp:{0} exists!"));}
foreach (object item in myInbox.Items)
{
try
{
var mail = item as MailItem;
if (mail != null)
{
//Creation date
Createdate = mail.CreationTime.ToString();
Console.WriteLine("CreationTime---" + Createdate);
//Grab the senders address
Sender = mail.SenderEmailAddress.ToString();
Console.WriteLine("Sender's E-mail---" + Sender);
//grab the Subject
Subject = mail.Subject.ToString();
Console.WriteLine("Subject--" + Subject);
//Grab the body
Body = mail.Body.ToString();
Console.WriteLine("Body---" + Body);
//Grab the Attachment
}
else
{
Console.Write("Error in mail---");
}
}
catch (System.Runtime.InteropServices.COMException e)
{
Console.Write(e);
}
}
}
catch (System.Runtime.InteropServices.COMException e)
{
Console.Write(e);
}
}
我正在尝试创建一个服务,它将作为服务器上的后台服务运行
Microsoft目前不建议也不支持从任何无人参与、非交互的客户端应用程序或组件(包括ASP、ASP.NET、DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行时可能会表现出不稳定的行为和/或死锁。
如果您正在构建一个在服务器端上下文中运行的解决方案,那么您应该尝试使用安全的组件来无人值守地执行。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方案。如果使用服务器端解决方案中的Office应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将面临整体解决方案稳定性方面的风险
你可以在这篇文章中了解更多
无论如何,看起来您对应用程序类的NewMailEx事件感兴趣。此外,我建议阅读以下系列文章:
您还可以使用扩展MAPI(C++或Delphi)或(任何语言)访问服务中的Outlook数据。NewMailEx仅对配置文件中主邮箱中接收的邮件激发。它不会为代理邮箱中的邮件触发。谢谢。是的,我确实意识到我正在尝试使用Exchange托管API。谢谢。我正在尝试使用EWS。